diff --git a/pom.xml b/pom.xml index 5bfefab..787de9b 100644 --- a/pom.xml +++ b/pom.xml @@ -36,12 +36,6 @@ false - - - jitpack.io - https://jitpack.io - - @@ -282,14 +276,6 @@ 3.1 - - nl.captcha - simplecaptcha - 1.2.1 - system - ${basedir}/src/main/webapp/WEB-INF/lib/simplecaptcha-1.2.1_exp.jar - - sciSecuPCC @@ -373,13 +359,6 @@ 1.0 - - - org.hibernate - hibernate-validator-annotation-processor - 4.1.0.Final - - org.apache.httpcomponents @@ -464,7 +443,6 @@ ${basedir}/src/main/webapp/WEB-INF/lib/ICERTSecu_JDK18.jar - egovframework.rte @@ -506,12 +484,6 @@ jai-imageio-core 1.3.1 - - - com.github.shin285 - KOMORAN - 3.3.4 - @@ -560,26 +532,6 @@ UTF-8 - - org.codehaus.mojo - hibernate3-maven-plugin - 2.1 - - - - hbm2ddl - annotationconfiguration - - - - - - org.hsqldb - hsqldb - 2.3.2 - - - org.codehaus.mojo diff --git a/src/main/java/itn/com/uss/ion/cnf/service/CaptchaMngDAO.java b/src/main/java/itn/com/uss/ion/cnf/service/CaptchaMngDAO.java deleted file mode 100644 index 0a53c65..0000000 --- a/src/main/java/itn/com/uss/ion/cnf/service/CaptchaMngDAO.java +++ /dev/null @@ -1,62 +0,0 @@ -package itn.com.uss.ion.cnf.service; - -import java.util.List; - -import org.springframework.stereotype.Repository; - -import itn.com.cmm.service.impl.EgovComAbstractDAO; - -@Repository("captchaMngDAO") -public class CaptchaMngDAO extends EgovComAbstractDAO{ - - public CaptchaMngVO selectCaptchaMngVO(CaptchaMngVO captchaMngVO) throws Exception{ - return (CaptchaMngVO)select("captchaMngDAO.selectCaptchaMngVO", captchaMngVO); - } - - public int selectCaptchaMngCnt(CaptchaMngVO captchaMngVO) throws Exception{ - return (int)select("captchaMngDAO.selectCaptchaMngCnt", captchaMngVO); - } - - @SuppressWarnings("unchecked") - public List selectCaptchaMngList(CaptchaMngVO captchaMngVO) throws Exception{ - return (List)list("captchaMngDAO.selectCaptchaMngList", captchaMngVO); - } - - public void insertCaptchaMng(CaptchaMngVO captchaMngVO) throws Exception{ - insert("captchaMngDAO.insertCaptchaMng", captchaMngVO); - } - - public void updateCaptchaMng(CaptchaMngVO captchaMngVO) throws Exception{ - update("captchaMngDAO.updateCaptchaMng", captchaMngVO); - } - - public void deleteCaptchaMng(CaptchaMngVO captchaMngVO) throws Exception{ - delete("captchaMngDAO.deleteCaptchaMng", captchaMngVO); - } - - @SuppressWarnings("unchecked") - public List selectCaptchaSiteList(CaptchaMngVO captchaMngVO) throws Exception{ - return (List)list("captchaMngDAO.selectCaptchaSiteList", captchaMngVO); - } - - public int selectCaptchaSiteCnt(CaptchaMngVO captchaMngVO) throws Exception{ - return (int)select("captchaMngDAO.selectCaptchaSiteCnt", captchaMngVO); - } - - public CaptchaMngVO selectCaptchaSiteVO(CaptchaMngVO captchaMngVO) throws Exception{ - return (CaptchaMngVO)select("captchaMngDAO.selectCaptchaSiteVO", captchaMngVO); - } - - public void insertCaptchaSite(CaptchaMngVO captchaMngVO) throws Exception{ - insert("captchaMngDAO.insertCaptchaSite", captchaMngVO); - } - - public void updateCaptchaSite(CaptchaMngVO captchaMngVO) throws Exception{ - update("captchaMngDAO.updateCaptchaSite", captchaMngVO); - } - - public void deleteCaptchaSite(CaptchaMngVO captchaMngVO) throws Exception{ - delete("captchaMngDAO.deleteCaptchaSite", captchaMngVO); - } - -} diff --git a/src/main/java/itn/com/uss/ion/cnf/service/CaptchaMngService.java b/src/main/java/itn/com/uss/ion/cnf/service/CaptchaMngService.java deleted file mode 100644 index 63831e2..0000000 --- a/src/main/java/itn/com/uss/ion/cnf/service/CaptchaMngService.java +++ /dev/null @@ -1,31 +0,0 @@ -package itn.com.uss.ion.cnf.service; - -import java.util.List; - -public interface CaptchaMngService { - - CaptchaMngVO selectCaptchaMngVO(CaptchaMngVO captchaMngVO) throws Exception; - - List selectCaptchaMngList(CaptchaMngVO captchaMngVO) throws Exception; - - int selectCaptchaMngCnt(CaptchaMngVO captchaMngVO) throws Exception; - - void insertCaptchaMng(CaptchaMngVO captchaMngVO) throws Exception; - - void updateCaptchaMng(CaptchaMngVO captchaMngVO) throws Exception; - - void deleteCaptchaMng(CaptchaMngVO tempMetaCaptchaMngVO) throws Exception; - - List selectCaptchaSiteList(CaptchaMngVO captchaMngVO) throws Exception; - - int selectCaptchaSiteCnt(CaptchaMngVO captchaMngVO) throws Exception; - - CaptchaMngVO selectCaptchaSiteVO(CaptchaMngVO captchaMngVO) throws Exception; - - void insertCaptchaSite(CaptchaMngVO captchaMngVO) throws Exception; - - void updateCaptchaSite(CaptchaMngVO captchaMngVO) throws Exception; - - void deleteCaptchaSite(CaptchaMngVO tempMetaCaptchaMngVO) throws Exception; - -} diff --git a/src/main/java/itn/com/uss/ion/cnf/service/CaptchaMngVO.java b/src/main/java/itn/com/uss/ion/cnf/service/CaptchaMngVO.java deleted file mode 100644 index 11737ca..0000000 --- a/src/main/java/itn/com/uss/ion/cnf/service/CaptchaMngVO.java +++ /dev/null @@ -1,85 +0,0 @@ -package itn.com.uss.ion.cnf.service; - -import java.io.Serializable; - -import itn.com.cmm.ComDefaultVO; - -public class CaptchaMngVO extends ComDefaultVO implements Serializable { - - /** - * - */ - private static final long serialVersionUID = 8456587157460027592L; - - private String captchaSj = ""; - - private String captchaCode = ""; - - private String captchaKey = ""; - - private String captchaCn = ""; - - private String registerId = ""; - - private String registPnttm = ""; - - private String updtPnttm = ""; - - public String getCaptchaCn() { - return captchaCn; - } - - public void setCaptchaCn(String captchaCn) { - this.captchaCn = captchaCn; - } - - public String getRegisterId() { - return registerId; - } - - public void setRegisterId(String registerId) { - this.registerId = registerId; - } - - public String getRegistPnttm() { - return registPnttm; - } - - public void setRegistPnttm(String registPnttm) { - this.registPnttm = registPnttm; - } - - public String getUpdtPnttm() { - return updtPnttm; - } - - public void setUpdtPnttm(String updtPnttm) { - this.updtPnttm = updtPnttm; - } - - public String getCaptchaSj() { - return captchaSj; - } - - public void setCaptchaSj(String captchaSj) { - this.captchaSj = captchaSj; - } - - public String getCaptchaCode() { - return captchaCode; - } - - public void setCaptchaCode(String captchaCode) { - this.captchaCode = captchaCode; - } - - public String getCaptchaKey() { - return captchaKey; - } - - public void setCaptchaKey(String captchaKey) { - this.captchaKey = captchaKey; - } - - -} diff --git a/src/main/java/itn/com/uss/ion/cnf/service/impl/CaptchaMngServiceImpl.java b/src/main/java/itn/com/uss/ion/cnf/service/impl/CaptchaMngServiceImpl.java deleted file mode 100644 index dab7779..0000000 --- a/src/main/java/itn/com/uss/ion/cnf/service/impl/CaptchaMngServiceImpl.java +++ /dev/null @@ -1,81 +0,0 @@ -package itn.com.uss.ion.cnf.service.impl; - -import java.util.List; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - -import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; -import itn.com.uss.ion.cnf.service.CaptchaMngDAO; -import itn.com.uss.ion.cnf.service.CaptchaMngService; -import itn.com.uss.ion.cnf.service.CaptchaMngVO; -import itn.com.uss.ion.cnf.service.ScriptMngDAO; -@Service("captchaMngService") -public class CaptchaMngServiceImpl extends EgovAbstractServiceImpl implements CaptchaMngService { - - @Resource(name = "captchaMngDAO") - public CaptchaMngDAO captchaMngDAO; - - @Override - public CaptchaMngVO selectCaptchaMngVO(CaptchaMngVO captchaMngVO) throws Exception { - return captchaMngDAO.selectCaptchaMngVO(captchaMngVO); - } - - @Override - public List selectCaptchaMngList(CaptchaMngVO captchaMngVO) throws Exception { - return captchaMngDAO.selectCaptchaMngList(captchaMngVO); - } - - @Override - public int selectCaptchaMngCnt(CaptchaMngVO captchaMngVO) throws Exception { - return captchaMngDAO.selectCaptchaMngCnt(captchaMngVO); - } - - @Override - public void insertCaptchaMng(CaptchaMngVO captchaMngVO) throws Exception { - captchaMngDAO.insertCaptchaMng(captchaMngVO); - } - - @Override - public void updateCaptchaMng(CaptchaMngVO captchaMngVO) throws Exception { - captchaMngDAO.updateCaptchaMng(captchaMngVO); - } - - @Override - public void deleteCaptchaMng(CaptchaMngVO captchaMngVO) throws Exception { - captchaMngDAO.deleteCaptchaMng(captchaMngVO); - } - - @Override - public List selectCaptchaSiteList(CaptchaMngVO captchaMngVO) throws Exception { - return captchaMngDAO.selectCaptchaSiteList(captchaMngVO); - } - - @Override - public int selectCaptchaSiteCnt(CaptchaMngVO captchaMngVO) throws Exception { - return captchaMngDAO.selectCaptchaSiteCnt(captchaMngVO); - } - - @Override - public CaptchaMngVO selectCaptchaSiteVO(CaptchaMngVO captchaMngVO) throws Exception { - return captchaMngDAO.selectCaptchaSiteVO(captchaMngVO); - } - - @Override - public void insertCaptchaSite(CaptchaMngVO captchaMngVO) throws Exception { - captchaMngDAO.insertCaptchaSite(captchaMngVO); - } - - @Override - public void updateCaptchaSite(CaptchaMngVO captchaMngVO) throws Exception { - captchaMngDAO.updateCaptchaSite(captchaMngVO); - } - - @Override - public void deleteCaptchaSite(CaptchaMngVO captchaMngVO) throws Exception { - captchaMngDAO.deleteCaptchaSite(captchaMngVO); - - } - -} diff --git a/src/main/java/itn/com/uss/ion/cnf/web/HomePageConfigController.java b/src/main/java/itn/com/uss/ion/cnf/web/HomePageConfigController.java index ef9c4f4..c5f2922 100644 --- a/src/main/java/itn/com/uss/ion/cnf/web/HomePageConfigController.java +++ b/src/main/java/itn/com/uss/ion/cnf/web/HomePageConfigController.java @@ -23,13 +23,10 @@ import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.property.EgovPropertyService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.ComDefaultCodeVO; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.cmm.service.EgovCmmUseService; import itn.com.cmm.util.RedirectUrlMaker; -import itn.com.uss.ion.cnf.service.CaptchaMngService; -import itn.com.uss.ion.cnf.service.CaptchaMngVO; import itn.com.uss.ion.cnf.service.ImgExtMngService; import itn.com.uss.ion.cnf.service.ImgExtMngVO; import itn.com.uss.ion.cnf.service.MetaTagManageService; @@ -93,10 +90,6 @@ public class HomePageConfigController { @Resource(name = "scriptMngService") private ScriptMngService scriptMngService; - /** WordFilterService 방문자 스크립트 */ - @Resource(name = "captchaMngService") - private CaptchaMngService captchaMngService; - /** WordFilterService 방문자 스크립트 */ @Resource(name = "imgExtMngService") private ImgExtMngService imgExtMngService; @@ -539,294 +532,6 @@ public class HomePageConfigController { return redirectUrlMaker.getRedirectUrl(); } - /** - * 캡차 관리 목록을 조회한다. - * @param popupManageVO - * @param model - * @return "uss/ion/pwm/listPopupManage" - * @throws Exception - */ - @RequestMapping(value = "/uss/ion/cnf/captchaMngList.do") - public String selectCaptchaMngList(@RequestParam Map commandMap, @ModelAttribute("searchVO") CaptchaMngVO captchaMngVO, - RedirectAttributes redirectAttributes, ModelMap model ,HttpSession session ) throws Exception { - - /** EgovPropertyService.sample */ - captchaMngVO.setPageUnit(propertiesService.getInt("pageUnit")); - captchaMngVO.setPageSize(propertiesService.getInt("pageSize")); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(captchaMngVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(captchaMngVO.getPageUnit()); - paginationInfo.setPageSize(captchaMngVO.getPageSize()); - captchaMngVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - captchaMngVO.setLastIndex(paginationInfo.getLastRecordIndex()); - captchaMngVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - if(null != loginVO && !"super".equals(loginVO.getSiteId())){ //리스트, 수정, 입력 - captchaMngVO.setSiteId(loginVO.getSiteId()); - } - List captchaMngList = new ArrayList(); - captchaMngList = captchaMngService.selectCaptchaMngList(captchaMngVO); - model.addAttribute("captchaMngList", captchaMngList); - int totCnt = captchaMngService.selectCaptchaMngCnt(captchaMngVO); - - /*캡차종류*/ - ComDefaultCodeVO vo = new ComDefaultCodeVO(); - vo.setCodeId("UNI001"); - List codeList = cmmUseService.selectCmmCodeDetail(vo); - model.addAttribute("codeList", codeList); - - paginationInfo.setTotalRecordCount(totCnt); - model.addAttribute("paginationInfo", paginationInfo); - return "uss/ion/cnf/CaptchaMngList"; - } - - /* 캡차수정/등록 view*/ - @RequestMapping(value="/uss/ion/cnf/captchaMngModifyView.do") - public String captchaMngModifyView(@RequestParam Map commandMap, HttpServletRequest request, CaptchaMngVO captchaMngVO, - Model model , HttpSession session) throws Exception { - - if("Modify".equals((String)commandMap.get("pageType"))){ //수정 - captchaMngVO = captchaMngService.selectCaptchaMngVO(captchaMngVO); - } - - model.addAttribute("captchaMngVO", captchaMngVO); - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - model.addAttribute("siteId", loginVO.getSiteId()); - - /*캡차종류*/ - ComDefaultCodeVO vo = new ComDefaultCodeVO(); - vo.setCodeId("UNI001"); - List codeList = cmmUseService.selectCmmCodeDetail(vo); - model.addAttribute("codeList", codeList); - - return "uss/ion/cnf/CaptchaMngModifyView"; - } - - - /* 캡차 등록*/ - @RequestMapping(value="/uss/ion/cnf/captchaMngInsert.do") - public String captchaMngInsert(@RequestParam Map commandMap, HttpServletRequest request, CaptchaMngVO captchaMngVO, - Model model , HttpSession session , RedirectAttributes redirectAttributes) throws Exception { - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - captchaMngVO.setRegisterId(user.getId()); - if(null != user && !"super".equals(user.getSiteId())){ - //captchaMngVO.setSiteId(user.getSiteId()); - } - - CaptchaMngVO tempCaptchaMngVO = captchaMngService.selectCaptchaMngVO(captchaMngVO) ; - if(tempCaptchaMngVO != null){ - redirectAttributes.addFlashAttribute("message", "동일한 캡차 종류가 등록되어 있습니다. 수정페이지를 이용해 주세요."); - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cnf/captchaMngList.do"); - return redirectUrlMaker.getRedirectUrl(); - } - - try{ - captchaMngService.insertCaptchaMng(captchaMngVO); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); - }catch(Exception e){ - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.insert")); - } - - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cnf/captchaMngList.do"); - return redirectUrlMaker.getRedirectUrl(); - } - - /* 캡차설정 수정*/ - @RequestMapping(value="/uss/ion/cnf/captchaMngUpdate.do") - public String updateCaptchaMng( CaptchaMngVO captchaMngVO, - ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - if(null != loginVO && !"super".equals(loginVO.getSiteId())){ //일반 관리자 로그인시 - //captchaMngVO.setSiteId(loginVO.getSiteId()); - } - try{ - captchaMngVO.setRegisterId(loginVO.getId()); - captchaMngService.updateCaptchaMng(captchaMngVO); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); - }catch(Exception e){ - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.update")); - } - - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cnf/captchaMngList.do"); - return redirectUrlMaker.getRedirectUrl(); - } - - /* 캡차설정관리 삭제*/ - @RequestMapping(value="/uss/ion/cnf/captchaMngDelete.do") - public String deleteCaptchaMng( CaptchaMngVO captchaMngVO, - String[] del, SessionStatus status, - ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - CaptchaMngVO tempMetaCaptchaMngVO = new CaptchaMngVO(); - try{ - if(null != loginVO && !"super".equals(loginVO.getSiteId())){ //일반 관리자 로그인시 - //tempMetaCaptchaMngVO.setCaptchaCode(loginVO.getSiteId()); - //captchaMngService.deleteCaptchaMng(tempMetaCaptchaMngVO); - }else{ //수퍼 관리자 로그인시 - for(String id:del) { - tempMetaCaptchaMngVO.setCaptchaCode(id); - captchaMngService.deleteCaptchaMng(tempMetaCaptchaMngVO); - } - } - - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); - }catch(Exception e){ - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete")); - } - - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cnf/captchaMngList.do"); - return redirectUrlMaker.getRedirectUrl(); - } - - /** - * 캡차 사이트 목록을 조회한다. - * @param popupManageVO - * @param model - * @return "uss/ion/pwm/listPopupManage" - * @throws Exception - */ - @RequestMapping(value = "/uss/ion/cnf/captchaSiteList.do") - public String selectCaptchaSiteList(@RequestParam Map commandMap, @ModelAttribute("searchVO") CaptchaMngVO captchaMngVO, - RedirectAttributes redirectAttributes, ModelMap model ,HttpSession session ) throws Exception { - - if(captchaMngVO.getPageUnit() != 10) { - captchaMngVO.setPageUnit(captchaMngVO.getPageUnit()); - } - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(captchaMngVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(captchaMngVO.getPageUnit()); - paginationInfo.setPageSize(captchaMngVO.getPageSize()); - captchaMngVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - captchaMngVO.setLastIndex(paginationInfo.getLastRecordIndex()); - captchaMngVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - if(null != loginVO && !"super".equals(loginVO.getSiteId())){ //리스트, 수정, 입력 - captchaMngVO.setSiteId(loginVO.getSiteId()); - } - List captchaMngList = new ArrayList(); - if("".equals(captchaMngVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - captchaMngVO.setSearchSortCnd("tempSortNum"); - captchaMngVO.setSearchSortOrd("desc"); - } - captchaMngList = captchaMngService.selectCaptchaSiteList(captchaMngVO); - model.addAttribute("captchaMngList", captchaMngList); - int totCnt = captchaMngService.selectCaptchaSiteCnt(captchaMngVO); - - /*캡차종류*/ - ComDefaultCodeVO vo = new ComDefaultCodeVO(); - vo.setCodeId("UNI001"); - List codeList = cmmUseService.selectCmmCodeDetail(vo); - model.addAttribute("codeList", codeList); - - paginationInfo.setTotalRecordCount(totCnt); - model.addAttribute("paginationInfo", paginationInfo); - return "uss/ion/cnf/CaptchaSiteList"; - } - - /* 캡차수정/등록 view*/ - @RequestMapping(value="/uss/ion/cnf/captchaSiteModifyView.do") - public String captchaSiteModifyView(@RequestParam Map commandMap, HttpServletRequest request, CaptchaMngVO captchaMngVO, - Model model , HttpSession session) throws Exception { - - if("Modify".equals((String)commandMap.get("pageType"))){ //수정 - captchaMngVO = captchaMngService.selectCaptchaSiteVO(captchaMngVO); - } - - model.addAttribute("captchaMngVO", captchaMngVO); - /*캡차종류*/ - ComDefaultCodeVO vo = new ComDefaultCodeVO(); - vo.setCodeId("UNI001"); - List codeList = cmmUseService.selectCmmCodeDetail(vo); - model.addAttribute("codeList", codeList); - - return "uss/ion/cnf/CaptchaSiteModifyView"; - } - - /* 캡차 사이트 등록*/ - @RequestMapping(value="/uss/ion/cnf/captchaSiteInsert.do") - public String insertCaptchaSite(@RequestParam Map commandMap, HttpServletRequest request, CaptchaMngVO captchaMngVO, - Model model , HttpSession session , RedirectAttributes redirectAttributes) throws Exception { - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - captchaMngVO.setRegisterId(user.getId()); - if(null != user && !"super".equals(user.getSiteId())){ - captchaMngVO.setSiteId(user.getSiteId()); - } - - CaptchaMngVO tempCaptchaMngVO = captchaMngService.selectCaptchaSiteVO(captchaMngVO) ; - if(tempCaptchaMngVO != null){ - redirectAttributes.addFlashAttribute("message", "사이트당 하나의 캡차만 등록 가능합니다. 수정페이지를 이용해 주세요."); - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cnf/captchaSiteList.do"); - return redirectUrlMaker.getRedirectUrl(); - } - - try{ - captchaMngService.insertCaptchaSite(captchaMngVO); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); - }catch(Exception e){ - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.insert")); - } - - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cnf/captchaSiteList.do"); - return redirectUrlMaker.getRedirectUrl(); - } - - /* 캡차사이트 수정*/ - @RequestMapping(value="/uss/ion/cnf/captchaSiteUpdate.do") - public String updateCaptchaSite( CaptchaMngVO captchaMngVO, - ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - if(null != loginVO && !"super".equals(loginVO.getSiteId())){ //일반 관리자 로그인시 - captchaMngVO.setSiteId(loginVO.getSiteId()); - } - try{ - captchaMngVO.setRegisterId(loginVO.getId()); - captchaMngService.updateCaptchaSite(captchaMngVO); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); - }catch(Exception e){ - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.update")); - } - - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cnf/captchaSiteList.do"); - return redirectUrlMaker.getRedirectUrl(); - } - - /* 캡차사이트 삭제*/ - @RequestMapping(value="/uss/ion/cnf/captchaSiteDelete.do") - public String deleteCaptchaSite(CaptchaMngVO captchaMngVO, - String[] del, SessionStatus status, - ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - CaptchaMngVO tempCaptchaMngVO = new CaptchaMngVO(); - try{ - if(null != loginVO && !"super".equals(loginVO.getSiteId())){ //일반 관리자 로그인시 - tempCaptchaMngVO.setSiteId(loginVO.getSiteId()); - captchaMngService.deleteCaptchaSite(tempCaptchaMngVO); - }else{ //수퍼 관리자 로그인시 - for(String id:del) { - tempCaptchaMngVO.setSiteId(id); - captchaMngService.deleteCaptchaSite(tempCaptchaMngVO); - } - } - - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); - }catch(Exception e){ - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.delete")); - } - - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cnf/captchaSiteList.do"); - return redirectUrlMaker.getRedirectUrl(); - } - - /* 메타수정/등록 view*/ @RequestMapping(value="/common/getMetaTag.do") public String getMetaTag(@RequestParam Map commandMap, HttpServletRequest request, MetaTagManageVO metaTagManageVO, diff --git a/src/main/java/itn/let/cop/bbs/service/impl/EgovBBSAttributeManageServiceImpl.java b/src/main/java/itn/let/cop/bbs/service/impl/EgovBBSAttributeManageServiceImpl.java index 019f86f..c18c26d 100644 --- a/src/main/java/itn/let/cop/bbs/service/impl/EgovBBSAttributeManageServiceImpl.java +++ b/src/main/java/itn/let/cop/bbs/service/impl/EgovBBSAttributeManageServiceImpl.java @@ -16,8 +16,6 @@ import itn.let.cop.bbs.service.BoardMaster; import itn.let.cop.bbs.service.BoardMasterVO; import itn.let.cop.bbs.service.BoardVO; import itn.let.cop.bbs.service.EgovBBSAttributeManageService; -import itn.let.cop.com.service.EgovUserInfManageService; -import itn.let.cop.com.service.impl.BBSUseInfoManageDAO; /** * 게시판 속성관리를 위한 서비스 구현 클래스 @@ -43,12 +41,6 @@ public class EgovBBSAttributeManageServiceImpl extends EgovAbstractServiceImpl i @Resource(name = "BBSAttributeManageDAO") private BBSAttributeManageDAO attrbMngDAO; - @Resource(name = "BBSUseInfoManageDAO") - private BBSUseInfoManageDAO bbsUseDAO; - - @Resource(name = "EgovUserInfManageService") - private EgovUserInfManageService userService; - @Resource(name = "egovBBSMstrIdGnrService") private EgovIdGnrService idgenService; diff --git a/src/main/java/itn/let/cop/bbs/web/EgovBBSManageController.java b/src/main/java/itn/let/cop/bbs/web/EgovBBSManageController.java index 042a3f0..0dc3545 100644 --- a/src/main/java/itn/let/cop/bbs/web/EgovBBSManageController.java +++ b/src/main/java/itn/let/cop/bbs/web/EgovBBSManageController.java @@ -10,8 +10,6 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.Map.Entry; -import java.util.Random; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -25,31 +23,24 @@ import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.support.SessionStatus; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springmodules.validation.commons.DefaultBeanValidator; import com.penta.scpdb.ScpDbAgent; -import com.sci.v2.pcc.secu.SciSecuManager; -import com.sci.v2.pcc.secu.hmac.SciHmac; import NiceID.Check.CPClient; import egovframework.rte.fdl.property.EgovPropertyService; @@ -60,19 +51,12 @@ import itn.com.cmm.ComDefaultCodeVO; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.cmm.ReadVO; -import itn.com.cmm.UserVO; import itn.com.cmm.service.EgovCmmUseService; import itn.com.cmm.service.EgovFileMngService; import itn.com.cmm.service.EgovFileMngUtil; import itn.com.cmm.service.FileVO; import itn.com.cmm.service.ReadService; -import itn.com.cmm.util.EgovDoubleSubmitHelper; import itn.com.cmm.util.StringUtil; -import itn.com.cmm.util.WebUtil; -import itn.com.uss.ion.cnf.service.ProhibitMngService; -import itn.com.uss.ion.cnf.service.WordFilterService; -import itn.com.uss.ion.cnf.service.WordFilterVO; -import itn.com.utl.fcc.service.EgovStringUtil; import itn.let.cop.bbs.service.Board; import itn.let.cop.bbs.service.BoardChgHst; import itn.let.cop.bbs.service.BoardMaster; @@ -80,20 +64,7 @@ import itn.let.cop.bbs.service.BoardMasterVO; import itn.let.cop.bbs.service.BoardVO; import itn.let.cop.bbs.service.EgovBBSAttributeManageService; import itn.let.cop.bbs.service.EgovBBSManageService; -import itn.let.cop.cmt.service.CommentVO; -import itn.let.cop.cmt.service.EgovArticleCommentService; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.sym.mnu.mpm.service.EgovMenuManageService; -import itn.let.sym.mnu.mpm.service.MenuManageVO; -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.sym.site.service.SiteManagerVO; -import itn.let.sym.site.service.TermsVO; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; import itn.let.utl.sim.service.EgovClntInfo; -import itn.let.utl.user.service.MjonNoticeSendUtil; /** * 게시물 관리를 위한 컨트롤러 클래스 @@ -134,104 +105,20 @@ public class EgovBBSManageController { @Resource(name = "egovMessageSource") EgovMessageSource egovMessageSource; - //문자발송 서비스 - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - @Autowired private DefaultBeanValidator beanValidator; - @Value("#{globalSettings['Globals.Site.URL']}") - private String SITE_URL; - @Resource(name = "EgovCmmUseService") private EgovCmmUseService cmmUseService; - /** WordFilterService 필터링 */ - @Resource(name = "wordFilterService") - private WordFilterService wordFilterService; - - @Resource(name = "egovSiteManagerService") - private EgovSiteManagerService egovSiteManagerService; - @Resource(name = "readService") private ReadService readService; - /** scriptMngService 금지어 */ - @Resource(name = "prohibitMngService") - private ProhibitMngService prohibitMngService; - @Resource(name = "EgovFileMngService") private EgovFileMngService fileService; - /** EgovMenuManageService */ - @Resource(name = "meunManageService") - private EgovMenuManageService menuManageService; - - /** 댓글 */ - @Resource(name = "EgovArticleCommentService") - protected EgovArticleCommentService egovArticleCommentService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - - /** 알림전송 Util */ - @Resource(name = "mjonNoticeSendUtil") - private MjonNoticeSendUtil mjonNoticeSendUtil; - - @Resource(name="MjonCommon") - private MjonCommon mjonCommon; - private static final Logger LOGGER = LoggerFactory.getLogger(EgovBBSManageController.class); - //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} - private String[][] bbsExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "제목" , "글쓰기 테스트" , "[코드]"}, - {"2", "첨부파일유무" , "유", ""}, - {"3", "공개여부" , "공개", ""}, - {"4", "작성자" , "홍길동", "[코드]"}, - {"5", "조회수" , "2", ""}, - {"6", "작성일" , "2019-10-29", ""} - } ; - /** - * XSS 방지 처리. - * - * @param data - * @return - */ - protected String unscript(String data) { - if (data == null || data.trim().equals("")) { - return ""; - } - - String ret = data; - - ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script"); - ret = ret.replaceAll("", ">"); - ret = ret.replaceAll("alert", ""); - //ret = ret.replaceAll("iframe", ""); - - return ret; - } - /** * 게시물에 대한 목록을 조회한다. * @@ -939,2069 +826,6 @@ public class EgovBBSManageController { return "redirect:/cop/bbs/selectBoardList.do"; } - /** - * 선택된 게시물 메인화면 폴라스토리 첫번째 게시물 등록 - * @param nttIds String - * @param boardVO BoardVO - * @return String - * @exception Exception - */ - @RequestMapping(value = "/cop/bbs/mainPolaImgUpdate.do") - public String mainPolaImgUpdate(HttpServletRequest request, @RequestParam("nttIds") String nttIds, @ModelAttribute("BoardVO") BoardVO boardVO, RedirectAttributes redirectAttributes) - throws Exception { - - String[] strNttIdNAtchFileId = nttIds.split("\\|"); - boardVO.setNttId(Integer.parseInt(strNttIdNAtchFileId[0])); - - bbsMngService.updateMainPolaImg(boardVO); - - redirectAttributes.addAttribute("pageIndex", boardVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", boardVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", boardVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); - return "redirect:/cop/bbs/selectBoardList.do"; - } - - - - /** - * @@@@@@@@@@@@@@@@@@@@@@@@@@@@사용자 - */ - - - /** - * (사용자)게시물에 대한 목록을 조회한다. - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/cop/bbsWeb/selectBoardList.do" , "/web/cop/bbsWeb/selectMoreListAjax.do"}) - public String selectBoardArticlesWeb(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, ModelMap model - ,RedirectAttributes redirectAttributes) throws Exception { - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if (bmVO == null || ("N").equals(bmVO.getUseAt())) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/web/main/mainPage.do"; - } - - // 신고게시판 여부 - if (("BBST02").equals(bmVO.getBbsTyCode()) || ("BBST03").equals(bmVO.getBbsTyCode())) { - // 신고게시판 인트로 화면 구분 - if (("Y").equals(boardVO.getReportIntroYn())) { - - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - return "redirect:/web/cop/selfauth/reportIntro.do"; - } - - if (userVO != null) { // 사용자 인증 - boardVO.setMblDn(userVO.getMblDn()); // 사용자 인증 키. 본인글만 조회 - } else { // 인증 필요 - request.getSession().setAttribute("searchVO", boardVO); - request.getSession().setAttribute("url", "/web/cop/bbsWeb/selectBoardList.do"); - return "redirect:/web/cop/selfauth/authentication.do"; - } - } - - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - - PaginationInfo paginationInfo = new PaginationInfo(); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - if (("BBST05").equals(bmVO.getBbsTyCode())){ //사진게시판 8개씩 9개조회후 9개면 더보기 - boardVO.setRecordCountPerPage(8); //리스트 수 - boardVO.setFirstIndex( (boardVO.getPageIndex()-1)*8); //offset - paginationInfo.setRecordCountPerPage(boardVO.getRecordCountPerPage()); //웹 접근성 획득 후 롤백 - } - - if(!"9410000".equals(bmVO.getMenuNo())) { - boardVO.setParntScttNo("0"); //질문글만 가져오기(데이터 이관 숫자 틀려서 질문도 가져옴:공지사항) - } - - // 공지사항 - if (("Y").equals(bmVO.getNoticeYn())) { - List notifyList = bbsMngService.selectBoardNotifyArticles(boardVO, null); - model.addAttribute("notifyList", notifyList); - boardVO.setNoticeAt("N"); //다음에 공지사항 아닌것만 검색 - } - - if("BBST05".equals(bmVO.getBbsTyCode())){ //재단소식 - boardVO.setSearchSortCnd("FRST_REGIST_PNTTM"); - boardVO.setSearchSortOrd("desc"); - } - Map map = bbsMngService.selectBoardArticlesWeb(boardVO, null); - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - paginationInfo.setTotalRecordCount(totCnt); - - - List resultList = (List)map.get("resultList"); - Calendar cal = Calendar.getInstance(); - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - SimpleDateFormat t1 = new SimpleDateFormat("yyyyMMdd"); - String nowTime = t1.format(cal.getTime()); - - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - if("9470000".equals(bmVO.getMenuNo())){ //인재채용시 - String tempYmd = ""; - if(null != bvo.getNtceBgnde() && !"".equals(bvo.getNtceBgnde())) { //모집기간 요일 추가하여 txt로 변환 - tempYmd = bvo.getNtceBgnde().substring(0,4)+"-"+ bvo.getNtceBgnde().substring(4,6)+"-"+ bvo.getNtceBgnde().substring(6,8); - tempYmd = tempYmd+"("+getDateDay(tempYmd , "yyyy-MM-dd")+")" ; - tempYmd = tempYmd + " "+bvo.getNtceBgnde().substring(8,10) +":"+bvo.getNtceBgnde().substring(10,12) ; - bvo.setNtceBgndeView(tempYmd); - if(Integer.parseInt(nowTime) > Integer.parseInt(bvo.getNtceEndde().substring(0,8)) ) { - bvo.setSeCd("09"); - } - } - if(null != bvo.getNtceEndde() && !"".equals(bvo.getNtceEndde())) { - tempYmd = bvo.getNtceEndde().substring(0,4)+"-"+ bvo.getNtceEndde().substring(4,6)+"-"+ bvo.getNtceEndde().substring(6,8); - tempYmd = tempYmd+"("+getDateDay(tempYmd , "yyyy-MM-dd")+")" ; - tempYmd = tempYmd + " "+bvo.getNtceEndde().substring(8,10) +":"+bvo.getNtceEndde().substring(10,12) ; - bvo.setNtceEnddeView(tempYmd); - } - } - } - PaginationInfo paginationInfoMobile = new PaginationInfo(); - paginationInfoMobile.setCurrentPageNo(paginationInfo.getCurrentPageNo()); - paginationInfoMobile.setTotalRecordCount(paginationInfo.getTotalRecordCount()); - paginationInfoMobile.setPageSize(5); - paginationInfoMobile.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("boardVO", boardVO); - model.addAttribute("brdMstrVO", bmVO); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("paginationInfoMobile", paginationInfoMobile); - - if("BBST08".equals(bmVO.getBbsTyCode())){ //인재채용 게시판경우 - ComDefaultCodeVO vo = new ComDefaultCodeVO(); //모집상태 - vo.setCodeId("ITN015"); - model.addAttribute("codeList", cmmUseService.selectCmmCodeDetail(vo)); - } - - if("BBST05".equals(bmVO.getBbsTyCode())){ //재단소식 포토게시판 - if(resultList.size()>8) { //더보기 더튼 추가 - model.addAttribute("more", true); - }else { - model.addAttribute("more", false); - } - if("/web/cop/bbsWeb/selectMoreListAjax.do".equals(request.getRequestURI())) { //더보기 - return "web/cop/bbs/EgovNoticePhotoListAjax"; - } - return "web/cop/bbs/EgovNoticePhotoList"; //메인 - } - - if("9540000".equals(bmVO.getMenuNo())){ //개인정보처리방침의 경우 자세히 보기 pdf 파일과 제목가져오기 - if(resultList.size() > 0 ){ - model.addAttribute("pdfFileId", ((BoardVO)resultList.get(0)).getAtchFileId()); - model.addAttribute("pdfSj", ((BoardVO)resultList.get(0)).getNttSj()); - } - } - - return "web/cop/bbs/EgovNoticeList"; - } - - /*nice체크 오프너로 이용*/ - @RequestMapping("/web/cop/bbs/niceCheckAjax.do") - public String niceCheckWeb(HttpServletRequest request, - @RequestParam Map commandMap, - @ModelAttribute("searchVO") BoardVO boardVO, - ModelMap model , HttpSession session - ) throws Exception { - - String niceMessage = niceCheck(request, session, boardVO).getNiceMessage(); - - System.out.println("niceMessage --- " + niceMessage) ; - if("".equals(niceMessage)) { //정상의 경우 세션 생성 후 오프너 close - UserVO tempVO = new UserVO(); - tempVO.setMblDn(damoEnc(boardVO.getMblDn(), request)); //DI암호화 - tempVO.setName(boardVO.getNiceNm()); - request.getSession().setAttribute("userVO", tempVO); - } - - - return "web/cop/selfauth/niceCheckAjax"; - } - - - /** - * (사용자)게시물 등록을 위한 등록페이지로 이동한다. - * - * @param boardVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value={"/web/cop/bbs/addQnaBoardArticle.do","/web/cop/bbs/addSuggestBoardArticle.do"}) - public String addQnaBoardArticleWeb(HttpServletRequest request, - @RequestParam Map commandMap, - @ModelAttribute("searchVO") BoardVO boardVO, - ModelMap model , HttpSession session, - RedirectAttributes redirectAttributes ) throws Exception { - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = user == null ? "" : EgovStringUtil.isNullToString(user.getId()); - - if("".equals(userId)) { - return "redirect:/web/user/login/login.do"; - } - - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setMberId(user.getId()); - - mberManageVO = bbsMngService.selectboardArticleWebQnaMberInfo(mberManageVO); - - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setUrl("/web/cop/bbs/SuggestList.do"); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(bmVO); - - bmVO.setBbsId(boardMenuList.get(0).getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - /*UserVO userVO = new UserVO(); - if(null != request.getSession().getAttribute("userVO")) { //세션체크 - userVO = ((UserVO)request.getSession().getAttribute("userVO")); - boardVO.setMblDn(userVO.getMblDn()); - boardVO.setNtcrNm(userVO.getName()); - }else { - if("9530000".equals(bmVO.getMenuNo())) { //묻고답하기 - return "redirect:/web/cop/selfauth/authentication.do?bbsId="+boardVO.getBbsId(); - } - }*/ - - /*if (bmVO == null || ("N").equals(bmVO.getUseAt())) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/web/main/mainPage.do"; - }*/ - - // 공통코드 Set - /*setBBSCommCd(model, bmVO);*/ - model.addAttribute("mberManageVO", mberManageVO); - model.addAttribute("brdMstrVO", bmVO); - model.addAttribute("board", boardVO); - model.addAttribute("suggestBbsId", boardMenuList.get(0).getBbsId()); - //최대 첨부파일 갯수 지정 - //model.addAttribute("posAtchFileNum", "1"); - - String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - if(pattern.equals("/web/cop/bbs/addSuggestBoardArticle.do")){ // 불편신고 - model.addAttribute("boardType", "suggest"); - } - - // NEW - // 공통 - List resultList = new ArrayList(); - - // 이용약관, 개인정보보호방침 최신버전 List - TermsVO termsVO3 = new TermsVO(); - termsVO3.setFirstIndex(0); - termsVO3.setRecordCountPerPage(1); - termsVO3.setSearchDiv("03"); - termsVO3.setSearchUseYn("Y"); - termsVO3.setSearchSortCnd("effectDate"); - termsVO3.setSearchSortOrd("desc"); - List termsMastList2 = egovSiteManagerService.selectTermsMastMngList(termsVO3); - if (termsMastList2.size() > 0) { - TermsVO termsVO4 = new TermsVO(); - termsVO4.setFirstIndex(0); - termsVO4.setRecordCountPerPage(20); - termsVO4.setTermsMastNo(termsMastList2.get(0).getTermsMastNo()); - termsVO4.setSearchUseYn("Y"); - termsVO4.setSearchSortCnd("sort"); - termsVO4.setSearchSortOrd("ASC"); - resultList = egovSiteManagerService.selectTermsSubMngList(termsVO4); - } - - model.addAttribute("resultList", resultList); - - return "web/cop/bbs/EgovNoticeRegist"; - } - - - /** - * (사용자)게시물 등록을 위한 등록페이지로 이동한다.(문자온 묻고답하기) - * - * @param boardVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/bbs/addBoardArticle.do") - public String addBoardArticleWeb(HttpServletRequest request, - @RequestParam Map commandMap, - @ModelAttribute("searchVO") BoardVO boardVO, - ModelMap model , HttpSession session, - BoardMasterVO brdMstrVO , - RedirectAttributes redirectAttributes ) throws Exception { - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = user == null ? "" : EgovStringUtil.isNullToString(user.getId()); - - if("".equals(userId)) { - return "redirect:/web/user/login/login.do"; - } - - /** - * 회원 정지된 상태이면 1:1 등록 화면으로 이동되지 않도록 처리 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - return "redirect:/web/uat/uia/actionLogout.do"; - } - - - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setMberId(user.getId()); - - mberManageVO = bbsMngService.selectboardArticleWebQnaMberInfo(mberManageVO); - - /*if(null != request.getSession().getAttribute("userVO")) { //세션체크 - userVO = ((UserVO)request.getSession().getAttribute("userVO")) ; - boardVO.setMblDn(userVO.getMblDn()); - boardVO.setNtcrNm(userVO.getName()); - }else { - return "redirect:/web/cop/bbs/QnaList.do"; - }*/ - /*LoginVO loginvo = new LoginVO(); - if(null != request.getSession().getAttribute("LoginVO")) { - loginvo = ((LoginVO)request.getSession().getAttribute("LoginVO")); - System.out.println(loginvo.getName()); - boardVO.setNtcrNm(loginvo.getName()); - }*/ - - //묻고답하기의 게시판들 가져오기 - BoardMasterVO tempBoardMasterVO = new BoardMasterVO(); - tempBoardMasterVO.setUrl("/web/cop/bbs/QnaList.do"); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(tempBoardMasterVO); - List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(tempBoardMasterVO); - for(BoardMasterVO tempVO : viewBoardMenuList) { - if("N".equals(tempVO.getViewsYn())){ - tempBoardMasterVO.setViewsYn("N"); - break ; - } - } - - model.addAttribute("mberManageVO", mberManageVO); - model.addAttribute("boardMenuList", boardMenuList); - model.addAttribute("brdMstrVO", brdMstrVO); - /*for(BoardMasterVO tempMasterVO : boardMenuList ) { - tempMasterVO.setBbsNm(tempMasterVO.getBbsNm().split("\\(")[1].split("\\)")[0]) ; - }*/ - - model.addAttribute("board", boardVO); - //최대 첨부파일 갯수 지정 - - // NEW - // 공통 - List resultList = new ArrayList(); - - // 이용약관, 개인정보보호방침 최신버전 List - TermsVO termsVO3 = new TermsVO(); - termsVO3.setFirstIndex(0); - termsVO3.setRecordCountPerPage(1); - termsVO3.setSearchDiv("03"); - termsVO3.setSearchUseYn("Y"); - termsVO3.setSearchSortCnd("effectDate"); - termsVO3.setSearchSortOrd("desc"); - List termsMastList2 = egovSiteManagerService.selectTermsMastMngList(termsVO3); - if (termsMastList2.size() > 0) { - TermsVO termsVO4 = new TermsVO(); - termsVO4.setFirstIndex(0); - termsVO4.setRecordCountPerPage(20); - termsVO4.setTermsMastNo(termsMastList2.get(0).getTermsMastNo()); - termsVO4.setSearchUseYn("Y"); - termsVO4.setSearchSortCnd("sort"); - termsVO4.setSearchSortOrd("ASC"); - resultList = egovSiteManagerService.selectTermsSubMngList(termsVO4); - } - - model.addAttribute("resultList", resultList); - - return "web/cop/bbs/EgovNoticeRegist"; - } - - /** - * (사용자)본인인증 안내 화면 - * - * @param - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/selfauth/authentication.do") - public String authentication(HttpServletRequest request, - ModelMap model , @RequestParam Map commandMap, - @ModelAttribute("searchVO") BoardVO boardVO) throws Exception { - boardVO.setNiceSuccUrl(request.getRequestURL().toString().split("selfauth")[0]+"bbs/niceCheckAjax.do"); - boardVO.setNiceFailUrl(request.getRequestURL().toString()); - model.addAttribute("boardVO", boardVO); - return "web/cop/selfauth/authentication"; - } - - /** - * (사용자)신고게시판 안내 화면 - * - * @param - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/selfauth/reportIntro.do") - public String reportIntro(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - - if (bmVO == null || ("N").equals(bmVO.getUseAt())) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/web/main/mainPage.do"; - } - - model.addAttribute("brdMstrVO", bmVO); - return "web/cop/selfauth/reportIntro"; - } - - - /** - * (사용자)글쓰기 권한 없으면 비번 입력란 보이게... - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/cop/bbsWeb/selectBoardChkDetailAjax"} ) - public ModelAndView selectBoardChkDetailAjax(HttpServletRequest request, - @ModelAttribute("searchVO") BoardVO boardVO, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - - LoginVO loginVO = new LoginVO(); - if(!"anonymousUser".equals(EgovUserDetailsHelper.getAuthenticatedUser() )) { //최고 관리자면 바로수정 - loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - if("ROLE_ADMIN".equals(loginVO.getAuthority())){ - model.addAttribute("mblDnFlag", true); - return modelAndView; - }else { //일반관리자 - bmVO.setBbsMngId(loginVO.getId()); - if( bbsAttrbService.selectBBSMngInfCnt(bmVO) > 0 ) { //게시판 관리자 조회 - model.addAttribute("mblDnFlag", true); - return modelAndView; - } - } - } - - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - UserVO userVO = new UserVO(); - if(request.getSession().getAttribute("userVO") != null){ - userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - if(userVO.getMblDn().equals(bdVO.getMblDn())){ - model.addAttribute("mblDnFlag", true); - }else { - model.addAttribute("mblDnFlag", false); - } - }else { - model.addAttribute("mblDnFlag", false); - } - return modelAndView; - } - - - /** - * (사용자)게시물에 대한 상세 정보를 조회한다. - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/cop/bbsWeb/selectBoardArticle.do" , - "/web/cop/bbsWeb/selectBoardDetail.do", - "/web/cop/bbs/NewsDetail.do", - "/web/cop/bbs/LibDetail.do", - "/web/cop/bbs/BussRealDetail.do", - "/web/cop/bbs/QnaDetail.do", - "/web/cop/bbs/SuggestDetail.do", - "/web/cop/bbs/PubOperDetail.do", - "/web/contentBbsDetail.do" - - //"/web/cop/bbs/EventDetail.do" - } ) - public String selectBoardArticleWeb(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, - BoardMasterVO masterVO, - ModelMap model, - @RequestParam Map commandMap, - RedirectAttributes redirectAttributes) throws Exception { - - //XSS 태그 필터링 처리 - boardVO.setBbsId(unscript(boardVO.getBbsId())); - boardVO.setSeCmmnCdId(unscript(boardVO.getSeCmmnCdId())); - boardVO.setFrstRegisterId(unscript(boardVO.getFrstRegisterId())); - boardVO.setSearchBgnDe(unscript(boardVO.getSearchBgnDe())); - boardVO.setSearchEndDe(unscript(boardVO.getSearchEndDe())); - boardVO.setSearchSortCnd(unscript(boardVO.getSearchSortCnd())); - boardVO.setSearchSortOrd(unscript(boardVO.getSearchSortOrd())); - boardVO.setSearchCnd(unscript(boardVO.getSearchCnd())); - boardVO.setSearchWrd(unscript(boardVO.getSearchWrd())); - - - BoardMasterVO bmVO = new BoardMasterVO(); - if("".equals(boardVO.getBbsId())) { //검색에서 조회시 nttid로 마스터 조회 - bmVO = bbsAttrbService.selectBbsIdByNttId(boardVO); - if (bmVO == null) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/web/main/mainPage.do"; - } - boardVO.setBbsId(bmVO.getBbsId()); - }else { - bmVO.setBbsId(boardVO.getBbsId()); - } - - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - if("/web/cop/bbs/NewsDetail.do".equals(request.getRequestURI()) || "/web/contentBbsDetail.do".equals(request.getRequestURI())) { //원자력소식 수정삭제등록 없음. - bmVO.setWebChgYn("N"); - model.addAttribute("masterVO", masterVO); - } - - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - if (bmVO == null || ("N").equals(bmVO.getUseAt())) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/web/main/mainPage.do"; - } - - {//묻고답하기 권한체크 - boolean passChk = false; - if("9530000".equals(bmVO.getMenuNo())) { - LoginVO loginVO = new LoginVO(); - if(!"anonymousUser".equals(EgovUserDetailsHelper.getAuthenticatedUser() )) { //최고 관리자면 바로수정 - loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - if("ROLE_ADMIN".equals(loginVO.getAuthority())){ - passChk = true; - }else { //일반관리자 - bmVO.setBbsMngId(loginVO.getId()); - if( bbsAttrbService.selectBBSMngInfCnt(bmVO) > 0 ) { //게시판 관리자 조회 - passChk = true; - } - } - }else{//방문자 세션있는방문자 - UserVO userVO = new UserVO(); - if(request.getSession().getAttribute("userVO") != null) { - userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - if(userVO.getMblDn().equals(bdVO.getMblDn())) { - passChk = true; - } - } - } - if(!"T".equals(bdVO.getSecretAt())){ - if(!passChk){ - if("".equals(boardVO.getPassword())) { - redirectAttributes.addFlashAttribute("message", "패스워드를 넣어주세요"); - return "redirect:/web/cop/bbs/QnaList.do"; - }else { - if(!damoDec(bdVO.getPassword(), request).equals(boardVO.getPassword())) { - redirectAttributes.addFlashAttribute("message", "패스워드가 맞지 않습니다."); - if("9530000".equals(bmVO.getMenuNo())) { - return "redirect:/web/cop/bbs/QnaList.do"; - }else { - return "redirect:/web/cop/bbsWeb/selectBoardList.do?bbsId="+boardVO.getBbsId(); - } - } - } - } - } - - } - } - - // 조회수 증가 여부 지정 - boardVO.setPlusCount(true); - bbsMngService.updateBoardArticleInqireCo(boardVO); - - boardVO.setMblDn(bdVO.getMblDn()); - - // 위/아래 게시글 번호, 제목 조회 - if("/web/cop/bbs/QnaDetail.do".equals(request.getRequestURI())){ - LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userUniqId = user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()); - boardVO.setFrstRegisterId(userUniqId); - } - EgovMap upDownNttid = bbsMngService.getUpDownNttIdNSj(boardVO); - - //게시판 마스터 옵션 정보 - BoardMasterVO searchVO = new BoardMasterVO(); - searchVO.setBbsId(boardVO.getBbsId()); - BoardMasterVO resultBbsMsInfo = bbsAttrbService.selectBBSMasterInf(searchVO); - - //답변글 리스트 - if(bdVO.getAnswerCnt() > 0) { - List answerList = bbsMngService.selectBoardAnswerList(bdVO); - model.addAttribute("answerList", answerList); - } - model.addAttribute("nextNttIdNSj", upDownNttid.get("nextNttIdNSj")); - model.addAttribute("prevNttIdNSj", upDownNttid.get("prevNttIdNSj")); - model.addAttribute("result", bdVO); - model.addAttribute("brdMstrVO", bmVO); - model.addAttribute("resultBbsMsInfo", resultBbsMsInfo); - - CommentVO commentVO = new CommentVO(); - commentVO.setBbsId(boardVO.getBbsId()); //게시판ID - commentVO.setNttId(boardVO.getNttId()); //게시글ID - - //댓글 조회 - List resultList = egovArticleCommentService.selectArticleCommentListAll(commentVO); - int totCnt = resultList.size(); - - model.addAttribute("resultCnt", totCnt); - model.addAttribute("resultList", resultList); - - if("BBST05".equals(bmVO.getBbsTyCode())){ //이벤트 포토게시판 - if(bdVO.getAtchFileCnt() > 0 ) { - FileVO fileVO = new FileVO(); - fileVO.setAtchFileId(bdVO.getAtchFileId()); - List result = fileService.selectImageFileList(fileVO); - model.addAttribute("fileList", result); - } - return "web/cop/bbs/EgovNoticePhotoInqire"; - } - - if("Y".equals(masterVO.getTabBbsId())){ - model.addAttribute("PubDetail", true); - } - System.out.println("boardVO.toString()"); - System.out.println(boardVO.toString()); - return "web/cop/bbs/EgovNoticeInqire"; - } - - - /** - * (사용자)게시물에 대한 상세 정보를 조회한다. - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= { "/web/cop/bbs/NoticeDetail.do" } ) - public String selectBoardNoticeDetailWeb(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, - BoardMasterVO masterVO, - ModelMap model, - @RequestParam Map commandMap, - RedirectAttributes redirectAttributes) throws Exception { - - //XSS 태그 필터링 처리 - boardVO.setBbsId(unscript(boardVO.getBbsId())); - boardVO.setSeCmmnCdId(unscript(boardVO.getSeCmmnCdId())); - boardVO.setFrstRegisterId(unscript(boardVO.getFrstRegisterId())); - boardVO.setSearchBgnDe(unscript(boardVO.getSearchBgnDe())); - boardVO.setSearchEndDe(unscript(boardVO.getSearchEndDe())); - boardVO.setSearchSortCnd(unscript(boardVO.getSearchSortCnd())); - boardVO.setSearchSortOrd(unscript(boardVO.getSearchSortOrd())); - boardVO.setSearchCnd(unscript(boardVO.getSearchCnd())); - boardVO.setSearchWrd(unscript(boardVO.getSearchWrd())); - - BoardMasterVO bmVO = new BoardMasterVO(); - - //선택된 카테고리가 없는 경우 - if("".equals(boardVO.getBbsId())) { //검색에서 조회시 nttid로 마스터 조회 - bmVO = bbsAttrbService.selectBbsIdByNttId(boardVO); - if (bmVO == null) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/web/main/mainPage.do"; - } - boardVO.setBbsId(bmVO.getBbsId()); - - }else { - bmVO.setBbsId(boardVO.getBbsId()); - } - - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - if("/web/cop/bbs/NewsDetail.do".equals(request.getRequestURI()) || "/web/contentBbsDetail.do".equals(request.getRequestURI())) { //원자력소식 수정삭제등록 없음. - bmVO.setWebChgYn("N"); - model.addAttribute("masterVO", masterVO); - } - - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - if (bmVO == null || ("N").equals(bmVO.getUseAt())) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/web/main/mainPage.do"; - } - - {//묻고답하기 권한체크 - boolean passChk = false; - if("9530000".equals(bmVO.getMenuNo())) { - LoginVO loginVO = new LoginVO(); - if(!"anonymousUser".equals(EgovUserDetailsHelper.getAuthenticatedUser() )) { //최고 관리자면 바로수정 - loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - if("ROLE_ADMIN".equals(loginVO.getAuthority())){ - passChk = true; - }else { //일반관리자 - bmVO.setBbsMngId(loginVO.getId()); - if( bbsAttrbService.selectBBSMngInfCnt(bmVO) > 0 ) { //게시판 관리자 조회 - passChk = true; - } - } - }else{//방문자 세션있는방문자 - UserVO userVO = new UserVO(); - if(request.getSession().getAttribute("userVO") != null) { - userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - if(userVO.getMblDn().equals(bdVO.getMblDn())) { - passChk = true; - } - } - } - if(!"T".equals(bdVO.getSecretAt())){ - if(!passChk){ - if("".equals(boardVO.getPassword())) { - redirectAttributes.addFlashAttribute("message", "패스워드를 넣어주세요"); - return "redirect:/web/cop/bbs/QnaList.do"; - }else { - if(!damoDec(bdVO.getPassword(), request).equals(boardVO.getPassword())) { - redirectAttributes.addFlashAttribute("message", "패스워드가 맞지 않습니다."); - if("9530000".equals(bmVO.getMenuNo())) { - return "redirect:/web/cop/bbs/QnaList.do"; - }else { - return "redirect:/web/cop/bbsWeb/selectBoardList.do?bbsId="+boardVO.getBbsId(); - } - } - } - } - } - - } - } - - // 조회수 증가 여부 지정 - boardVO.setPlusCount(true); - bbsMngService.updateBoardArticleInqireCo(boardVO); - - boardVO.setMblDn(bdVO.getMblDn()); - - // 위/아래 게시글 번호, 제목 조회 - EgovMap upDownNttid = bbsMngService.getUpDownNttIdNSj(boardVO); - - //게시판 마스터 옵션 정보 - BoardMasterVO searchVO = new BoardMasterVO(); - searchVO.setBbsId(boardVO.getBbsId()); - BoardMasterVO resultBbsMsInfo = bbsAttrbService.selectBBSMasterInf(searchVO); - - //답변글 리스트 - if(bdVO.getAnswerCnt() > 0) { - List answerList = bbsMngService.selectBoardAnswerList(bdVO); - model.addAttribute("answerList", answerList); - } - model.addAttribute("nextNttIdNSj", upDownNttid.get("nextNttIdNSj")); - model.addAttribute("prevNttIdNSj", upDownNttid.get("prevNttIdNSj")); - model.addAttribute("result", bdVO); - bmVO.setUrl(request.getRequestURI()); //url 넘겨주기 - 게시판 상세 jsp는 공용으로 사용하는데, 공지사항 상세는 작성자를 '운영자'로 고정하기 위해 url을 넘겨 메뉴 구분 - model.addAttribute("brdMstrVO", bmVO); - model.addAttribute("resultBbsMsInfo", resultBbsMsInfo); - - CommentVO commentVO = new CommentVO(); - commentVO.setBbsId(boardVO.getBbsId()); //게시판ID - commentVO.setNttId(boardVO.getNttId()); //게시글ID - - //댓글 조회 - List resultList = egovArticleCommentService.selectArticleCommentListAll(commentVO); - int totCnt = resultList.size(); - - model.addAttribute("resultCnt", totCnt); - model.addAttribute("resultList", resultList); - - if("BBST05".equals(bmVO.getBbsTyCode())){ //이벤트 포토게시판 - if(bdVO.getAtchFileCnt() > 0 ) { - FileVO fileVO = new FileVO(); - fileVO.setAtchFileId(bdVO.getAtchFileId()); - List result = fileService.selectImageFileList(fileVO); - model.addAttribute("fileList", result); - } - return "web/cop/bbs/EgovNoticePhotoInqire"; - } - - if("Y".equals(masterVO.getTabBbsId())){ - model.addAttribute("PubDetail", true); - } - System.out.println("boardVO.toString()"); - System.out.println(boardVO.toString()); - return "web/cop/bbs/EgovNoticeInqire"; - } - - /** - * (사용자)게시물에 대한 상세 정보를 조회한다. - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/cop/bbsWeb/selectBoardChkDetailAjax.do"} ) - public ModelAndView selectBoardChkDetailAjax(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, - BoardMasterVO masterVO, - ModelMap model , - RedirectAttributes redirectAttributes) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - - - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - if (bmVO == null || ("N").equals(bmVO.getUseAt())) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return modelAndView; - } - - {//묻고답하기 권한체크 - boolean passChk = false; - if("9530000".equals(bmVO.getMenuNo())) { - LoginVO loginVO = new LoginVO(); - if(!"anonymousUser".equals(EgovUserDetailsHelper.getAuthenticatedUser() )) { //최고 관리자면 바로수정 - loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - if("ROLE_ADMIN".equals(loginVO.getAuthority())){ - passChk = true; - }else { //일반관리자 - bmVO.setBbsMngId(loginVO.getId()); - if( bbsAttrbService.selectBBSMngInfCnt(bmVO) > 0 ) { //게시판 관리자 조회 - passChk = true; - } - } - }else{//방문자 세션있는방문자 - UserVO userVO = new UserVO(); - if(request.getSession().getAttribute("userVO") != null) { - userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - if(userVO.getMblDn().equals(bdVO.getMblDn())) { - passChk = true; - } - } - } - if(!"T".equals(bdVO.getSecretAt())){ - if(!passChk){ - if("".equals(boardVO.getPassword())) { - model.addAttribute("passChk", "01"); //패스워드 필요 - return modelAndView; - }else { - //패스워드 복구화 - if(!damoDec(bdVO.getPassword(), request).equals(boardVO.getPassword())) { - model.addAttribute("passChk", "02"); //패스워드가 틀림 - return modelAndView; - } - } - } - } - } - } - - boardVO.setMblDn(bdVO.getMblDn()); - model.addAttribute("boardVO", boardVO); - return modelAndView; - } - - - /** - * (사용자)게시물 수정을 위한 수정페이지로 이동한다. - * - * @param boardVO - * @param vo - * @param model - * @throws Exception - */ - @RequestMapping("/web/cop/bbs/forUpdateBoardArticle.do") - public String forUpdateBoardArticleWeb(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, ModelMap model , RedirectAttributes redirectAttributes, BoardMasterVO brdMstrVO) throws Exception { - - /*BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //게시글 불러오기 - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - - if(bdVO.getAtchFileId() !=null) { - FileVO fileVO = new FileVO(); - fileVO.setAtchFileId(bdVO.getAtchFileId()); - List fileList = fileService.selectFileInfs(fileVO); - model.addAttribute("fileList", fileList); - } - UserVO userVO = new UserVO(); - //게시글 본인인증 번호 변수 저장 - String mblDn = bdVO.getMblDn(); - - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("board", bdVO); - model.addAttribute("brdMstrVO", bmVO); - //최대 첨부파일 갯수 지정 - model.addAttribute("posAtchFileNum", bmVO.getPosblAtchFileNumber()); - if("9530000".equals(bmVO.getMenuNo())){ //묻고답하기 - //묻고답하기의 게시판들 가져오기 - BoardMasterVO boardMasterVO = new BoardMasterVO(); - boardMasterVO.setUrl("/web/cop/bbs/QnaList.do"); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - for(BoardMasterVO tempVO : viewBoardMenuList) { - if("N".equals(tempVO.getViewsYn())){; - boardMasterVO.setViewsYn("N"); - break ; - } - } - for(BoardMasterVO tempMasterVO : boardMenuList ) { - tempMasterVO.setBbsNm(tempMasterVO.getBbsNm().split("\\(")[1].split("\\)")[0]) ; - } - model.addAttribute("boardMenuList", boardMenuList); - }*/ - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = user == null ? "" : EgovStringUtil.isNullToString(user.getId()); - - if("".equals(userId)) { - return "redirect:/web/user/login/login.do"; - } - - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setMberId(user.getId()); - - mberManageVO = bbsMngService.selectboardArticleWebQnaMberInfo(mberManageVO); - - /*if(null != request.getSession().getAttribute("userVO")) { //세션체크 - userVO = ((UserVO)request.getSession().getAttribute("userVO")) ; - boardVO.setMblDn(userVO.getMblDn()); - boardVO.setNtcrNm(userVO.getName()); - }else { - return "redirect:/web/cop/bbs/QnaList.do"; - }*/ - /*LoginVO loginvo = new LoginVO(); - if(null != request.getSession().getAttribute("LoginVO")) { - loginvo = ((LoginVO)request.getSession().getAttribute("LoginVO")); - System.out.println(loginvo.getName()); - boardVO.setNtcrNm(loginvo.getName()); - }*/ - - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - - if(bdVO.getAtchFileId() !=null) { - FileVO fileVO = new FileVO(); - fileVO.setAtchFileId(bdVO.getAtchFileId()); - List fileList = fileService.selectFileInfs(fileVO); - model.addAttribute("fileList", fileList); - } - - //묻고답하기의 게시판들 가져오기 - BoardMasterVO tempBoardMasterVO = new BoardMasterVO(); - tempBoardMasterVO.setUrl("/web/cop/bbs/QnaList.do"); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(tempBoardMasterVO); - List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(tempBoardMasterVO); - for(BoardMasterVO tempVO : viewBoardMenuList) { - if("N".equals(tempVO.getViewsYn())){ - tempBoardMasterVO.setViewsYn("N"); - break ; - } - } - - model.addAttribute("mberManageVO", mberManageVO); - model.addAttribute("boardMenuList", boardMenuList); - model.addAttribute("brdMstrVO", brdMstrVO); - /*for(BoardMasterVO tempMasterVO : boardMenuList ) { - tempMasterVO.setBbsNm(tempMasterVO.getBbsNm().split("\\(")[1].split("\\)")[0]) ; - }*/ - - model.addAttribute("board", bdVO); - //최대 첨부파일 갯수 지정 - - - return "web/cop/bbs/EgovNoticeUpdt"; - } - - /** - * (사용자)게시물에 대한 내용을 수정한다. - * - * @param boardVO - * @param board - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - - @RequestMapping(value= {"/web/cop/bbs/updateBoardArticle.do" , "/web/cop/bbs/updateBoardArticleAjax.do"}) - public ModelAndView updateBoardArticleWeb(HttpServletRequest request, final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("bdMstr") BoardMaster bdMstr, - @ModelAttribute("board") Board board, BindingResult bindingResult, ModelMap model, SessionStatus status, RedirectAttributes redirectAttributes) throws Exception { - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - // Start => bbsId를 변조해서 공지사항에 글 등록 방지 처리 - //boardVO.setBbsId("BBSMSTR_000000000651"); // 공지사항 - List userBbsWriteList = bbsMngService.selectUserBbsWriteList(boardVO); - System.out.println("boardVO.getBbsId : " + boardVO.getBbsId()); - System.out.println("userBbsWriteList.size() : " + userBbsWriteList.size()); - - if (userBbsWriteList.size() == 0) { - // 1:1문의, 불편사항 등 고객이 등록할수있는 게시판 목록이 아닐경우 - modelAndView.addObject("message", "잘못된 접근입니다.\n관리자에게 문의하세요."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - // End - - if (bmVO == null || ("N").equals(bmVO.getUseAt())) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - //return "redirect:/web/main/mainPage.do"; - modelAndView.addObject("result", "no_imposbl"); - return modelAndView; - } - -// if (userVO == null) { // 인증 필요 -// multiRequest.getSession().setAttribute("searchVO", boardVO); -// multiRequest.getSession().setAttribute("url", "/web/cop/bbs/forUpdateBoardArticle.do"); -// return "redirect:/web/cop/selfauth/authentication.do"; -// } - - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); -// String frstRegisterId = bdVO.getFrstRegisterId(); // 관리자 유무 - - //230801 이지우 - 본인글 외에 nttId 변조를 통하여 다른 게시글 수정 가능한 취약점 방지 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getUniqId()); - if(!bdVO.getFrstRegisterId().equals(userId)) { - modelAndView.addObject("message", "잘못된 접근입니다.\n관리자에게 문의하세요."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - //게시글 본인인증 번호 변수 저장 - //String mblDn = bdVO.getMblDn(); - - // 본인글 체크 - /*if (!mblDn.equals(userVO.getMblDn())) { - redirectAttributes.addFlashAttribute("message", "본인글 외에는 수정할 수 없습니다."); - redirectAttributes.addAttribute("pageIndex", boardVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", boardVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", boardVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addAttribute("nttId", boardVO.getNttId()); - modelAndView.addObject("result", "no_imposbl"); - return modelAndView; - }*/ - - String atchFileId = boardVO.getAtchFileId(); - - beanValidator.validate(board, bindingResult); - if (bindingResult.hasErrors()) { - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("brdMstrVO", bmVO); - modelAndView.addObject("result", "no_Validator"); - return modelAndView; - } - - String isThumbFile = ""; - if (("BBST05").equals(bmVO.getBbsTyCode()) || ("BBST06").equals(bmVO.getBbsTyCode())) isThumbFile = "thumbFile"; - - final Map files = multiRequest.getFileMap(); - if (!files.isEmpty()) { - - if ("".equals(atchFileId)) { - List result = fileUtil.parseFileInf(files, "BBS_", 0, atchFileId, "", isThumbFile); - - if(!isPosblAtchFile(result, bmVO, model, 0)) { - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("brdMstrVO", bmVO); - modelAndView.addObject("result", "no_fileupdate"); - return modelAndView; - } - - atchFileId = fileMngService.insertFileInfs(result); - board.setAtchFileId(atchFileId); - } else { - FileVO fvo = new FileVO(); - fvo.setAtchFileId(atchFileId); - int cnt = fileMngService.getMaxFileSN(fvo); - List result = fileUtil.parseFileInf(files, "BBS_", cnt, atchFileId, "", isThumbFile); - - /* - * 파일 확장자 및 사이즈 등을 체크해주는 부분 - * if(!isPosblAtchFile(result, bmVO, model, board.getAtchFileCnt())) { - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("brdMstrVO", bmVO); - //return "web/cop/bbs/EgovNoticeUpdt"; - modelAndView.addObject("result", "no_fileupdate"); - return modelAndView; - }*/ - - fileMngService.updateFileInfs(result); - } - } - - board.setNttCn(unscript(board.getNttCn())); // XSS 방지 - //board.setLastUpdusrNm(userVO.getName()); // 변경이력에 사용 - String userIp = EgovClntInfo.getClntIP(multiRequest); - board.setNtcrIp(userIp); - - bbsMngService.updateBoardArticle(board); - - redirectAttributes.addAttribute("pageIndex", boardVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", boardVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", boardVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); - modelAndView.addObject("result", "success"); - return modelAndView; - } - - /** - * (사용자)게시물에 대한 내용을 삭제한다. - * - * @param boardVO - * @param board - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/bbs/deleteBoardArticle.do") - public String deleteBoardArticleWeb(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("board") Board board, - @ModelAttribute("bdMstr") BoardMaster bdMstr, ModelMap model, RedirectAttributes redirectAttributes)throws Exception { - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - String userUniqId = user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()); - - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - //String frstRegisterId = bdVO.getFrstRegisterId(); // 관리자 유무 - String frstRegisterId = bdVO.getFrstRegisterId(); - //bdVO.setMblDn(""); // 화면단으로 모바일키 인증 방지 - - // 본인글 체크 - if (!frstRegisterId.equals(userUniqId)) { - redirectAttributes.addFlashAttribute("message", "본인글 외에는 삭제할 수 없습니다."); - redirectAttributes.addAttribute("pageIndex", boardVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", boardVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", boardVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addAttribute("nttId", boardVO.getNttId()); - return "redirect:/web/cop/bbsWeb/selectBoardArticle.do"; - } - - - board.setLastUpdusrNm(user.getName()); // 변경이력에 사용 - String userIp = EgovClntInfo.getClntIP(request); - board.setNtcrIp(userIp); - - bbsMngService.deleteBoardArticle(board); - boardVO.setPageIndex(1); //삭제후 첫페이지로 로딩 - - redirectAttributes.addAttribute("pageIndex", boardVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", boardVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", boardVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); - return "redirect:/web/cop/bbs/QnaList.do"; - } - - /** - * (사용자)본인인증 요청 입력 Sample - * - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/bbs/pccInput.do") - public String pccInput(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception { - - return "web/cop/selfauth/pcc_V3_input_seed"; - } - - /** - * (사용자)본인인증 요청 팝업 Sample - * - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/bbs/selfauth.do") - public String selfauthTest(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception { - - return "web/cop/selfauth/pcc_V3_sample_seed"; - } - - @Value("#{globalSettings['Globals.selfauth.siteId']}") - private String SELFAUTH_SITE_ID; - @Value("#{globalSettings['Globals.selfauth.srvNo']}") - private String SELFAUTH_SRV_NO; - - /** - * (사용자)본인인증 요청 - * - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/selfauth/selfauth.do") - public String selfauth(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception { - - //날짜 생성 - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); - - java.util.Random ran = new Random(); - //랜덤 문자 길이 - int numLength = 6; - String randomStr = ""; - - for (int i = 0; i < numLength; i++) { - //0 ~ 9 랜덤 숫자 생성 - randomStr += ran.nextInt(10); - } - - String certGb = "H"; - String addVar = ""; - String reqNum = day + randomStr; // //reqNum은 최대 40byte 까지 사용 가능 - String certDate=day; - String exVar = "0000000000000000"; // 복호화용 임시필드 - - request.getSession().setAttribute("reqNum", reqNum); // 결과값 복호화시 필요 - - //01. 암호화 모듈 선언 - SciSecuManager seed = new SciSecuManager(); - - //02. 1차 암호화 - String encStr = ""; - String reqInfo = SELFAUTH_SITE_ID+"^"+SELFAUTH_SRV_NO+"^"+reqNum+"^"+certDate+"^"+certGb+"^"+addVar+"^"+exVar; // 데이터 암호화 - encStr = seed.getEncPublic(reqInfo); - - //03. 위변조 검증 값 생성 - String hmacMsg = SciHmac.HMacEncriptPublic(encStr); - - //03. 2차 암호화 - reqInfo = seed.getEncPublic(encStr + "^" + hmacMsg + "^" + "0000000000000000"); //2차암호화 - - request.getSession().setAttribute("reqInfo", reqInfo); // 본인확인 요청 정보 - request.getSession().setAttribute("SITE_URL", SITE_URL); // 사이트 URL - - return "web/cop/selfauth/selfauth"; - } - - /** - * (사용자)본인인증 결과 리턴 - * - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/selfauth/resultSeed.do") - public String resultSeed(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception { - - String retInfo = request.getParameter("retInfo").trim(); - String cookiereqNum = (String)request.getSession().getAttribute("reqNum"); - - //복화화용 변수 - String encPara = ""; - String encMsg = ""; - String msgChk = "N"; - - // 1. 암호화 모듈 (jar) Loading - SciSecuManager sciSecuMg = new SciSecuManager(); - //쿠키에서 생성한 값을 Key로 생성 한다. - retInfo = sciSecuMg.getDec(retInfo, cookiereqNum); - - // 2.1차 파싱--------------------------------------------------------------- - String[] aRetInfo1 = retInfo.split("\\^"); - - encPara = aRetInfo1[0]; //암호화된 통합 파라미터 - encMsg = aRetInfo1[1]; //암호화된 통합 파라미터의 Hash값 - - String encMsg2 = sciSecuMg.getMsg(encPara); - // 3.위/변조 검증 --------------------------------------------------------------- - if(encMsg2.equals(encMsg)) msgChk="Y"; - - if(msgChk.equals("N")) { - // 비정상 접근 처리 - } - - retInfo = sciSecuMg.getDec(encPara, cookiereqNum); - - String[] aRetInfo = retInfo.split("\\^"); - String name = aRetInfo[0]; //성명 -// String birYMD = aRetInfo[1]; //생년월일 -// String sex = aRetInfo[2]; //성별 -// String fgnGbn = aRetInfo[3]; //내외국인 구분값 - String di = aRetInfo[4]; //DI -// String ci1 = aRetInfo[5]; //CI -// String ci2 = aRetInfo[6]; //CI -// String civersion = aRetInfo[7]; //CI Version -// String reqNum = aRetInfo[8]; // 본인확인 요청번호 -// String result = aRetInfo[9]; // 본인확인결과 (Y/N) -// String certGb = aRetInfo[10]; // 인증수단 -// String cellNo = aRetInfo[11]; // 핸드폰 번호 -// String cellCorp = aRetInfo[12]; // 이동통신사 -// String certDate = aRetInfo[13]; // 검증시간 -// String addVar = aRetInfo[14]; - - // 사용자 세션생성 - UserVO userVO = new UserVO(); - userVO.setName(name); - userVO.setMblDn(di); - request.getSession().setAttribute("userVO", userVO); - - String url = (String)request.getSession().getAttribute("url"); - BoardVO searchVO = (BoardVO)request.getSession().getAttribute("searchVO"); - model.addAttribute("searchVO", searchVO); - model.addAttribute("url", url); - - return "web/cop/selfauth/resultSeed"; - } - - /** - * (사용자)본인인증 결과 리턴 Sample - * - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/bbs/pccPopSeed.do") - public String pccPopSeed(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception { - - return "web/cop/selfauth/pcc_V3_popup_seed"; - } - - /** - * (사용자)본인인증 결과 Sample - * - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/bbs/pccResult.do") - public String pccResult(HttpServletRequest request, ModelMap model, RedirectAttributes redirectAttributes)throws Exception { - - return "web/cop/selfauth/pcc_V3_result_seed"; - } - - /** - * 게시판 공통코드 - * @param model - * @throws Exception - */ - private void setBBSCommCd(ModelMap model, BoardMasterVO bmVO) throws Exception { - ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO(); - // 폴라스토리. 사용자 유형 - if (("BBSMSTR_000000000153").equals(bmVO.getBbsId())) { - comDefaultCodeVO.setCodeId("ITN003"); - List userTypeList = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO); - model.addAttribute("userTypeList", userTypeList); - } - // 통합신고게시판. 게시판 유형 - if (("BBST03").equals(bmVO.getBbsTyCode())) { - comDefaultCodeVO.setCodeId("ITN004"); - List reportTyList = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO); - model.addAttribute("reportTyList", reportTyList); - } - } - - - /** - * (사용자)게시물을 등록한다. - * - * @param boardVO - * @param board - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/cop/bbs/insertBoardArticle.do" , "/web/cop/bbs/insertBoardArticleAjax.do"}) - public ModelAndView insertBoardArticleWeb(HttpServletRequest request, - final MultipartHttpServletRequest multiRequest, - @ModelAttribute("searchVO") BoardVO boardVO, - @ModelAttribute("bdMstr") BoardMasterVO bdMstr, - @ModelAttribute("board") Board board, - BindingResult bindingResult, - SessionStatus status, - ModelMap model, - RedirectAttributes redirectAttributes, - @RequestParam Map commandMap ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - - if (!EgovDoubleSubmitHelper.checkAndSaveToken("someKey", multiRequest)) { - modelAndView.addObject("message", "너무많은 글쓰기가 시도되었습니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - // Start => bbsId를 변조해서 공지사항에 글 등록 방지 처리 - //boardVO.setBbsId("BBSMSTR_000000000651"); // 공지사항 - List userBbsWriteList = bbsMngService.selectUserBbsWriteList(boardVO); - System.out.println("boardVO.getBbsId : " + boardVO.getBbsId()); - System.out.println("userBbsWriteList.size() : " + userBbsWriteList.size()); - - if (userBbsWriteList.size() == 0) { - // 1:1문의, 불편사항 등 고객이 등록할수있는 게시판 목록이 아닐경우 - modelAndView.addObject("message", "잘못된 접근입니다.\n관리자에게 문의하세요."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - // End - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - - if (bmVO == null || ("N").equals(bmVO.getUseAt())) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - //return "redirect:/web/main/mainPage.do"; - modelAndView.addObject("result", "no_imposbl"); - return modelAndView; - } - - beanValidator.validate(board, bindingResult); - if (bindingResult.hasErrors()) { - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("bdMstr", bmVO); - //return "web/cop/bbs/EgovNoticeRegist"; - modelAndView.addObject("result", "no_validate"); - return modelAndView; - } - - List result = null; - String atchFileId = ""; - String isThumbFile = ""; - if (("BBST05").equals(bmVO.getBbsTyCode()) || ("BBST06").equals(bmVO.getBbsTyCode())) isThumbFile = "thumbFile"; - final Map files = multiRequest.getFileMap(); - if (!files.isEmpty()) { - result = fileUtil.parseFileInf(files, "BBS_", 0, "", "", isThumbFile); - // 파일 사이즈, 개수, 확장자 체크. model에 체크 오류 메세지 set - if(!isPosblAtchFile(result, bmVO, model, 0)) { - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("bdMstr", bmVO); - //return "web/cop/bbs/EgovNoticeRegist"; - modelAndView.addObject("result", "no_atchFile"); - return modelAndView; - } - atchFileId = fileMngService.insertFileInfs(result); - } - - board.setAtchFileId(atchFileId); - board.setBbsId(board.getBbsId()); - board.setNttCn(unscript(board.getNttCn())); // XSS 방지 - String userIp = EgovClntInfo.getClntIP(multiRequest); - board.setNtcrIp(userIp); - //게시판 정보 입력 - /*board.setPassword(damoEnc(board.getPassword(), request)); *///비번암호화 - board.setPassword(board.getPassword()); - bbsMngService.insertBoardArticle(board); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); - modelAndView.addObject("result", "success"); - - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // 이메일 체크 - if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { - // 알림 모듈 추가(게시판 id, 게시판 제목, 게시판 내용) - mjonNoticeSendUtil.mjonInquiryNoticeSend(board.getBbsId(), board.getNttSj(), board.getNttCn()); - } - - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - String smsTitle = bmVO.getBbsNm()+" 문의"; - // CS관리자 SMS 알림전송 - mjonNoticeSendUtil.csAdminSmsNoticeSend(board.getNttSj(), smsTitle); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] "+ bmVO.getBbsNm() + "- " + board.getNttSj(); - mjonCommon.sendSimpleSlackMsg(msg); - } - - return modelAndView; - } - - - /** - * (사용자)게시물 등록을 위한 등록페이지로 이동한다. - * - * @param boardVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/member/cop/bbs/addBoardArticle.do") - public String siteMemberAddBoardArticleWeb(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, ModelMap model , RedirectAttributes redirectAttributes ) throws Exception { - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - - boolean authFlag = false; - List authorities = EgovUserDetailsHelper.getAuthorities(); - // 게시판 쓰기 권한 체크 - for (String authority : authorities) { - if (authority.equals(bmVO.getWriteAuth())) authFlag = true; - } - - /*model.addAttribute("siteId", siteId); - String siteFolder = "site/"+siteId ; - - if (bmVO == null || ("N").equals(bmVO.getUseAt()) || !authFlag) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/"+siteId+"/web/main/mainPage.do"; - }*/ - - // 공통코드 Set - setBBSCommCd(model, bmVO); - - model.addAttribute("brdMstrVO", bmVO); - model.addAttribute("board", boardVO); - /*if(!("linc".equals(siteId) || "klc".equals(siteId)) ){ - SiteManagerVO siteManagerVO = new SiteManagerVO(); - siteManagerVO.setSiteId(siteId); - setSiteinfo(siteManagerVO, model , request ); - return "web/site/"+siteId+"/"+siteManagerVO.getIsMobile()+"/cop/bbs/EgovNoticeRegist"; - }*/ - - return "web/cop/bbs/EgovNoticeRegist"; - } - - - /** - * (사용자)게시물을 등록한다. - * - * @param boardVO - * @param board - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/member/cop/bbs/insertBoardArticle.do") - public String siteMemberInsertBoardArticleWeb(HttpServletRequest request , final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("bdMstr") BoardMasterVO bdMstr, - @ModelAttribute("board") Board board, BindingResult bindingResult, SessionStatus status, ModelMap model, RedirectAttributes redirectAttributes, - @RequestParam Map commandMap, WordFilterVO wordFilterVO ) throws Exception { - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - - /*model.addAttribute("siteId", siteId); - String siteFolder = "site/"+siteId ; */ - - boolean authFlag = false; - List authorities = EgovUserDetailsHelper.getAuthorities(); - // 게시판 쓰기 권한 체크 - for (String authority : authorities) { - if (authority.equals(bmVO.getWriteAuth())) authFlag = true; - } - - /*if (bmVO == null || ("N").equals(bmVO.getUseAt()) || !authFlag) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/"+siteId+"/web/main/mainPage.do"; - }*/ - - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - beanValidator.validate(board, bindingResult); - if (bindingResult.hasErrors()) { - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("bdMstr", bmVO); - /*if(!("linc".equals(siteId) || "klc".equals(siteId)) ){ - SiteManagerVO siteManagerVO = new SiteManagerVO(); - siteManagerVO.setSiteId(siteId); - setSiteinfo(siteManagerVO, model , request ); - return "web/site/"+siteId+"/"+siteManagerVO.getIsMobile()+"/cop/bbs/EgovNoticeRegist"; - }*/ - - return "web/cop/bbs/EgovNoticeRegist"; - } - - //필터체크 - //wordFilterVO.setSiteId(siteId); - wordFilterVO = wordFilterService.selectWordFilterVO(wordFilterVO); - if(wordFilterVO !=null){ - wordFilterVO.getFilterCn() ; - board.getNttCn(); - } - - List result = null; - String atchFileId = ""; - String isThumbFile = ""; - if (("BBST05").equals(bmVO.getBbsTyCode()) || ("BBST06").equals(bmVO.getBbsTyCode())) isThumbFile = "thumbFile"; - final Map files = multiRequest.getFileMap(); - if (!files.isEmpty()) { - result = fileUtil.parseFileInf(files, "BBS_", 0, "", "", isThumbFile); - // 파일 사이즈, 개수, 확장자 체크. model에 체크 오류 메세지 set - if(!isPosblAtchFile(result, bmVO, model, 0)) { - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("bdMstr", bmVO); - /*if(!("linc".equals(siteId) || "klc".equals(siteId)) ){ - SiteManagerVO siteManagerVO = new SiteManagerVO(); - siteManagerVO.setSiteId(siteId); - setSiteinfo(siteManagerVO, model , request ); - return "web/site/"+siteId+"/"+siteManagerVO.getIsMobile()+"/cop/bbs/EgovNoticeRegist"; - }*/ - return "web/cop/bbs/EgovNoticeRegist"; - } - atchFileId = fileMngService.insertFileInfs(result); - } - - if(loginVO == null){ //테스트 - UserVO tempUserVO = new UserVO(); - tempUserVO.setName("testName"); - tempUserVO.setMblDn("testMblDn"); - board.setNtcrNm(tempUserVO.getName()); - board.setMblDn(tempUserVO.getMblDn()); - }else{ - board.setNtcrNm(loginVO.getName()); - board.setFrstRegisterId(loginVO.getUniqId()); - } - - - board.setAtchFileId(atchFileId); - board.setBbsId(board.getBbsId()); - board.setNttCn(unscript(board.getNttCn())); // XSS 방지 - String userIp = EgovClntInfo.getClntIP(multiRequest); - board.setNtcrIp(userIp); - Board resultVO = bbsMngService.insertBoardArticle(board); - List mngIdList = bbsAttrbService.selectBBSMngIdList(bmVO); // 게시판 관리자ID 조회 - - // 사용자 게시글 등록 시 메일 전송 - /*if (userVO != null) { - for (EgovMap mngId : mngIdList) { - String mailAdres = (String)mngId.get("emailAdres"); - if (mailAdres != null && !("").equals(mailAdres)) - sendBBSInsertMail((String)mngId.get("emailAdres"), board.getBbsId(), resultVO.getNttId(), bmVO.getBbsNm(), board.getNttSj()); - } - }*/ - - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); - return "redirect:/web/cop/bbsWeb/selectBoardList.do"; - } - - /** - * (사용자)게시물 수정을 위한 수정페이지로 이동한다. - * - * @param boardVO - * @param vo - * @param model - * @throws Exception - */ - @RequestMapping("/{siteId}/web/member/cop/bbs/forUpdateBoardArticle.do") - public String siteForUpdateBoardArticleWeb(@PathVariable("siteId") String siteId , HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, ModelMap model , RedirectAttributes redirectAttributes) throws Exception { - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - boolean authFlag = false; - List authorities = EgovUserDetailsHelper.getAuthorities(); - // 게시판 쓰기 권한 체크 - for (String authority : authorities) { - if (authority.equals(bmVO.getWriteAuth())) authFlag = true; - } - - model.addAttribute("siteId", siteId); - String siteFolder = "site/"+siteId ; - - if (bmVO == null || ("N").equals(bmVO.getUseAt()) || !authFlag) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/"+siteId+"/web/main/mainPage.do"; - } - - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - String frstRegisterId = bdVO.getFrstRegisterId(); // 관리자 유무 - bdVO.setMblDn(""); // 화면단으로 모바일키 인증 방지 - - // 본인글 체크 - if (!frstRegisterId.equals(loginVO.getUniqId())) { - redirectAttributes.addFlashAttribute("message", "본인글 외에는 수정할 수 없습니다."); - redirectAttributes.addAttribute("pageIndex", boardVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", boardVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", boardVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addAttribute("nttId", boardVO.getNttId()); - return "redirect:/"+siteId+"/web/cop/bbsWeb/selectBoardArticle.do"; - } - - // 공통코드 Set - setBBSCommCd(model, bmVO); - - model.addAttribute("board", bdVO); - model.addAttribute("brdMstrVO", bmVO); - /*if(!("linc".equals(siteId) || "klc".equals(siteId)) ){ - SiteManagerVO siteManagerVO = new SiteManagerVO(); - siteManagerVO.setSiteId(siteId); - setSiteinfo(siteManagerVO, model , request ); - return "web/site/"+siteId+"/"+siteManagerVO.getIsMobile()+"/cop/bbs/EgovNoticeUpdt"; - }*/ - return "web/"+siteFolder+"/cop/bbs/EgovNoticeUpdt"; - } - - - /** - * (사용자)게시물에 대한 내용을 수정한다. - * - * @param boardVO - * @param board - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/{siteId}/web/member/cop/bbs/updateBoardArticle.do") - public String siteUpdateBoardArticleWeb(@PathVariable("siteId") String siteId ,HttpServletRequest request , final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("bdMstr") BoardMaster bdMstr, - @ModelAttribute("board") Board board, BindingResult bindingResult, ModelMap model, SessionStatus status, RedirectAttributes redirectAttributes) throws Exception { - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - - //UserVO userVO = (UserVO)multiRequest.getSession().getAttribute("userVO"); // 사용자 정보 - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - boolean authFlag = false; - List authorities = EgovUserDetailsHelper.getAuthorities(); - // 게시판 쓰기 권한 체크 - for (String authority : authorities) { - if (authority.equals(bmVO.getWriteAuth())) authFlag = true; - } - - - if (bmVO == null || ("N").equals(bmVO.getUseAt()) || !authFlag) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/"+siteId+"/web/main/mainPage.do"; - } - - /*if (userVO == null) { // 인증 필요 - multiRequest.getSession().setAttribute("searchVO", boardVO); - multiRequest.getSession().setAttribute("url", "/web/cop/bbs/forUpdateBoardArticle.do"); - return "redirect:/web/cop/selfauth/authentication.do"; - }*/ - - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - String frstRegisterId = bdVO.getFrstRegisterId(); // 글쓴이 아이디 - String mblDn = bdVO.getMblDn(); - bdVO.setMblDn(""); // 화면단으로 모바일키 인증 방지 - - // 본인글 체크 - if (!bdVO.getFrstRegisterId().equals(loginVO.getUniqId())) { - redirectAttributes.addFlashAttribute("message", "본인글 외에는 수정할 수 없습니다."); - redirectAttributes.addAttribute("pageIndex", boardVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", boardVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", boardVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addAttribute("nttId", boardVO.getNttId()); - return "redirect:/"+siteId+"/web/cop/bbsWeb/selectBoardArticle.do"; - } - - String atchFileId = boardVO.getAtchFileId(); - - beanValidator.validate(board, bindingResult); - if (bindingResult.hasErrors()) { - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("brdMstrVO", bmVO); - String siteFolder = "site/"+siteId ; - if(!("linc".equals(siteId) || "klc".equals(siteId)) ){ - SiteManagerVO siteManagerVO = new SiteManagerVO(); - siteManagerVO.setSiteId(siteId); - setSiteinfo(siteManagerVO, model , request ); - //return "web/site/theme_"+siteManagerVO.getTheme()+"/"+siteManagerVO.getIsMobile()+"/cop/bbs/EgovNoticeUpdt"; - return "web/site/"+siteId+"/"+siteManagerVO.getIsMobile()+"/cop/bbs/EgovNoticeUpdt"; - } - return "web/"+siteFolder+"/cop/bbs/EgovNoticeUpdt"; - } - - String isThumbFile = ""; - if (("BBST05").equals(bmVO.getBbsTyCode()) || ("BBST06").equals(bmVO.getBbsTyCode())) isThumbFile = "thumbFile"; - - final Map files = multiRequest.getFileMap(); - if (!files.isEmpty()) { - if ("".equals(atchFileId)) { - List result = fileUtil.parseFileInf(files, "BBS_", 0, atchFileId, "", isThumbFile); - - if(!isPosblAtchFile(result, bmVO, model, 0)) { - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("brdMstrVO", bmVO); - String siteFolder = "site/"+siteId ; - /*if(!("linc".equals(siteId) || "klc".equals(siteId)) ){ - SiteManagerVO siteManagerVO = new SiteManagerVO(); - siteManagerVO.setSiteId(siteId); - setSiteinfo(siteManagerVO, model , request ); - return "web/site/"+siteId+"/"+siteManagerVO.getIsMobile()+"/cop/bbs/EgovNoticeUpdt"; - - }*/ - return "web/"+siteFolder+"/cop/bbs/EgovNoticeUpdt"; - } - - atchFileId = fileMngService.insertFileInfs(result); - board.setAtchFileId(atchFileId); - } else { - FileVO fvo = new FileVO(); - fvo.setAtchFileId(atchFileId); - int cnt = fileMngService.getMaxFileSN(fvo); - List result = fileUtil.parseFileInf(files, "BBS_", cnt, atchFileId, "", isThumbFile); - - if(!isPosblAtchFile(result, bmVO, model, board.getAtchFileCnt())) { - // 공통코드 Set - setBBSCommCd(model, bmVO); - model.addAttribute("brdMstrVO", bmVO); - String siteFolder = "site/"+siteId ; - /*if(!("linc".equals(siteId) || "klc".equals(siteId)) ){ - SiteManagerVO siteManagerVO = new SiteManagerVO(); - siteManagerVO.setSiteId(siteId); - setSiteinfo(siteManagerVO, model , request ); - return "web/site/"+siteId+"/"+siteManagerVO.getIsMobile()+"/cop/bbs/EgovNoticeUpdt"; - }*/ - return "web/"+siteFolder+"/cop/bbs/EgovNoticeUpdt"; - } - - fileMngService.updateFileInfs(result); - } - } - - board.setNttCn(unscript(board.getNttCn())); // XSS 방지 - board.setLastUpdusrNm(loginVO.getName()); // 변경이력에 사용 - String userIp = EgovClntInfo.getClntIP(multiRequest); - board.setNtcrIp(userIp); - - bbsMngService.updateBoardArticle(board); - - redirectAttributes.addAttribute("pageIndex", boardVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", boardVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", boardVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); - return "redirect:/"+siteId+"/web/cop/bbsWeb/selectBoardList.do"; - } - - - /** - * (사용자)게시물에 대한 내용을 삭제한다. - * - * @param boardVO - * @param board - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/{siteId}/web/member/cop/bbs/deleteBoardArticle.do") - public String siteDeleteBoardArticleWeb(@PathVariable("siteId") String siteId , HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, @ModelAttribute("board") Board board, - @ModelAttribute("bdMstr") BoardMaster bdMstr, ModelMap model, RedirectAttributes redirectAttributes)throws Exception { - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - List authorities = EgovUserDetailsHelper.getAuthorities(); - boolean authFlag = false; - // 게시판 쓰기 권한 체크 - for (String authority : authorities) { - if (authority.equals(bmVO.getWriteAuth())) authFlag = true; - } - - if (bmVO == null || ("N").equals(bmVO.getUseAt()) || !authFlag) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/"+siteId+"/web/main/mainPage.do"; - } - - /*if (loginVO == null) { // 인증 필요 - request.getSession().setAttribute("searchVO", boardVO); - request.getSession().setAttribute("url", "/web/cop/bbsWeb/selectBoardArticle.do"); - return "redirect:/web/cop/selfauth/authentication.do"; - } - */ - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - String frstRegisterId = bdVO.getFrstRegisterId(); // 글쓴이 - String mblDn = bdVO.getMblDn(); - bdVO.setMblDn(""); // 화면단으로 모바일키 인증 방지 - - // 본인글 체크 - if (frstRegisterId.equals("") || !frstRegisterId.equals(loginVO.getUniqId())) { - redirectAttributes.addFlashAttribute("message", "본인글 외에는 삭제할 수 없습니다."); - redirectAttributes.addAttribute("pageIndex", boardVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", boardVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", boardVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addAttribute("nttId", boardVO.getNttId()); - return "redirect:/"+siteId+"/web/cop/bbsWeb/selectBoardArticle.do"; - } - - board.setLastUpdusrNm(loginVO.getName()); // 변경이력에 사용 - String userIp = EgovClntInfo.getClntIP(request); - board.setNtcrIp(userIp); - - bbsMngService.deleteBoardArticle(board); - boardVO.setPageIndex(1); //삭제후 첫페이지로 로딩 - - redirectAttributes.addAttribute("pageIndex", boardVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", boardVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", boardVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", boardVO.getBbsId()); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); - return "redirect:/"+siteId+"/web/cop/bbsWeb/selectBoardList.do"; - } - - private void setSiteinfo(SiteManagerVO siteManagerVO , ModelMap model , HttpServletRequest request) throws Exception{ - SiteManagerVO tempSiteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ; - if(tempSiteManagerVO !=null){ - siteManagerVO.setIsMobile("pc") ; - siteManagerVO.setTheme(tempSiteManagerVO.getTheme()); - }else{ - siteManagerVO.setTheme("01"); - } - WebUtil util = new WebUtil(); - if(util.isMobile(request)){ - siteManagerVO.setIsMobile("mobile"); - } - model.addAttribute("siteId", siteManagerVO.getSiteId()); - //model.addAttribute("site_path" , "/site/theme_"+siteManagerVO.getTheme()+"/"+siteManagerVO.getIsMobile()); - model.addAttribute("site_path" , "/site/"+siteManagerVO.getSiteId()+"/"+siteManagerVO.getIsMobile()); - } - - - /** - * 첨부파일 개수, 사이즈, 확장자 체크 - * 썸네일, 모델, 기개수, 종류 - * @param fileList 파일리스트 - * @param boardMaster - * @param model - * @param atchFileCnt 업로드된 파일 수 - * @param fileSe 파일 구분 - * @return boolean - * @return 체크 오류 메세지 model 'flashMessage' 에 set - * @throws Exception - */ - private boolean isPosblAtchFile_tobe(Map fileList, BoardMaster boardMaster, - ModelMap model, int atchFileCnt, String fileSe) throws Exception { - long posblAtchFileSize = Long.parseLong(boardMaster.getPosblAtchFileSize()) * 1024 * 1024 ; - int posblAtchFileNumber = Integer.parseInt(boardMaster.getPosblAtchFileNumber()); - String bbsTyCode = boardMaster.getBbsTyCode(); - String flashMessage = ""; - String fileSeMsg = "첨부파일: "; - String fileExtMsg = ""; - boolean posblAtchFileFlag = true; - boolean posblAtchFileSizeFlag = true; - boolean posblAtchFileExtFlag = true; - boolean isImg = false; - - // 썸네일 시 - if (fileSe.equals("thumb")) { - posblAtchFileNumber = 1; - isImg = true; - fileSeMsg = "썸네일: "; - } - - Iterator> itr = fileList.entrySet().iterator(); - MultipartFile file; - - int fileCnt = 0; - while (itr.hasNext()) { - Entry entry = itr.next(); - file = entry.getValue(); - - long fileMg = file.getSize(); - String orginFileName = file.getOriginalFilename(); - int index = orginFileName.lastIndexOf("."); - String fileExt = orginFileName.substring(index + 1); - - if (fileMg > posblAtchFileSize) posblAtchFileSizeFlag = false; - - // 이미지 형식 확인 -// if (("BBST05").equals(bbsTyCode) || ("BBST06").equals(bbsTyCode) || isImg) { - if (isImg) { - String[] imgExts = {"gif", "jpg", "bmp", "jpeg", "png"}; - if (ArrayUtils.indexOf(imgExts, fileExt.toLowerCase()) == -1) { - posblAtchFileExtFlag = false; - fileExtMsg = "이미지"; - } - } - - // 포토형2 pdf 예외처리 필요 -// if (("ㅁㄴㅇㄹ").equals(bbsTyCode)) { -// String[] imgExts = {"pdf"}; -// if (ArrayUtils.indexOf(imgExts, fileExt.toLowerCase()) == -1) { -// posblAtchFileExtFlag = false; -// fileExtMsg = "PDF"; -// } -// } - - fileCnt++; - } - - if (!posblAtchFileExtFlag) { - flashMessage += fileSeMsg + fileExtMsg + " 형식의 확장자만 업로드 가능합니다." + "\\n"; - posblAtchFileFlag = false; - } - if(!posblAtchFileSizeFlag) { - flashMessage += fileSeMsg + "파일사이즈가 초과되었습니다. 최대크기 " + posblAtchFileSize + "mb" + "\\n"; - posblAtchFileFlag = false; - } - if ((fileCnt+atchFileCnt) > posblAtchFileNumber) { - flashMessage += fileSeMsg + "파일 개수가 초과되었습니다. 최대개수 " + posblAtchFileNumber + "개" + "\\n"; - posblAtchFileFlag = false; - } - - if (!posblAtchFileFlag) model.addAttribute("message", flashMessage); - - return posblAtchFileFlag; - } - - //게시판 리스트 엑셀 다운로드 @RequestMapping(value="/cop/bbs/bbsExcelDownload.do") public void bbsExcelDownload( BoardVO boardVO, @@ -3116,1728 +940,6 @@ public class EgovBBSManageController { } return modelAndView; } - - - /** - * (사용자)자주하는 질문. - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - * TotMngListAjax (통합경영공시) - */ - @RequestMapping(value= {"/web/cop/bbs/FaqList.do" , - "/web/cop/bbs/FaqDetail.do", - "/web/cop/bbs/FaqListAjax.do" - } ) - public String selectFaqListWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - if("/web/cop/bbs/FaqDetail.do".equals(request.getRequestURI())) { //통합검색시 - boardMasterVO.setUrl("/web/cop/bbs/FaqList.do"); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - model.addAttribute("boardMenuList", boardMenuList); - - if("".equals(boardVO.getBbsId())) { //검색에서 조회시 nttid로 마스터 조회 - BoardMasterVO bmVO = bbsAttrbService.selectBbsIdByNttId(boardVO); - if (bmVO == null) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/web/main/mainPage.do"; - } - - BoardVO searchTotalVO = new BoardVO(); - searchTotalVO.setSearchNttId(boardVO.getNttId()); - searchTotalVO.setBbsId(bmVO.getBbsId()); - model.addAttribute("searchTotalVO", searchTotalVO); - return "web/cop/bbs/FaqList"; - } - } - - boardMasterVO.setUrl(request.getRequestURI()); - //메뉴에 등록된 url에 등록된 게시판 조회 - if("/web/cop/bbs/FaqList.do".equals(request.getRequestURI())) { //최초로딩 - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - model.addAttribute("boardMenuList", boardMenuList); - - if(0!=boardMenuList.size()) { //원자력 소식은 전체 매뉴 없음. - BoardMasterVO totalBoardMasterVO = new BoardMasterVO(); - totalBoardMasterVO.setBbsNm("전체"); - boardMenuList.add(0,totalBoardMasterVO) ; - } - } - if("/web/cop/bbs/FaqListAjax.do".equals(request.getRequestURI())) { //게시판 조회 - BoardMasterVO bmVO = new BoardMasterVO(); - PaginationInfo paginationInfo = new PaginationInfo(); - //전체 게시글 불러오기 - Map map = new HashMap(); - if("".equals(boardVO.getBbsId())){ //전체 게시글 불러오기 - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - boardVO.setPageUnit(bmVO.getPageUnit()); - boardVO.setPageSize(bmVO.getPageSize()); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String temp = boardMasterVO.getUrl(); //Url 패턴에 Ajax 구문 삭제처리 - boardMasterVO.setUrl(temp.replace("Ajax", "")); - map = bbsMngService.selectBoardArticlesWebUrl(boardMasterVO, null); - }else { - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - map = bbsMngService.selectBoardArticlesWeb(boardVO, null); - } - - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - List resultList = (List)map.get("resultList"); - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - - if(bvo.getAtchFileCnt() > 0) { - FileVO fileVO = new FileVO(); - fileVO.setAtchFileId(bvo.getAtchFileId()); - List fileList = fileService.selectFileInfs(fileVO); - bvo.setFileList(fileList); - } - } - - - //게시판 마스터 옵션 정보 - BoardMasterVO searchVO = new BoardMasterVO(); - searchVO.setBbsId(boardVO.getBbsId()); - BoardMasterVO bbsMasterInfo = bbsAttrbService.selectBBSMasterInf(searchVO); - - model.addAttribute("bbsMasterInfo", bbsMasterInfo); - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("paginationInfo", paginationInfo); - return "web/cop/bbs/FaqListAjax"; - }else { - model.addAttribute("bbsId", ""); - } - - return "web/cop/bbs/FaqList"; - } - - /** - * (사용자) 탭 게시판 통합 - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - * - * - * URL - * /web/cop/bbs/NewsList.do (원자력소식) - * /web/cop/bbs/selectLibList.do (자료실) - * /web/cop/bbs/bussRealList.do (사업실명제) - */ - @RequestMapping(value= {"/web/cop/bbs/NewsList.do" - , "/web/cop/bbs/NewsListAjax.do" - , "/web/cop/bbs/LibList.do" - , "/web/cop/bbs/LibListAjax.do" - , "/web/cop/bbs/BussRealList.do" - , "/web/cop/bbs/BussRealListAjax.do" - , "/web/cop/bbs/TotMngListAjax.do" - }) - public String selectTabBbsListWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - //메뉴에 등록된 url 조회 - boardMasterVO.setUrl(request.getRequestURI()); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - for(BoardMasterVO tempVO : viewBoardMenuList) { - if("N".equals(tempVO.getViewsYn())){; - boardMasterVO.setViewsYn("N"); - break ; - } - } - - if(0!=boardMenuList.size()) { //원자력 소식은 전체 매뉴 없음. - if(!"9420000".equals(((BoardMasterVO)boardMenuList.get(0)).getMenuNo())) { - BoardMasterVO totalBoardMasterVO = new BoardMasterVO(); - totalBoardMasterVO.setBbsNm("전체"); - boardMenuList.add(0,totalBoardMasterVO) ; - } - } - - if(request.getRequestURI().contains("List.do")){ //최초 로딩 매뉴이름가져오기 - MenuManageVO tempMenuManageVO = new MenuManageVO(); - tempMenuManageVO.setUrl(request.getRequestURI()); - MenuManageVO menuManageVO = menuManageService.selectMenuManageUrl(tempMenuManageVO); - model.addAttribute("menuManageVO", menuManageVO); - } - - if(request.getRequestURI().contains("ListAjax.do") //하단 리스트 - ) { //상세 하단 리스트 - BoardMasterVO bmVO = new BoardMasterVO(); - PaginationInfo paginationInfo = new PaginationInfo(); - //전체 게시글 불러오기 - Map map = new HashMap(); - if("".equals(boardVO.getBbsId())){ //전체 게시글 불러오기 - boardVO.setPageUnit(bmVO.getPageUnit()); - boardVO.setPageSize(bmVO.getPageSize()); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String temp = boardMasterVO.getUrl(); //Url 패턴에 Ajax 구문 삭제처리 - boardMasterVO.setUrl(temp.replace("Ajax", "")); - //전체 게시글 불러오기 - map = bbsMngService.selectBoardArticlesWebUrl(boardMasterVO, null); - }else { - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - //메뉴별 게시글 불러오기 - map = bbsMngService.selectBoardArticlesWeb(boardVO, null); - } - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - - /*모바일 페이지 5개씩 나오게 하기*/ - PaginationInfo paginationInfoMobile = new PaginationInfo(); - paginationInfoMobile.setCurrentPageNo(paginationInfo.getCurrentPageNo()); - paginationInfoMobile.setTotalRecordCount(paginationInfo.getTotalRecordCount()); - paginationInfoMobile.setPageSize(5); - paginationInfoMobile.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - model.addAttribute("paginationInfoMobile", paginationInfoMobile); - - - - List resultList = (List)map.get("resultList"); - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - } - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("paginationInfo", paginationInfo); - if(request.getRequestURI().contains("/web/cop/bbs/QnaListAjax.do")){ //묻고 답하기 - return "web/cop/bbs/QnaListAjax"; - } - if(request.getRequestURI().contains("/web/cop/bbs/TotMngListAjax.do")){ //통합경영공시 - model.addAttribute("bmVO", bmVO); - return "web/cop/bbs/TotMngListAjax"; - } - - return "web/cop/bbs/CntBbsListAjax"; - } - model.addAttribute("boardMenuList", boardMenuList); - model.addAttribute("detailPage", request.getRequestURI().replace("List", "Detail")); - return "web/cop/bbs/CntBbsList"; - } - - - - - /** - * - * URL - * /web/cop/bbs/QnaList.do (묻고답하기) - */ - @RequestMapping(value= { - "/web/cop/bbs/QnaListAjax.do" - }) - public String selectQnaListAjaxWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - - LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userUniqId = user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()); - - if("".equals(userUniqId)) { - redirectAttributes.addFlashAttribute("message", "로그인 후 이용해 주세요."); - return "redirect:/web/user/login/login.do"; - } - - boardMasterVO.setFrstRegisterId(userUniqId); - boardVO.setFrstRegisterId(userUniqId); - - boardMasterVO.setUrl(request.getRequestURI()); - - /* - //메뉴에 등록된 url 조회 - - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - for(BoardMasterVO tempVO : viewBoardMenuList) { - if("N".equals(tempVO.getViewsYn())){; - boardMasterVO.setViewsYn("N"); - break ; - } - } - - if(0!=boardMenuList.size()) { //묻고답하기 - BoardMasterVO totalBoardMasterVO = new BoardMasterVO(); - totalBoardMasterVO.setBbsNm("전체"); - boardMenuList.add(0,totalBoardMasterVO) ; - } - */ - //상세 하단 리스트 - BoardMasterVO bmVO = new BoardMasterVO(); - PaginationInfo paginationInfo = new PaginationInfo(); - - if("".equals(boardMasterVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - boardMasterVO.setSearchSortCnd("nttId"); - boardMasterVO.setSearchSortOrd("desc"); - } - //전체 게시글 불러오기 - Map map = new HashMap(); - //if("".equals(boardVO.getBbsId())){ //전체 게시글 불러오기 - if("".equals(boardVO.getSeCmmnCdId())){ //전체 게시글 불러오기 - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - boardVO.setPageUnit(bmVO.getPageUnit()); - boardVO.setPageSize(bmVO.getPageSize()); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String temp = boardMasterVO.getUrl(); //Url 패턴에 Ajax 구문 삭제처리 - boardMasterVO.setUrl(temp.replace("Ajax", "")); - - //답변 조회 - CommentVO commentVO = new CommentVO(); - commentVO.setBbsId(boardVO.getBbsId()); - List commentList = egovArticleCommentService.selectArticleCommentListAllList(commentVO); - - int commentCnt = commentList.size(); - model.addAttribute("commentCnt", commentCnt); - model.addAttribute("commentList", commentList); - - //전체 게시글 불러오기 - map = bbsMngService.selectBoardArticlesWebUrl(boardMasterVO, null); - }else { - //bmVO.setBbsId(boardVO.getBbsId()); - bmVO.setBbsId(boardVO.getSeCmmnCdId()); - boardVO.setBbsId(boardVO.getSeCmmnCdId()); - - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //답변 조회 - CommentVO commentVO = new CommentVO(); - commentVO.setBbsId(boardVO.getBbsId()); - List commentList = egovArticleCommentService.selectArticleCommentListAllList(commentVO); - - int commentCnt = commentList.size(); - model.addAttribute("commentCnt", commentCnt); - model.addAttribute("commentList", commentList); - - //메뉴별 게시글 불러오기 - map = bbsMngService.selectBoardArticlesWeb(boardVO, null); - } - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - - List resultList = (List)map.get("resultList"); - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - } - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", totCnt); - model.addAttribute("paginationInfo", paginationInfo); - if(request.getRequestURI().contains("/web/cop/bbs/QnaListAjax.do")){ //묻고 답하기 - return "web/cop/bbs/QnaListAjax"; - } - - return "web/cop/bbs/QnaListAjax"; - } - - /** - * - * URL - * /web/cop/bbs/NoticeList.do (공지사항) - */ - @RequestMapping(value= {"web/cop/bbs/NoticeList.do"}) - public String selectNoticeListWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - //메뉴에 등록된 url 조회 - boardMasterVO.setUrl(request.getRequestURI()); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - //List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - for(BoardMasterVO tempVO : boardMenuList) { - if("N".equals(tempVO.getViewsYn())){; - boardMasterVO.setViewsYn("N"); - break ; - } - } - - //게시판 메뉴 리스트 - if(0!=boardMenuList.size()) { //공지사항 - BoardMasterVO totalBoardMasterVO = new BoardMasterVO(); - totalBoardMasterVO.setBbsNm("전체"); - boardMenuList.add(0,totalBoardMasterVO) ; - } - - model.addAttribute("boardMenuList", boardMenuList); - model.addAttribute("detailPage", request.getRequestURI().replace("List", "Detail")); - - return "web/cop/bbs/NoticeList"; - } - - /** - * - * URL - * /web/cop/bbs/SuggestList.do (불편신고) - */ - @RequestMapping(value= {"web/cop/bbs/SuggestList.do"}) - public String selectSuggestListWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userUniqId = user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()); - - if("".equals(userUniqId)) { - redirectAttributes.addFlashAttribute("message", "로그인 후 이용해 주세요."); - return "redirect:/web/user/login/login.do"; - } - - //메뉴에 등록된 url 조회 - boardMasterVO.setUrl(request.getRequestURI()); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - //List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - for(BoardMasterVO tempVO : boardMenuList) { - if("N".equals(tempVO.getViewsYn())){; - boardMasterVO.setViewsYn("N"); - break ; - } - } - - //게시판 메뉴 리스트 - if(0!=boardMenuList.size()) { //공지사항 - BoardMasterVO totalBoardMasterVO = new BoardMasterVO(); - totalBoardMasterVO.setBbsNm("전체"); - boardMenuList.add(0,totalBoardMasterVO) ; - } - - model.addAttribute("boardMenuList", boardMenuList); - model.addAttribute("detailPage", request.getRequestURI().replace("List", "Detail")); - - return "web/cop/bbs/SuggestList"; - } - - /** - * - * URL - * /web/cop/bbs/SuggestList.do (불편신고) - */ - @RequestMapping(value= { - "/web/cop/bbs/SuggestListAjax.do" - }) - public String selectSuggestListAjaxWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - - LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userUniqId = user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()); - - if("".equals(userUniqId)) { - redirectAttributes.addFlashAttribute("message", "로그인 후 이용해 주세요."); - return "redirect:/web/user/login/login.do"; - } - - boardMasterVO.setFrstRegisterId(userUniqId); - boardVO.setFrstRegisterId(userUniqId); - - boardMasterVO.setUrl(request.getRequestURI()); - - /* - //메뉴에 등록된 url 조회 - - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - for(BoardMasterVO tempVO : viewBoardMenuList) { - if("N".equals(tempVO.getViewsYn())){; - boardMasterVO.setViewsYn("N"); - break ; - } - } - - if(0!=boardMenuList.size()) { //묻고답하기 - BoardMasterVO totalBoardMasterVO = new BoardMasterVO(); - totalBoardMasterVO.setBbsNm("전체"); - boardMenuList.add(0,totalBoardMasterVO) ; - } - */ - //상세 하단 리스트 - BoardMasterVO bmVO = new BoardMasterVO(); - PaginationInfo paginationInfo = new PaginationInfo(); - - if("".equals(boardMasterVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - boardMasterVO.setSearchSortCnd("nttId"); - boardMasterVO.setSearchSortOrd("desc"); - } - //전체 게시글 불러오기 - Map map = new HashMap(); - //if("".equals(boardVO.getBbsId())){ //전체 게시글 불러오기 - if("".equals(boardVO.getSeCmmnCdId())){ //전체 게시글 불러오기 - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - boardVO.setPageUnit(bmVO.getPageUnit()); - boardVO.setPageSize(bmVO.getPageSize()); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String temp = boardMasterVO.getUrl(); //Url 패턴에 Ajax 구문 삭제처리 - boardMasterVO.setUrl(temp.replace("Ajax", "")); - - //답변 조회 - CommentVO commentVO = new CommentVO(); - commentVO.setBbsId(boardVO.getBbsId()); - List commentList = egovArticleCommentService.selectArticleCommentListAllList(commentVO); - - int commentCnt = commentList.size(); - model.addAttribute("commentCnt", commentCnt); - model.addAttribute("commentList", commentList); - - //전체 게시글 불러오기 - map = bbsMngService.selectBoardArticlesWebUrl(boardMasterVO, null); - }else { - //bmVO.setBbsId(boardVO.getBbsId()); - bmVO.setBbsId(boardVO.getSeCmmnCdId()); - boardVO.setBbsId(boardVO.getSeCmmnCdId()); - - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //답변 조회 - CommentVO commentVO = new CommentVO(); - commentVO.setBbsId(boardVO.getBbsId()); - List commentList = egovArticleCommentService.selectArticleCommentListAllList(commentVO); - - int commentCnt = commentList.size(); - model.addAttribute("commentCnt", commentCnt); - model.addAttribute("commentList", commentList); - - //메뉴별 게시글 불러오기 - map = bbsMngService.selectBoardArticlesWeb(boardVO, null); - } - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - - List resultList = (List)map.get("resultList"); - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - } - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", totCnt); - model.addAttribute("paginationInfo", paginationInfo); - - return "web/cop/bbs/SuggestListAjax"; - } - - - /** - * - * URL - * /web/cop/bbs/QnaList.do (묻고답하기) - */ - @RequestMapping(value= { - "web/cop/bbs/QnaList.do" - - }) - public String selectQnaListWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userUniqId = user == null ? "" : EgovStringUtil.isNullToString(user.getUniqId()); - - if("".equals(userUniqId)) { - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - - boardMasterVO.setFrstRegisterId(userUniqId); - boardVO.setFrstRegisterId(userUniqId); - - //메뉴에 등록된 url 조회 - boardMasterVO.setUrl(request.getRequestURI()); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - //List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - for(BoardMasterVO tempVO : boardMenuList) { - if("N".equals(tempVO.getViewsYn())){; - boardMasterVO.setViewsYn("N"); - break ; - } - } - - if(0!=boardMenuList.size()) { //묻고답하기 - BoardMasterVO totalBoardMasterVO = new BoardMasterVO(); - totalBoardMasterVO.setBbsNm("전체"); - boardMenuList.add(0,totalBoardMasterVO) ; - } - - model.addAttribute("boardMenuList", boardMenuList); - model.addAttribute("detailPage", request.getRequestURI().replace("List", "Detail")); - - return "web/cop/bbs/QnaList"; - } - - /** - * - * URL - * /web/cop/bbs/NoticeListAjax.do (공지사항 - 내용) - */ - @RequestMapping(value= { - "/web/cop/bbs/NoticeListAjax.do" - }) - public String selectNoticeListAjaxWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO - ) throws Exception { - - //step1.현재 url을 저장한다.(?) - //step2.현재 url의 게시판 리스트 정보를 가져온다. - //step3.현재 url의 게시판 리스트 정보를 가져온다. - - boardMasterVO.setUrl(request.getRequestURI()); - - //메뉴에 등록된 url 조회 - /* - boardMasterVO.setUrl(request.getRequestURI()); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - for(BoardMasterVO tempVO : viewBoardMenuList) { - if("N".equals(tempVO.getViewsYn())){; - boardMasterVO.setViewsYn("N"); - break ; - } - } - - //게시판 메뉴 리스트 - if(0!=boardMenuList.size()) { //공지사항 - BoardMasterVO totalBoardMasterVO = new BoardMasterVO(); - totalBoardMasterVO.setBbsNm("전체"); - boardMenuList.add(0,totalBoardMasterVO) ; - } - */ - - - BoardMasterVO bmVO = new BoardMasterVO(); - PaginationInfo paginationInfo = new PaginationInfo(); - - if("".equals(boardMasterVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - boardMasterVO.setSearchSortCnd("nttId"); - boardMasterVO.setSearchSortOrd("desc"); - } - - - //전체 게시글 불러오기 - Map map = new HashMap(); - if("".equals(boardVO.getSeCmmnCdId())){ //전체 게시글 불러오기 - //if("".equals(boardVO.getBbsId())){ //전체 게시글 불러오기 - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - boardVO.setPageUnit(bmVO.getPageUnit()); - boardVO.setPageSize(bmVO.getPageSize()); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String temp = boardMasterVO.getUrl(); //Url 패턴에 Ajax 구문 삭제처리 - boardMasterVO.setUrl(temp.replace("Ajax", "")); - - //전체 게시글 불러오기 - map = bbsMngService.selectBoardArticlesWebUrl(boardMasterVO, null); - }else { - - System.out.println("boardVO.getSeCmmnCdId()"); - System.out.println(boardVO.getSeCmmnCdId()); - - //bmVO.setBbsId(boardVO.getBbsId()); - bmVO.setBbsId(boardVO.getSeCmmnCdId()); - boardVO.setBbsId(boardVO.getSeCmmnCdId()); - - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //메뉴별 게시글 불러오기 - map = bbsMngService.selectBoardArticlesWeb(boardVO, null); - } - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - - List resultList = (List)map.get("resultList"); - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - } - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("paginationInfo", paginationInfo); - - return "web/cop/bbs/NoticeListAjax"; - } - - /** - * (사용자)이벤트 게시판(포토형 탭게시판). - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - * - */ - @RequestMapping(value= { - "/web/cop/bbs/EventList.do" - } ) - public String selectEventListWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - boardMasterVO.setUrl(request.getRequestURI()); - //메뉴에 등록된 url에 등록된 게시판 조회 - if("/web/cop/bbs/EventList.do".equals(request.getRequestURI())) { //최초로딩 - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - model.addAttribute("boardMenuList", boardMenuList); - - if(0!=boardMenuList.size()) { - //BoardMasterVO totalBoardMasterVO1 = new BoardMasterVO(); - //totalBoardMasterVO1.setBbsNm("전체"); - //totalBoardMasterVO1.setBbsId(boardMenuList.get(0).getBbsId()); - //boardMenuList.add(0,totalBoardMasterVO1) ; - - BoardMasterVO totalBoardMasterVO2 = new BoardMasterVO(); - totalBoardMasterVO2.setBbsNm("종료된 이벤트"); - totalBoardMasterVO2.setBbsId(boardMenuList.get(0).getBbsId()); - boardMenuList.add(boardMenuList.size(),totalBoardMasterVO2) ; - - } - } - - //model.addAttribute("bbsId", ""); - model.addAttribute("detailPage", request.getRequestURI().replace("List", "Detail")); - - return "web/cop/bbs/EventList"; - } - - - /** - * (사용자)이벤트 게시판(포토형 탭게시판). - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - * - */ - @RequestMapping(value= { - "/web/cop/bbs/EventListAjax.do" - } ) - public String selectEventListAjaxWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO - ) throws Exception { - - - boardMasterVO.setUrl(request.getRequestURI()); - - - - BoardMasterVO bmVO = new BoardMasterVO(); - PaginationInfo paginationInfo = new PaginationInfo(); - //전체 게시글 불러오기 - Map map = new HashMap(); - - //종료 - if("End".equals(boardVO.getBbsId())) { - //}else if("End".equals(boardVO.getSeCmmnCdId())) { - //boardVO.setBbsId("BBSMSTR_000000000731"); - //bmVO.setBbsId(boardVO.getBbsId()); - - boardVO.setBbsId(boardVO.getSeCmmnCdId()); - bmVO.setBbsId(boardVO.getSeCmmnCdId()); - - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - /*map = bbsMngService.selectBoardArticlesWeb(boardVO, null);*/ - map = bbsMngService.selectBoardArticlesWebEventEnd(boardVO, null); - - }else if("Ing".equals(boardVO.getBbsId())) { - //bmVO.setBbsId(boardVO.getBbsId()); - boardVO.setBbsId(boardVO.getSeCmmnCdId()); - bmVO.setBbsId(boardVO.getSeCmmnCdId()); - - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - map = bbsMngService.selectBoardArticlesWebEvent(boardVO, null); - - }else { //전체 - //if("".equals(boardVO.getBbsId())){ //전체 게시글 불러오기 - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - boardVO.setPageUnit(bmVO.getPageUnit()); - boardVO.setPageSize(bmVO.getPageSize()); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String temp = boardMasterVO.getUrl(); //Url 패턴에 Ajax 구문 삭제처리 - boardMasterVO.setUrl(temp.replace("Ajax", "")); - /*map = bbsMngService.selectBoardArticlesWebUrl(boardMasterVO, null);*/ - map = bbsMngService.selectBoardArticlesWebUrlEventAll(boardMasterVO, null); - - } - - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - List resultList = (List)map.get("resultList"); - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - - if(bvo.getAtchFileCnt() > 0) { - FileVO fileVO = new FileVO(); - fileVO.setAtchFileId(bvo.getAtchFileId()); - List fileList = fileService.selectFileInfs(fileVO); - bvo.setFileList(fileList); - } - } - - if (("BBST05").equals(bmVO.getBbsTyCode())){ //사진게시판 8개씩 9개조회후 9개면 더보기 - if(boardMasterVO.getPageUnit() != 9) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - boardVO.setRecordCountPerPage(9); //리스트 수 - boardVO.setFirstIndex( (boardVO.getPageIndex()-1)*9); //offset - paginationInfo.setRecordCountPerPage(boardVO.getRecordCountPerPage()); //웹 접근성 획득 후 롤백 - } - - if("BBST05".equals(bmVO.getBbsTyCode())){ - boardVO.setSearchSortCnd("FRST_REGIST_PNTTM"); - boardVO.setSearchSortOrd("desc"); - } - - //게시판 마스터 옵션 정보 - BoardMasterVO searchVO = new BoardMasterVO(); - searchVO.setBbsId(boardVO.getBbsId()); - BoardMasterVO bbsMasterInfo = bbsAttrbService.selectBBSMasterInf(searchVO); - - model.addAttribute("bbsMasterInfo", bbsMasterInfo); - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", totCnt); - model.addAttribute("paginationInfo", paginationInfo); - return "web/cop/bbs/EventListAjax"; - - - //model.addAttribute("detailPage", request.getRequestURI().replace("List", "Detail")); - - //return "web/cop/bbs/EventList"; - } - - /** - * (사용자)게시물에 대한 상세 정보를 조회한다. - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= { - "/web/cop/bbs/EventDetail.do" - } ) - public String selectBoardEventDetailWeb(HttpServletRequest request, @ModelAttribute("searchVO") BoardVO boardVO, - BoardMasterVO masterVO, - ModelMap model, - @RequestParam Map commandMap, - RedirectAttributes redirectAttributes) throws Exception { - - - //XSS 태그 필터링 처리 - boardVO.setBbsId(unscript(boardVO.getBbsId())); - boardVO.setSeCmmnCdId(unscript(boardVO.getSeCmmnCdId())); - boardVO.setFrstRegisterId(unscript(boardVO.getFrstRegisterId())); - boardVO.setSearchBgnDe(unscript(boardVO.getSearchBgnDe())); - boardVO.setSearchEndDe(unscript(boardVO.getSearchEndDe())); - boardVO.setSearchSortCnd(unscript(boardVO.getSearchSortCnd())); - boardVO.setSearchSortOrd(unscript(boardVO.getSearchSortOrd())); - boardVO.setSearchCnd(unscript(boardVO.getSearchCnd())); - boardVO.setSearchWrd(unscript(boardVO.getSearchWrd())); - - - BoardMasterVO bmVO = new BoardMasterVO(); - if("".equals(boardVO.getBbsId())) { //검색에서 조회시 nttid로 마스터 조회 - bmVO = bbsAttrbService.selectBbsIdByNttId(boardVO); - if (bmVO == null) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/web/main/mainPage.do"; - } - boardVO.setBbsId(bmVO.getBbsId()); - }else { - bmVO.setBbsId(boardVO.getBbsId()); - } - - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - if("/web/cop/bbs/NewsDetail.do".equals(request.getRequestURI()) || "/web/contentBbsDetail.do".equals(request.getRequestURI())) { //원자력소식 수정삭제등록 없음. - bmVO.setWebChgYn("N"); - model.addAttribute("masterVO", masterVO); - } - - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - if (bmVO == null || ("N").equals(bmVO.getUseAt())) { - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.imposbl")); - return "redirect:/web/main/mainPage.do"; - } - - {//묻고답하기 권한체크 - boolean passChk = false; - if("9530000".equals(bmVO.getMenuNo())) { - LoginVO loginVO = new LoginVO(); - if(!"anonymousUser".equals(EgovUserDetailsHelper.getAuthenticatedUser() )) { //최고 관리자면 바로수정 - loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - if("ROLE_ADMIN".equals(loginVO.getAuthority())){ - passChk = true; - }else { //일반관리자 - bmVO.setBbsMngId(loginVO.getId()); - if( bbsAttrbService.selectBBSMngInfCnt(bmVO) > 0 ) { //게시판 관리자 조회 - passChk = true; - } - } - }else{//방문자 세션있는방문자 - UserVO userVO = new UserVO(); - if(request.getSession().getAttribute("userVO") != null) { - userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - if(userVO.getMblDn().equals(bdVO.getMblDn())) { - passChk = true; - } - } - } - if(!"T".equals(bdVO.getSecretAt())){ - if(!passChk){ - if("".equals(boardVO.getPassword())) { - redirectAttributes.addFlashAttribute("message", "패스워드를 넣어주세요"); - return "redirect:/web/cop/bbs/QnaList.do"; - }else { - if(!damoDec(bdVO.getPassword(), request).equals(boardVO.getPassword())) { - redirectAttributes.addFlashAttribute("message", "패스워드가 맞지 않습니다."); - if("9530000".equals(bmVO.getMenuNo())) { - return "redirect:/web/cop/bbs/QnaList.do"; - }else { - return "redirect:/web/cop/bbsWeb/selectBoardList.do?bbsId="+boardVO.getBbsId(); - } - } - } - } - } - - } - } - - // 조회수 증가 여부 지정 - boardVO.setPlusCount(true); - bbsMngService.updateBoardArticleInqireCo(boardVO); - - boardVO.setMblDn(bdVO.getMblDn()); - - // 위/아래 게시글 번호, 제목 조회 - EgovMap upDownNttid = bbsMngService.getUpDownNttIdNSj(boardVO); - - //게시판 마스터 옵션 정보 - BoardMasterVO searchVO = new BoardMasterVO(); - searchVO.setBbsId(boardVO.getBbsId()); - BoardMasterVO resultBbsMsInfo = bbsAttrbService.selectBBSMasterInf(searchVO); - - //답변글 리스트 - if(bdVO.getAnswerCnt() > 0) { - List answerList = bbsMngService.selectBoardAnswerList(bdVO); - model.addAttribute("answerList", answerList); - } - - System.out.println("boardVO.toString()"); - System.out.println("getNtceBgnde"); - System.out.println(bdVO.getNiceFailUrl()); - System.out.println(bdVO.getNiceSuccUrl()); - - if ("1".equals(bdVO.getNiceFailUrl()) //s-date - && "1".equals(bdVO.getNiceSuccUrl()) //e-date - ) { - bmVO.setBbsNm("진행전"); - }else if ("-1".equals(bdVO.getNiceFailUrl()) //s-date - && "-1".equals(bdVO.getNiceSuccUrl()) //e-date - ) { - bmVO.setBbsNm("종료"); - }else { - bmVO.setBbsNm("진행중"); - } - - - model.addAttribute("nextNttIdNSj", upDownNttid.get("nextNttIdNSj")); - model.addAttribute("prevNttIdNSj", upDownNttid.get("prevNttIdNSj")); - model.addAttribute("result", bdVO); - model.addAttribute("brdMstrVO", bmVO); - model.addAttribute("resultBbsMsInfo", resultBbsMsInfo); - - CommentVO commentVO = new CommentVO(); - commentVO.setBbsId(boardVO.getBbsId()); //게시판ID - commentVO.setNttId(boardVO.getNttId()); //게시글ID - - //댓글 조회 - List resultList = egovArticleCommentService.selectArticleCommentListAll(commentVO); - int totCnt = resultList.size(); - - model.addAttribute("resultCnt", totCnt); - model.addAttribute("resultList", resultList); - - if("BBST05".equals(bmVO.getBbsTyCode())){ //이벤트 포토게시판 - if(bdVO.getAtchFileCnt() > 0 ) { - FileVO fileVO = new FileVO(); - fileVO.setAtchFileId(bdVO.getAtchFileId()); - List result = fileService.selectImageFileList(fileVO); - model.addAttribute("fileList", result); - } - - - - - - - - //masterVO.setBbsNm(bbsNm); - - - return "web/cop/bbs/EgovNoticePhotoInqire"; - } - - if("Y".equals(masterVO.getTabBbsId())){ - model.addAttribute("PubDetail", true); - } - - return "web/cop/bbs/EgovNoticeInqire"; - } - - /** - * - * URL - * /web/cop/bbs/TermsList.do (공지사항) - */ - @RequestMapping(value= {"web/cop/bbs/TermsList.do" - , "/web/cop/bbs/TermsListAjax.do" - }) - public String selectNoticeListWeb(HttpServletRequest request, - @ModelAttribute("searchVO") TermsVO termsVO, ModelMap model , - RedirectAttributes redirectAttributes) throws Exception { - - String menuNm = termsVO.getMenuNm(); - String termsMstNo = termsVO.getTermsMastNo(); - -// String effectDate_02 = ""; -// String effectDate_03 = ""; - - //초기 화면 로딩시 값이 Null 인경우 이용약관, 2024년 도 정보 불러오도록 셋팅 - if(menuNm == null) { - menuNm = "02"; - } - if(termsMstNo == null) { - termsMstNo = "2023"; - } - -// if(termsMstNo.equals("2024")) { -// effectDate_02 = " v2.0"; -// effectDate_03 = " v2.0"; -// }else if(termsMstNo.equals("2023")) { -// effectDate_02 = "(2023.04.26~2024.10.31)"; -// effectDate_03 = "(2023.12.15~2024.10.31)"; -// }else if(termsMstNo.equals("2022")) { -// effectDate_02 = "(2022.08.01~2023.04.25)"; -// effectDate_03 = "(2022.08.01~2023.12.14)"; -// } - -// model.addAttribute("effectDate_02", effectDate_02); //이용약관 개정 일자 표시 -// model.addAttribute("effectDate_03", effectDate_03); //개인정보처리방침 개정 일자 표시 - model.addAttribute("termsMstNo", termsMstNo); //요청 버전 값(2024, 2023, 2022 등) - - //상세 하단 리스트 - if(request.getRequestURI().contains("ListAjax.do")) { - - if(menuNm.equals("02")) { - String jspName = "TermsListAgreement_" + termsMstNo + "_Ajax"; - return "web/cop/bbs/"+jspName; - - }else if(menuNm.equals("03")) { - String jspName = "TermsListPrivate_" + termsMstNo + "_Ajax"; - return "web/cop/bbs/"+jspName; - } - - // 공통 - List resultList = new ArrayList(); - - /* - * 이용약관 및 개인정보 처리방침 화면은 HTML 화면으로 전환되어 디비 조회 코드는 주석 처리함 - * 2024 10 25 우영두 수정 - * */ - -// // 이용약관, 개인정보보호방침 이전버전 List -// TermsVO termsVO2 = new TermsVO(); -// termsVO2.setFirstIndex(0); -// termsVO2.setRecordCountPerPage(20); -// termsVO2.setSearchDiv(termsVO.getMenuNm()); -// termsVO2.setSearchUseYn("N"); -// termsVO2.setSearchSortCnd("effectDate"); -// termsVO2.setSearchSortOrd("desc"); -// List termsMastList = egovSiteManagerService.selectTermsMastMngBeforeList(termsVO2); -// model.addAttribute("termsMastList", termsMastList); -// -// // NEW -// // 이용약관, 개인정보보호방침 최신버전 List -// TermsVO termsVO3 = new TermsVO(); -// termsVO3.setFirstIndex(0); -// termsVO3.setRecordCountPerPage(1); -// termsVO3.setSearchDiv(termsVO.getMenuNm()); -// termsVO3.setSearchUseYn("Y"); -// termsVO3.setSearchSortCnd("effectDate"); -// termsVO3.setSearchSortOrd("desc"); -// List termsMastList2 = egovSiteManagerService.selectTermsMastMngList(termsVO3); -// if (termsMastList2.size() > 0) { -// TermsVO termsVO4 = new TermsVO(); -// termsVO4.setFirstIndex(0); -// termsVO4.setRecordCountPerPage(20); -// termsVO4.setTermsMastNo(termsMastList2.get(0).getTermsMastNo()); -// termsVO4.setSearchUseYn("Y"); -// termsVO4.setSearchSortCnd("sort"); -// termsVO4.setSearchSortOrd("ASC"); -// resultList = egovSiteManagerService.selectTermsSubMngList(termsVO4); -// } - - // 불법스팸방지안내 - if (termsVO.getMenuNm().equals("04")) { - - if("2023".equals(termsMstNo)) { - termsVO.setSearchSortCnd("TERMS_ID"); - termsVO.setSearchSortOrd("ASC"); - resultList = egovSiteManagerService.selectTermsMenu(termsVO); - model.addAttribute("resultList", resultList); - } - - String jspName = "TermsListSpam_" + termsMstNo + "_Ajax"; - return "web/cop/bbs/"+jspName; - - } - } -// else { -// String effectDate_02 = ""; -// String effectDate_03 = ""; -// TermsVO termsVO7 = new TermsVO(); -// termsVO7.setFirstIndex(0); -// termsVO7.setRecordCountPerPage(2); -// termsVO7.setSearchUseYn("Y"); -// termsVO7.setSearchSortCnd("effectDate"); -// termsVO7.setSearchSortOrd("desc"); -// List termsMastList7 = egovSiteManagerService.selectTermsMastMngList(termsVO7); -// for(TermsVO item : termsMastList7) { -// if (item.getTermsDivCode().equals("02")) { -// effectDate_02 = "(" + item.getEffectDate() + ")"; -// } -// if (item.getTermsDivCode().equals("03")) { -// -// effectDate_03 = "(" + item.getEffectDate() + ")"; -// } -// } - - -// model.addAttribute("effectDate_02", effectDate_02); -// model.addAttribute("effectDate_03", effectDate_03); -// } - - return "web/cop/bbs/TermsList"; - } - - - - @RequestMapping(value= {"/web/cop/bbs/TermsHistPopAjax.do"}) - public String TermsHistPop(HttpServletRequest request, - @ModelAttribute("searchVO") TermsVO termsVO, ModelMap model) throws Exception { - - List resultList = new ArrayList(); - - termsVO.setSearchSortCnd("TERMS_ID"); - termsVO.setSearchSortOrd("ASC"); - resultList = egovSiteManagerService.selectTermsMenu(termsVO); - - // New - /* - termsVO.setSearchSortCnd("sort"); - termsVO.setSearchSortOrd("ASC"); - resultList = egovSiteManagerService.selectTermsSubMngList(termsVO); - */ - - model.addAttribute("resultList", resultList); - - return "web/cop/bbs/TermsHistPopAjax"; - } - - // 이용약관 메일 발송 테스트 - @RequestMapping(value = "/web/cop/bbs/TermsHistSendEmailAjax.do") - public ModelAndView ignoreIpCntAjax( - @ModelAttribute("searchVO") TermsVO termsVO - , HttpServletRequest request) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - // 이용약관 회원 전체발송 - mjonNoticeSendUtil.userAllTermsEmailSend(); - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - - /** - * (사용자)사전정보공표. - * - * @param boardVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/cop/bbs/PubOperList.do" - ,"/web/cop/bbs/PubOperMainAjax.do" - ,"/web/cop/bbs/PubOperListAjax.do" - ,"/web/cop/bbs/PubOperSubListAjax.do" - ,"/web/cop/bbs/PubOperSubDetailListAjax.do" - }) - public String selectPubOperList(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - //메뉴에 등록된 url 조회 - boardMasterVO.setUrl(request.getRequestURI()); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - - if("/web/cop/bbs/PubOperMainAjax.do".equals(request.getRequestURI())){ //사전정보공표 최초 로딩 - BoardMasterVO mainMasterVO = new BoardMasterVO(); - mainMasterVO.setFirstIndex(0); - mainMasterVO.setLastIndex(20); - mainMasterVO.setRecordCountPerPage(30); - - mainMasterVO.setBbsTyCode("BBST07"); - mainMasterVO.setUseAt("Y"); //사용만 - - mainMasterVO.setSearchSortCnd("BBS_SORT"); - mainMasterVO.setSearchSortOrd("ASC"); - mainMasterVO.setSeCmmnCdId("01"); //기관운영관련정보 - Map map01 = bbsAttrbService.selectBBSMasterInfs(mainMasterVO); - model.addAttribute("resultList01", map01.get("resultList")); - - mainMasterVO.setSeCmmnCdId("02"); //주요사업정보 - Map map02 = bbsAttrbService.selectBBSMasterInfs(mainMasterVO); - model.addAttribute("resultList01", map01.get("resultList")); - model.addAttribute("resultList02", map02.get("resultList")); - return "web/cop/bbs/PubOperMainAjax"; - } - - if("/web/cop/bbs/PubOperListAjax.do".equals(request.getRequestURI())){ //사전정보공표 리스트 - BoardMasterVO mainMasterVO = new BoardMasterVO(); - mainMasterVO.setFirstIndex(0); - mainMasterVO.setLastIndex(20); - mainMasterVO.setRecordCountPerPage(30); - mainMasterVO.setBbsTyCode("BBST07"); - mainMasterVO.setUseAt("Y"); //사용만 - Map mapMain = bbsAttrbService.selectBBSMasterInfs(mainMasterVO); - - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if(bmVO != null) { - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - } - - PaginationInfo paginationInfo = new PaginationInfo(); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 게시글 불러오기 - Map map = bbsMngService.selectBoardArticlesWeb(boardVO, null); - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - List resultList = (List)map.get("resultList"); - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - } - - //게시판 마스터 옵션 정보 - BoardMasterVO searchVO = new BoardMasterVO(); - searchVO.setBbsId(boardVO.getBbsId()); - BoardMasterVO bbsMasterInfo = bbsAttrbService.selectBBSMasterInf(searchVO); - - List mapMainList = new ArrayList(); - mapMainList = (List)mapMain.get("resultList") ; - for(BoardMasterVO tempVO : mapMainList ) { - if(tempVO.getBbsId().equals(bbsMasterInfo.getBbsId())) { - tempVO.setSelectedFlag(true); - } - } - model.addAttribute("resultMainList", mapMain.get("resultList")); - - model.addAttribute("bbsMasterInfo", bbsMasterInfo); - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("paginationInfo", paginationInfo); - return "web/cop/bbs/PubOperListAjax"; - } - - if("/web/cop/bbs/PubOperSubListAjax.do".equals(request.getRequestURI())){ //사전정보공표 바로가기 - BoardMasterVO mainMasterVO = new BoardMasterVO(); - mainMasterVO.setFirstIndex(0); - mainMasterVO.setLastIndex(20); - mainMasterVO.setRecordCountPerPage(30); - mainMasterVO.setBbsTyCode("BBST07"); - mainMasterVO.setUseAt("Y"); //사용만 - Map mapMain = bbsAttrbService.selectBBSMasterInfs(mainMasterVO); - - - BoardMasterVO bmVO = new BoardMasterVO(); - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if(bmVO != null) { - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - } - - PaginationInfo paginationInfo = new PaginationInfo(); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 게시글 불러오기 - Map map = bbsMngService.selectBoardArticlesWeb(boardVO, null); - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - List resultList = (List)map.get("resultList"); - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - } - - //게시판 마스터 옵션 정보 - BoardMasterVO searchVO = new BoardMasterVO(); - searchVO.setBbsId(boardVO.getBbsId()); - BoardMasterVO bbsMasterInfo = bbsAttrbService.selectBBSMasterInf(searchVO); - - List mapMainList = new ArrayList(); - mapMainList = (List)mapMain.get("resultList") ; - for(BoardMasterVO tempVO : mapMainList ) { - if(tempVO.getBbsId().equals(boardMasterVO.getTabBbsId())) { //탭에서 가져온 상단 tabBbsId - tempVO.setSelectedFlag(true); - } - } - model.addAttribute("resultMainList", mapMain.get("resultList")); - - model.addAttribute("bbsMasterInfo", bbsMasterInfo); - model.addAttribute("subBbsNm", bbsMasterInfo.getBbsNm()); - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("paginationInfo", paginationInfo); - //return "web/cop/bbs/PubOperListAjax"; - - BoardVO boardTabVO = bbsMngService.selectBbsTabIdByPubUrl(boardVO); - model.addAttribute("boardTabVO", boardTabVO); - return "web/cop/bbs/PubOperSubListAjax"; - } - - if("/web/cop/bbs/PubOperSubDetailListAjax.do".equals(request.getRequestURI())){ //사전정보공표 바로가기 - // 조회수 증가 여부 지정 - boardVO.setPlusCount(true); - bbsMngService.updateBoardArticleInqireCo(boardVO); - - // 위/아래 게시글 번호, 제목 조회 - EgovMap upDownNttid = bbsMngService.getUpDownNttIdNSj(boardVO); - - //게시판 마스터 옵션 정보 - BoardMasterVO searchVO = new BoardMasterVO(); - searchVO.setBbsId(boardVO.getBbsId()); - BoardMasterVO resultBbsMsInfo = bbsAttrbService.selectBBSMasterInf(searchVO); - - - BoardVO bdVO = bbsMngService.selectBoardArticleWeb(boardVO); - - model.addAttribute("nextNttIdNSj", upDownNttid.get("nextNttIdNSj")); - model.addAttribute("prevNttIdNSj", upDownNttid.get("prevNttIdNSj")); - model.addAttribute("brdMstrVO", resultBbsMsInfo); - model.addAttribute("result", bdVO); - return "web/cop/bbs/PubOperSubDetailListAjax"; - } - - if("Y".equals(boardVO.getPubDetail())){ - model.addAttribute("pubDetail", true); - return "web/cop/bbs/PubOperList"; - } - - if(null !=boardVO.getBbsId() && !"".equals(boardVO.getBbsId() )) { - return "web/cop/bbs/PubOperSubList"; - } - return "web/cop/bbs/PubOperList"; - } - - /** - * 시간을 LIST를 반환한다. - * @return List - * @throws - */ - @SuppressWarnings("unused") - private List getTimeHH() { - ArrayList listHH = new ArrayList(); - HashMap hmHHMM; - for (int i = 0; i <= 24; i++) { - String sHH = ""; - String strI = String.valueOf(i); - if (i < 10) { - sHH = "0" + strI; - } else { - sHH = strI; - } - - ComDefaultCodeVO codeVO = new ComDefaultCodeVO(); - codeVO.setCode(sHH); - codeVO.setCodeNm(sHH); - - listHH.add(codeVO); - } - - return listHH; - } - - /** - * 분을 LIST를 반환한다. - * @return List - * @throws - */ - @SuppressWarnings("unused") - private List getTimeMM() { - ArrayList listMM = new ArrayList(); - HashMap hmHHMM; - for (int i = 0; i <= 60; i++) { - - String sMM = ""; - String strI = String.valueOf(i); - if (i < 10) { - sMM = "0" + strI; - } else { - sMM = strI; - } - - ComDefaultCodeVO codeVO = new ComDefaultCodeVO(); - codeVO.setCode(sMM); - codeVO.setCodeNm(sMM); - - listMM.add(codeVO); - } - return listMM; - } - - - /** - * (사용자) 컨텐츠 게시판 통합 - * - * URL - * /web/cop/bbs/CntBbsListAjax (상단 검색부분 없는 리스트) - * /web/cop/bbs/CntBbs01ListAjax.do(상단 검색부분 있는 리스트) 01타입 - */ - @RequestMapping(value= {"/web/cop/bbs/CntBbsList.do" - , "/web/cop/bbs/CntBbsListAjax.do" - , "/web/cop/bbs/CntBbs01ListAjax.do" - }) - public String selectCntBbsListWeb(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - //메뉴에 등록된 url 조회 - boardMasterVO.setUrl("/web/content.do?proFn?="+boardMasterVO.getMenuNm()); - List boardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - List viewBoardMenuList = bbsAttrbService.selectBBSMenuByUrl(boardMasterVO); - for(BoardMasterVO tempVO : viewBoardMenuList) { - if("N".equals(tempVO.getViewsYn())){; - boardMasterVO.setViewsYn("N"); - break ; - } - } - - if(0!=boardMenuList.size()) { //원자력 소식은 전체 매뉴 없음. - if(!"9420000".equals(((BoardMasterVO)boardMenuList.get(0)).getMenuNo())) { - BoardMasterVO totalBoardMasterVO = new BoardMasterVO(); - totalBoardMasterVO.setBbsNm("전체"); - boardMenuList.add(0,totalBoardMasterVO) ; - } - } - - if(request.getRequestURI().contains("List.do")){ //최초 로딩 매뉴이름가져오기 - MenuManageVO tempMenuManageVO = new MenuManageVO(); - tempMenuManageVO.setUrl(request.getRequestURI()); - MenuManageVO menuManageVO = menuManageService.selectMenuManageUrl(tempMenuManageVO); - model.addAttribute("menuManageVO", menuManageVO); - } - - if(request.getRequestURI().contains("ListAjax.do") //하단 리스트 - ) { //상세 하단 리스트 - BoardMasterVO bmVO = new BoardMasterVO(); - PaginationInfo paginationInfo = new PaginationInfo(); - //전체 게시글 불러오기 - Map map = new HashMap(); - if("".equals(boardVO.getBbsId())){ //전체 게시글 불러오기 - boardVO.setPageUnit(bmVO.getPageUnit()); - boardVO.setPageSize(bmVO.getPageSize()); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardMasterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardMasterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardMasterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String temp = boardMasterVO.getUrl(); //Url 패턴에 Ajax 구문 삭제처리 - boardMasterVO.setUrl(temp.replace("Ajax", "")); - //전체 게시글 불러오기 - map = bbsMngService.selectBoardArticlesWebUrl(boardMasterVO, null); - }else { - bmVO.setBbsId(boardVO.getBbsId()); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - //메뉴별 게시글 불러오기 - map = bbsMngService.selectBoardArticlesWeb(boardVO, null); - } - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - List resultList = (List)map.get("resultList"); - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - } - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("paginationInfo", paginationInfo); - - - if(request.getRequestURI().contains("CntBbs01ListAjax")){ //01타입 - model.addAttribute("boardVO", boardVO); - return "web/cop/bbs/CntBbs01ListAjax"; - } - return "web/cop/bbs/CntBbsListAjax"; - } - model.addAttribute("boardMenuList", boardMenuList); - return "web/cop/bbs/CntBbsList"; - } - public String getDateDay(String date, String dateType) throws Exception { String day = "" ; @@ -5138,4 +1240,106 @@ public class EgovBBSManageController { return posblAtchFileFlag; } + /** + * 분을 LIST를 반환한다. + * @return List + * @throws + */ + @SuppressWarnings("unused") + private List getTimeMM() { + ArrayList listMM = new ArrayList(); + HashMap hmHHMM; + for (int i = 0; i <= 60; i++) { + + String sMM = ""; + String strI = String.valueOf(i); + if (i < 10) { + sMM = "0" + strI; + } else { + sMM = strI; + } + + ComDefaultCodeVO codeVO = new ComDefaultCodeVO(); + codeVO.setCode(sMM); + codeVO.setCodeNm(sMM); + + listMM.add(codeVO); + } + return listMM; + } + + /** + * 시간을 LIST를 반환한다. + * @return List + * @throws + */ + @SuppressWarnings("unused") + private List getTimeHH() { + ArrayList listHH = new ArrayList(); + HashMap hmHHMM; + for (int i = 0; i <= 24; i++) { + String sHH = ""; + String strI = String.valueOf(i); + if (i < 10) { + sHH = "0" + strI; + } else { + sHH = strI; + } + + ComDefaultCodeVO codeVO = new ComDefaultCodeVO(); + codeVO.setCode(sHH); + codeVO.setCodeNm(sHH); + + listHH.add(codeVO); + } + + return listHH; + } + + //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} + private String[][] bbsExcelValue ={ + {"0" ,"번호" , "1" , "" }, + {"1", "제목" , "글쓰기 테스트" , "[코드]"}, + {"2", "첨부파일유무" , "유", ""}, + {"3", "공개여부" , "공개", ""}, + {"4", "작성자" , "홍길동", "[코드]"}, + {"5", "조회수" , "2", ""}, + {"6", "작성일" , "2019-10-29", ""} + } ; + /** + * XSS 방지 처리. + * + * @param data + * @return + */ + protected String unscript(String data) { + if (data == null || data.trim().equals("")) { + return ""; + } + + String ret = data; + + ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script"); + ret = ret.replaceAll("", ">"); + ret = ret.replaceAll("alert", ""); + //ret = ret.replaceAll("iframe", ""); + + return ret; + } + } diff --git a/src/main/java/itn/let/cop/cmt/web/EgovArticleCommentController.java b/src/main/java/itn/let/cop/cmt/web/EgovArticleCommentController.java index 0d2779a..9238a6f 100644 --- a/src/main/java/itn/let/cop/cmt/web/EgovArticleCommentController.java +++ b/src/main/java/itn/let/cop/cmt/web/EgovArticleCommentController.java @@ -1,7 +1,6 @@ package itn.let.cop.cmt.web; import java.util.HashMap; -import java.util.List; import java.util.Map; import javax.annotation.Resource; @@ -12,29 +11,21 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springmodules.validation.commons.DefaultBeanValidator; -import egovframework.rte.fdl.property.EgovPropertyService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; -import itn.com.cmm.UserVO; import itn.com.cmm.util.StringUtil; -import itn.com.cmm.util.WebUtil; -import itn.com.uss.ion.cnf.service.ProhibitMngService; import itn.let.cop.bbs.service.Board; import itn.let.cop.bbs.service.BoardVO; -import itn.let.cop.bbs.service.EgovBBSAttributeManageService; import itn.let.cop.cmt.service.Comment; import itn.let.cop.cmt.service.CommentVO; import itn.let.cop.cmt.service.EgovArticleCommentService; -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.SiteManagerVO; @Controller public class EgovArticleCommentController { @@ -42,27 +33,12 @@ public class EgovArticleCommentController { @Resource(name = "EgovArticleCommentService") protected EgovArticleCommentService egovArticleCommentService; - @Resource(name="propertiesService") - protected EgovPropertyService propertyService; - @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; @Autowired private DefaultBeanValidator beanValidator; - @Resource(name = "egovSiteManagerService") - private EgovSiteManagerService egovSiteManagerService; - - @Resource(name = "EgovBBSAttributeManageService") - private EgovBBSAttributeManageService bbsAttrbService; - - /** scriptMngService 금지어 */ - @Resource(name = "prohibitMngService") - private ProhibitMngService prohibitMngService; - - //protected Logger log = Logger.getLogger(this.getClass()); - /** * 댓글관리 목록 조회를 제공한다. * @@ -94,11 +70,6 @@ public class EgovArticleCommentController { return "forward:/cop/cmt/updateArticleCommentView.do"; } -// model.addAttribute("sessionUniqId", userVO.get()); -// commentVO.setWrterNm(user.getName()); - -// commentVO.setSubPageUnit(propertyService.getInt("pageUnit")); -// commentVO.setSubPageSize(propertyService.getInt("pageSize")); PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(commentVO.getSubPageIndex()); @@ -228,9 +199,6 @@ public class EgovArticleCommentController { commentVO.setWrterNm(user.getName()); -// commentVO.setSubPageUnit(propertyService.getInt("pageUnit")); -// commentVO.setSubPageSize(propertyService.getInt("pageSize")); - PaginationInfo paginationInfo = new PaginationInfo(); paginationInfo.setCurrentPageNo(commentVO.getSubPageIndex()); paginationInfo.setRecordCountPerPage(commentVO.getSubPageUnit()); @@ -303,364 +271,5 @@ public class EgovArticleCommentController { redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); return "redirect:/cop/bbs/selectBoardArticle.do"; } - - // @@@@@@@@@@@@@@@@@@@@@@@@@@@ 사용자 @@@@@@@@@@@@@@@@@@@@ - - /** - * (사용자)댓글관리 목록 조회를 제공한다. - * - * @param boardVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/cmt/selectArticleCommentList.do") - public String selectArticleCommentListWeb(HttpServletRequest request, @ModelAttribute("searchVO") CommentVO commentVO, ModelMap model) throws Exception { - CommentVO articleCommentVO = new CommentVO(); - - // 수정 처리된 후 댓글 등록 화면으로 처리되기 위한 구현 - if (commentVO.isModified()) { - commentVO.setCommentNo(""); - commentVO.setCommentCn(""); - } - - // 수정을 위한 처리 - if (!commentVO.getCommentNo().equals("")) { - return "forward:/web/cop/cmt/updateArticleCommentView.do"; - } - - List resultList = egovArticleCommentService.selectArticleCommentListAll(commentVO); - int totCnt = resultList.size(); - - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", totCnt); - model.addAttribute("type", "body"); // 댓글 페이지 body import용 - - model.addAttribute("userFlag", "Y"); // 사용자 화면 유무 - model.addAttribute("userPath", "/web"); // 사용자 화면 경로 - - model.addAttribute("articleCommentVO", articleCommentVO); // validator 용도 - - commentVO.setCommentCn(""); // 등록 후 댓글 내용 처리 - - return "cop/cmt/EgovArticleCommentListWeb"; - } - - - /** - * (사용자)댓글을 등록한다. - * - * @param commentVO - * @param comment - * @param bindingResult - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/cmt/insertArticleComment.do") - public String insertArticleCommentWeb(HttpServletRequest request, @ModelAttribute("searchVO") CommentVO commentVO, @ModelAttribute("comment") Comment comment, - BindingResult bindingResult, ModelMap model, @RequestParam HashMap map, RedirectAttributes redirectAttributes) throws Exception { - - UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if (userVO == null) { // 인증 필요 - BoardVO boardVO = new BoardVO(); - boardVO.setPageIndex(commentVO.getPageIndex()); - boardVO.setSearchCnd(commentVO.getSearchCnd()); - boardVO.setSearchWrd(commentVO.getSearchWrd()); - boardVO.setBbsId(commentVO.getBbsId()); - boardVO.setNttId(commentVO.getNttId()); - request.getSession().setAttribute("searchVO", boardVO); - request.getSession().setAttribute("url", "/web/cop/bbsWeb/selectBoardArticle.do"); - return "web/cop/selfauth/authentication"; - } - - beanValidator.validate(comment, bindingResult); - if (bindingResult.hasErrors()) { - return "forward:/web/cop/bbsWeb/selectBoardArticle.do"; - } - - comment.setWrterNm(userVO.getName()); - comment.setMblDn(userVO.getMblDn()); - - egovArticleCommentService.insertArticleComment(comment); - - commentVO.setCommentCn(""); - commentVO.setCommentNo(""); - - redirectAttributes.addAttribute("pageIndex", commentVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", commentVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", commentVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", commentVO.getBbsId()); - redirectAttributes.addAttribute("nttId", commentVO.getNttId()); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); - return "redirect:/web/cop/bbsWeb/selectBoardArticle.do"; - } - - - /** - * (사용자)댓글을 삭제한다. - * - * @param commentVO - * @param comment - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/cmt/deleteArticleComment.do") - public String deleteArticleCommentWeb(HttpServletRequest request, @ModelAttribute("searchVO") CommentVO commentVO, @ModelAttribute("comment") Comment comment, - ModelMap model, @RequestParam HashMap map, RedirectAttributes redirectAttributes) throws Exception { - - UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if (userVO == null) { // 인증 필요 - BoardVO boardVO = new BoardVO(); - boardVO.setPageIndex(commentVO.getPageIndex()); - boardVO.setSearchCnd(commentVO.getSearchCnd()); - boardVO.setSearchWrd(commentVO.getSearchWrd()); - boardVO.setBbsId(commentVO.getBbsId()); - boardVO.setNttId(commentVO.getNttId()); - request.getSession().setAttribute("searchVO", boardVO); - request.getSession().setAttribute("url", "/web/cop/bbsWeb/selectBoardArticle.do"); - return "web/cop/selfauth/authentication"; - } - - redirectAttributes.addAttribute("pageIndex", commentVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", commentVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", commentVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", commentVO.getBbsId()); - redirectAttributes.addAttribute("nttId", commentVO.getNttId()); - - // 본인 댓글 확인 - CommentVO articleCommentVO = egovArticleCommentService.selectArticleCommentDetail(commentVO); - - if (!articleCommentVO.getMblDn().equals(userVO.getMblDn())){ - redirectAttributes.addFlashAttribute("message", "본인 댓글만 삭제할 수 있습니다."); - return "redirect:/web/cop/bbsWeb/selectBoardArticle.do"; - } else { - egovArticleCommentService.deleteArticleComment(commentVO); - } - - commentVO.setCommentCn(""); - commentVO.setCommentNo(""); - - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); - return "redirect:/web/cop/bbsWeb/selectBoardArticle.do"; - } - - - /** - * (사용자)댓글 수정 페이지로 이동한다. - * - * @param commentVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/cmt/updateArticleCommentView.do") - public String updateArticleCommentViewWeb(HttpServletRequest request, @ModelAttribute("searchVO") CommentVO commentVO, ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - - UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if (userVO == null) { // 인증 필요 - BoardVO boardVO = new BoardVO(); - boardVO.setPageIndex(commentVO.getPageIndex()); - boardVO.setSearchCnd(commentVO.getSearchCnd()); - boardVO.setSearchWrd(commentVO.getSearchWrd()); - boardVO.setBbsId(commentVO.getBbsId()); - boardVO.setNttId(commentVO.getNttId()); - request.getSession().setAttribute("searchVO", boardVO); - request.getSession().setAttribute("url", "/web/cop/bbsWeb/selectBoardArticle.do"); - return "web/cop/selfauth/authentication"; - } - - // 본인 댓글 확인 - CommentVO articleCommentVO = egovArticleCommentService.selectArticleCommentDetail(commentVO); - - if (!articleCommentVO.getMblDn().equals(userVO.getMblDn())){ - model.addAttribute("commentMessage", "본인 댓글만 수정할 수 있습니다."); - articleCommentVO = new CommentVO(); - commentVO.setCommentNo(""); - commentVO.setCommentCn(""); - } - articleCommentVO.setMblDn(""); // 사용자 인증키 화면단 전송 제거 - - List resultList = egovArticleCommentService.selectArticleCommentListAll(commentVO); - int totCnt = resultList.size(); - - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", totCnt); - model.addAttribute("type", "body"); // body import - - model.addAttribute("userFlag", "Y"); // 사용자 화면 유무 - model.addAttribute("userPath", "/web"); // 사용자 화면 경로 - - model.addAttribute("articleCommentVO", articleCommentVO); - - return "cop/cmt/EgovArticleCommentListWeb"; - } - - - /** - * (사용자)댓글을 수정한다. - * - * @param commentVO - * @param comment - * @param bindingResult - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/cmt/updateArticleComment.do") - public String updateArticleCommentWeb(HttpServletRequest request, @ModelAttribute("searchVO") CommentVO commentVO, @ModelAttribute("comment") Comment comment, - BindingResult bindingResult, ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - - UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if (userVO == null) { // 인증 필요 - BoardVO boardVO = new BoardVO(); - boardVO.setPageIndex(commentVO.getPageIndex()); - boardVO.setSearchCnd(commentVO.getSearchCnd()); - boardVO.setSearchWrd(commentVO.getSearchWrd()); - boardVO.setBbsId(commentVO.getBbsId()); - boardVO.setNttId(commentVO.getNttId()); - request.getSession().setAttribute("searchVO", boardVO); - request.getSession().setAttribute("url", "/web/cop/bbsWeb/selectBoardArticle.do"); - return "web/cop/selfauth/authentication"; - } - - redirectAttributes.addAttribute("pageIndex", commentVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", commentVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", commentVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", commentVO.getBbsId()); - redirectAttributes.addAttribute("nttId", commentVO.getNttId()); - - // 본인 댓글 확인 - CommentVO articleCommentVO = egovArticleCommentService.selectArticleCommentDetail(commentVO); - - if (!articleCommentVO.getMblDn().equals(userVO.getMblDn())){ - redirectAttributes.addFlashAttribute("message", "본인 댓글만 수정할 수 있습니다."); - - commentVO.setCommentCn(""); - commentVO.setCommentNo(""); - - return "redirect:/web/cop/bbsWeb/selectBoardArticle.do"; - } else { - beanValidator.validate(comment, bindingResult); - if (bindingResult.hasErrors()) { - return "forward:/web/cop/bbsWeb/selectBoardArticle.do"; - } - - egovArticleCommentService.updateArticleComment(comment); - commentVO.setCommentCn(""); - commentVO.setCommentNo(""); - } - - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); - return "redirect:/web/cop/bbsWeb/selectBoardArticle.do"; - } - - /** - * (사용자)댓글관리 목록 조회를 제공한다. - * - * @param boardVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/{siteId}/web/cop/cmt/selectArticleCommentList.do") - public String siteSelectArticleCommentListWeb(@PathVariable("siteId") String siteId , HttpServletRequest request, @ModelAttribute("searchVO") CommentVO commentVO, ModelMap model) throws Exception { - CommentVO articleCommentVO = new CommentVO(); - - // 수정 처리된 후 댓글 등록 화면으로 처리되기 위한 구현 - if (commentVO.isModified()) { - commentVO.setCommentNo(""); - commentVO.setCommentCn(""); - } - - // 수정을 위한 처리 - if (!commentVO.getCommentNo().equals("")) { - return "forward:/"+siteId+"/web/cop/cmt/updateArticleCommentView.do"; - } - - List resultList = egovArticleCommentService.selectArticleCommentListAll(commentVO); - int totCnt = resultList.size(); - - model.addAttribute("resultList", resultList); - model.addAttribute("resultCnt", totCnt); - model.addAttribute("type", "body"); // 댓글 페이지 body import용 - - model.addAttribute("userFlag", "Y"); // 사용자 화면 유무 - model.addAttribute("userPath", "/web"); // 사용자 화면 경로 - - model.addAttribute("articleCommentVO", articleCommentVO); // validator 용도 - - commentVO.setCommentCn(""); // 등록 후 댓글 내용 처리 - model.addAttribute("siteId", siteId); - String siteFolder = "site/"+siteId ; - /*if(!("linc".equals(siteId) || "klc".equals(siteId)) ){ - String theme = "01"; - String isMobile = "pc"; - setSiteinfo(siteId , theme , isMobile, model , request ); - return "web/site/"+siteId+"/"+isMobile+"/cop/cmt/EgovArticleCommentListWeb"; - }*/ - return "web/"+siteFolder+"/cop/cmt/EgovArticleCommentListWeb"; - } - - /** - * (사용자)댓글을 삭제한다. - * - * @param commentVO - * @param comment - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/{siteId}/web/member/cop/cmt/deleteArticleComment.do") - public String siteDeleteArticleCommentWeb(@PathVariable("siteId") String siteId , HttpServletRequest request, @ModelAttribute("searchVO") CommentVO commentVO, @ModelAttribute("comment") Comment comment, - ModelMap model, @RequestParam HashMap map, RedirectAttributes redirectAttributes) throws Exception { - - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - redirectAttributes.addAttribute("pageIndex", commentVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", commentVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", commentVO.getSearchWrd()); - redirectAttributes.addAttribute("bbsId", commentVO.getBbsId()); - redirectAttributes.addAttribute("nttId", commentVO.getNttId()); - - // 본인 댓글 확인 - CommentVO articleCommentVO = egovArticleCommentService.selectArticleCommentDetail(commentVO); - - if (!articleCommentVO.getFrstRegisterId().equals(loginVO.getUniqId())){ - redirectAttributes.addFlashAttribute("message", "본인 댓글만 삭제할 수 있습니다."); - return "redirect:/web/cop/bbsWeb/selectBoardArticle.do"; - } else { - egovArticleCommentService.deleteArticleComment(commentVO); - } - - commentVO.setCommentCn(""); - commentVO.setCommentNo(""); - - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); - return "redirect:/web/cop/bbsWeb/selectBoardArticle.do"; - } - - - private void setSiteinfo(String siteId , String theme , String isMobile , ModelMap model , HttpServletRequest request) throws Exception{ - SiteManagerVO siteManagerVO = new SiteManagerVO(); - siteManagerVO.setSiteId(siteId); - siteManagerVO = egovSiteManagerService.selectSiteManagerVO(siteManagerVO) ; - if( !"".equals(siteManagerVO.getTheme()) && null != siteManagerVO.getTheme()){ - theme = siteManagerVO.getTheme() ; - } - WebUtil util = new WebUtil(); - if(util.isMobile(request)){ - isMobile = "mobile"; - } - - model.addAttribute("siteId", siteId); - model.addAttribute("site_path" , "/site/theme_"+theme+"/"+isMobile); - } } diff --git a/src/main/java/itn/let/cop/com/service/BoardUseInf.java b/src/main/java/itn/let/cop/com/service/BoardUseInf.java deleted file mode 100644 index 175d4da..0000000 --- a/src/main/java/itn/let/cop/com/service/BoardUseInf.java +++ /dev/null @@ -1,229 +0,0 @@ -package itn.let.cop.com.service; - -import java.io.Serializable; - -import org.apache.commons.lang3.builder.ToStringBuilder; - - -/** - * 게시판의 이용정보를 관리하기 위한 모델 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.04.02 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.04.02  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 커스터마이징버전 생성
- *
- * 
- */ -@SuppressWarnings("serial") -public class BoardUseInf implements Serializable { - - /** 게시판 아이디 */ - private String bbsId = ""; - - /** 대상시스템 아이디 */ - private String trgetId = ""; - - /** 대상 구분 (커뮤니티, 동호회) */ - private String trgetType = ""; - - /** 최초 등록자 아이디 */ - private String frstRegisterId = ""; - - /** 최초등록시점 */ - private String frstRegisterPnttm = ""; - - /** 최종수정자 아이디 */ - private String lastUpdusrId = ""; - - /** 최종수정시점 */ - private String lastUpdusrPnttm = ""; - - /** 등록구분코드 */ - private String registSeCode = ""; - - /** 사용여부 */ - private String useAt = ""; - - /** - * bbsId attribute를 리턴한다. - * - * @return the bbsId - */ - public String getBbsId() { - return bbsId; - } - - /** - * bbsId attribute 값을 설정한다. - * - * @param bbsId - * the bbsId to set - */ - public void setBbsId(String bbsId) { - this.bbsId = bbsId; - } - - /** - * trgetId attribute를 리턴한다. - * - * @return the trgetId - */ - public String getTrgetId() { - return trgetId; - } - - /** - * trgetId attribute 값을 설정한다. - * - * @param trgetId - * the trgetId to set - */ - public void setTrgetId(String trgetId) { - this.trgetId = trgetId; - } - - /** - * frstRegisterId attribute를 리턴한다. - * - * @return the frstRegisterId - */ - public String getFrstRegisterId() { - return frstRegisterId; - } - - /** - * frstRegisterId attribute 값을 설정한다. - * - * @param frstRegisterId - * the frstRegisterId to set - */ - public void setFrstRegisterId(String frstRegisterId) { - this.frstRegisterId = frstRegisterId; - } - - /** - * frstRegisterPnttm attribute를 리턴한다. - * - * @return the frstRegisterPnttm - */ - public String getFrstRegisterPnttm() { - return frstRegisterPnttm; - } - - /** - * frstRegisterPnttm attribute 값을 설정한다. - * - * @param frstRegisterPnttm - * the frstRegisterPnttm to set - */ - public void setFrstRegisterPnttm(String frstRegisterPnttm) { - this.frstRegisterPnttm = frstRegisterPnttm; - } - - /** - * lastUpdusrId attribute를 리턴한다. - * - * @return the lastUpdusrId - */ - public String getLastUpdusrId() { - return lastUpdusrId; - } - - /** - * lastUpdusrId attribute 값을 설정한다. - * - * @param lastUpdusrId - * the lastUpdusrId to set - */ - public void setLastUpdusrId(String lastUpdusrId) { - this.lastUpdusrId = lastUpdusrId; - } - - /** - * lastUpdusrPnttm attribute를 리턴한다. - * - * @return the lastUpdusrPnttm - */ - public String getLastUpdusrPnttm() { - return lastUpdusrPnttm; - } - - /** - * lastUpdusrPnttm attribute 값을 설정한다. - * - * @param lastUpdusrPnttm - * the lastUpdusrPnttm to set - */ - public void setLastUpdusrPnttm(String lastUpdusrPnttm) { - this.lastUpdusrPnttm = lastUpdusrPnttm; - } - - /** - * registSeCode attribute를 리턴한다. - * - * @return the registSeCode - */ - public String getRegistSeCode() { - return registSeCode; - } - - /** - * registSeCode attribute 값을 설정한다. - * - * @param registSeCode - * the registSeCode to set - */ - public void setRegistSeCode(String registSeCode) { - this.registSeCode = registSeCode; - } - - /** - * useAt attribute를 리턴한다. - * - * @return the useAt - */ - public String getUseAt() { - return useAt; - } - - /** - * useAt attribute 값을 설정한다. - * - * @param useAt - * the useAt to set - */ - public void setUseAt(String useAt) { - this.useAt = useAt; - } - - /** - * trgetType attribute를 리턴한다. - * @return the trgetType - */ - public String getTrgetType() { - return trgetType; - } - - /** - * trgetType attribute 값을 설정한다. - * @param trgetType the trgetType to set - */ - public void setTrgetType(String trgetType) { - this.trgetType = trgetType; - } - - /** - * toString 메소드를 대치한다. - */ - public String toString() { - return ToStringBuilder.reflectionToString(this); - } -} diff --git a/src/main/java/itn/let/cop/com/service/BoardUseInfVO.java b/src/main/java/itn/let/cop/com/service/BoardUseInfVO.java deleted file mode 100644 index ccb62da..0000000 --- a/src/main/java/itn/let/cop/com/service/BoardUseInfVO.java +++ /dev/null @@ -1,559 +0,0 @@ -package itn.let.cop.com.service; - -import java.io.Serializable; - -import org.apache.commons.lang3.builder.ToStringBuilder; - - -/** - * 게시판의 이용정보를 관리하기 위한 VO 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.04.02 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.04.02  이삼섭          최초 생성
- *   2011.05.31  JJY           경량환경 커스터마이징버전 생성
- *
- * 
- */ -@SuppressWarnings("serial") -public class BoardUseInfVO extends BoardUseInf implements Serializable { - - /** 검색시작일 */ - private String searchBgnDe = ""; - - /** 검색조건 */ - private String searchCnd = ""; - - /** 검색종료일 */ - private String searchEndDe = ""; - - /** 검색단어 */ - private String searchWrd = ""; - - /** 정렬순서(DESC,ASC) */ - private long sortOrdr = 0L; - - /** 검색사용여부 */ - private String searchUseYn = ""; - - /** 현재페이지 */ - private int pageIndex = 1; - - /** 페이지갯수 */ - private int pageUnit = 10; - - /** 페이지사이즈 */ - private int pageSize = 10; - - /** 첫페이지 인덱스 */ - private int firstIndex = 1; - - /** 마지막페이지 인덱스 */ - private int lastIndex = 1; - - /** 페이지당 레코드 개수 */ - private int recordCountPerPage = 10; - - /** 레코드 번호 */ - private int rowNo = 0; - - /** 최초 등록자명 */ - private String frstRegisterNm = ""; - - /** 최종 수정자명 */ - private String lastUpdusrNm = ""; - - /** 등록구분 코드명 */ - private String registSeCodeNm = ""; - - /** 커뮤니티 아이디 */ - private String cmmntyId = ""; - - /** 커뮤니티 명 */ - private String cmmntyNm = ""; - - /** 동호회 아이디 */ - private String clbId = ""; - - /** 동호회 명 */ - private String clbNm = ""; - - /** 게시판 명 */ - private String bbsNm = ""; - - /** 사용자 명 */ - private String userNm = ""; - - /** 제공 URL */ - private String provdUrl = ""; - - /** 게시판 유형코드 */ - private String bbsTyCode = ""; - - /** - * searchBgnDe attribute를 리턴한다. - * - * @return the searchBgnDe - */ - public String getSearchBgnDe() { - return searchBgnDe; - } - - /** - * searchBgnDe attribute 값을 설정한다. - * - * @param searchBgnDe - * the searchBgnDe to set - */ - public void setSearchBgnDe(String searchBgnDe) { - this.searchBgnDe = searchBgnDe; - } - - /** - * searchCnd attribute를 리턴한다. - * - * @return the searchCnd - */ - public String getSearchCnd() { - return searchCnd; - } - - /** - * searchCnd attribute 값을 설정한다. - * - * @param searchCnd - * the searchCnd to set - */ - public void setSearchCnd(String searchCnd) { - this.searchCnd = searchCnd; - } - - /** - * searchEndDe attribute를 리턴한다. - * - * @return the searchEndDe - */ - public String getSearchEndDe() { - return searchEndDe; - } - - /** - * searchEndDe attribute 값을 설정한다. - * - * @param searchEndDe - * the searchEndDe to set - */ - public void setSearchEndDe(String searchEndDe) { - this.searchEndDe = searchEndDe; - } - - /** - * searchWrd attribute를 리턴한다. - * - * @return the searchWrd - */ - public String getSearchWrd() { - return searchWrd; - } - - /** - * searchWrd attribute 값을 설정한다. - * - * @param searchWrd - * the searchWrd to set - */ - public void setSearchWrd(String searchWrd) { - this.searchWrd = searchWrd; - } - - /** - * sortOrdr attribute를 리턴한다. - * - * @return the sortOrdr - */ - public long getSortOrdr() { - return sortOrdr; - } - - /** - * sortOrdr attribute 값을 설정한다. - * - * @param sortOrdr - * the sortOrdr to set - */ - public void setSortOrdr(long sortOrdr) { - this.sortOrdr = sortOrdr; - } - - /** - * searchUseYn attribute를 리턴한다. - * - * @return the searchUseYn - */ - public String getSearchUseYn() { - return searchUseYn; - } - - /** - * searchUseYn attribute 값을 설정한다. - * - * @param searchUseYn - * the searchUseYn to set - */ - public void setSearchUseYn(String searchUseYn) { - this.searchUseYn = searchUseYn; - } - - /** - * pageIndex attribute를 리턴한다. - * - * @return the pageIndex - */ - public int getPageIndex() { - return pageIndex; - } - - /** - * pageIndex attribute 값을 설정한다. - * - * @param pageIndex - * the pageIndex to set - */ - public void setPageIndex(int pageIndex) { - this.pageIndex = pageIndex; - } - - /** - * pageUnit attribute를 리턴한다. - * - * @return the pageUnit - */ - public int getPageUnit() { - return pageUnit; - } - - /** - * pageUnit attribute 값을 설정한다. - * - * @param pageUnit - * the pageUnit to set - */ - public void setPageUnit(int pageUnit) { - this.pageUnit = pageUnit; - } - - /** - * pageSize attribute를 리턴한다. - * - * @return the pageSize - */ - public int getPageSize() { - return pageSize; - } - - /** - * pageSize attribute 값을 설정한다. - * - * @param pageSize - * the pageSize to set - */ - public void setPageSize(int pageSize) { - this.pageSize = pageSize; - } - - /** - * firstIndex attribute를 리턴한다. - * - * @return the firstIndex - */ - public int getFirstIndex() { - return firstIndex; - } - - /** - * firstIndex attribute 값을 설정한다. - * - * @param firstIndex - * the firstIndex to set - */ - public void setFirstIndex(int firstIndex) { - this.firstIndex = firstIndex; - } - - /** - * lastIndex attribute를 리턴한다. - * - * @return the lastIndex - */ - public int getLastIndex() { - return lastIndex; - } - - /** - * lastIndex attribute 값을 설정한다. - * - * @param lastIndex - * the lastIndex to set - */ - public void setLastIndex(int lastIndex) { - this.lastIndex = lastIndex; - } - - /** - * recordCountPerPage attribute를 리턴한다. - * - * @return the recordCountPerPage - */ - public int getRecordCountPerPage() { - return recordCountPerPage; - } - - /** - * recordCountPerPage attribute 값을 설정한다. - * - * @param recordCountPerPage - * the recordCountPerPage to set - */ - public void setRecordCountPerPage(int recordCountPerPage) { - this.recordCountPerPage = recordCountPerPage; - } - - /** - * rowNo attribute를 리턴한다. - * - * @return the rowNo - */ - public int getRowNo() { - return rowNo; - } - - /** - * rowNo attribute 값을 설정한다. - * - * @param rowNo - * the rowNo to set - */ - public void setRowNo(int rowNo) { - this.rowNo = rowNo; - } - - /** - * frstRegisterNm attribute를 리턴한다. - * - * @return the frstRegisterNm - */ - public String getFrstRegisterNm() { - return frstRegisterNm; - } - - /** - * frstRegisterNm attribute 값을 설정한다. - * - * @param frstRegisterNm - * the frstRegisterNm to set - */ - public void setFrstRegisterNm(String frstRegisterNm) { - this.frstRegisterNm = frstRegisterNm; - } - - /** - * lastUpdusrNm attribute를 리턴한다. - * - * @return the lastUpdusrNm - */ - public String getLastUpdusrNm() { - return lastUpdusrNm; - } - - /** - * lastUpdusrNm attribute 값을 설정한다. - * - * @param lastUpdusrNm - * the lastUpdusrNm to set - */ - public void setLastUpdusrNm(String lastUpdusrNm) { - this.lastUpdusrNm = lastUpdusrNm; - } - - /** - * registSeCodeNm attribute를 리턴한다. - * - * @return the registSeCodeNm - */ - public String getRegistSeCodeNm() { - return registSeCodeNm; - } - - /** - * registSeCodeNm attribute 값을 설정한다. - * - * @param registSeCodeNm - * the registSeCodeNm to set - */ - public void setRegistSeCodeNm(String registSeCodeNm) { - this.registSeCodeNm = registSeCodeNm; - } - - /** - * cmmntyId attribute를 리턴한다. - * - * @return the cmmntyId - */ - public String getCmmntyId() { - return cmmntyId; - } - - /** - * cmmntyId attribute 값을 설정한다. - * - * @param cmmntyId - * the cmmntyId to set - */ - public void setCmmntyId(String cmmntyId) { - this.cmmntyId = cmmntyId; - } - - /** - * cmmntyNm attribute를 리턴한다. - * - * @return the cmmntyNm - */ - public String getCmmntyNm() { - return cmmntyNm; - } - - /** - * cmmntyNm attribute 값을 설정한다. - * - * @param cmmntyNm - * the cmmntyNm to set - */ - public void setCmmntyNm(String cmmntyNm) { - this.cmmntyNm = cmmntyNm; - } - - /** - * clbId attribute를 리턴한다. - * - * @return the clbId - */ - public String getClbId() { - return clbId; - } - - /** - * clbId attribute 값을 설정한다. - * - * @param clbId - * the clbId to set - */ - public void setClbId(String clbId) { - this.clbId = clbId; - } - - /** - * clbNm attribute를 리턴한다. - * - * @return the clbNm - */ - public String getClbNm() { - return clbNm; - } - - /** - * clbNm attribute 값을 설정한다. - * - * @param clbNm - * the clbNm to set - */ - public void setClbNm(String clbNm) { - this.clbNm = clbNm; - } - - /** - * bbsNm attribute를 리턴한다. - * - * @return the bbsNm - */ - public String getBbsNm() { - return bbsNm; - } - - /** - * bbsNm attribute 값을 설정한다. - * - * @param bbsNm - * the bbsNm to set - */ - public void setBbsNm(String bbsNm) { - this.bbsNm = bbsNm; - } - - /** - * userNm attribute를 리턴한다. - * - * @return the userNm - */ - public String getUserNm() { - return userNm; - } - - /** - * userNm attribute 값을 설정한다. - * - * @param userNm - * the userNm to set - */ - public void setUserNm(String userNm) { - this.userNm = userNm; - } - - /** - * provdUrl attribute를 리턴한다. - * - * @return the provdUrl - */ - public String getProvdUrl() { - return provdUrl; - } - - /** - * provdUrl attribute 값을 설정한다. - * - * @param provdUrl - * the provdUrl to set - */ - public void setProvdUrl(String provdUrl) { - this.provdUrl = provdUrl; - } - - /** - * bbsTyCode attribute를 리턴한다. - * @return the bbsTyCode - */ - public String getBbsTyCode() { - return bbsTyCode; - } - - /** - * bbsTyCode attribute 값을 설정한다. - * @param bbsTyCode the bbsTyCode to set - */ - public void setBbsTyCode(String bbsTyCode) { - this.bbsTyCode = bbsTyCode; - } - - /** - * toString 메소드를 대치한다. - */ - public String toString() { - return ToStringBuilder.reflectionToString(this); - } -} diff --git a/src/main/java/itn/let/cop/com/service/EgovBBSUseInfoManageService.java b/src/main/java/itn/let/cop/com/service/EgovBBSUseInfoManageService.java deleted file mode 100644 index 8ad8ce7..0000000 --- a/src/main/java/itn/let/cop/com/service/EgovBBSUseInfoManageService.java +++ /dev/null @@ -1,124 +0,0 @@ -package itn.let.cop.com.service; - -import java.util.Map; - - -/** - * 게시판 이용정보를 관리하기 위한 서비스 인터페이스 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.04.02 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.04.02  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *
- * 
- */ -public interface EgovBBSUseInfoManageService { - - /** - * 게시판 사용 정보를 삭제한다. - * - * @param bdUseInf - * @throws Exception - */ - public void deleteBBSUseInf(BoardUseInf bdUseInf) throws Exception; - - /** - * 커뮤니티에 사용되는 게시판 사용정보를 삭제한다. - * - * @param bdUseInf - * @throws Exception - */ - public void deleteBBSUseInfByCmmnty(BoardUseInfVO bdUseVO) throws Exception; - - /** - * 동호회에 사용되는 게시판 사용정보를 삭제한다. - * - * @param bdUseInf - * @throws Exception - */ - public void deleteBBSUseInfByClub(BoardUseInfVO bdUseVO) throws Exception; - - /** - * 커뮤니티에 사용되는 모든 게시판 사용정보를 삭제한다. - * - * @param bdUseInf - * @throws Exception - */ - public void deleteAllBBSUseInfByCmmnty(BoardUseInfVO bdUseVO) throws Exception; - - /** - * 동호회에 사용되는 모든 게시판 사용정보를 삭제한다. - * - * @param bdUseInf - * @throws Exception - */ - public void deleteAllBBSUseInfByClub(BoardUseInfVO bdUseVO) throws Exception; - - /** - * 게시판 사용정보를 등록한다. - * - * @param bdUseInf - * @throws Exception - */ - public void insertBBSUseInf(BoardUseInf bdUseInf) throws Exception; - - /** - * 게시판 사용정보 목록을 조회한다. - * - * @param bdUseVO - * @return - * @throws Exception - */ - public Map selectBBSUseInfs(BoardUseInfVO bdUseVO) throws Exception; - - /** - * 게시판 사용정보를 수정한다. - * - * @param bdUseInf - * @throws Exception - */ - public void updateBBSUseInf(BoardUseInf bdUseInf) throws Exception; - - /** - * 게시판 사용정보에 대한 상세정보를 조회한다. - * - * @param bdUseVO - * @return - * @throws Exception - */ - public BoardUseInfVO selectBBSUseInf(BoardUseInfVO bdUseVO) throws Exception; - - /** - * 게시판에 대한 사용정보를 삭제한다. - * - * @param bdUseInf - * @throws Exception - */ - public void deleteBBSUseInfByBoardId(BoardUseInf bdUseInf) throws Exception; - - /** - * 커뮤니티, 동호회에 사용되는 게시판 사용정보에 대한 목록을 조회한다. - * - * @param bdUseVO - * @return - * @throws Exception - */ - public Map selectBBSUseInfsByTrget(BoardUseInfVO bdUseVO) throws Exception; - - /** - * 커뮤니티, 동호회에 사용되는 게시판 사용정보를 수정한다. - * - * @param bdUseInf - * @throws Exception - */ - public void updateBBSUseInfByTrget(BoardUseInf bdUseInf) throws Exception; - -} diff --git a/src/main/java/itn/let/cop/com/service/EgovTemplateManageService.java b/src/main/java/itn/let/cop/com/service/EgovTemplateManageService.java deleted file mode 100644 index 674fde8..0000000 --- a/src/main/java/itn/let/cop/com/service/EgovTemplateManageService.java +++ /dev/null @@ -1,92 +0,0 @@ -package itn.let.cop.com.service; - -import java.util.List; -import java.util.Map; - -/** - * 템플릿 관리를 위한 서비스 인터페이스 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.03.17 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.03.17  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *
- * 
- */ -public interface EgovTemplateManageService { - - /** - * 템플릿 정보를 삭제한다. - * - * @param tmplatInf - * @exception Exception Exception - */ - public void deleteTemplateInf(TemplateInf tmplatInf) - throws Exception; - - /** - * 템플릿 정보를 등록한다. - * - * @param tmplatInf - * @exception Exception Exception - */ - public void insertTemplateInf(TemplateInf tmplatInf) - throws Exception; - - /** - * 템플릿에 대한 상세정보를 조회한다. - * @return - * - * @param tmplatInfVO - * @exception Exception Exception - */ - public TemplateInfVO selectTemplateInf(TemplateInfVO tmplatInfVO) - throws Exception; - - /** - * 템플릿에 대한 목록를 조회한다. - * @return - * - * @param tmplatInfVO - * @exception Exception Exception - */ - public Map selectTemplateInfs(TemplateInfVO tmplatInfVO) - throws Exception; - - /** - * 템플릿 구분에 따른 목록을 조회한다. - * @return - * - * @param tmplatInfVO - * @exception Exception Exception - */ - public List selectTemplateInfsByCode(TemplateInfVO tmplatInfVO) - throws Exception; - - /** - * 템플릿에 대한 미리보기 정보를 조회한다. - * @return - * - * @param tmplatInfVO - * @exception Exception Exception - */ - public TemplateInfVO selectTemplatePreview(TemplateInfVO tmplatInfVO) - throws Exception; - - /** - * 템플릿 정보를 수정한다. - * - * @param tmplatInf - * @exception Exception Exception - */ - public void updateTemplateInf(TemplateInf tmplatInf) - throws Exception; - -} \ No newline at end of file diff --git a/src/main/java/itn/let/cop/com/service/EgovUserInfManageService.java b/src/main/java/itn/let/cop/com/service/EgovUserInfManageService.java deleted file mode 100644 index 3faf032..0000000 --- a/src/main/java/itn/let/cop/com/service/EgovUserInfManageService.java +++ /dev/null @@ -1,87 +0,0 @@ -package itn.let.cop.com.service; - -import java.util.List; -import java.util.Map; - -/** - * 협업 기능에서 사용자 정보를 관리하기 위한 서비스 인터페이스 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.04.06 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.04.06  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *
- * 
- */ -public interface EgovUserInfManageService { - - /** - * 사용자 정보에 대한 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public Map selectUserList(UserInfVO userVO) throws Exception; - - /** - * 커뮤니티 사용자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public Map selectCmmntyUserList(UserInfVO userVO) throws Exception; - - /** - * 커뮤니티 관리자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public Map selectCmmntyMngrList(UserInfVO userVO) throws Exception; - - /** - * 동호회 사용자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public Map selectClubUserList(UserInfVO userVO) throws Exception; - - /** - * 동호회 운영자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public Map selectClubOprtrList(UserInfVO userVO) throws Exception; - - /** - * 동호회에 대한 모든 사용자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public List selectAllClubUser(UserInfVO userVO) throws Exception; - - /** - * 커뮤니티에 대한 모든 사용자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public List selectAllCmmntyUser(UserInfVO userVO) throws Exception; -} diff --git a/src/main/java/itn/let/cop/com/service/TemplateInf.java b/src/main/java/itn/let/cop/com/service/TemplateInf.java deleted file mode 100644 index 58e1602..0000000 --- a/src/main/java/itn/let/cop/com/service/TemplateInf.java +++ /dev/null @@ -1,231 +0,0 @@ -package itn.let.cop.com.service; - -import java.io.Serializable; - -import org.apache.commons.lang3.builder.ToStringBuilder; - -/** - * 템플릿 정보를 관리하기 위한 모델 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.03.17 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.03.17  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *
- * 
- */ -@SuppressWarnings("serial") -public class TemplateInf implements Serializable { - - /** 최초등록자 아이디 */ - private String frstRegisterId = ""; - - /** 최초등록시점 */ - private String frstRegisterPnttm = ""; - - /** 최종수정자 아이디 */ - private String lastUpdusrId = ""; - - /** 최종수정시점 */ - private String lastUpdusrPnttm = ""; - - /** 템플릿 경로 */ - private String tmplatCours = ""; - - /** 템플릿 아이디 */ - private String tmplatId = ""; - - /** 템플릿 명 */ - private String tmplatNm = ""; - - /** 탬플릿 구분코드 */ - private String tmplatSeCode = ""; - - /** 사용여부 */ - private String useAt = ""; - - /** - * frstRegisterId attribute를 리턴한다. - * - * @return the frstRegisterId - */ - public String getFrstRegisterId() { - return frstRegisterId; - } - - /** - * frstRegisterId attribute 값을 설정한다. - * - * @param frstRegisterId - * the frstRegisterId to set - */ - public void setFrstRegisterId(String frstRegisterId) { - this.frstRegisterId = frstRegisterId; - } - - /** - * frstRegisterPnttm attribute를 리턴한다. - * - * @return the frstRegisterPnttm - */ - public String getFrstRegisterPnttm() { - return frstRegisterPnttm; - } - - /** - * frstRegisterPnttm attribute 값을 설정한다. - * - * @param frstRegisterPnttm - * the frstRegisterPnttm to set - */ - public void setFrstRegisterPnttm(String frstRegisterPnttm) { - this.frstRegisterPnttm = frstRegisterPnttm; - } - - /** - * lastUpdusrId attribute를 리턴한다. - * - * @return the lastUpdusrId - */ - public String getLastUpdusrId() { - return lastUpdusrId; - } - - /** - * lastUpdusrId attribute 값을 설정한다. - * - * @param lastUpdusrId - * the lastUpdusrId to set - */ - public void setLastUpdusrId(String lastUpdusrId) { - this.lastUpdusrId = lastUpdusrId; - } - - /** - * lastUpdusrPnttm attribute를 리턴한다. - * - * @return the lastUpdusrPnttm - */ - public String getLastUpdusrPnttm() { - return lastUpdusrPnttm; - } - - /** - * lastUpdusrPnttm attribute 값을 설정한다. - * - * @param lastUpdusrPnttm - * the lastUpdusrPnttm to set - */ - public void setLastUpdusrPnttm(String lastUpdusrPnttm) { - this.lastUpdusrPnttm = lastUpdusrPnttm; - } - - /** - * tmplatCours attribute를 리턴한다. - * - * @return the tmplatCours - */ - public String getTmplatCours() { - return tmplatCours; - } - - /** - * tmplatCours attribute 값을 설정한다. - * - * @param tmplatCours - * the tmplatCours to set - */ - public void setTmplatCours(String tmplatCours) { - this.tmplatCours = tmplatCours; - } - - /** - * tmplatId attribute를 리턴한다. - * - * @return the tmplatId - */ - public String getTmplatId() { - return tmplatId; - } - - /** - * tmplatId attribute 값을 설정한다. - * - * @param tmplatId - * the tmplatId to set - */ - public void setTmplatId(String tmplatId) { - this.tmplatId = tmplatId; - } - - /** - * tmplatNm attribute를 리턴한다. - * - * @return the tmplatNm - */ - public String getTmplatNm() { - return tmplatNm; - } - - /** - * tmplatNm attribute 값을 설정한다. - * - * @param tmplatNm - * the tmplatNm to set - */ - public void setTmplatNm(String tmplatNm) { - this.tmplatNm = tmplatNm; - } - - /** - * tmplatSeCode attribute를 리턴한다. - * - * @return the tmplatSeCode - */ - public String getTmplatSeCode() { - return tmplatSeCode; - } - - /** - * tmplatSeCode attribute 값을 설정한다. - * - * @param tmplatSeCode - * the tmplatSeCode to set - */ - public void setTmplatSeCode(String tmplatSeCode) { - this.tmplatSeCode = tmplatSeCode; - } - - /** - * useAt attribute를 리턴한다. - * - * @return the useAt - */ - public String getUseAt() { - return useAt; - } - - /** - * useAt attribute 값을 설정한다. - * - * @param useAt - * the useAt to set - */ - public void setUseAt(String useAt) { - this.useAt = useAt; - } - - /** - * toString 메소드를 대치한다. - */ - public String toString() { - return ToStringBuilder.reflectionToString(this); - } -} diff --git a/src/main/java/itn/let/cop/com/service/TemplateInfVO.java b/src/main/java/itn/let/cop/com/service/TemplateInfVO.java deleted file mode 100644 index 15924a0..0000000 --- a/src/main/java/itn/let/cop/com/service/TemplateInfVO.java +++ /dev/null @@ -1,407 +0,0 @@ -package itn.let.cop.com.service; - -import java.io.Serializable; - -import org.apache.commons.lang3.builder.ToStringBuilder; - -/** - * 템플릿 정보 관리를 위한 VO 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.03.17 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.03.17  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *
- * 
- */ -@SuppressWarnings("serial") -public class TemplateInfVO extends TemplateInf implements Serializable { - - /** 최초 등록자명 */ - private String frstRegisterNm = ""; - - /** 최종 수정자명 */ - private String lastUpdusrNm = ""; - - /** 템플릿 구분 코드명 */ - private String tmplatSeCodeNm = ""; - - /** 검색시작일 */ - private String searchBgnDe = ""; - - /** 검색조건 */ - private String searchCnd = ""; - - /** 검색종료일 */ - private String searchEndDe = ""; - - /** 검색단어 */ - private String searchWrd = ""; - - /** 정렬순서(DESC,ASC) */ - private String sortOrdr = ""; - - /** 검색사용여부 */ - private String searchUseYn = ""; - - /** 현재페이지 */ - private int pageIndex = 1; - - /** 페이지갯수 */ - private int pageUnit = 10; - - /** 페이지사이즈 */ - private int pageSize = 10; - - /** 첫페이지 인덱스 */ - private int firstIndex = 1; - - /** 마지막페이지 인덱스 */ - private int lastIndex = 1; - - /** 페이지당 레코드 개수 */ - private int recordCountPerPage = 10; - - /** 레코드 번호 */ - private int rowNo = 0; - - /** 구분 유형 */ - private String typeFlag = ""; - - /** - * frstRegisterNm attribute를 리턴한다. - * - * @return the frstRegisterNm - */ - public String getFrstRegisterNm() { - return frstRegisterNm; - } - - /** - * frstRegisterNm attribute 값을 설정한다. - * - * @param frstRegisterNm - * the frstRegisterNm to set - */ - public void setFrstRegisterNm(String frstRegisterNm) { - this.frstRegisterNm = frstRegisterNm; - } - - /** - * lastUpdusrNm attribute를 리턴한다. - * - * @return the lastUpdusrNm - */ - public String getLastUpdusrNm() { - return lastUpdusrNm; - } - - /** - * lastUpdusrNm attribute 값을 설정한다. - * - * @param lastUpdusrNm - * the lastUpdusrNm to set - */ - public void setLastUpdusrNm(String lastUpdusrNm) { - this.lastUpdusrNm = lastUpdusrNm; - } - - /** - * tmplatSeCodeNm attribute를 리턴한다. - * - * @return the tmplatSeCodeNm - */ - public String getTmplatSeCodeNm() { - return tmplatSeCodeNm; - } - - /** - * tmplatSeCodeNm attribute 값을 설정한다. - * - * @param tmplatSeCodeNm - * the tmplatSeCodeNm to set - */ - public void setTmplatSeCodeNm(String tmplatSeCodeNm) { - this.tmplatSeCodeNm = tmplatSeCodeNm; - } - - /** - * searchBgnDe attribute를 리턴한다. - * - * @return the searchBgnDe - */ - public String getSearchBgnDe() { - return searchBgnDe; - } - - /** - * searchBgnDe attribute 값을 설정한다. - * - * @param searchBgnDe - * the searchBgnDe to set - */ - public void setSearchBgnDe(String searchBgnDe) { - this.searchBgnDe = searchBgnDe; - } - - /** - * searchCnd attribute를 리턴한다. - * - * @return the searchCnd - */ - public String getSearchCnd() { - return searchCnd; - } - - /** - * searchCnd attribute 값을 설정한다. - * - * @param searchCnd - * the searchCnd to set - */ - public void setSearchCnd(String searchCnd) { - this.searchCnd = searchCnd; - } - - /** - * searchEndDe attribute를 리턴한다. - * - * @return the searchEndDe - */ - public String getSearchEndDe() { - return searchEndDe; - } - - /** - * searchEndDe attribute 값을 설정한다. - * - * @param searchEndDe - * the searchEndDe to set - */ - public void setSearchEndDe(String searchEndDe) { - this.searchEndDe = searchEndDe; - } - - /** - * searchWrd attribute를 리턴한다. - * - * @return the searchWrd - */ - public String getSearchWrd() { - return searchWrd; - } - - /** - * searchWrd attribute 값을 설정한다. - * - * @param searchWrd - * the searchWrd to set - */ - public void setSearchWrd(String searchWrd) { - this.searchWrd = searchWrd; - } - - /** - * sortOrdr attribute를 리턴한다. - * - * @return the sortOrdr - */ - public String getSortOrdr() { - return sortOrdr; - } - - /** - * sortOrdr attribute 값을 설정한다. - * - * @param sortOrdr - * the sortOrdr to set - */ - public void setSortOrdr(String sortOrdr) { - this.sortOrdr = sortOrdr; - } - - /** - * searchUseYn attribute를 리턴한다. - * - * @return the searchUseYn - */ - public String getSearchUseYn() { - return searchUseYn; - } - - /** - * searchUseYn attribute 값을 설정한다. - * - * @param searchUseYn - * the searchUseYn to set - */ - public void setSearchUseYn(String searchUseYn) { - this.searchUseYn = searchUseYn; - } - - /** - * pageIndex attribute를 리턴한다. - * - * @return the pageIndex - */ - public int getPageIndex() { - return pageIndex; - } - - /** - * pageIndex attribute 값을 설정한다. - * - * @param pageIndex - * the pageIndex to set - */ - public void setPageIndex(int pageIndex) { - this.pageIndex = pageIndex; - } - - /** - * pageUnit attribute를 리턴한다. - * - * @return the pageUnit - */ - public int getPageUnit() { - return pageUnit; - } - - /** - * pageUnit attribute 값을 설정한다. - * - * @param pageUnit - * the pageUnit to set - */ - public void setPageUnit(int pageUnit) { - this.pageUnit = pageUnit; - } - - /** - * pageSize attribute를 리턴한다. - * - * @return the pageSize - */ - public int getPageSize() { - return pageSize; - } - - /** - * pageSize attribute 값을 설정한다. - * - * @param pageSize - * the pageSize to set - */ - public void setPageSize(int pageSize) { - this.pageSize = pageSize; - } - - /** - * firstIndex attribute를 리턴한다. - * - * @return the firstIndex - */ - public int getFirstIndex() { - return firstIndex; - } - - /** - * firstIndex attribute 값을 설정한다. - * - * @param firstIndex - * the firstIndex to set - */ - public void setFirstIndex(int firstIndex) { - this.firstIndex = firstIndex; - } - - /** - * lastIndex attribute를 리턴한다. - * - * @return the lastIndex - */ - public int getLastIndex() { - return lastIndex; - } - - /** - * lastIndex attribute 값을 설정한다. - * - * @param lastIndex - * the lastIndex to set - */ - public void setLastIndex(int lastIndex) { - this.lastIndex = lastIndex; - } - - /** - * recordCountPerPage attribute를 리턴한다. - * - * @return the recordCountPerPage - */ - public int getRecordCountPerPage() { - return recordCountPerPage; - } - - /** - * recordCountPerPage attribute 값을 설정한다. - * - * @param recordCountPerPage - * the recordCountPerPage to set - */ - public void setRecordCountPerPage(int recordCountPerPage) { - this.recordCountPerPage = recordCountPerPage; - } - - /** - * rowNo attribute를 리턴한다. - * - * @return the rowNo - */ - public int getRowNo() { - return rowNo; - } - - /** - * rowNo attribute 값을 설정한다. - * - * @param rowNo - * the rowNo to set - */ - public void setRowNo(int rowNo) { - this.rowNo = rowNo; - } - - /** - * typeFlag attribute를 리턴한다. - * - * @return the typeFlag - */ - public String getTypeFlag() { - return typeFlag; - } - - /** - * typeFlag attribute 값을 설정한다. - * - * @param typeFlag - * the typeFlag to set - */ - public void setTypeFlag(String typeFlag) { - this.typeFlag = typeFlag; - } - - /** - * toString 메소드를 대치한다. - */ - public String toString() { - return ToStringBuilder.reflectionToString(this); - } -} diff --git a/src/main/java/itn/let/cop/com/service/UserInfVO.java b/src/main/java/itn/let/cop/com/service/UserInfVO.java deleted file mode 100644 index bc38a1b..0000000 --- a/src/main/java/itn/let/cop/com/service/UserInfVO.java +++ /dev/null @@ -1,561 +0,0 @@ -package itn.let.cop.com.service; - -import java.io.Serializable; - -import org.apache.commons.lang3.builder.ToStringBuilder; - -/** - * 사용자 정보 조회를 위한 VO 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.04.06 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.04.06  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *
- * 
- */ -@SuppressWarnings("serial") -public class UserInfVO implements Serializable { - - /** 유일 아이디 */ - private String uniqId = ""; - - /** 사용자 아이디 */ - private String userId = ""; - - /** 사용자 명 */ - private String userNm = ""; - - /** 사용자 우편번호 */ - private String userZip = ""; - - /** 사용자 주소 */ - private String userAdres = ""; - - /** 사용자 이메일 */ - private String userEmail = ""; - - /** 검색시작일 */ - private String searchBgnDe = ""; - - /** 검색조건 */ - private String searchCnd = ""; - - /** 검색종료일 */ - private String searchEndDe = ""; - - /** 검색단어 */ - private String searchWrd = ""; - - /** 정렬순서(DESC,ASC) */ - private String sortOrdr = ""; - - /** 검색사용여부 */ - private String searchUseYn = ""; - - /** 현재페이지 */ - private int pageIndex = 1; - - /** 페이지갯수 */ - private int pageUnit = 10; - - /** 페이지사이즈 */ - private int pageSize = 10; - - /** 첫페이지 인덱스 */ - private int firstIndex = 1; - - /** 마지막페이지 인덱스 */ - private int lastIndex = 1; - - /** 페이지당 레코드 개수 */ - private int recordCountPerPage = 10; - - /** 레코드 번호 */ - private int rowNo = 0; - - /** 대상 아이디 */ - private String trgetId = ""; - - /** 사용여부 */ - private String useAt = "Y"; - - /** 커뮤니티 아이디 */ - private String cmmntyId = ""; - - /** 동호회 아이디 */ - private String clubId = ""; - - /** 대상 중지 여부 (커뮤니티 또는 동호회) */ - private String deletedAt = "N"; - - /** - * uniqId attribute를 리턴한다. - * - * @return the uniqId - */ - public String getUniqId() { - return uniqId; - } - - /** - * uniqId attribute 값을 설정한다. - * - * @param uniqId - * the uniqId to set - */ - public void setUniqId(String uniqId) { - this.uniqId = uniqId; - } - - /** - * userId attribute를 리턴한다. - * - * @return the userId - */ - public String getUserId() { - return userId; - } - - /** - * userId attribute 값을 설정한다. - * - * @param userId - * the userId to set - */ - public void setUserId(String userId) { - this.userId = userId; - } - - /** - * userNm attribute를 리턴한다. - * - * @return the userNm - */ - public String getUserNm() { - return userNm; - } - - /** - * userNm attribute 값을 설정한다. - * - * @param userNm - * the userNm to set - */ - public void setUserNm(String userNm) { - this.userNm = userNm; - } - - /** - * userZip attribute를 리턴한다. - * - * @return the userZip - */ - public String getUserZip() { - return userZip; - } - - /** - * userZip attribute 값을 설정한다. - * - * @param userZip - * the userZip to set - */ - public void setUserZip(String userZip) { - this.userZip = userZip; - } - - /** - * userAdres attribute를 리턴한다. - * - * @return the userAdres - */ - public String getUserAdres() { - return userAdres; - } - - /** - * userAdres attribute 값을 설정한다. - * - * @param userAdres - * the userAdres to set - */ - public void setUserAdres(String userAdres) { - this.userAdres = userAdres; - } - - /** - * userEmail attribute를 리턴한다. - * - * @return the userEmail - */ - public String getUserEmail() { - return userEmail; - } - - /** - * userEmail attribute 값을 설정한다. - * - * @param userEmail - * the userEmail to set - */ - public void setUserEmail(String userEmail) { - this.userEmail = userEmail; - } - - /** - * searchBgnDe attribute를 리턴한다. - * - * @return the searchBgnDe - */ - public String getSearchBgnDe() { - return searchBgnDe; - } - - /** - * searchBgnDe attribute 값을 설정한다. - * - * @param searchBgnDe - * the searchBgnDe to set - */ - public void setSearchBgnDe(String searchBgnDe) { - this.searchBgnDe = searchBgnDe; - } - - /** - * searchCnd attribute를 리턴한다. - * - * @return the searchCnd - */ - public String getSearchCnd() { - return searchCnd; - } - - /** - * searchCnd attribute 값을 설정한다. - * - * @param searchCnd - * the searchCnd to set - */ - public void setSearchCnd(String searchCnd) { - this.searchCnd = searchCnd; - } - - /** - * searchEndDe attribute를 리턴한다. - * - * @return the searchEndDe - */ - public String getSearchEndDe() { - return searchEndDe; - } - - /** - * searchEndDe attribute 값을 설정한다. - * - * @param searchEndDe - * the searchEndDe to set - */ - public void setSearchEndDe(String searchEndDe) { - this.searchEndDe = searchEndDe; - } - - /** - * searchWrd attribute를 리턴한다. - * - * @return the searchWrd - */ - public String getSearchWrd() { - return searchWrd; - } - - /** - * searchWrd attribute 값을 설정한다. - * - * @param searchWrd - * the searchWrd to set - */ - public void setSearchWrd(String searchWrd) { - this.searchWrd = searchWrd; - } - - /** - * sortOrdr attribute를 리턴한다. - * - * @return the sortOrdr - */ - public String getSortOrdr() { - return sortOrdr; - } - - /** - * sortOrdr attribute 값을 설정한다. - * - * @param sortOrdr - * the sortOrdr to set - */ - public void setSortOrdr(String sortOrdr) { - this.sortOrdr = sortOrdr; - } - - /** - * searchUseYn attribute를 리턴한다. - * - * @return the searchUseYn - */ - public String getSearchUseYn() { - return searchUseYn; - } - - /** - * searchUseYn attribute 값을 설정한다. - * - * @param searchUseYn - * the searchUseYn to set - */ - public void setSearchUseYn(String searchUseYn) { - this.searchUseYn = searchUseYn; - } - - /** - * pageIndex attribute를 리턴한다. - * - * @return the pageIndex - */ - public int getPageIndex() { - return pageIndex; - } - - /** - * pageIndex attribute 값을 설정한다. - * - * @param pageIndex - * the pageIndex to set - */ - public void setPageIndex(int pageIndex) { - this.pageIndex = pageIndex; - } - - /** - * pageUnit attribute를 리턴한다. - * - * @return the pageUnit - */ - public int getPageUnit() { - return pageUnit; - } - - /** - * pageUnit attribute 값을 설정한다. - * - * @param pageUnit - * the pageUnit to set - */ - public void setPageUnit(int pageUnit) { - this.pageUnit = pageUnit; - } - - /** - * pageSize attribute를 리턴한다. - * - * @return the pageSize - */ - public int getPageSize() { - return pageSize; - } - - /** - * pageSize attribute 값을 설정한다. - * - * @param pageSize - * the pageSize to set - */ - public void setPageSize(int pageSize) { - this.pageSize = pageSize; - } - - /** - * firstIndex attribute를 리턴한다. - * - * @return the firstIndex - */ - public int getFirstIndex() { - return firstIndex; - } - - /** - * firstIndex attribute 값을 설정한다. - * - * @param firstIndex - * the firstIndex to set - */ - public void setFirstIndex(int firstIndex) { - this.firstIndex = firstIndex; - } - - /** - * lastIndex attribute를 리턴한다. - * - * @return the lastIndex - */ - public int getLastIndex() { - return lastIndex; - } - - /** - * lastIndex attribute 값을 설정한다. - * - * @param lastIndex - * the lastIndex to set - */ - public void setLastIndex(int lastIndex) { - this.lastIndex = lastIndex; - } - - /** - * recordCountPerPage attribute를 리턴한다. - * - * @return the recordCountPerPage - */ - public int getRecordCountPerPage() { - return recordCountPerPage; - } - - /** - * recordCountPerPage attribute 값을 설정한다. - * - * @param recordCountPerPage - * the recordCountPerPage to set - */ - public void setRecordCountPerPage(int recordCountPerPage) { - this.recordCountPerPage = recordCountPerPage; - } - - /** - * rowNo attribute를 리턴한다. - * - * @return the rowNo - */ - public int getRowNo() { - return rowNo; - } - - /** - * rowNo attribute 값을 설정한다. - * - * @param rowNo - * the rowNo to set - */ - public void setRowNo(int rowNo) { - this.rowNo = rowNo; - } - - /** - * trgetId attribute를 리턴한다. - * - * @return the trgetId - */ - public String getTrgetId() { - return trgetId; - } - - /** - * trgetId attribute 값을 설정한다. - * - * @param trgetId - * the trgetId to set - */ - public void setTrgetId(String trgetId) { - this.trgetId = trgetId; - } - - /** - * useAt attribute를 리턴한다. - * - * @return the useAt - */ - public String getUseAt() { - return useAt; - } - - /** - * useAt attribute 값을 설정한다. - * - * @param useAt - * the useAt to set - */ - public void setUseAt(String useAt) { - this.useAt = useAt; - } - - /** - * cmmntyId attribute를 리턴한다. - * - * @return the cmmntyId - */ - public String getCmmntyId() { - return cmmntyId; - } - - /** - * cmmntyId attribute 값을 설정한다. - * - * @param cmmntyId - * the cmmntyId to set - */ - public void setCmmntyId(String cmmntyId) { - this.cmmntyId = cmmntyId; - } - - /** - * clubId attribute를 리턴한다. - * - * @return the clubId - */ - public String getClubId() { - return clubId; - } - - /** - * clubId attribute 값을 설정한다. - * - * @param clubId - * the clubId to set - */ - public void setClubId(String clubId) { - this.clubId = clubId; - } - - /** - * deletedAt attribute를 리턴한다. - * - * @return the deletedAt - */ - public String getDeletedAt() { - return deletedAt; - } - - /** - * deletedAt attribute 값을 설정한다. - * - * @param deletedAt - * the deletedAt to set - */ - public void setDeletedAt(String deletedAt) { - this.deletedAt = deletedAt; - } - - /** - * toString 메소드를 대치한다. - */ - public String toString() { - return ToStringBuilder.reflectionToString(this); - } -} diff --git a/src/main/java/itn/let/cop/com/service/impl/BBSUseInfoManageDAO.java b/src/main/java/itn/let/cop/com/service/impl/BBSUseInfoManageDAO.java deleted file mode 100644 index 20c0676..0000000 --- a/src/main/java/itn/let/cop/com/service/impl/BBSUseInfoManageDAO.java +++ /dev/null @@ -1,179 +0,0 @@ -package itn.let.cop.com.service.impl; - -import java.util.List; - -import egovframework.rte.psl.dataaccess.EgovAbstractDAO; -import itn.let.cop.com.service.BoardUseInf; -import itn.let.cop.com.service.BoardUseInfVO; - -import org.springframework.stereotype.Repository; - -/** - * 게시판 이용정보를 관리하기 위한 데이터 접근 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.04.02 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일       수정자           수정내용
- *  -------     --------    ---------------------------
- *   2009.04.02  이삼섭          최초 생성
- *   2011.05.31  JJY           경량환경 커스터마이징버전 생성
- *
- * 
- */ -@Repository("BBSUseInfoManageDAO") -public class BBSUseInfoManageDAO extends EgovAbstractDAO { - - /** - * 게시판 사용 정보를 삭제한다. - * - * @param bdUseInf - * @throws Exception - */ - public void deleteBBSUseInf(BoardUseInf bdUseInf) throws Exception { - update("BBSUseInfoManageDAO.deleteBBSUseInf", bdUseInf); - } - - /** - * 커뮤니티에 사용되는 게시판 사용정보 목록을 조회한다. - * - * @param bdUseInf - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectBBSUseInfByCmmnty(BoardUseInfVO bdUseVO) throws Exception { - return (List) list("BBSUseInfoManageDAO.selectBBSUseInfByCmmnty", bdUseVO); - } - - /** - * 동호회에 사용되는 게시판 사용정보 목록을 조회한다. - * - * @param bdUseInf - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectBBSUseInfByClub(BoardUseInfVO bdUseVO) throws Exception { - return (List) list("BBSUseInfoManageDAO.selectBBSUseInfByClub", bdUseVO); - } - - /** - * 커뮤니티에 사용되는 모든 게시판 사용정보를 삭제한다. - * - * @param bdUseInf - * @throws Exception - */ - public void deleteAllBBSUseInfByCmmnty(BoardUseInfVO bdUseVO) throws Exception { - update("BBSUseInfoManageDAO.deleteAllBBSUseInfByCmmnty", bdUseVO); - } - - /** - * 동호회에 사용되는 모든 게시판 사용정보를 삭제한다. - * - * @param bdUseInf - * @throws Exception - */ - public void deleteAllBBSUseInfByClub(BoardUseInfVO bdUseVO) throws Exception { - update("BBSUseInfoManageDAO.deleteAllBBSUseInfByClub", bdUseVO); - } - - /** - * 게시판 사용정보를 등록한다. - * - * @param bdUseInf - * @throws Exception - */ - public void insertBBSUseInf(BoardUseInf bdUseInf) throws Exception { - insert("BBSUseInfoManageDAO.insertBBSUseInf", bdUseInf); - } - - /** - * 게시판 사용정보 목록을 조회한다. - * - * @param bdUseVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectBBSUseInfs(BoardUseInfVO bdUseVO) throws Exception { - return (List) list("BBSUseInfoManageDAO.selectBBSUseInfs", bdUseVO); - } - - /** - * - * @param bdUseVO - * @return - * @throws Exception - */ - public int selectBBSUseInfsCnt(BoardUseInfVO bdUseVO) throws Exception { - return (Integer)select("BBSUseInfoManageDAO.selectBBSUseInfsCnt", bdUseVO); - } - - /** - * 게시판 사용정보에 대한 상세정보를 조회한다. - * - * @param bdUseVO - * @return - * @throws Exception - */ - public BoardUseInfVO selectBBSUseInf(BoardUseInfVO bdUseVO) throws Exception { - return (BoardUseInfVO)select("BBSUseInfoManageDAO.selectBBSUseInf", bdUseVO); - } - - /** - * 게시판 사용정보를 수정한다. - * - * @param bdUseInf - * @throws Exception - */ - public void updateBBSUseInf(BoardUseInf bdUseInf) throws Exception { - update("BBSUseInfoManageDAO.updateBBSUseInf", bdUseInf); - } - - /** - * 사용 - * 게시판에 대한 사용정보를 삭제한다. - * - * @param bdUseInf - * @throws Exception - */ - public void deleteBBSUseInfByBoardId(BoardUseInf bdUseInf) throws Exception { - update("BBSUseInfoManageDAO.deleteBBSUseInfByBoardId", bdUseInf); - } - - /** - * 커뮤니티, 동호회에 사용되는 게시판 사용정보에 대한 목록을 조회한다. - * - * @param bdUseVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectBBSUseInfsByTrget(BoardUseInfVO bdUseVO) throws Exception { - return (List) list("BBSUseInfoManageDAO.selectBBSUseInfsByTrget", bdUseVO); - } - - /** - * 커뮤니티, 동호회에 사용되는 게시판 사용정보에 대한 전체 건수를 조회한다. - * - * @param bdUseVO - * @return - * @throws Exception - */ - public int selectBBSUseInfsCntByTrget(BoardUseInfVO bdUseVO) throws Exception { - return (Integer)select("BBSUseInfoManageDAO.selectBBSUseInfsCntByTrget", bdUseVO); - } - - /** - * 커뮤니티, 동호회에 사용되는 게시판 사용정보를 수정한다. - * - * @param bdUseInf - * @throws Exception - */ - public void updateBBSUseInfByTrget(BoardUseInf bdUseInf) throws Exception { - update("BBSUseInfoManageDAO.updateBBSUseInfByTrget", bdUseInf); - } -} diff --git a/src/main/java/itn/let/cop/com/service/impl/EgovBBSUseInfoManageServiceImpl.java b/src/main/java/itn/let/cop/com/service/impl/EgovBBSUseInfoManageServiceImpl.java deleted file mode 100644 index fac0697..0000000 --- a/src/main/java/itn/let/cop/com/service/impl/EgovBBSUseInfoManageServiceImpl.java +++ /dev/null @@ -1,187 +0,0 @@ -package itn.let.cop.com.service.impl; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; -import itn.let.cop.com.service.BoardUseInf; -import itn.let.cop.com.service.BoardUseInfVO; -import itn.let.cop.com.service.EgovBBSUseInfoManageService; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - -/** - * 게시판 이용정보를 관리하기 위한 서비스 구현 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.04.02 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.04.02  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *
- * 
- */ -@Service("EgovBBSUseInfoManageService") -public class EgovBBSUseInfoManageServiceImpl extends EgovAbstractServiceImpl implements EgovBBSUseInfoManageService { - - @Resource(name = "BBSUseInfoManageDAO") - private BBSUseInfoManageDAO bbsUseDAO; - - /** - * 게시판 사용 정보를 삭제한다. - * - * @see itn.let.cop.bbs.com.service.EgovBBSUseInfoManageService#deleteBBSUseInf(itn.let.cop.bbs.com.service.BoardUseInf) - */ - public void deleteBBSUseInf(BoardUseInf bdUseInf) throws Exception { - bbsUseDAO.deleteBBSUseInf(bdUseInf); - } - - /** - * 게시판 사용정보를 등록한다. - * - * @see itn.let.cop.bbs.com.service.EgovBBSUseInfoManageService#insertBBSUseInf(itn.let.cop.bbs.com.service.BoardUseInf) - */ - public void insertBBSUseInf(BoardUseInf bdUseInf) throws Exception { - bbsUseDAO.insertBBSUseInf(bdUseInf); - } - - /** - * 게시판 사용정보 목록을 조회한다. - * - * @see itn.let.cop.bbs.com.service.EgovBBSUseInfoManageService#selectBBSUseInfs(itn.let.cop.bbs.com.service.BoardUseInfVO) - */ - public Map selectBBSUseInfs(BoardUseInfVO bdUseVO) throws Exception { - - List result = bbsUseDAO.selectBBSUseInfs(bdUseVO); - int cnt = bbsUseDAO.selectBBSUseInfsCnt(bdUseVO); - - Map map = new HashMap(); - - map.put("resultList", result); - map.put("resultCnt", Integer.toString(cnt)); - - return map; - } - - /** - * 게시판 사용정보를 수정한다. - * - * @see itn.let.cop.bbs.com.service.EgovBBSUseInfoManageService#updateBBSUseInf(itn.let.cop.bbs.com.service.BoardUseInf) - */ - public void updateBBSUseInf(BoardUseInf bdUseInf) throws Exception { - bbsUseDAO.updateBBSUseInf(bdUseInf); - } - - /** - * 게시판 사용정보에 대한 상세정보를 조회한다. - * - * @see itn.let.cop.bbs.com.service.EgovBBSUseInfoManageService#selectBBSUseInf(itn.let.cop.bbs.com.service.BoardUseInfVO) - */ - public BoardUseInfVO selectBBSUseInf(BoardUseInfVO bdUseVO) throws Exception { - return bbsUseDAO.selectBBSUseInf(bdUseVO); - } - - /** - * 동호회에 사용되는 게시판 사용정보를 삭제한다. - * - * @see itn.let.cop.com.service.EgovBBSUseInfoManageService#deleteBBSUseInfByClub(itn.let.cop.com.service.BoardUseInf) - */ - public void deleteBBSUseInfByClub(BoardUseInfVO bdUseVO) throws Exception { - List result = bbsUseDAO.selectBBSUseInfByClub(bdUseVO); - - BoardUseInf bdUseInf = null; - Iterator iter = result.iterator(); - while (iter.hasNext()) { - bdUseInf = (BoardUseInf)iter.next(); - - bdUseInf.setLastUpdusrId(bdUseVO.getLastUpdusrId()); - //bdUseInf.setTrgetId(bdUseVO.getClbId()); // 사용자 ID를 넘겨야 함.. - bdUseInf.setTrgetId(bdUseVO.getTrgetId()); - - bbsUseDAO.deleteBBSUseInf(bdUseInf); - } - } - - /** - * 커뮤니티에 사용되는 게시판 사용정보를 삭제한다. - * - * @see itn.let.cop.com.service.EgovBBSUseInfoManageService#deleteBBSUseInfByCmmnty(itn.let.cop.com.service.BoardUseInf) - */ - public void deleteBBSUseInfByCmmnty(BoardUseInfVO bdUseVO) throws Exception { - List result = bbsUseDAO.selectBBSUseInfByCmmnty(bdUseVO); - - BoardUseInf bdUseInf = null; - Iterator iter = result.iterator(); - - while (iter.hasNext()) { - bdUseInf = (BoardUseInf)iter.next(); - - bdUseInf.setLastUpdusrId(bdUseVO.getLastUpdusrId()); - //bdUseInf.setTrgetId(bdUseVO.getCmmntyId()); // 사용자 ID를 넘겨야 함.. - bdUseInf.setTrgetId(bdUseVO.getTrgetId()); - - bbsUseDAO.deleteBBSUseInf(bdUseInf); - } - } - - /** - * 동호회에 사용되는 모든 게시판 사용정보를 삭제한다. - * - * @see itn.let.cop.com.service.EgovBBSUseInfoManageService#deleteAllBBSUseInfByClub(itn.let.cop.com.service.BoardUseInfVO) - */ - public void deleteAllBBSUseInfByClub(BoardUseInfVO bdUseVO) throws Exception { - bbsUseDAO.deleteAllBBSUseInfByClub(bdUseVO); - } - - /** - * 커뮤니티에 사용되는 모든 게시판 사용정보를 삭제한다. - * - * @see itn.let.cop.com.service.EgovBBSUseInfoManageService#deleteAllBBSUseInfByCmmnty(itn.let.cop.com.service.BoardUseInfVO) - */ - public void deleteAllBBSUseInfByCmmnty(BoardUseInfVO bdUseVO) throws Exception { - bbsUseDAO.deleteAllBBSUseInfByCmmnty(bdUseVO); - } - - /** - * 게시판에 대한 사용정보를 삭제한다. - * - * @see itn.let.cop.com.service.EgovBBSUseInfoManageService#deleteBBSUseInfByBoardId(itn.let.cop.com.service.BoardUseInf) - */ - public void deleteBBSUseInfByBoardId(BoardUseInf bdUseInf) throws Exception { - bbsUseDAO.deleteBBSUseInfByBoardId(bdUseInf); - } - - /** - * 커뮤니티, 동호회에 사용되는 게시판 사용정보에 대한 목록을 조회한다. - * - * @see itn.let.cop.com.service.EgovBBSUseInfoManageService#selectBBSUseInfsByTrget(itn.let.cop.com.service.BoardUseInfVO) - */ - public Map selectBBSUseInfsByTrget(BoardUseInfVO bdUseVO) throws Exception { - List result = bbsUseDAO.selectBBSUseInfsByTrget(bdUseVO); - int cnt = bbsUseDAO.selectBBSUseInfsCntByTrget(bdUseVO); - - Map map = new HashMap(); - - map.put("resultList", result); - map.put("resultCnt", Integer.toString(cnt)); - - return map; - } - - /** - * 커뮤니티, 동호회에 사용되는 게시판 사용정보를 수정한다. - */ - public void updateBBSUseInfByTrget(BoardUseInf bdUseInf) throws Exception { - bbsUseDAO.updateBBSUseInfByTrget(bdUseInf); - } -} diff --git a/src/main/java/itn/let/cop/com/service/impl/EgovTemplateManageServiceImpl.java b/src/main/java/itn/let/cop/com/service/impl/EgovTemplateManageServiceImpl.java deleted file mode 100644 index b02be0c..0000000 --- a/src/main/java/itn/let/cop/com/service/impl/EgovTemplateManageServiceImpl.java +++ /dev/null @@ -1,121 +0,0 @@ -package itn.let.cop.com.service.impl; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import itn.let.cop.com.service.EgovTemplateManageService; -import itn.let.cop.com.service.TemplateInf; -import itn.let.cop.com.service.TemplateInfVO; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - -/** - * 템플릿 정보관리를 위한 서비스 구현 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.3.17 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.3.17  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *
- * 
- */ -@Service("EgovTemplateManageService") -public class EgovTemplateManageServiceImpl extends EgovAbstractServiceImpl implements EgovTemplateManageService { - - @Resource(name = "TemplateManageDAO") - private TemplateManageDAO tmplatDAO; - - @Resource(name = "egovTmplatIdGnrService") - private EgovIdGnrService idgenService; - - /** - * 템플릿 정보를 삭제한다. - * - * @see itn.let.cop.bbs.com.service.EgovTemplateManageService#deleteTemplateInf(itn.let.cop.bbs.com.service.TemplateInf) - */ - public void deleteTemplateInf(TemplateInf tmplatInf) throws Exception { - tmplatDAO.deleteTemplateInf(tmplatInf); - } - - /** - * 템플릿 정보를 등록한다. - * - * @see itn.let.cop.bbs.com.service.EgovTemplateManageService#insertTemplateInf(itn.let.cop.bbs.com.service.TemplateInf) - */ - public void insertTemplateInf(TemplateInf tmplatInf) throws Exception { - - tmplatInf.setTmplatId(idgenService.getNextStringId()); - - tmplatDAO.insertTemplateInf(tmplatInf); - } - - /** - * 템플릿에 대한 상세정보를 조회한다. - * - * @see itn.let.cop.bbs.com.service.EgovTemplateManageService#selectTemplateInf(itn.let.cop.bbs.com.service.TemplateInfVO) - */ - public TemplateInfVO selectTemplateInf(TemplateInfVO tmplatInfVO) throws Exception { - TemplateInfVO vo = new TemplateInfVO(); - vo = tmplatDAO.selectTemplateInf(tmplatInfVO); - return vo; - } - - /** - * 템플릿에 대한 목록를 조회한다. - * - * @see itn.let.cop.bbs.com.service.EgovTemplateManageService#selectTemplateInfs(itn.let.cop.bbs.com.service.TemplateInfVO) - */ - public Map selectTemplateInfs(TemplateInfVO tmplatInfVO) throws Exception { - List result = tmplatDAO.selectTemplateInfs(tmplatInfVO); - int cnt = tmplatDAO.selectTemplateInfsCnt(tmplatInfVO); - - Map map = new HashMap(); - - map.put("resultList", result); - map.put("resultCnt", Integer.toString(cnt)); - - return map; - } - - /** - * 템플릿에 대한 미리보기 정보를 조회한다. - * - * @see itn.let.cop.bbs.com.service.EgovTemplateManageService#selectTemplatePreview(itn.let.cop.bbs.com.service.TemplateInfVO) - */ - public TemplateInfVO selectTemplatePreview(TemplateInfVO tmplatInfVO) throws Exception { - TemplateInfVO vo = new TemplateInfVO(); - - vo = tmplatDAO.selectTemplatePreview(tmplatInfVO); - - return vo; - } - - /** - * 템플릿 정보를 수정한다. - * - * @see itn.let.cop.bbs.com.service.EgovTemplateManageService#updateTemplateInf(itn.let.cop.bbs.com.service.TemplateInf) - */ - public void updateTemplateInf(TemplateInf tmplatInf) throws Exception { - tmplatDAO.updateTemplateInf(tmplatInf); - } - - /** - * 템플릿 구분에 따른 목록을 조회한다. - * - * @see itn.let.cop.bbs.com.service.EgovTemplateManageService#selectAllTemplateInfs(itn.let.cop.bbs.com.service.TemplateInfVO) - */ - public List selectTemplateInfsByCode(TemplateInfVO tmplatInfVO) throws Exception { - return tmplatDAO.selectTemplateInfsByCode(tmplatInfVO); - } -} diff --git a/src/main/java/itn/let/cop/com/service/impl/EgovUserInfManageDAO.java b/src/main/java/itn/let/cop/com/service/impl/EgovUserInfManageDAO.java deleted file mode 100644 index f249a01..0000000 --- a/src/main/java/itn/let/cop/com/service/impl/EgovUserInfManageDAO.java +++ /dev/null @@ -1,168 +0,0 @@ -package itn.let.cop.com.service.impl; - -import java.util.List; - -import egovframework.rte.psl.dataaccess.EgovAbstractDAO; -import itn.let.cop.com.service.UserInfVO; - -import org.springframework.stereotype.Repository; - -/** - * 협업 활용 사용자 정보 조회를 위한 데이터 접근 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.04.06 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.04.06  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
- *
- * 
- */ -@Repository("EgovUserInfManageDAO") -public class EgovUserInfManageDAO extends EgovAbstractDAO { - - /** - * 사용자 정보에 대한 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectUserList(UserInfVO userVO) throws Exception { - return (List) list("EgovUserInfManageDAO.selectUserList", userVO); - } - - /** - * 사용자 정보에 대한 목록 전체 건수를 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public int selectUserListCnt(UserInfVO userVO) throws Exception { - return (Integer)select("EgovUserInfManageDAO.selectUserListCnt", userVO); - } - - /** - * 커뮤니티 사용자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectCmmntyUserList(UserInfVO userVO) throws Exception { - return (List) list("EgovUserInfManageDAO.selectCmmntyUserList", userVO); - } - - /** - * 커뮤니티 사용자 목록에 대한 전체 건수를 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public int selectCmmntyUserListCnt(UserInfVO userVO) throws Exception { - return (Integer)select("EgovUserInfManageDAO.selectCmmntyUserListCnt", userVO); - } - - /** - * 커뮤니티 관리자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectCmmntyMngrList(UserInfVO userVO) throws Exception { - return (List) list("EgovUserInfManageDAO.selectCmmntyMngrList", userVO); - } - - /** - * 커뮤니티 관리자 목록에 대한 전체 건수를 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public int selectCmmntyMngrListCnt(UserInfVO userVO) throws Exception { - return (Integer)select("EgovUserInfManageDAO.selectCmmntyMngrListCnt", userVO); - } - - /** - * 동호회 사용자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectClubUserList(UserInfVO userVO) throws Exception { - return (List) list("EgovUserInfManageDAO.selectClubUserList", userVO); - } - - /** - * 동호회 사용자 목록에 대한 전체 건수를 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public int selectClubUserListCnt(UserInfVO userVO) throws Exception { - return (Integer)select("EgovUserInfManageDAO.selectClubUserListCnt", userVO); - } - - /** - * 동호회 운영자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectClubOprtrList(UserInfVO userVO) throws Exception { - return (List) list("EgovUserInfManageDAO.selectClubOprtrList", userVO); - } - - /** - * 동호회 운영자 목록에 대한 전체 건수를 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - public int selectClubOprtrListCnt(UserInfVO userVO) throws Exception { - return (Integer)select("EgovUserInfManageDAO.selectClubOprtrListCnt", userVO); - } - - /** - * 동호회에 대한 모든 사용자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectAllClubUser(UserInfVO userVO) throws Exception { - return (List) list("EgovUserInfManageDAO.selectAllClubUser", userVO); - } - - /** - * 커뮤니티에 대한 모든 사용자 목록을 조회한다. - * - * @param userVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectAllCmmntyUser(UserInfVO userVO) throws Exception { - return (List) list("EgovUserInfManageDAO.selectAllCmmntyUser", userVO); - } -} diff --git a/src/main/java/itn/let/cop/com/service/impl/EgovUserInfManageServiceImpl.java b/src/main/java/itn/let/cop/com/service/impl/EgovUserInfManageServiceImpl.java deleted file mode 100644 index 7418e8e..0000000 --- a/src/main/java/itn/let/cop/com/service/impl/EgovUserInfManageServiceImpl.java +++ /dev/null @@ -1,141 +0,0 @@ -package itn.let.cop.com.service.impl; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; -import itn.let.cop.com.service.EgovUserInfManageService; -import itn.let.cop.com.service.UserInfVO; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - - -/** - * 협업에서 사용할 사용자 조회 서비스 기능 구현 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.04.06 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.04.06  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *
- * 
- */ -@Service("EgovUserInfManageService") -public class EgovUserInfManageServiceImpl extends EgovAbstractServiceImpl implements EgovUserInfManageService { - - @Resource(name = "EgovUserInfManageDAO") - private EgovUserInfManageDAO userInfDAO; - - /** - * 동호회 운영자 목록을 조회한다. - * - * @see itn.let.cop.com.service.EgovUserInfManageService#selectClubOprtrList(itn.let.cop.com.service.UserInfVO) - */ - public Map selectClubOprtrList(UserInfVO userVO) throws Exception { - List result = userInfDAO.selectClubOprtrList(userVO); - int cnt = userInfDAO.selectClubOprtrListCnt(userVO); - - Map map = new HashMap(); - - map.put("resultList", result); - map.put("resultCnt", Integer.toString(cnt)); - - return map; - } - - /** - * 동호회 사용자 목록을 조회한다. - * - * @see itn.let.cop.com.service.EgovUserInfManageService#selectClubUserList(itn.let.cop.com.service.UserInfVO) - */ - public Map selectClubUserList(UserInfVO userVO) throws Exception { - List result = userInfDAO.selectClubUserList(userVO); - int cnt = userInfDAO.selectClubUserListCnt(userVO); - - Map map = new HashMap(); - - map.put("resultList", result); - map.put("resultCnt", Integer.toString(cnt)); - - return map; - } - - /** - * 커뮤니티 관리자 목록을 조회한다. - * - * @see itn.let.cop.com.service.EgovUserInfManageService#selectCmmntyMngrList(itn.let.cop.com.service.UserInfVO) - */ - public Map selectCmmntyMngrList(UserInfVO userVO) throws Exception { - List result = userInfDAO.selectCmmntyMngrList(userVO); - int cnt = userInfDAO.selectCmmntyMngrListCnt(userVO); - - Map map = new HashMap(); - - map.put("resultList", result); - map.put("resultCnt", Integer.toString(cnt)); - - return map; - } - - /** - * 커뮤니티 사용자 목록을 조회한다. - * - * @see itn.let.cop.com.service.EgovUserInfManageService#selectCmmntyUserList(itn.let.cop.com.service.UserInfVO) - */ - public Map selectCmmntyUserList(UserInfVO userVO) throws Exception { - List result = userInfDAO.selectCmmntyUserList(userVO); - int cnt = userInfDAO.selectCmmntyUserListCnt(userVO); - - Map map = new HashMap(); - - map.put("resultList", result); - map.put("resultCnt", Integer.toString(cnt)); - - return map; - } - - /** - * 사용자 정보에 대한 목록을 조회한다. - * - * @see itn.let.cop.com.service.EgovUserInfManageService#selectUserList(itn.let.cop.com.service.UserInfVO) - */ - public Map selectUserList(UserInfVO userVO) throws Exception { - List result = userInfDAO.selectUserList(userVO); - int cnt = userInfDAO.selectUserListCnt(userVO); - - Map map = new HashMap(); - - map.put("resultList", result); - map.put("resultCnt", Integer.toString(cnt)); - - return map; - } - - /** - * 동호회에 대한 모든 사용자 목록을 조회한다. - * - * @see itn.let.cop.com.service.EgovUserInfManageService#selectAllClubUser(itn.let.cop.com.service.UserInfVO) - */ - public List selectAllClubUser(UserInfVO userVO) throws Exception { - return userInfDAO.selectAllClubUser(userVO); - } - - /** - * 커뮤니티에 대한 모든 사용자 목록을 조회한다. - * - * @see itn.let.cop.com.service.EgovUserInfManageService#selectAllCmmntyUser(itn.let.cop.com.service.UserInfVO) - */ - public List selectAllCmmntyUser(UserInfVO userVO) throws Exception { - return userInfDAO.selectAllCmmntyUser(userVO); - } -} diff --git a/src/main/java/itn/let/cop/com/service/impl/TemplateManageDAO.java b/src/main/java/itn/let/cop/com/service/impl/TemplateManageDAO.java deleted file mode 100644 index 929dcec..0000000 --- a/src/main/java/itn/let/cop/com/service/impl/TemplateManageDAO.java +++ /dev/null @@ -1,118 +0,0 @@ -package itn.let.cop.com.service.impl; -import java.util.List; - -import egovframework.rte.psl.dataaccess.EgovAbstractDAO; -import itn.let.cop.com.service.TemplateInf; -import itn.let.cop.com.service.TemplateInfVO; - -import org.springframework.stereotype.Repository; - -/** - * 템플릿 정보관리를 위한 데이터 접근 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.03.17 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.03.17  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
- *
- * 
- */ -@Repository("TemplateManageDAO") -public class TemplateManageDAO extends EgovAbstractDAO { - - /** - * 템플릿 정보를 삭제한다. - * - * @param tmplatInf - * @throws Exception - */ - public void deleteTemplateInf(TemplateInf tmplatInf) throws Exception { - update("TemplateManageDAO.deleteTemplateInf", tmplatInf); - } - - /** - * 템플릿 정보를 등록한다. - * - * @param tmplatInf - * @throws Exception - */ - public void insertTemplateInf(TemplateInf tmplatInf) throws Exception { - insert("TemplateManageDAO.insertTemplateInf", tmplatInf); - } - - /** - * 템플릿 정보를 수정한다. - * - * @param tmplatInf - * @throws Exception - */ - public void updateTemplateInf(TemplateInf tmplatInf) throws Exception { - update("TemplateManageDAO.updateTemplateInf", tmplatInf); - } - - /** - * 템플릿에 대한 목록를 조회한다. - * - * @param tmplatInfVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectTemplateInfs(TemplateInfVO tmplatInfVO) throws Exception { - return (List) list("TemplateManageDAO.selectTemplateInfs", tmplatInfVO); - } - - /** - * 템플릿에 대한 목록 전체 건수를 조회한다. - * - * @param tmplatInfVO - * @return - * @throws Exception - */ - public int selectTemplateInfsCnt(TemplateInfVO tmplatInfVO) throws Exception { - return (Integer)select("TemplateManageDAO.selectTemplateInfsCnt", tmplatInfVO); - } - - /** - * 템플릿에 대한 상세정보를 조회한다. - * - * @param tmplatInfVO - * @return - * @throws Exception - */ - public TemplateInfVO selectTemplateInf(TemplateInfVO tmplatInfVO) throws Exception { - return (TemplateInfVO)select("TemplateManageDAO.selectTemplateInf", tmplatInfVO); - - } - - /** - * 템플릿에 대한 미리보기 정보를 조회한다. - * - * @param tmplatInfVO - * @return - * @throws Exception - */ - public TemplateInfVO selectTemplatePreview(TemplateInfVO tmplatInfVO) throws Exception { - return null; - } - - /** - * 템플릿 구분에 따른 목록을 조회한다. - * - * @param tmplatInfVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectTemplateInfsByCode(TemplateInfVO tmplatInfVO) throws Exception { - return (List) list("TemplateManageDAO.selectTemplateInfsByCode", tmplatInfVO); - } - -} diff --git a/src/main/java/itn/let/cop/com/web/EgovBBSUseInfoManageController.java b/src/main/java/itn/let/cop/com/web/EgovBBSUseInfoManageController.java deleted file mode 100644 index 6cd7404..0000000 --- a/src/main/java/itn/let/cop/com/web/EgovBBSUseInfoManageController.java +++ /dev/null @@ -1,375 +0,0 @@ -package itn.let.cop.com.web; - -import java.util.Map; - -import egovframework.rte.fdl.property.EgovPropertyService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.LoginVO; -import itn.let.cop.com.service.BoardUseInf; -import itn.let.cop.com.service.BoardUseInfVO; -import itn.let.cop.com.service.EgovBBSUseInfoManageService; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.validation.BindingResult; -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.support.SessionStatus; -import org.springmodules.validation.commons.DefaultBeanValidator; -//SHT-CUSTOMIZING//import itn.let.cop.clb.service.ClubUser; -//SHT-CUSTOMIZING//import itn.let.cop.clb.service.EgovClubManageService; -//SHT-CUSTOMIZING//import itn.let.cop.cmy.service.CommunityUser; -//SHT-CUSTOMIZING//import itn.let.cop.cmy.service.EgovCommunityManageService; -//import egovframework.rte.fdl.cmmn.exception.EgovBizException; - -/** - * 게시판의 이용정보를 관리하기 위한 컨트롤러 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.04.02 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.04.02  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
- *
- * 
- */ -@Controller -public class EgovBBSUseInfoManageController { - - @Resource(name = "EgovBBSUseInfoManageService") - private EgovBBSUseInfoManageService bbsUseService; - - @Resource(name = "propertiesService") - protected EgovPropertyService propertyService; - - //SHT-CUSTOMIZING//@Resource(name = "EgovCommunityManageService") - //SHT-CUSTOMIZING//private EgovCommunityManageService cmmntyService; // 커뮤니티 관리자 권한 확인 - - //SHT-CUSTOMIZING//@Resource(name = "EgovClubManageService") - //SHT-CUSTOMIZING//private EgovClubManageService clubService; // 동호회 운영자 권한 확인 - - @Autowired - private DefaultBeanValidator beanValidator; - - /** - * 커뮤니티 관리자 및 동호회 운영자 권한을 확인한다. - * - * @param boardUseInf - * @throws EgovBizException - */ - //SHT-CUSTOMIZING//protected void checkAuthority(BoardUseInf boardUseInf) throws Exception { - //SHT-CUSTOMIZING//String targetId = boardUseInf.getTrgetId(); - - //SHT-CUSTOMIZING//LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - - //SHT-CUSTOMIZING//if (user == null) { - //SHT-CUSTOMIZING//throw new EgovBizException("인증된 사용자 정보가 존재하지 않습니다."); - //SHT-CUSTOMIZING//} - - //SHT-CUSTOMIZING//if (targetId.startsWith("CMMNTY_")) { - //SHT-CUSTOMIZING//CommunityUser cmmntyUser = new CommunityUser(); - - //SHT-CUSTOMIZING//cmmntyUser.setCmmntyId(boardUseInf.getTrgetId()); - //SHT-CUSTOMIZING//cmmntyUser.setEmplyrId(user.getUniqId()); - - //SHT-CUSTOMIZING//if (!cmmntyService.isManager(cmmntyUser)) { - //SHT-CUSTOMIZING//throw new EgovBizException("해당 커뮤니티 관리자만 사용하실 수 있습니다."); - //SHT-CUSTOMIZING//} - //SHT-CUSTOMIZING//} else if (targetId.startsWith("CLB_")) { - //SHT-CUSTOMIZING//ClubUser clubUser = new ClubUser(); - - //SHT-CUSTOMIZING//clubUser.setClbId(boardUseInf.getTrgetId()); - //SHT-CUSTOMIZING//clubUser.setEmplyrId(user.getUniqId()); - - //SHT-CUSTOMIZING//if (!clubService.isOperator(clubUser)) { - //SHT-CUSTOMIZING//throw new EgovBizException("해당 동호회 운영자만 사용하실 수 있습니다."); - //SHT-CUSTOMIZING//} - //SHT-CUSTOMIZING//} else { - //SHT-CUSTOMIZING//throw new EgovBizException("대상ID 정보가 정확하지 않습니다."); - //SHT-CUSTOMIZING//} - //SHT-CUSTOMIZING//} - - /** - * 게시판 사용 정보를 삭제한다. - * - * @param bdUseVO - * @param bdUseInf - * @param sessionVO - * @param status - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/deleteBBSUseInf.do") - public String deleteBBSUseInf(@ModelAttribute("searchVO") BoardUseInfVO bdUseVO, @ModelAttribute("bdUseInf") BoardUseInf bdUseInf, SessionStatus status, ModelMap model) - throws Exception { - - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - - if (isAuthenticated) { - bbsUseService.deleteBBSUseInf(bdUseInf); - } - - return "forward:/cop/com/selectBBSUseInfs.do"; - } - - /** - * 게사판 사용정보 등록을 위한 등록페이지로 이동한다. - * - * @param bdUseVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/addBBSUseInf.do") - public String addBBSUseInf(@ModelAttribute("searchVO") BoardUseInfVO bdUseVO, ModelMap model) throws Exception { - return "cop/com/EgovBoardUseInfRegist"; - } - - /** - * 게시판 사용정보를 등록한다. - * - * @param bdUseVO - * @param bdUseInf - * @param sessionVO - * @param status - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/insertBBSUseInf.do") - public String insertBBSUseInf(@ModelAttribute("searchVO") BoardUseInfVO bdUseVO, @ModelAttribute("boardUseInf") BoardUseInf boardUseInf, BindingResult bindingResult, - @RequestParam Map commandMap, ModelMap model) throws Exception { - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - - beanValidator.validate(boardUseInf, bindingResult); - - if (bindingResult.hasErrors()) { - return "cop/com/EgovBoardUseInfRegist"; - } - - String trgetType = (String) commandMap.get("param_trgetType"); - String registSeCode = ""; - - // CMMNTY 06/CLUB 05/SYSTEM(REGC01) - if ("CMMNTY".equals(trgetType)) { - registSeCode = "REGC06"; - } else if ("CLUB".equals(trgetType)) { - registSeCode = "REGC05"; - } else { - registSeCode = "REGC01"; - } - - boardUseInf.setUseAt("Y"); - boardUseInf.setFrstRegisterId(user.getUniqId()); - boardUseInf.setRegistSeCode(registSeCode); - - if (isAuthenticated) { - bbsUseService.insertBBSUseInf(boardUseInf); - } - - return "forward:/cop/com/selectBBSUseInfs.do"; - } - - /** - * 게시판 사용정보 목록을 조회한다. - * - * @param bdUseVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/selectBBSUseInfs.do") - public String selectBBSUseInfs(@ModelAttribute("searchVO") BoardUseInfVO bdUseVO, ModelMap model) throws Exception { - - bdUseVO.setPageUnit(propertyService.getInt("pageUnit")); - bdUseVO.setPageSize(propertyService.getInt("pageSize")); - - PaginationInfo paginationInfo = new PaginationInfo(); - - paginationInfo.setCurrentPageNo(bdUseVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(bdUseVO.getPageUnit()); - paginationInfo.setPageSize(bdUseVO.getPageSize()); - - bdUseVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - bdUseVO.setLastIndex(paginationInfo.getLastRecordIndex()); - bdUseVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - Map map = bbsUseService.selectBBSUseInfs(bdUseVO); - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - - model.addAttribute("resultList", map.get("resultList")); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("paginationInfo", paginationInfo); - - return "cop/com/EgovBoardUseInfList"; - } - - /** - * 게시판 사용정보를 수정한다. - * - * @param bdUseVO - * @param bdUseInf - * @param sessionVO - * @param status - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/updateBBSUseInf.do") - public String updateBBSUseInf(@ModelAttribute("searchVO") BoardUseInfVO bdUseVO, @ModelAttribute("boardUseInf") BoardUseInf boardUseInf, HttpServletRequest request, - ModelMap model) throws Exception { - if (EgovUserDetailsHelper.isAuthenticated()) { - bbsUseService.updateBBSUseInf(boardUseInf); - } - - return "forward:/cop/com/selectBBSUseInfs.do"; - } - - /** - * 게시판 사용정보에 대한 상세정보를 조회한다. - * - * @param bdUseVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/selectBBSUseInf.do") - public String selectBBSUseInf(@ModelAttribute("searchVO") BoardUseInfVO bdUseVO, ModelMap model) throws Exception { - BoardUseInfVO vo = bbsUseService.selectBBSUseInf(bdUseVO); - - // 시스템 사용 게시판의 경우 URL 표시 - if ("SYSTEM_DEFAULT_BOARD".equals(vo.getTrgetId())) { - if (vo.getBbsTyCode().equals("BBST02")) { // 익명게시판 - vo.setProvdUrl("/cop/bbs/anonymous/selectBoardList.do?bbsId=" + vo.getBbsId()); - } else { - vo.setProvdUrl("/cop/bbs/selectBoardList.do?bbsId=" + vo.getBbsId()); - } - } - - model.addAttribute("bdUseVO", vo); - return "cop/com/EgovBoardUseInfInqire"; - } - - /** - * 커뮤니티, 동호회에 사용되는 게시판 사용정보에 대한 목록을 조회한다. - * - * @param bdUseVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/selectBBSUseInfsByTrget.do") - public String selectBBSUseInfsByTrget(@ModelAttribute("searchVO") BoardUseInfVO bdUseVO, ModelMap model) throws Exception { - //SHT-CUSTOMIZING//checkAuthority(bdUseVO); // server-side 권한 확인 - - bdUseVO.setPageUnit(propertyService.getInt("pageUnit")); - bdUseVO.setPageSize(propertyService.getInt("pageSize")); - - PaginationInfo paginationInfo = new PaginationInfo(); - - paginationInfo.setCurrentPageNo(bdUseVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(bdUseVO.getPageUnit()); - paginationInfo.setPageSize(bdUseVO.getPageSize()); - - bdUseVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - bdUseVO.setLastIndex(paginationInfo.getLastRecordIndex()); - bdUseVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - Map map = bbsUseService.selectBBSUseInfsByTrget(bdUseVO); - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - - model.addAttribute("resultList", map.get("resultList")); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("trgetId", bdUseVO.getTrgetId()); - model.addAttribute("trgetType", bdUseVO.getTrgetType()); - model.addAttribute("paginationInfo", paginationInfo); - - return "cop/com/EgovBdUseInfListByTrget"; - } - - /** - * 커뮤니티, 동호회에 사용되는 게시판 사용정보를 수정한다. - * - * @param bdUseVO - * @param boardUseInf - * @param status - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/updateBBSUseInfByTrget.do") - public String updateBBSUseInfByTrget(@ModelAttribute("searchVO") BoardUseInfVO bdUseVO, @ModelAttribute("boardUseInf") BoardUseInf boardUseInf, - @RequestParam Map commandMap, SessionStatus status, ModelMap model) throws Exception { - - //SHT-CUSTOMIZING//checkAuthority(bdUseVO); // server-side 권한 확인 - - String param_trgetId = (String) commandMap.get("param_trgetId"); - - //LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - - if (isAuthenticated) { - boardUseInf.setTrgetId(param_trgetId); - bbsUseService.updateBBSUseInfByTrget(boardUseInf); - } - - return "forward:/cop/com/selectBBSUseInfsByTrget.do"; - } - - /** - * 커뮤니티, 동호회에 사용되는 게시판 사용정보를 등록한다. - * - * @param bdUseVO - * @param boardUseInf - * @param status - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/insertBBSUseInfByTrget.do") - public String insertBBSUseInfByTrget(@ModelAttribute("searchVO") BoardUseInfVO bdUseVO, @ModelAttribute("boardUseInf") BoardUseInf boardUseInf, - @RequestParam Map commandMap, SessionStatus status, ModelMap model) throws Exception { - - //SHT-CUSTOMIZING//checkAuthority(bdUseVO); // server-side 권한 확인 - - String paramTrgetId = (String) commandMap.get("param_trgetId"); - String bbsId = (String) commandMap.get("bbsId"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - - if (isAuthenticated) { - boardUseInf.setUseAt("Y"); - boardUseInf.setFrstRegisterId(user.getUniqId()); - boardUseInf.setRegistSeCode("REGC07"); - boardUseInf.setBbsId(bbsId); - boardUseInf.setTrgetId(paramTrgetId); - - bbsUseService.insertBBSUseInf(boardUseInf); - } - - return "forward:/cop/com/selectBBSUseInfsByTrget.do"; - } -} diff --git a/src/main/java/itn/let/cop/com/web/EgovTemplateManageController.java b/src/main/java/itn/let/cop/com/web/EgovTemplateManageController.java deleted file mode 100644 index 19b27f5..0000000 --- a/src/main/java/itn/let/cop/com/web/EgovTemplateManageController.java +++ /dev/null @@ -1,334 +0,0 @@ -package itn.let.cop.com.web; - -import java.util.List; -import java.util.Map; - -import egovframework.rte.fdl.property.EgovPropertyService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.ComDefaultCodeVO; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.let.cop.com.service.EgovTemplateManageService; -import itn.let.cop.com.service.TemplateInf; -import itn.let.cop.com.service.TemplateInfVO; - -import javax.annotation.Resource; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.validation.BindingResult; -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.support.SessionStatus; -import org.springmodules.validation.commons.DefaultBeanValidator; - -/** - * 템플릿 관리를 위한 컨트롤러 클래스 - * @author 공통서비스개발팀 이삼섭 - * @since 2009.03.18 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2009.03.18  이삼섭          최초 생성
- *   2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
- *
- * 
- */ -@Controller -public class EgovTemplateManageController { - - @Resource(name = "EgovTemplateManageService") - private EgovTemplateManageService tmplatService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - @Resource(name = "propertiesService") - protected EgovPropertyService propertyService; - - @Autowired - private DefaultBeanValidator beanValidator; - - /** - * 템플릿 목록을 조회한다. - * - * @param searchVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/selectTemplateInfs.do") - public String selectTemplateInfs(@ModelAttribute("searchVO") TemplateInfVO tmplatInfVO, ModelMap model) throws Exception { - tmplatInfVO.setPageUnit(propertyService.getInt("pageUnit")); - tmplatInfVO.setPageSize(propertyService.getInt("pageSize")); - - PaginationInfo paginationInfo = new PaginationInfo(); - - paginationInfo.setCurrentPageNo(tmplatInfVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(tmplatInfVO.getPageUnit()); - paginationInfo.setPageSize(tmplatInfVO.getPageSize()); - - tmplatInfVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - tmplatInfVO.setLastIndex(paginationInfo.getLastRecordIndex()); - tmplatInfVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - Map map = tmplatService.selectTemplateInfs(tmplatInfVO); - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - - model.addAttribute("resultList", map.get("resultList")); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("paginationInfo", paginationInfo); - - return "cop/com/EgovTemplateList"; - } - - /** - * 템플릿에 대한 상세정보를 조회한다. - * - * @param searchVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/selectTemplateInf.do") - public String selectTemplateInf(@ModelAttribute("searchVO") TemplateInfVO tmplatInfVO, ModelMap model) throws Exception { - - ComDefaultCodeVO codeVO = new ComDefaultCodeVO(); - - codeVO.setCodeId("COM005"); - List result = cmmUseService.selectCmmCodeDetail(codeVO); - - TemplateInfVO vo = tmplatService.selectTemplateInf(tmplatInfVO); - - model.addAttribute("TemplateInfVO", vo); - model.addAttribute("resultList", result); - - return "cop/com/EgovTemplateUpdt"; - } - - /** - * 템플릿 정보를 등록한다. - * - * @param searchVO - * @param tmplatInfo - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/insertTemplateInf.do") - public String insertTemplateInf(@ModelAttribute("searchVO") TemplateInfVO searchVO, @ModelAttribute("templateInf") TemplateInf templateInf, BindingResult bindingResult, - SessionStatus status, ModelMap model) throws Exception { - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - - beanValidator.validate(templateInf, bindingResult); - - if (bindingResult.hasErrors()) { - ComDefaultCodeVO vo = new ComDefaultCodeVO(); - - vo.setCodeId("COM005"); - - List result = cmmUseService.selectCmmCodeDetail(vo); - - model.addAttribute("resultList", result); - - return "cop/com/EgovTemplateRegist"; - } - - templateInf.setFrstRegisterId(user.getUniqId()); - - if (isAuthenticated) { - tmplatService.insertTemplateInf(templateInf); - } - - return "forward:/cop/com/selectTemplateInfs.do"; - } - - /** - * 템플릿 등록을 위한 등록페이지로 이동한다. - * - * @param searchVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/addTemplateInf.do") - public String addTemplateInf(@ModelAttribute("searchVO") TemplateInfVO searchVO, ModelMap model) throws Exception { - ComDefaultCodeVO vo = new ComDefaultCodeVO(); - - vo.setCodeId("COM005"); - - List result = cmmUseService.selectCmmCodeDetail(vo); - - model.addAttribute("resultList", result); - - return "cop/com/EgovTemplateRegist"; - } - - /** - * 템플릿 정보를 수정한다. - * - * @param searchVO - * @param tmplatInfo - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/updateTemplateInf.do") - public String updateTemplateInf(@ModelAttribute("searchVO") TemplateInfVO tmplatInfVO, @ModelAttribute("templateInf") TemplateInf templateInf, BindingResult bindingResult, - SessionStatus status, ModelMap model) throws Exception { - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - - beanValidator.validate(templateInf, bindingResult); - - if (bindingResult.hasErrors()) { - ComDefaultCodeVO codeVO = new ComDefaultCodeVO(); - - codeVO.setCodeId("COM005"); - - List result = cmmUseService.selectCmmCodeDetail(codeVO); - - TemplateInfVO vo = tmplatService.selectTemplateInf(tmplatInfVO); - - model.addAttribute("TemplateInfVO", vo); - model.addAttribute("resultList", result); - - return "cop/com/EgovTemplateUpdt"; - } - - templateInf.setLastUpdusrId(user.getUniqId()); - - if (isAuthenticated) { - tmplatService.updateTemplateInf(templateInf); - } - - return "forward:/cop/com/selectTemplateInfs.do"; - } - - /** - * 템플릿 정보를 삭제한다. - * - * @param searchVO - * @param tmplatInfo - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/bbs/deleteTemplateInf.do") - public String deleteTemplateInf(@ModelAttribute("searchVO") TemplateInfVO searchVO, @ModelAttribute("tmplatInf") TemplateInf tmplatInf, SessionStatus status, ModelMap model) - throws Exception { - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - - tmplatInf.setLastUpdusrId(user.getUniqId()); - - if (isAuthenticated) { - tmplatService.deleteTemplateInf(tmplatInf); - } - - return "forward:/cop/com/selectTemplateInfs.do"; - } - - /** - * 팝업을 위한 템플릿 목록을 조회한다. - * - * @param searchVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/selectTemplateInfsPop.do") - public String selectTemplateInfsPop(@ModelAttribute("searchVO") TemplateInfVO tmplatInfVO, @RequestParam Map commandMap, ModelMap model) throws Exception { - - String typeFlag = (String) commandMap.get("typeFlag"); - - if ("CLB".equals(typeFlag)) { - tmplatInfVO.setTypeFlag(typeFlag); - tmplatInfVO.setTmplatSeCode("TMPT03"); - } else if ("CMY".equals(typeFlag)) { - tmplatInfVO.setTypeFlag(typeFlag); - tmplatInfVO.setTmplatSeCode("TMPT02"); - } else { - tmplatInfVO.setTypeFlag(typeFlag); - tmplatInfVO.setTmplatSeCode("TMPT01"); - } - - tmplatInfVO.setPageUnit(propertyService.getInt("pageUnit")); - tmplatInfVO.setPageSize(propertyService.getInt("pageSize")); - //CMY, CLB - - PaginationInfo paginationInfo = new PaginationInfo(); - - paginationInfo.setCurrentPageNo(tmplatInfVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(tmplatInfVO.getPageUnit()); - paginationInfo.setPageSize(tmplatInfVO.getPageSize()); - - tmplatInfVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - tmplatInfVO.setLastIndex(paginationInfo.getLastRecordIndex()); - tmplatInfVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - Map map = tmplatService.selectTemplateInfs(tmplatInfVO); - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - - model.addAttribute("resultList", map.get("resultList")); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("paginationInfo", paginationInfo); - - return "cop/com/EgovTemplateInqirePopup"; - } - - /** - * 팝업 페이지를 호출한다. - * - * @param userVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/com/openPopup.do") - public String openPopupWindow(@RequestParam Map commandMap, ModelMap model) throws Exception { - - String requestUrl = (String) commandMap.get("requestUrl"); - String trgetId = (String) commandMap.get("trgetId"); - String width = (String) commandMap.get("width"); - String height = (String) commandMap.get("height"); - String typeFlag = (String) commandMap.get("typeFlag"); - - if (trgetId != null && trgetId != "") { - if (typeFlag != null && typeFlag != "") { - model.addAttribute("requestUrl", requestUrl + "?trgetId=" + trgetId + "&PopFlag=Y&typeFlag=" + typeFlag); - } else { - model.addAttribute("requestUrl", requestUrl + "?trgetId=" + trgetId + "&PopFlag=Y"); - } - } else { - if (typeFlag != null && typeFlag != "") { - model.addAttribute("requestUrl", requestUrl + "?PopFlag=Y&typeFlag=" + typeFlag); - } else { - model.addAttribute("requestUrl", requestUrl + "?PopFlag=Y"); - } - - } - - model.addAttribute("width", width); - model.addAttribute("height", height); - - return "/cop/com/EgovModalPopupFrame"; - } -} diff --git a/src/main/java/itn/let/cop/org/service/EgovOrgChartManageService.java b/src/main/java/itn/let/cop/org/service/EgovOrgChartManageService.java deleted file mode 100644 index 0a7c341..0000000 --- a/src/main/java/itn/let/cop/org/service/EgovOrgChartManageService.java +++ /dev/null @@ -1,108 +0,0 @@ -package itn.let.cop.org.service; - -import java.util.List; - -/** - * 조직도 관리를 위한 서비스 인터페이스 클래스 - * @author ITN - * @since 2018.06.11 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2018.06.11  ITN          최초 생성
- *
- * 
- */ -public interface EgovOrgChartManageService { - - /** - * 부서 목록을 조회한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public List selectPartInfs(PartInfVO partInfVO) - throws Exception; - - /** - * 부서명을 수정한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void updatePartTitle(PartInfVO partInfVO) - throws Exception; - - /** - * 부서명 순서를 변경한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void updatePartOrder(PartInfVO partInfVO) - throws Exception; - - /** - * 부서 정보를 등록한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void insertPartInf(PartInfVO partInfVO) - throws Exception; - - /** - * 부서 및 하위부서, 직원정보 전체를 삭제한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void deletePart(PartInfVO partInfVO) - throws Exception; - - /** - * 사원 정보를 조회한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public List selectPartEmpInf(EmpInfVO empInfVO) - throws Exception; - - /** - * 사원 정보를 등록한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void insertEmpInf(EmpInfVO empInfVO) - throws Exception; - - /** - * 사원 정보를 수정한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void updateEmpInf(EmpInfVO empInfVO) - throws Exception; - - /** - * 사원 정보를 삭제한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void deleteEmpInf(EmpInfVO empInfVO) - throws Exception; - - public List selectChartDepth(PartInfVO partInfVO) throws Exception; - - public List selectUserPart(PartInfVO partInfVO) throws Exception; - -} \ No newline at end of file diff --git a/src/main/java/itn/let/cop/org/service/EmpInfVO.java b/src/main/java/itn/let/cop/org/service/EmpInfVO.java deleted file mode 100644 index 32103c6..0000000 --- a/src/main/java/itn/let/cop/org/service/EmpInfVO.java +++ /dev/null @@ -1,168 +0,0 @@ -package itn.let.cop.org.service; - -import java.io.Serializable; - -import org.apache.commons.lang3.builder.ToStringBuilder; - -/** - * 조직 부서에 사원 정보 조회를 위한 VO 클래스 - * @author ITN - * @since 2018.06.11 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2018.06.11  ITN          최초 생성
- *
- * 
- */ -@SuppressWarnings("serial") -public class EmpInfVO implements Serializable { - - /** 사원 아이디 */ - private int paIdx = 0; - - /** 사원 명 */ - private String paName = ""; - - /** 직급 */ - private String paGrade = ""; - - /** 부서 아이디 */ - private int partIdx = 0; - - /** 입력 일자 */ - private String insertDate = ""; - - /** 담당업무 */ - private String paJob = ""; - - /** 전화번호 */ - private String paTel = ""; - - /** 정렬 순번 */ - private int sortOrd = 0; - - /** - * @return the paIdx - */ - public int getPaIdx() { - return paIdx; - } - - /** - * @param paIdx the paIdx to set - */ - public void setPaIdx(int paIdx) { - this.paIdx = paIdx; - } - - /** - * @return the paName - */ - public String getPaName() { - return paName; - } - - /** - * @param paName the paName to set - */ - public void setPaName(String paName) { - this.paName = paName; - } - - /** - * @return the paGrade - */ - public String getPaGrade() { - return paGrade; - } - - /** - * @param paGrade the paGrade to set - */ - public void setPaGrade(String paGrade) { - this.paGrade = paGrade; - } - - /** - * @return the partIdx - */ - public int getPartIdx() { - return partIdx; - } - - /** - * @param partIdx the partIdx to set - */ - public void setPartIdx(int partIdx) { - this.partIdx = partIdx; - } - - /** - * @return the insertDate - */ - public String getInsertDate() { - return insertDate; - } - - /** - * @param insertDate the insertDate to set - */ - public void setInsertDate(String insertDate) { - this.insertDate = insertDate; - } - - /** - * @return the paJob - */ - public String getPaJob() { - return paJob; - } - - /** - * @param paJob the paJob to set - */ - public void setPaJob(String paJob) { - this.paJob = paJob; - } - - /** - * @return the paTel - */ - public String getPaTel() { - return paTel; - } - - /** - * @param paTel the paTel to set - */ - public void setPaTel(String paTel) { - this.paTel = paTel; - } - - /** - * @return the sortOrd - */ - public int getSortOrd() { - return sortOrd; - } - - /** - * @param sortOrd the sortOrd to set - */ - public void setSortOrd(int sortOrd) { - this.sortOrd = sortOrd; - } - - /** - * toString 메소드를 대치한다. - */ - public String toString() { - return ToStringBuilder.reflectionToString(this); - } -} diff --git a/src/main/java/itn/let/cop/org/service/PartInfVO.java b/src/main/java/itn/let/cop/org/service/PartInfVO.java deleted file mode 100644 index 176cbc9..0000000 --- a/src/main/java/itn/let/cop/org/service/PartInfVO.java +++ /dev/null @@ -1,232 +0,0 @@ -package itn.let.cop.org.service; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -import org.apache.commons.lang3.builder.ToStringBuilder; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * 조직도 부서 정보 조회를 위한 VO 클래스 - * @author ITN - * @since 2018.06.11 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2018.06.11  ITN          최초 생성
- *
- * 
- */ - -@SuppressWarnings("serial") -public class PartInfVO implements Serializable { - /** - * Jackson json annotaion - * @JsonIgnore : 제외 - * @JsonProperty : json id 설정 - */ - - /** 부서 아이디 */ - @JsonIgnore - public int partIdx = 0; - - /** Jstree 부서 아이디 String */ - @JsonProperty("id") - public String strPartIdx = ""; - - /** 부서 명 */ - @JsonProperty("text") - private String partTitle = ""; - - /** 상위 부서 ID */ - @JsonIgnore - private int upperIdx = 0; - - /** Jstree 상위 부서 ID String */ - @JsonProperty("parent") - private String strUpperIdx = ""; - - /** 부서 단계 */ - private int depth = 0; - - /** 입력 일자 */ - @JsonIgnore - private String insertDate = ""; - - /** 정렬 순번 */ - @JsonIgnore - private int sortOrd = 0; - - /** Jstree li_attr in sortOrd */ - @JsonProperty("li_attr") - private Map liAttr = null; - - /** 증가 정렬 순번 */ - @JsonIgnore - private int incrsSortOrd = 0; - - public boolean selected = false; - - /** - * @return the strPartIdx - */ - public String getStrPartIdx() { - return strPartIdx; - } - - /** - * @param strPartIdx the strPartIdx to set - */ - public void setStrPartIdx(String strPartIdx) { - this.strPartIdx = strPartIdx; - } - - /** - * @return the strUpperIdx - */ - public String getStrUpperIdx() { - return strUpperIdx; - } - - /** - * @param strUpperIdx the strUpperIdx to set - */ - public void setStrUpperIdx(String strUpperIdx) { - this.strUpperIdx = strUpperIdx; - } - - /** - * @return the partIdx - */ - public int getPartIdx() { - return partIdx; - } - - /** - * @param partIdx the partIdx to set - */ - public void setPartIdx(int partIdx) { - this.partIdx = partIdx; - this.strPartIdx = Integer.toString(partIdx); - } - - /** - * @return the partTitle - */ - public String getPartTitle() { - return partTitle; - } - - /** - * @param partTitle the partTitle to set - */ - public void setPartTitle(String partTitle) { - this.partTitle = partTitle; - } - - /** - * @return the upperIdx - */ - public int getUpperIdx() { - return upperIdx; - } - - /** - * @param upperIdx the upperIdx to set - */ - public void setUpperIdx(int upperIdx) { - this.upperIdx = upperIdx; - this.strUpperIdx = Integer.toString(upperIdx); - } - - /** - * @return the depth - */ - public int getDepth() { - return depth; - } - - /** - * @param depth the depth to set - */ - public void setDepth(int depth) { - this.depth = depth; - } - - /** - * @return the insertDate - */ - public String getInsertDate() { - return insertDate; - } - - /** - * @param insertDate the insertDate to set - */ - public void setInsertDate(String insertDate) { - this.insertDate = insertDate; - } - - /** - * @return the sortOrd - */ - public int getSortOrd() { - return sortOrd; - } - - /** - * @param sortOrd the sortOrd to set - */ - public void setSortOrd(int sortOrd) { - this.sortOrd = sortOrd; - } - - /** - * toString 메소드를 대치한다. - */ - public String toString() { - return ToStringBuilder.reflectionToString(this); - } - - /** - * @return the liAttr - */ - public Map getLiAttr() { - this.liAttr = new HashMap(); - this.liAttr.put("sortOrd", this.getSortOrd()); - this.liAttr.put("depth", this.getDepth()); - - return liAttr; - } - - /** - * @return the incrsSortOrd - */ - public int getIncrsSortOrd() { - return incrsSortOrd; - } - - /** - * @param incrsSortOrd the incrsSortOrd to set - */ - public void setIncrsSortOrd(int incrsSortOrd) { - this.incrsSortOrd = incrsSortOrd; - } - - public boolean isSelected() { - return selected; - } - - public void setSelected(boolean selected) { - this.selected = selected; - } - -} diff --git a/src/main/java/itn/let/cop/org/service/impl/EgovOrgChartManageServiceImpl.java b/src/main/java/itn/let/cop/org/service/impl/EgovOrgChartManageServiceImpl.java deleted file mode 100644 index 6270900..0000000 --- a/src/main/java/itn/let/cop/org/service/impl/EgovOrgChartManageServiceImpl.java +++ /dev/null @@ -1,150 +0,0 @@ -package itn.let.cop.org.service.impl; -import java.util.List; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - -import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; -import itn.let.cop.org.service.EgovOrgChartManageService; -import itn.let.cop.org.service.EmpInfVO; -import itn.let.cop.org.service.PartInfVO; - -/** - * 조직도 관리를 위한 서비스 구현 클래스 - * @author ITN - * @since 2018.06.11 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2018.06.11  ITN          최초 생성
- *
- * 
- */ -@Service("EgovOrgChartManageService") -public class EgovOrgChartManageServiceImpl extends EgovAbstractServiceImpl implements EgovOrgChartManageService { - - @Resource(name = "OrgChartManageDAO") - private OrgChartManageDAO orgChartManageDAO; - - /** - * 부서 목록을 조회한다. - * @param partInfVO - * @return List - * @exception Exception - */ - public List selectPartInfs(PartInfVO partInfVO) throws Exception { - List result = orgChartManageDAO.selectPartInfs(partInfVO); - - return result; - } - - /** - * 부서명을 수정한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void updatePartTitle(PartInfVO partInfVO) throws Exception { - orgChartManageDAO.updatePartTitle(partInfVO); - } - - /** - * 부서 순서를 변경한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void updatePartOrder(PartInfVO partInfVO) throws Exception { - // 정렬 순번 증가 필요 시 - if (partInfVO.getIncrsSortOrd() != 0) { - orgChartManageDAO.updatePartSortOrderIncrs(partInfVO); - } - - orgChartManageDAO.updatePartOrder(partInfVO); - } - - /** - * 부서 정보를 등록한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void insertPartInf(PartInfVO partInfVO) throws Exception { - - orgChartManageDAO.insertPartInf(partInfVO); - } - - /** - * 부서 및 하위부서, 직원정보 전체를 삭제한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void deletePart(PartInfVO partInfVO) throws Exception { - - orgChartManageDAO.deletePart(partInfVO); - } - - /** - * 사원 정보를 조회한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public List selectPartEmpInf(EmpInfVO empInfVO) throws Exception { - - return (List) orgChartManageDAO.selectPartEmpInf(empInfVO); - } - - /** - * 사원 정보를 등록한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void insertEmpInf(EmpInfVO empInfVO) throws Exception { - - orgChartManageDAO.insertEmpInf(empInfVO); - } - - /** - * 사원 정보를 수정한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void updateEmpInf(EmpInfVO empInfVO) throws Exception { - - orgChartManageDAO.updateEmpInf(empInfVO); - } - - /** - * 사원 정보를 삭제한다. - * - * @param partInfVO - * @exception Exception Exception - */ - public void deleteEmpInf(EmpInfVO empInfVO) throws Exception { - - orgChartManageDAO.deleteEmpInf(empInfVO); - } - - @Override - public List selectChartDepth(PartInfVO partInfVO) throws Exception { - List result = orgChartManageDAO.selectChartDepth(partInfVO); - return result; - } - - @Override - public List selectUserPart(PartInfVO partInfVO) throws Exception { - List result = orgChartManageDAO.selectUserPart(partInfVO); - return result; - } - -} diff --git a/src/main/java/itn/let/cop/org/service/impl/OrgChartManageDAO.java b/src/main/java/itn/let/cop/org/service/impl/OrgChartManageDAO.java deleted file mode 100644 index 3e228da..0000000 --- a/src/main/java/itn/let/cop/org/service/impl/OrgChartManageDAO.java +++ /dev/null @@ -1,133 +0,0 @@ -package itn.let.cop.org.service.impl; -import java.util.List; - -import org.springframework.stereotype.Repository; - -import egovframework.rte.psl.dataaccess.EgovAbstractDAO; -import itn.let.cop.org.service.EmpInfVO; -import itn.let.cop.org.service.PartInfVO; - -/** - * 조직도 관리를 위한 데이터 접근 클래스 - * @author ITN - * @since 2018.06.11 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2018.06.11  ITN          최초 생성
- *
- * 
- */ -@Repository("OrgChartManageDAO") -public class OrgChartManageDAO extends EgovAbstractDAO { - - /** - * 부서 목록를 조회한다. - * - * @param partInfVO - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectPartInfs(PartInfVO partInfVO) throws Exception { - return (List) list("orgChartManageDAO.selectPartInfs", partInfVO); - } - - /** - * 부서 명을 수정한다. - * - * @param PartInfVO - */ - public void updatePartTitle(PartInfVO partInfVO) throws Exception { - update("orgChartManageDAO.updatePartTitle", partInfVO); - } - - /** - * 부서 순서를 변경한다. - * - * @param PartInfVO - */ - public void updatePartOrder(PartInfVO partInfVO) throws Exception { - update("orgChartManageDAO.updatePartOrder", partInfVO); - } - - /** - * 부서 순서를 증가한다. - * - * @param PartInfVO - */ - public void updatePartSortOrderIncrs(PartInfVO partInfVO) throws Exception { - update("orgChartManageDAO.updatePartSortOrderIncrs", partInfVO); - } - - /** - * 부서 정보를 등록한다. - * - * @param PartInfVO - */ - public void insertPartInf(PartInfVO partInfVO) throws Exception { - update("orgChartManageDAO.insertPartInf", partInfVO); - } - - /** - * 부서 및 하위부서, 직원정보 전체를 삭제한다. - * - * @param PartInfVO - */ - public void deletePart(PartInfVO partInfVO) throws Exception { - delete("orgChartManageDAO.deletePart", partInfVO); - } - - /** - * 사원 정보를 조회한다. - * - * @param PartInfVO - */ - @SuppressWarnings("unchecked") - public List selectPartEmpInf(EmpInfVO empInfVO) throws Exception { - return (List) list("orgChartManageDAO.selectPartEmpInf", empInfVO); - } - - /** - * 사원 정보를 등록한다. - * - * @param PartInfVO - */ - public void insertEmpInf(EmpInfVO empInfVO) throws Exception { - update("orgChartManageDAO.insertEmpInf", empInfVO); - } - - /** - * 사원 정보를 수정한다. - * - * @param PartInfVO - */ - public void updateEmpInf(EmpInfVO empInfVO) throws Exception { - update("orgChartManageDAO.updateEmpInf", empInfVO); - } - - /** - * 사원 정보를 삭제한다. - * - * @param PartInfVO - */ - public void deleteEmpInf(EmpInfVO empInfVO) throws Exception { - delete("orgChartManageDAO.deleteEmpInf", empInfVO); - } - - @SuppressWarnings("unchecked") - public List selectChartDepth(PartInfVO partInfVO) throws Exception{ - return (List) list("orgChartManageDAO.selectChartDepth", partInfVO); - } - - public List selectUserPart(PartInfVO partInfVO) { - return (List) list("orgChartManageDAO.selectUserPart", partInfVO); - } - - -} diff --git a/src/main/java/itn/let/cop/org/web/EgovOrgChartManageController.java b/src/main/java/itn/let/cop/org/web/EgovOrgChartManageController.java deleted file mode 100644 index aa4f210..0000000 --- a/src/main/java/itn/let/cop/org/web/EgovOrgChartManageController.java +++ /dev/null @@ -1,248 +0,0 @@ -package itn.let.cop.org.web; - -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.stereotype.Controller; -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.servlet.ModelAndView; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import itn.let.cop.org.service.EgovOrgChartManageService; -import itn.let.cop.org.service.EmpInfVO; -import itn.let.cop.org.service.PartInfVO; - -/** - * 조직도 관리를 위한 컨트롤러 클래스 - * @author ITN - * @since 2018.06.11 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2018.06.11  ITN          최초 생성
- *
- * 
- */ -@Controller -public class EgovOrgChartManageController { - - @Resource(name = "EgovOrgChartManageService") - private EgovOrgChartManageService orgChartManageService; - - /** - * 조직도 관리 정보를 조회한다. - * - * @param searchVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/org/orgChartManage.do") - public String selectTemplateInfs(@ModelAttribute("searchVO") PartInfVO partInfVO, ModelMap model) throws Exception { - - return "cop/org/EgovOrgChartManage"; - } - - /** - * 조직도 목록 정보를 조회한다. - * - * @param searchVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/org/orgChartPartListAjax.do") - public void orgChartPartListAjax(@ModelAttribute("searchVO") PartInfVO partInfVO, ModelMap model, HttpServletResponse response) throws Exception { - ObjectMapper mapper = new ObjectMapper(); - response.setHeader("Content-Type", "text/html;charset=utf-8"); - PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8")); - - List resultList = orgChartManageService.selectPartInfs(partInfVO); - - // jstree root node 필요함으로 추가 (우클릭 contextmenu 기능으로 1depth 추가 안됨) - PartInfVO rootNode = new PartInfVO(); - rootNode.setStrUpperIdx("#"); - rootNode.setPartIdx(0); - rootNode.setPartTitle("우체국물류지원단"); - resultList.add(0, rootNode); - - mapper.writeValue(out, resultList); - out.flush(); - } - - /** - * 부서명을 변경한다. - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/org/updatePartTitleAjax.do") - public ModelAndView updatePartInf(@ModelAttribute("partInfVO") PartInfVO partInfVO, ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - orgChartManageService.updatePartTitle(partInfVO); - - modelAndView.addObject("status", "success"); - - return modelAndView; - } - - /** - * 부서 순서를 변경한다. - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/org/updatePartOrderAjax.do") - public ModelAndView updatePartOrderAjax(@ModelAttribute("partInfVO") PartInfVO partInfVO, ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - orgChartManageService.updatePartOrder(partInfVO); - - modelAndView.addObject("status", "success"); - - return modelAndView; - } - - /** - * 부서 정보를 등록한다. - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/org/insertPartInfAjax.do") - public ModelAndView insertPartInfAjax(@ModelAttribute("partInfVO") PartInfVO partInfVO, ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - orgChartManageService.insertPartInf(partInfVO); - - modelAndView.addObject("status", "success"); - - return modelAndView; - } - - /** - * 부서 및 하위부서, 직원정보 전체를 삭제한다. - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/org/deletePartAjax.do") - public ModelAndView deletePartAjax(@ModelAttribute("partInfVO") PartInfVO partInfVO, ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - orgChartManageService.deletePart(partInfVO); - - modelAndView.addObject("status", "success"); - - return modelAndView; - } - - /** - * 사원 정보를 조회한다. - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/org/selectPartEmpInfAjax.do") - public ModelAndView selectPartAccountAjax(@ModelAttribute("empInfVO") EmpInfVO empInfVO, ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - List empList = orgChartManageService.selectPartEmpInf(empInfVO); - - model.addAttribute("empList", empList); - modelAndView.addObject("status", "success"); - - return modelAndView; - } - - /** - * 사원 정보를 등록한다. - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/org/insertEmpInfAjax.do") - public ModelAndView insertEmpInfAjax(@ModelAttribute("empInfVO") EmpInfVO empInfVO, ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - orgChartManageService.insertEmpInf(empInfVO); - - modelAndView.addObject("status", "success"); - - return modelAndView; - } - - /** - * 사원 정보를 수정한다. - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/org/updateEmpInfAjax.do") - public ModelAndView updateEmpInfAjax(@ModelAttribute("empInfVO") EmpInfVO empInfVO, ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - orgChartManageService.updateEmpInf(empInfVO); - - modelAndView.addObject("status", "success"); - - return modelAndView; - } - - /** - * 사원 정보를 삭제한다. - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/org/deleteEmpInfAjax.do") - public ModelAndView deleteEmpInf(@ModelAttribute("empInfVO") EmpInfVO empInfVO, ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - orgChartManageService.deleteEmpInf(empInfVO); - - modelAndView.addObject("status", "success"); - - return modelAndView; - } - -} diff --git a/src/main/java/itn/let/cop/resve/service/Resve.java b/src/main/java/itn/let/cop/resve/service/Resve.java deleted file mode 100644 index 1b1890f..0000000 --- a/src/main/java/itn/let/cop/resve/service/Resve.java +++ /dev/null @@ -1,851 +0,0 @@ -package itn.let.cop.resve.service; - -import java.io.Serializable; - -/** - * 대관관리 정보를 담기위한 엔티티 클래스 - * @author 공통 서비스 개발팀 이삼섭 - * @since 2009.03.12 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- * 
- *   수정일      수정자          수정내용
- *  -------    --------    ---------------------------
- *  2009.03.12  이삼섭          최초 생성
- *  2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *  
- *  
- */ -@SuppressWarnings("serial") -public class Resve implements Serializable { - - /** 대관IDX */ - private long applyNum = 0L; - - /** 신청자명 */ - private String userName = ""; - - /** 신청자구분(개인:P,법인:G) */ - private String userType = ""; - - /** 신청자구분명 */ - private String userTypeNm = ""; - - /** EMAIL */ - private String email = ""; - - /** EMAIL1 */ - private String email1 = ""; - - /** EMAIL2 */ - private String email2 = ""; - - /** EMAIL select */ - private String emailSelect = ""; - - /** 사용자화면게시여부 */ - private String display = ""; - - /** 메인화면게시여부 */ - private String maindisplay = ""; - - /** 전시시작일 */ - private String resSdate = ""; - - /** 전시종료일 */ - private String resEdate = ""; - - /** 신청일자 */ - private String resStart = ""; - - /** 신청상태(그룹코드:00015) */ - private String resState = ""; - - /** 신청상태명 */ - private String resStateNm = ""; - - /** 삭제구분 D:삭제 */ - private String recordStatus = ""; - - /** 전시구분(d:대관전시,g:기획전시) */ - private String exDevise = ""; - - /** 전시명 */ - private String exName = ""; - - /** 전시구성및안내 */ - private String exExplain = ""; - - /** 관람시간 */ - private String exHours = ""; - - /** 전시관1 */ - private String exRoom1 = ""; - - /** 전시관2 */ - private String exRoom2 = ""; - - /** 전시관3 */ - private String exRoom3 = ""; - - /** 전시관4 */ - private String exRoom4 = ""; - - /** 교육장 */ - private String exRoom5 = ""; - - /** 세미나실 */ - private String exRoom6 = ""; - - /** 전화번호1 */ - private String telHome1 = ""; - - /** 전화번호2 */ - private String telHome2 = ""; - - /** 전화번호3 */ - private String telHome3 = ""; - - /** 휴대폰1 */ - private String telMobile1 = ""; - - /** 휴대폰2 */ - private String telMobile2 = ""; - - /** 휴대폰3 */ - private String telMobile3 = ""; - - /** 작가및단체명 */ - private String authorName = ""; - - /** 회사명(또는 단체명) */ - private String companyName = ""; - - /** 사업자등록번호 */ - private String companyNumber = ""; - - /** 그룹명 */ - private String groupName = ""; - - /** 대표이미지 파일id */ - private String imgAtchFileId = ""; - - /** 대표이미지(썸네일) 파일id */ - private String thumbAtchFileId = ""; - - /** 포트폴리오 파일id */ - private String portfolioAtchFileId = ""; - - /** 최종수정자 ID */ - private String memberId = ""; - - /** 전시관 */ - private String selectExRoom = ""; - - /** 여러날짜 쿼리 조건절 삽입용 */ - private String searchDate = ""; - - /** 여러날짜 쿼리 조건절 삽입용 */ - private String searchDate1 = ""; - - /** 달력일자(사용자 대관관리현황) */ - private String strDate = ""; - - /** 교육장 AM */ - private String exRoom5Am = ""; - - /** 교육 */ - private String exRoom5Pm = ""; - - /** - * 전시관 Set - */ - public void setSelectExRoom(String selectExRoom) { - this.selectExRoom = selectExRoom; - - switch (selectExRoom) { - case "1" : this.exRoom1 = "r"; break; - case "2" : this.exRoom2 = "r"; break; - case "3" : this.exRoom3 = "r"; break; - case "4" : - this.exRoom2 = "r"; this.exRoom3 = "r"; - break; - case "5" : - this.exRoom1 = "r"; this.exRoom2 = "r"; this.exRoom3 = "r"; - break; - case "6" : this.exRoom5 = "r"; break; - } - } - - /** 목록 - 전시관명(복수) */ - public String getExRooms() { - String exRooms = ""; - String exType = ""; // g:전시관, e:교육장 - - if (this.exRoom1 != null && ("r").equals(this.exRoom1)) { - exRooms += " 1"; exType = "g"; - } - if (this.exRoom2 != null && ("r").equals(this.exRoom2)) { - exRooms += " 2"; exType = "g"; - } - if (this.exRoom3 != null && ("r").equals(this.exRoom3)) { - exRooms += " 3"; exType = "g"; - } - if (this.exRoom4 != null && ("r").equals(this.exRoom4)) { - exRooms += " 4"; exType = "g"; - } - - if (this.exRoom5 != null && ("r").equals(this.exRoom5)) { - exType = "e"; - } - - if (("g").equals(exType)) { - exRooms += "전시관"; - } else if (("e").equals(exType)) { - exRooms = "교육장"; - } - - return exRooms; - } - - /** - * @return the applyNum - */ - public long getApplyNum() { - return applyNum; - } - - /** - * @param applyNum the applyNum to set - */ - public void setApplyNum(long applyNum) { - this.applyNum = applyNum; - } - - /** - * @return the userName - */ - public String getUserName() { - return userName; - } - - /** - * @param userName the userName to set - */ - public void setUserName(String userName) { - this.userName = userName; - } - - /** - * @return the userType - */ - public String getUserType() { - return userType; - } - - /** - * @param userType the userType to set - */ - public void setUserType(String userType) { - this.userType = userType; - } - - /** - * @return the email - */ - public String getEmail() { - return email; - } - - /** - * @param email the email to set - */ - public void setEmail(String email) { - this.email = email; - } - - /** - * @return the display - */ - public String getDisplay() { - return display; - } - - /** - * @param display the display to set - */ - public void setDisplay(String display) { - this.display = display; - } - - /** - * @return the maindisplay - */ - public String getMaindisplay() { - return maindisplay; - } - - /** - * @param maindisplay the maindisplay to set - */ - public void setMaindisplay(String maindisplay) { - this.maindisplay = maindisplay; - } - - /** - * @return the resSdate - */ - public String getResSdate() { - return resSdate; - } - - /** - * @param resSdate the resSdate to set - */ - public void setResSdate(String resSdate) { - this.resSdate = resSdate; - } - - /** - * @return the resEdate - */ - public String getResEdate() { - return resEdate; - } - - /** - * @param resEdate the resEdate to set - */ - public void setResEdate(String resEdate) { - this.resEdate = resEdate; - } - - /** - * @return the resStart - */ - public String getResStart() { - return resStart; - } - - /** - * @param resStart the resStart to set - */ - public void setResStart(String resStart) { - this.resStart = resStart; - } - - /** - * @return the resState - */ - public String getResState() { - return resState; - } - - /** - * @param resState the resState to set - */ - public void setResState(String resState) { - this.resState = resState; - } - - /** - * @return the recordStatus - */ - public String getRecordStatus() { - return recordStatus; - } - - /** - * @param recordStatus the recordStatus to set - */ - public void setRecordStatus(String recordStatus) { - this.recordStatus = recordStatus; - } - - /** - * @return the exDevise - */ - public String getExDevise() { - return exDevise; - } - - /** - * @param exDevise the exDevise to set - */ - public void setExDevise(String exDevise) { - this.exDevise = exDevise; - } - - /** - * @return the exName - */ - public String getExName() { - return exName; - } - - /** - * @param exName the exName to set - */ - public void setExName(String exName) { - this.exName = exName; - } - - /** - * @return the exExplain - */ - public String getExExplain() { - return exExplain; - } - - /** - * @param exExplain the exExplain to set - */ - public void setExExplain(String exExplain) { - this.exExplain = exExplain; - } - - /** - * @return the exRoom1 - */ - public String getExRoom1() { - return exRoom1; - } - - /** - * @param exRoom1 the exRoom1 to set - */ - public void setExRoom1(String exRoom1) { - this.exRoom1 = exRoom1; - } - - /** - * @return the exRoom2 - */ - public String getExRoom2() { - return exRoom2; - } - - /** - * @param exRoom2 the exRoom2 to set - */ - public void setExRoom2(String exRoom2) { - this.exRoom2 = exRoom2; - } - - /** - * @return the exRoom3 - */ - public String getExRoom3() { - return exRoom3; - } - - /** - * @param exRoom3 the exRoom3 to set - */ - public void setExRoom3(String exRoom3) { - this.exRoom3 = exRoom3; - } - - /** - * @return the exRoom4 - */ - public String getExRoom4() { - return exRoom4; - } - - /** - * @param exRoom4 the exRoom4 to set - */ - public void setExRoom4(String exRoom4) { - this.exRoom4 = exRoom4; - } - - /** - * @return the exRoom5 - */ - public String getExRoom5() { - return exRoom5; - } - - /** - * @param exRoom5 the exRoom5 to set - */ - public void setExRoom5(String exRoom5) { - this.exRoom5 = exRoom5; - } - - /** - * @return the exRoom6 - */ - public String getExRoom6() { - return exRoom6; - } - - /** - * @param exRoom6 the exRoom6 to set - */ - public void setExRoom6(String exRoom6) { - this.exRoom6 = exRoom6; - } - - /** - * @return the telHome1 - */ - public String getTelHome1() { - return telHome1; - } - - /** - * @param telHome1 the telHome1 to set - */ - public void setTelHome1(String telHome1) { - this.telHome1 = telHome1; - } - - /** - * @return the telHome2 - */ - public String getTelHome2() { - return telHome2; - } - - /** - * @param telHome2 the telHome2 to set - */ - public void setTelHome2(String telHome2) { - this.telHome2 = telHome2; - } - - /** - * @return the telHome3 - */ - public String getTelHome3() { - return telHome3; - } - - /** - * @param telHome3 the telHome3 to set - */ - public void setTelHome3(String telHome3) { - this.telHome3 = telHome3; - } - - /** - * @return the telMobile1 - */ - public String getTelMobile1() { - return telMobile1; - } - - /** - * @param telMobile1 the telMobile1 to set - */ - public void setTelMobile1(String telMobile1) { - this.telMobile1 = telMobile1; - } - - /** - * @return the telMobile2 - */ - public String getTelMobile2() { - return telMobile2; - } - - /** - * @param telMobile2 the telMobile2 to set - */ - public void setTelMobile2(String telMobile2) { - this.telMobile2 = telMobile2; - } - - /** - * @return the telMobile3 - */ - public String getTelMobile3() { - return telMobile3; - } - - /** - * @param telMobile3 the telMobile3 to set - */ - public void setTelMobile3(String telMobile3) { - this.telMobile3 = telMobile3; - } - - /** - * @return the authorName - */ - public String getAuthorName() { - return authorName; - } - - /** - * @param authorName the authorName to set - */ - public void setAuthorName(String authorName) { - this.authorName = authorName; - } - - /** - * @return the companyName - */ - public String getCompanyName() { - return companyName; - } - - /** - * @param companyName the companyName to set - */ - public void setCompanyName(String companyName) { - this.companyName = companyName; - } - - /** - * @return the companyNumber - */ - public String getCompanyNumber() { - return companyNumber; - } - - /** - * @param companyNumber the companyNumber to set - */ - public void setCompanyNumber(String companyNumber) { - this.companyNumber = companyNumber; - } - - /** - * @return the groupName - */ - public String getGroupName() { - return groupName; - } - - /** - * @param groupName the groupName to set - */ - public void setGroupName(String groupName) { - this.groupName = groupName; - } - - /** - * @return the imgAtchFileId - */ - public String getImgAtchFileId() { - return imgAtchFileId; - } - - /** - * @param imgAtchFileId the imgAtchFileId to set - */ - public void setImgAtchFileId(String imgAtchFileId) { - this.imgAtchFileId = imgAtchFileId; - } - - /** - * @return the thumbAtchFileId - */ - public String getThumbAtchFileId() { - return thumbAtchFileId; - } - - /** - * @param thumbAtchFileId the thumbAtchFileId to set - */ - public void setThumbAtchFileId(String thumbAtchFileId) { - this.thumbAtchFileId = thumbAtchFileId; - } - - /** - * @return the portfolioAtchFileId - */ - public String getPortfolioAtchFileId() { - return portfolioAtchFileId; - } - - /** - * @param portfolioAtchFileId the portfolioAtchFileId to set - */ - public void setPortfolioAtchFileId(String portfolioAtchFileId) { - this.portfolioAtchFileId = portfolioAtchFileId; - } - - /** - * @return the userTypeNm - */ - public String getUserTypeNm() { - return userTypeNm; - } - - /** - * @param userTypeNm the userTypeNm to set - */ - public void setUserTypeNm(String userTypeNm) { - this.userTypeNm = userTypeNm; - } - - /** - * @return the resStateNm - */ - public String getResStateNm() { - return resStateNm; - } - - /** - * @param resStateNm the resStateNm to set - */ - public void setResStateNm(String resStateNm) { - this.resStateNm = resStateNm; - } - - /** - * @return the exHours - */ - public String getExHours() { - return exHours; - } - - /** - * @param exHours the exHours to set - */ - public void setExHours(String exHours) { - this.exHours = exHours; - } - - /** - * @return the email1 - */ - public String getEmail1() { - return email1; - } - - /** - * @param email1 the email1 to set - */ - public void setEmail1(String email1) { - this.email1 = email1; - } - - /** - * @return the email2 - */ - public String getEmail2() { - return email2; - } - - /** - * @param email2 the email2 to set - */ - public void setEmail2(String email2) { - this.email2 = email2; - } - - /** - * @return the emailSelect - */ - public String getEmailSelect() { - return emailSelect; - } - - /** - * @param emailSelect the emailSelect to set - */ - public void setEmailSelect(String emailSelect) { - this.emailSelect = emailSelect; - } - - /** - * @return the memberId - */ - public String getMemberId() { - return memberId; - } - - /** - * @param memberId the memberId to set - */ - public void setMemberId(String memberId) { - this.memberId = memberId; - } - - /** - * @return the selectExroom - */ - public String getSelectExRoom() { - return selectExRoom; - } - - /** - * @return the searchDate - */ - public String getSearchDate() { - return searchDate; - } - - /** - * @param searchDate the searchDate to set - */ - public void setSearchDate(String searchDate) { - this.searchDate = searchDate; - } - - /** - * @return the searchDate1 - */ - public String getSearchDate1() { - return searchDate1; - } - - /** - * @param searchDate1 the searchDate1 to set - */ - public void setSearchDate1(String searchDate1) { - this.searchDate1 = searchDate1; - } - - /** - * @return the strDate - */ - public String getStrDate() { - return strDate; - } - - /** - * @param strDate the strDate to set - */ - public void setStrDate(String strDate) { - this.strDate = strDate; - } - - /** - * @return the exRoom5Am - */ - public String getExRoom5Am() { - return exRoom5Am; - } - - /** - * @param exRoom5Am the exRoom5Am to set - */ - public void setExRoom5Am(String exRoom5Am) { - this.exRoom5Am = exRoom5Am; - } - - /** - * @return the exRoom5Pm - */ - public String getExRoom5Pm() { - return exRoom5Pm; - } - - /** - * @param exRoom5Pm the exRoom5Pm to set - */ - public void setExRoom5Pm(String exRoom5Pm) { - this.exRoom5Pm = exRoom5Pm; - } - -} \ No newline at end of file diff --git a/src/main/java/itn/let/cop/resve/service/ResveManageService.java b/src/main/java/itn/let/cop/resve/service/ResveManageService.java deleted file mode 100644 index 1d82b46..0000000 --- a/src/main/java/itn/let/cop/resve/service/ResveManageService.java +++ /dev/null @@ -1,101 +0,0 @@ -package itn.let.cop.resve.service; - -import java.util.List; -import java.util.Map; - -import egovframework.rte.psl.dataaccess.util.EgovMap; -import itn.com.cmm.ComDefaultVO; - -/** - * 게시판 속성관리를 위한 서비스 인터페이스 클래스 - * @author 공통 서비스 개발팀 이삼섭 - * @since 2009.03.12 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- * 
- *   수정일      수정자          수정내용
- *  -------    --------    ---------------------------
- *  2009.03.12  이삼섭          최초 생성
- *  2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *  
- *  
- */ -public interface ResveManageService { - - /** - * 등록된 대관신청 정보를 삭제한다. - * @param Resve - * - * @param resve - * @exception Exception Exception - */ - public void deleteResveManage(Resve resve) - throws Exception; - - /** - * 대관관리 정보를 생성한다. - * @param resve - * - * @exception Exception Exception - */ - public void insertResveManage(Resve resve) - throws Exception; - - /** - * 대관관리 한 건을 상세조회한다. - * @param ResveVO - * - * @param searchVO - * @exception Exception Exception - */ - public ResveVO selectResveManageInf(ResveVO searchVO) - throws Exception; - - /** - * 대관신청 관리 목록을 조회 한다. - * @param ResveVO - * - * @param searchVO - * @exception Exception Exception - */ - public Map selectResveManageList(ResveVO searchVO) - throws Exception; - - /** - * 대관관리 정보를 수정한다. - * @param resve - * @exception Exception Exception - */ - public void updateResveManageInf(Resve resve) - throws Exception; - - /** - * 대관신청 전시기간 시작일 가능 일자 조회(화면 달력 표시. 전시관/교육장) - * @param Resve - * - * @exception Exception Exception - */ - public List resveResSdateList(Resve vo) throws Exception; - - /** - * 대관신청 대관가능일 가능여부 - * @param Resve - * - * @exception Exception Exception - */ - public int resvePosbleDate(Resve vo) throws Exception; - - /** - * (사용자)대관신청 관리 목록을 조회 한다. (달력) - * @param ResveVO - * - * @param searchVO - * @exception Exception Exception - */ - public List selectResveManageListWeb(ResveVO searchVO) - throws Exception; - -} \ No newline at end of file diff --git a/src/main/java/itn/let/cop/resve/service/ResveVO.java b/src/main/java/itn/let/cop/resve/service/ResveVO.java deleted file mode 100644 index 91afae8..0000000 --- a/src/main/java/itn/let/cop/resve/service/ResveVO.java +++ /dev/null @@ -1,405 +0,0 @@ -package itn.let.cop.resve.service; - -import java.io.Serializable; - -import org.apache.commons.lang3.builder.ToStringBuilder; - -/** - * 대관관리 정보를 관리하기 위한 VO 클래스 - * @author 공통 서비스 개발팀 이삼섭 - * @since 2009.03.12 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- * 
- *   수정일      수정자          수정내용
- *  -------    --------    ---------------------------
- *  2009.03.12  이삼섭          최초 생성
- *  2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성 
- *  
- *  
- */ -@SuppressWarnings("serial") -public class ResveVO extends Resve implements Serializable { - - /** 검색시작일 */ - private String searchBgnDe = ""; - - /** 검색조건 */ - private String searchCnd = ""; - - /** 검색종료일 */ - private String searchEndDe = ""; - - /** 검색단어 */ - private String searchWrd = ""; - - /** 정렬순서(DESC,ASC) */ - private String sortOrdr = ""; - - /** 검색사용여부 */ - private String searchUseYn = ""; - - /** 현재페이지 */ - private int pageIndex = 1; - - /** 페이지갯수 */ - private int pageUnit = 10; - - /** 페이지사이즈 */ - private int pageSize = 10; - - /** firstIndex */ - private int firstIndex = 1; - - /** lastIndex */ - private int lastIndex = 1; - - /** recordCountPerPage */ - private int recordCountPerPage = 10; - - /** rowNo */ - private int rowNo = 0; - - /** 검색 삭제포함 */ - private String delSttus = ""; - - /** 사용자 대관현황 달력 - 검색년도 */ - private String searchYear = ""; - - /** 사용자 대관현황 달력 - 검색월 */ - private String searchMonth = ""; - - /** 사용자 대관현황 달력 - 검색일자 */ - private String searchDate = ""; - - /** 사용자 대관현황 달력 - 검색일자 */ - private String searchDate1 = ""; - - /** - * searchBgnDe attribute를 리턴한다. - * - * @return the searchBgnDe - */ - public String getSearchBgnDe() { - return searchBgnDe; - } - - /** - * searchBgnDe attribute 값을 설정한다. - * - * @param searchBgnDe - * the searchBgnDe to set - */ - public void setSearchBgnDe(String searchBgnDe) { - this.searchBgnDe = searchBgnDe; - } - - /** - * searchCnd attribute를 리턴한다. - * - * @return the searchCnd - */ - public String getSearchCnd() { - return searchCnd; - } - - /** - * searchCnd attribute 값을 설정한다. - * - * @param searchCnd - * the searchCnd to set - */ - public void setSearchCnd(String searchCnd) { - this.searchCnd = searchCnd; - } - - /** - * searchEndDe attribute를 리턴한다. - * - * @return the searchEndDe - */ - public String getSearchEndDe() { - return searchEndDe; - } - - /** - * searchEndDe attribute 값을 설정한다. - * - * @param searchEndDe - * the searchEndDe to set - */ - public void setSearchEndDe(String searchEndDe) { - this.searchEndDe = searchEndDe; - } - - /** - * searchWrd attribute를 리턴한다. - * - * @return the searchWrd - */ - public String getSearchWrd() { - return searchWrd; - } - - /** - * searchWrd attribute 값을 설정한다. - * - * @param searchWrd - * the searchWrd to set - */ - public void setSearchWrd(String searchWrd) { - this.searchWrd = searchWrd; - } - - /** - * sortOrdr attribute를 리턴한다. - * - * @return the sortOrdr - */ - public String getSortOrdr() { - return sortOrdr; - } - - /** - * sortOrdr attribute 값을 설정한다. - * - * @param sortOrdr - * the sortOrdr to set - */ - public void setSortOrdr(String sortOrdr) { - this.sortOrdr = sortOrdr; - } - - /** - * searchUseYn attribute를 리턴한다. - * - * @return the searchUseYn - */ - public String getSearchUseYn() { - return searchUseYn; - } - - /** - * searchUseYn attribute 값을 설정한다. - * - * @param searchUseYn - * the searchUseYn to set - */ - public void setSearchUseYn(String searchUseYn) { - this.searchUseYn = searchUseYn; - } - - /** - * pageIndex attribute를 리턴한다. - * - * @return the pageIndex - */ - public int getPageIndex() { - return pageIndex; - } - - /** - * pageIndex attribute 값을 설정한다. - * - * @param pageIndex - * the pageIndex to set - */ - public void setPageIndex(int pageIndex) { - this.pageIndex = pageIndex; - } - - /** - * pageUnit attribute를 리턴한다. - * - * @return the pageUnit - */ - public int getPageUnit() { - return pageUnit; - } - - /** - * pageUnit attribute 값을 설정한다. - * - * @param pageUnit - * the pageUnit to set - */ - public void setPageUnit(int pageUnit) { - this.pageUnit = pageUnit; - } - - /** - * pageSize attribute를 리턴한다. - * - * @return the pageSize - */ - public int getPageSize() { - return pageSize; - } - - /** - * pageSize attribute 값을 설정한다. - * - * @param pageSize - * the pageSize to set - */ - public void setPageSize(int pageSize) { - this.pageSize = pageSize; - } - - /** - * firstIndex attribute를 리턴한다. - * - * @return the firstIndex - */ - public int getFirstIndex() { - return firstIndex; - } - - /** - * firstIndex attribute 값을 설정한다. - * - * @param firstIndex - * the firstIndex to set - */ - public void setFirstIndex(int firstIndex) { - this.firstIndex = firstIndex; - } - - /** - * lastIndex attribute를 리턴한다. - * - * @return the lastIndex - */ - public int getLastIndex() { - return lastIndex; - } - - /** - * lastIndex attribute 값을 설정한다. - * - * @param lastIndex - * the lastIndex to set - */ - public void setLastIndex(int lastIndex) { - this.lastIndex = lastIndex; - } - - /** - * recordCountPerPage attribute를 리턴한다. - * - * @return the recordCountPerPage - */ - public int getRecordCountPerPage() { - return recordCountPerPage; - } - - /** - * recordCountPerPage attribute 값을 설정한다. - * - * @param recordCountPerPage - * the recordCountPerPage to set - */ - public void setRecordCountPerPage(int recordCountPerPage) { - this.recordCountPerPage = recordCountPerPage; - } - - /** - * rowNo attribute를 리턴한다. - * - * @return the rowNo - */ - public int getRowNo() { - return rowNo; - } - - /** - * rowNo attribute 값을 설정한다. - * - * @param rowNo - * the rowNo to set - */ - public void setRowNo(int rowNo) { - this.rowNo = rowNo; - } - - /** - * toString 메소드를 대치한다. - */ - public String toString() { - return ToStringBuilder.reflectionToString(this); - } - - /** - * @return the delSttus - */ - public String getDelSttus() { - return delSttus; - } - - /** - * @param delSttus the delSttus to set - */ - public void setDelSttus(String delSttus) { - this.delSttus = delSttus; - } - - /** - * @return the searcrYear - */ - public String getSearchYear() { - return searchYear; - } - - /** - * @param searcrYear the searcrYear to set - */ - public void setSearchYear(String searcrYear) { - this.searchYear = searcrYear; - } - - /** - * @return the searchMonth - */ - public String getSearchMonth() { - return searchMonth; - } - - /** - * @param searchMonth the searchMonth to set - */ - public void setSearchMonth(String searchMonth) { - this.searchMonth = searchMonth; - } - - /** - * @return the searchDate - */ - public String getSearchDate() { - return searchDate; - } - - /** - * @param searchDate the searchDate to set - */ - public void setSearchDate(String searchDate) { - this.searchDate = searchDate; - } - - /** - * @return the searchDate1 - */ - public String getSearchDate1() { - return searchDate1; - } - - /** - * @param searchDate1 the searchDate1 to set - */ - public void setSearchDate1(String searchDate1) { - this.searchDate1 = searchDate1; - } - -} diff --git a/src/main/java/itn/let/cop/resve/service/impl/ResveManageDAO.java b/src/main/java/itn/let/cop/resve/service/impl/ResveManageDAO.java deleted file mode 100644 index dfd08e1..0000000 --- a/src/main/java/itn/let/cop/resve/service/impl/ResveManageDAO.java +++ /dev/null @@ -1,267 +0,0 @@ -package itn.let.cop.resve.service.impl; -import java.util.List; - -import org.springframework.stereotype.Repository; - -import egovframework.rte.psl.dataaccess.EgovAbstractDAO; -import egovframework.rte.psl.dataaccess.util.EgovMap; -import itn.com.cmm.ComDefaultVO; -import itn.let.cop.resve.service.Resve; -import itn.let.cop.resve.service.ResveVO; - -/** - * 게시판 속성정보 관리를 위한 데이터 접근 클래스 - * @author 공통 서비스 개발팀 이삼섭 - * @since 2009.03.12 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일      수정자          수정내용
- *  -------    --------    ---------------------------
- *  2009.03.12  이삼섭          최초 생성
- *  2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
- *
- *  
- */ -@Repository("ResveManageDAO") -public class ResveManageDAO extends EgovAbstractDAO { - - /** - * 등록된 게시판 속성정보를 삭제한다. - * - * @param Resve - */ - public void deleteResveManage(Resve resve) throws Exception { - update("ResveManageDAO.deleteResveManage", resve); - } - - /** - * 대관신청 관리 목록을 조회한다. - * - * @param ResveVO - */ - @SuppressWarnings("unchecked") - public List selectResveManageList(ResveVO vo) throws Exception { - return (List) list("ResveManageDAO.selectResveManageList", vo); - } - - /** - * 사용 - * 게시판 속성정보 목록 숫자를 조회한다 - * - * @param vo - * @return - * @throws Exception - */ - public int selectResveManageListCnt(ResveVO vo) throws Exception { - return (Integer)select("ResveManageDAO.selectResveManageListCnt", vo); - } - - /** - * 템플릿의 유효여부를 점검한다. - * - * @param ResveVO - */ - public boolean validateTemplate(ResveVO vo) throws Exception { - return true; - } - - /** - * 유효한 게시판 목록을 불러온다. - * - * @param vo - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectAllBBSMasteInf(ResveVO vo) throws Exception { - // 커뮤니티, 동호회의 게시판이 나오지 않도록 LETTNBBSUSE 테이블과 Join 필요 - return (List) list("ResveManageDAO.selectAllBBSMaster", vo); - } - - /** - * 사용중인 게시판 속성정보 목록을 조회한다. - * - * @param ResveVO - */ - @SuppressWarnings("unchecked") - public List selectBdMstrListByTrget(ResveVO vo) throws Exception { - return (List) list("ResveManageDAO.selectBdMstrListByTrget", vo); - } - - /** - * 사용중인 게시판 속성정보 목록 숫자를 조회한다 - * - * @param vo - * @return - * @throws Exception - */ - public int selectBdMstrListCntByTrget(ResveVO vo) throws Exception { - return (Integer)select("ResveManageDAO.selectBdMstrListCntByTrget", vo); - } - - /** - * 커뮤니티, 동호회등 게시판 사용등록이 된 게시판 목록 전체를 불러온다. - * - * @param vo - * @return - * @throws Exception - */ - @SuppressWarnings("unchecked") - public List selectAllBdMstrByTrget(ResveVO vo) throws Exception { - return (List) list("ResveManageDAO.selectAllBdMstrByTrget", vo); - } - - /** - * 사용 중이지 않은 게시판 속성정보 목록을 조회한다. - * - * @param ResveVO - */ - @SuppressWarnings("unchecked") - public List selectNotUsedBdMstrList(ResveVO vo) throws Exception { - return (List) list("ResveManageDAO.selectNotUsedBdMstrList", vo); - } - - /** - * 사용 중이지 않은 게시판 속성정보 목록 숫자를 조회한다 - * - * @param vo - * @return - * @throws Exception - */ - public int selectNotUsedBdMstrListCnt(ResveVO vo) throws Exception { - return (Integer)select("ResveManageDAO.selectNotUsedBdMstrListCnt", vo); - } - - /** - * 신규 대관관리 정보를 등록한다. - * - * @param Resve - */ - public void insertResveManage(Resve resve) throws Exception { - update("ResveManageDAO.insertResveManage", resve); - } - - /** - * 대관관리 정보 한 건을 상세조회 한다. - * - * @param ResveVO - */ - public ResveVO selectResveManageInf(ResveVO searchVO) throws Exception { - return (ResveVO)select("ResveManageDAO.selectResveManageInf", searchVO); - } - - /** - * 대관관리 정보를 수정한다. - * - * @param Resve - */ - public void updateResveManageInf(Resve resve) throws Exception { - update("ResveManageDAO.updateResveManageInf", resve); - } - - - /** - * 게시판 관리자 정보를 등록한다. - * - * @param ResveVO - */ - public void insertBBSMngInf(Resve vo) throws Exception { - insert("ResveManageDAO.insertBBSMngInf", vo); - } - - /** - * 게시판 관리자 유무를 조회한다. - * - * @param vo - * @return - * @throws Exception - */ - public int selectBBSMngInfCnt(Resve vo) throws Exception { - return (Integer)select("ResveManageDAO.selectBBSMngInfCnt", vo); - } - - /** - * 게시판 관리자 테이블 max 키값을 조회한다. - * - * @param vo - * @return - * @throws Exception - */ - public int selectBBSMaxMngId() throws Exception { - return (Integer)select("ResveManageDAO.selectBBSMaxMngId"); - } - - /** - * 게시판 관리자 정보를 삭제한다. - * - * @param vo - * @return - * @throws Exception - */ - public void deleteBBSMngInf(Resve vo) throws Exception { - delete("ResveManageDAO.deleteBBSMngInf", vo); - } - - /** - * 게시판 ID 정보의 목록을 조회 한다. - * - * @param ComDefaultVO - */ - @SuppressWarnings("unchecked") - public List selectBBSIdList(ComDefaultVO vo) throws Exception { - return (List) list("ResveManageDAO.selectBBSIdList", vo); - } - - /** - * 게시판 ID 정보의 목록 숫자를 조회 한다. - * - * @param ComDefaultVO - */ - public int selectBBSIdListCnt(ComDefaultVO vo) throws Exception { - return (Integer)select("ResveManageDAO.selectBBSIdListCnt", vo); - } - - - /** - * 대관신청 전시기간 시작일 가능 일자 조회 (전시관) - * - * @param Resve - */ - @SuppressWarnings("unchecked") - public List resveResSdateList(Resve vo) throws Exception { - return (List) list("ResveManageDAO.resveResSdateList", vo); - } - - /** - * 대관신청 전시기간 시작일 가능 일자 조회 (교육장) - * - * @param Resve - */ - @SuppressWarnings("unchecked") - public List resveResSdateList1(Resve vo) throws Exception { - return (List) list("ResveManageDAO.resveResSdateList1", vo); - } - - /** - * 대관신청 대관가능일 가능여부 - * - * @param Resve - */ - public int resvePosbleDate(Resve vo) throws Exception { - return (Integer) select("ResveManageDAO.resvePosbleDate", vo); - } - - /** - * (사용자)대관신청 관리 목록을 조회 한다. (달력) - * - * @param ResveVO - */ - @SuppressWarnings("unchecked") - public List selectResveManageListWeb(ResveVO vo) throws Exception { - return (List) list("ResveManageDAO.selectResveManageListWeb", vo); - } -} diff --git a/src/main/java/itn/let/cop/resve/service/impl/ResveManageServiceImpl.java b/src/main/java/itn/let/cop/resve/service/impl/ResveManageServiceImpl.java deleted file mode 100644 index 629e455..0000000 --- a/src/main/java/itn/let/cop/resve/service/impl/ResveManageServiceImpl.java +++ /dev/null @@ -1,159 +0,0 @@ -package itn.let.cop.resve.service.impl; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - -import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.property.EgovPropertyService; -import egovframework.rte.psl.dataaccess.util.EgovMap; -import itn.com.cmm.ComDefaultVO; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.FileVO; -import itn.let.cop.com.service.EgovUserInfManageService; -import itn.let.cop.resve.service.Resve; -import itn.let.cop.resve.service.ResveManageService; -import itn.let.cop.resve.service.ResveVO; - -/** - * 게시판 속성관리를 위한 서비스 구현 클래스 - * @author 공통 서비스 개발팀 이삼섭 - * @since 2009.03.24 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일      수정자          수정내용
- *  -------    --------    ---------------------------
- *  2009.03.24  이삼섭          최초 생성
- *  2009.06.26	한성곤		   2단계 기능 추가 (댓글관리, 만족도조사)
- *  2011.08.31  JJY            경량환경 템플릿 커스터마이징버전 생성
- *
- *  
- */ -@Service("ResveManageService") -public class ResveManageServiceImpl extends EgovAbstractServiceImpl implements ResveManageService { - - @Resource(name = "ResveManageDAO") - private ResveManageDAO resveManageDAO; - - @Resource(name = "EgovUserInfManageService") - private EgovUserInfManageService userService; - - @Resource(name = "egovBBSMstrIdGnrService") - private EgovIdGnrService idgenService; - - @Resource(name = "propertiesService") - protected EgovPropertyService propertyService; - - @Resource(name = "EgovFileMngService") - private EgovFileMngService fileService; - - /** - * 등록된 대관신청 정보를 삭제한다. - * - */ - public void deleteResveManage(Resve resve) throws Exception { - resveManageDAO.deleteResveManage(resve); - FileVO fvo = new FileVO(); - - // 첨부파일 - if (resve.getThumbAtchFileId() != null && !"".equals(resve.getThumbAtchFileId())) { - fvo.setAtchFileId(resve.getThumbAtchFileId()); - fileService.deleteAllFileInf(fvo); - } - if (resve.getImgAtchFileId() != null && !"".equals(resve.getImgAtchFileId())) { - fvo.setAtchFileId(resve.getImgAtchFileId()); - fileService.deleteAllFileInf(fvo); - } - if (resve.getPortfolioAtchFileId() != null && !"".equals(resve.getPortfolioAtchFileId())) { - fvo.setAtchFileId(resve.getPortfolioAtchFileId()); - fileService.deleteAllFileInf(fvo); - } - } - - /** - * 대관신청 관리 목록을 조회 한다. - */ - public Map selectResveManageList(ResveVO searchVO) throws Exception { - List result = resveManageDAO.selectResveManageList(searchVO); - int cnt = resveManageDAO.selectResveManageListCnt(searchVO); - - Map map = new HashMap(); - - map.put("resultList", result); - map.put("resultCnt", Integer.toString(cnt)); - - return map; - } - - /** - * 신규 대관관리 정보를 생성한다. - * - * @see itn.let.cop.bbs.ResveManageService.service.EgovBBSAttributeManageService#insertBBSMastetInf(itn.let.cop.bbs.Resve.service.Resve) - */ - public void insertResveManage(Resve resve) throws Exception { - resveManageDAO.insertResveManage(resve); - } - - /** - * 대관관리 정보 한 건을 상세조회한다. - * - * @see itn.let.cop.bbs.ResveManageService.service.EgovBBSAttributeManageService#selectBBSMasterInf(itn.let.cop.bbs.ResveVO.service.ResveVO) - */ - public ResveVO selectResveManageInf(ResveVO searchVO) throws Exception { - ResveVO result = resveManageDAO.selectResveManageInf(searchVO); - - return result; - } - - /** - * 대관관리 정보를 수정한다. - * - */ - public void updateResveManageInf(Resve resve) throws Exception { - resveManageDAO.updateResveManageInf(resve); - } - - /** - * 대관신청 전시기간 시작일 가능 일자 조회 (화면 달력 표시. 전시관/교육장) - * @param Resve - * - * @exception Exception Exception - */ - public List resveResSdateList(Resve vo) throws Exception { - if (("r").equals(vo.getExRoom5())) { - // 교육장 - return resveManageDAO.resveResSdateList1(vo); - } else { - // 전시관 - return resveManageDAO.resveResSdateList(vo); - } - } - - /** - * 대관신청 대관가능일 가능여부 - * @param Resve - * - * @exception Exception Exception - */ - public int resvePosbleDate(Resve vo) throws Exception { - return resveManageDAO.resvePosbleDate(vo); - } - - /** - * (사용자)대관신청 관리 목록을 조회 한다. (달력) - */ - public List selectResveManageListWeb(ResveVO searchVO) throws Exception { - List result = resveManageDAO.selectResveManageListWeb(searchVO); - - return result; - } - -} diff --git a/src/main/java/itn/let/cop/resve/web/ResveManageController.java b/src/main/java/itn/let/cop/resve/web/ResveManageController.java deleted file mode 100644 index a8ddea5..0000000 --- a/src/main/java/itn/let/cop/resve/web/ResveManageController.java +++ /dev/null @@ -1,598 +0,0 @@ -package itn.let.cop.resve.web; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import javax.annotation.Resource; - -import org.apache.commons.lang3.ArrayUtils; -import org.json.simple.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.validation.BindingResult; -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.support.SessionStatus; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; -import org.springmodules.validation.commons.DefaultBeanValidator; - -import com.ibm.icu.util.StringTokenizer; - -import egovframework.rte.fdl.property.EgovPropertyService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.psl.dataaccess.util.EgovMap; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.ComDefaultCodeVO; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.service.FileVO; -import itn.let.cop.resve.service.Resve; -import itn.let.cop.resve.service.ResveManageService; -import itn.let.cop.resve.service.ResveVO; -import itn.let.sec.ram.service.AuthorManageVO; -import itn.let.sec.ram.service.EgovAuthorManageService; - -/** - * 대관신청 관리를 위한 컨트롤러 클래스 - * @author - * @since 2018.11.21 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일      수정자          수정내용
- *  -------    --------    ---------------------------
- *  2018.11.10               최초 생성
- *
- *  
- */ -@Controller -public class ResveManageController { - - @Resource(name = "ResveManageService") - private ResveManageService resveManageService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - @Resource(name = "propertiesService") - protected EgovPropertyService propertyService; - - @Autowired - private DefaultBeanValidator beanValidator; - - @Resource(name = "egovAuthorManageService") - private EgovAuthorManageService egovAuthorManageService; - - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name = "EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name = "EgovFileMngService") - private EgovFileMngService fileMngService; - - private static final Logger LOGGER = LoggerFactory.getLogger(ResveManageController.class); - /** - * 대관관리 목록을 조회한다. - * - * @param ResveVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/resve/selectResveManageList.do") - public String selectResveManageList(@ModelAttribute("searchVO") ResveVO resveVO, ModelMap model) throws Exception { - - resveVO.setPageUnit(propertyService.getInt("pageUnit")); - resveVO.setPageSize(propertyService.getInt("pageSize")); - - PaginationInfo paginationInfo = new PaginationInfo(); - - paginationInfo.setCurrentPageNo(resveVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(resveVO.getPageUnit()); - paginationInfo.setPageSize(resveVO.getPageSize()); - - resveVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - resveVO.setLastIndex(paginationInfo.getLastRecordIndex()); - resveVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - Map map = resveManageService.selectResveManageList(resveVO); - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - - model.addAttribute("resultList", map.get("resultList")); - model.addAttribute("resultCnt", map.get("resultCnt")); - model.addAttribute("paginationInfo", paginationInfo); - - return "cop/resve/resveManageList"; - } - - /** - * 신규 게시판 마스터 등록을 위한 등록페이지로 이동한다. - * - * @param boardMasterVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/resve/addResveManage.do") - public String addResve(@ModelAttribute("searchVO") ResveVO resveVO, @ModelAttribute("resve") Resve resve, - ModelMap model, BindingResult bindingResult, RedirectAttributes redirectAttributes) throws Exception { - - // 공통코드 및 권한목록 Set - setCodeNAuth(model); - - return "cop/resve/resveManageRegist"; - } - - /** - * 신규 대관관리 정보를 등록한다. - * - * @param resveVO - * @param resve - * @param status - * @return - * @throws Exception - */ - @RequestMapping("/cop/resve/insertResveManage.do") - public String insertBBSMasterInf(final MultipartHttpServletRequest multiRequest, @ModelAttribute("searchVO") ResveVO resveVO, @ModelAttribute("resve") Resve resve, BindingResult bindingResult, - SessionStatus status, ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - beanValidator.validate(resve, bindingResult); - if (bindingResult.hasErrors()) { - // 공통코드 및 권한목록 Set - setCodeNAuth(model); - return "cop/resve/resveManageRegist"; - } - - // 대관신청 희망일자 가능 여부 - int posbleDate = resveManageService.resvePosbleDate(resve); - - if (posbleDate > 0) { - // 공통코드 및 권한목록 Set - setCodeNAuth(model); - model.addAttribute("message", "대관 희망기간일이 가능하지 않습니다."); - return "cop/resve/resveManageRegist"; - } - - // 파일업로드 - final Map files = multiRequest.getFileMap(); - if (!files.isEmpty()) { - String storePath = "Globals.resveFileStorePath"; - long posblAtchFileSize = propertyService.getInt("posblAtchFileSize"); - int posblResveThumbAtchFileNum = propertyService.getInt("posblResveThumbAtchFileNum"); - int posblResveImgAtchFileNum = propertyService.getInt("posblResveImgAtchFileNum"); - int posblResvePortpolioAtchFileNum = propertyService.getInt("posblResvePortpolioAtchFileNum"); - - final Map thumbFiles = new HashMap(); - final Map imgFiles = new HashMap(); - final Map portpolioFiles = new HashMap(); - - Set keySet = files.keySet(); - Iterator keyItr = keySet.iterator(); - - while (keyItr.hasNext()) { - String key = keyItr.next(); - String fileCnd = !("").equals(key) ? key.split("_")[0] : ""; - String orginFileName = files.get(key).getOriginalFilename(); - - if ("".equals(orginFileName)) continue; - - switch (fileCnd) { - case "thumb" : thumbFiles.put(key, files.get(key)); break; - case "img" : imgFiles.put(key, files.get(key)); break; - case "portfolio" : portpolioFiles.put(key, files.get(key)) ; break; - } - } - - // 기 업로드 개수 - int atchFileCnt = 0; - - // 파일 개수/사이즈/확장자 체크 - if (!isPosblAtchFile(thumbFiles, "썸네일", model, atchFileCnt, posblResveThumbAtchFileNum, posblAtchFileSize, true)) { - model.addAttribute("resve", resve); - return "cop/resve/resveManageRegist"; - } - if (!isPosblAtchFile(imgFiles, "대표이미지", model, atchFileCnt, posblResveImgAtchFileNum, posblAtchFileSize, true)) { - model.addAttribute("resve", resve); - return "cop/resve/resveManageRegist"; - } - if (!isPosblAtchFile(portpolioFiles, "포트폴리오", model, atchFileCnt, posblResvePortpolioAtchFileNum, posblAtchFileSize, false)) { - model.addAttribute("resve", resve); - return "cop/resve/resveManageRegist"; - } - - List result = new ArrayList(); - result = fileUtil.parseFileInf(thumbFiles, "RESVE_", 0, "", storePath, ""); - String thumbAtchFileId = fileMngService.insertFileInfs(result); - - result = fileUtil.parseFileInf(imgFiles, "RESVE_", 0, "", storePath, ""); - String imgAtchFileId = fileMngService.insertFileInfs(result); - - result = fileUtil.parseFileInf(portpolioFiles, "RESVE_", 0, "", storePath, ""); - String portfolioAtchFileId = fileMngService.insertFileInfs(result); - - resve.setThumbAtchFileId(thumbAtchFileId); - resve.setImgAtchFileId(imgAtchFileId); - resve.setPortfolioAtchFileId(portfolioAtchFileId); - } - - resve.setMemberId(user.getUniqId()); // 최종수정자ID. (사용없음 참조용) - resveManageService.insertResveManage(resve); - - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.insert")); - return "redirect:/cop/resve/selectResveManageList.do"; - } - - /** - * 대관관리 상세내용을 조회한다. - * - * @param searchVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/resve/selectResveManage.do") - public String selectResveManageInf(@ModelAttribute("searchVO") ResveVO searchVO, ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - - ResveVO vo = resveManageService.selectResveManageInf(searchVO); - model.addAttribute("result", vo); - - // 공통코드 및 권한목록 Set - setCodeNAuth(model); - - return "cop/resve/resveManageUpdt"; - } - - /** - * 대관관리 정보를 수정한다. - * - * @param boardMasterVO - * @param boardMaster - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/cop/resve/updateResveManageInf.do") - public String updateResveManageInf(@ModelAttribute("searchVO") ResveVO resveVO, @ModelAttribute("resve") Resve resve, BindingResult bindingResult, - ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - - // 승인완료 선택 시 희망일자 가능여부 - if (("b").equals(resve.getResState())) { - ResveVO vo = resveManageService.selectResveManageInf(resveVO); - - // 대관신청 희망일자 가능 여부 - int posbleDate = resveManageService.resvePosbleDate(vo); - - if (posbleDate > 0) { - // 공통코드 및 권한목록 Set - setCodeNAuth(model); - model.addAttribute("message", "대관 희망기간일이 가능하지 않습니다."); - model.addAttribute("result", vo); - return "cop/resve/resveManageUpdt"; - } - } - - resveManageService.updateResveManageInf(resve); - - redirectAttributes.addAttribute("pageIndex", resveVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", resveVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", resveVO.getSearchWrd()); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); - return "redirect:/cop/resve/selectResveManageList.do"; - } - - /** - * 대관신청 전시기간 시작일 가능 일자 조회 - * @param commandMap 파라메터전달용 commandMap - * @param model 화면모델 - * @throws Exception - */ - @RequestMapping(value = "/cop/resve/resveResSdateListAjax.do") - public ModelAndView resveResSdateListAjax(@RequestParam Map commandMap) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - String searchYyyyMm = (String) commandMap.get("searchYyyyMm"); - String selectExRoom = (String) commandMap.get("selectExRoom"); - Resve vo = new Resve(); - vo.setSelectExRoom(selectExRoom); - - Calendar cal = Calendar.getInstance(); - int year = Integer.parseInt(searchYyyyMm.substring(0, 4)); - int month = Integer.parseInt(searchYyyyMm.substring(4, 6)); - cal.set(year, month-1, 1); - int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); - - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - - String date = sdf.format(cal.getTime()); - vo.setSearchDate(date); - - date = date.substring(0, 6) + (maxDay<10 ? "0"+maxDay : maxDay ); - vo.setSearchDate1(date); - - List result = resveManageService.resveResSdateList(vo); - - modelAndView.addObject("result", result); - - return modelAndView; - } - - /** - * 공통코드 및 권한목록 Set - * @param model - * @throws Exception - */ - private void setCodeNAuth(ModelMap model) throws Exception { - // 승인상태 - ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO(); - comDefaultCodeVO.setCodeId("ITN006"); - List codeResult = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO); - model.addAttribute("resStateList", codeResult); - // 신처자 구분 - comDefaultCodeVO.setCodeId("ITN007"); - codeResult = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO); - model.addAttribute("userTypeList", codeResult); - - AuthorManageVO authorManageVO = new AuthorManageVO(); - authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorAllList(authorManageVO)); - model.addAttribute("authorList", authorManageVO.getAuthorManageList()); - - // 파일개수/사이즈 - model.addAttribute("maxThumbFileNum", propertyService.getInt("posblResveThumbAtchFileNum")); - model.addAttribute("maxImgFileNum", propertyService.getInt("posblResveImgAtchFileNum")); - model.addAttribute("maxPortpolioFileNum", propertyService.getInt("posblResvePortpolioAtchFileNum")); - model.addAttribute("maxFileSize", propertyService.getInt("posblAtchFileSize")); - } - - - /** - * 선택된 대관신청정보를 삭제한다. - * @param applyNums String - * @param resveVO ResveVO - * @return String - * @exception Exception - */ - @RequestMapping(value = "/cop/resve/deleteResveManages.do") - public String deleteBBSMasterInfs(@RequestParam("applyNums") String applyNums, @ModelAttribute("ResveVO") ResveVO resveVO, RedirectAttributes redirectAttributes) - throws Exception { - - String[] strApplyNums = applyNums.split(";"); - for (int i = 0; i < strApplyNums.length; i++) { - String[] strApplyNumNAtchFileId = strApplyNums[i].split("\\|"); - resveVO.setApplyNum(Integer.parseInt(strApplyNumNAtchFileId[0])); - if (!("-").equals(strApplyNumNAtchFileId[1])) resveVO.setThumbAtchFileId(strApplyNumNAtchFileId[1]); - if (!("-").equals(strApplyNumNAtchFileId[2])) resveVO.setImgAtchFileId(strApplyNumNAtchFileId[2]); - if (!("-").equals(strApplyNumNAtchFileId[3])) resveVO.setPortfolioAtchFileId(strApplyNumNAtchFileId[3]); - - resveManageService.deleteResveManage(resveVO); - } - - resveVO.setPageIndex(1); - redirectAttributes.addAttribute("pageIndex", resveVO.getPageIndex()); - redirectAttributes.addAttribute("searchCnd", resveVO.getSearchCnd()); - redirectAttributes.addAttribute("searchWrd", resveVO.getSearchWrd()); - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); - return "redirect:/cop/resve/selectResveManageList.do"; - } - - /** - * 첨부파일 개수, 사이즈, 확장자 체크 - * @param fileList 파일리스트 - * @param name 파일 항목명 - * @param model - * @param atchFileCnt 기업로드된 파일 수 - * @param posblAtchFileCnt 업로드 가능 파일 수 - * @param posblAtchFileSize 업로드 가능 파일 사이즈 - * @param isImg 이미지 여부 - * @return boolean - * @throws Exception - */ - private boolean isPosblAtchFile(Map fileList, String name, ModelMap model, - int atchFileCnt, int posblAtchFileCnt, long posblAtchFileSize, boolean isImg) throws Exception { - - String flashMessage = ""; - boolean posblAtchFileFlag = true; - boolean posblAtchFileSizeFlag = true; - boolean posblAtchFileExtFlag = true; - - Iterator> itr = fileList.entrySet().iterator(); - MultipartFile file; - - while (itr.hasNext()) { - Entry entry = itr.next(); - file = entry.getValue(); - - long fileMg = file.getSize(); - String orginFileName = file.getOriginalFilename(); - int index = orginFileName.lastIndexOf("."); - String fileExt = orginFileName.substring(index + 1); - - if (fileMg > posblAtchFileSize) posblAtchFileSizeFlag = false; - - if (isImg) { - String[] imgExts = {"gif", "jpg", "bmp", "jpeg", "png"}; - if (ArrayUtils.indexOf(imgExts, fileExt.toLowerCase()) == -1) posblAtchFileExtFlag = false; - } - } - - if (!posblAtchFileExtFlag) { - flashMessage += name + ": 이미지 형식의 확장자만 업로드 가능합니다." + "\\n"; - posblAtchFileFlag = false; - } - if(!posblAtchFileSizeFlag) { - flashMessage += name + ": 파일사이즈가 초과되었습니다. 최대크기 " + posblAtchFileSize + "mb" + "\\n"; - posblAtchFileFlag = false; - } - if ((fileList.size()+atchFileCnt) > posblAtchFileCnt) { - flashMessage += name + ": 파일 개수가 초과되었습니다. 최대개수 " + posblAtchFileCnt + "개" + "\\n"; - posblAtchFileFlag = false; - } - - if (!posblAtchFileFlag) model.addAttribute("message", flashMessage); - - return posblAtchFileFlag; - } - - /** - * ************************************ 사용자 ************************************ - */ - - /** - * (사용자)대관현황 목록 데이터를 조회한다. (달력) - * - * @param ResveVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/resve/selectResveListAjax.do") - public ModelAndView selectResveListAjaxWeb(@ModelAttribute("searchVO") ResveVO resveVO, ModelMap model, @RequestParam Map commandMap) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - Calendar cal = Calendar.getInstance(); - String searchYear = (String) commandMap.get("searchYear"); - String searchMonth = (String) commandMap.get("searchMonth"); - - LOGGER.debug("resveList(web) input searchYear: " + searchYear + " searchMonth: " + searchMonth); - - if (searchYear == null || searchMonth == null - || ("").equals(searchYear) || ("").equals(searchMonth)) { - int iYear = cal.get(java.util.Calendar.YEAR); - int iMonth = cal.get(java.util.Calendar.MONTH); - - searchYear = Integer.toString(iYear); - searchMonth = (iMonth+1) < 10 ? "0" + Integer.toString(iMonth+1) : Integer.toString(iMonth+1); - } - resveVO.setSearchDate(searchYear + searchMonth + "01"); - - // 년월해당 전시관 내역 조회 - List result = resveManageService.selectResveManageListWeb(resveVO); - - // 조회 결과 파싱 - JSONObject resultList = new JSONObject(); - resultList.put("searchYear", searchYear); - resultList.put("searchMonth", searchMonth); - for (ResveVO vo : result) { - String[] exRoomArr = new String[5]; - exRoomArr[0] = vo.getExRoom1(); - exRoomArr[1] = vo.getExRoom2(); - exRoomArr[2] = vo.getExRoom3(); - exRoomArr[3] = vo.getExRoom5Am(); - exRoomArr[4] = vo.getExRoom5Pm(); - - JSONObject resveJson = new JSONObject(); - for (int i=0; i < exRoomArr.length; i++) { - StringTokenizer strTk = new StringTokenizer(exRoomArr[i], ","); - String tmpExRoom = strTk.hasMoreTokens() ? strTk.nextToken() : ""; - String[] tmpArr = tmpExRoom.split("\\|"); - - JSONObject infoJson = new JSONObject(); - - if (tmpArr.length == 3) { - infoJson.put("applyNum", tmpArr[0]); - infoJson.put("exName", tmpArr[1]); - infoJson.put("authorName", tmpArr[2]); - } else { - infoJson.put("applyNum", "null"); - } - infoJson.put("idx", i); - - String exRoomIdx = Integer.toString(i+1); - if (("4").equals(exRoomIdx)) exRoomIdx = "5Am"; - else if (("5").equals(exRoomIdx)) exRoomIdx = "5Pm"; - - resveJson.put("exRoom"+exRoomIdx, infoJson); - } - -// LOGGER.debug(vo.getStrDate()); - - resultList.put(vo.getStrDate(), resveJson); - } - - LOGGER.debug("resveList(web) search searchYear: " + searchYear + " searchMonth: " + searchMonth); - -// model.addAttribute("resultList", result); - modelAndView.addObject("resultList", resultList); - return modelAndView; - } - - /** - * (사용자)대관현황 목록 화면을 조회한다. (달력) - * - * @param searchVO - * @param commandMap - * @param indvdlSchdulManageVO - * @param model - * @return "/cop/smt/sim/EgovIndvdlSchdulManageMonthList" - * @throws Exception - */ - @RequestMapping(value="/web/cop/resve/selectResveList.do") - public String selectResveListWeb(@ModelAttribute("searchVO") ResveVO resveVO, ModelMap model) - throws Exception { - - //if (!checkAuthority(model)) return "cmm/uat/uia/EgovLoginUsr"; // server-side 권한 확인 - - //일정구분 검색 유지 -// model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); -// model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); - - /*java.util.Calendar cal = java.util.Calendar.getInstance(); - - String sYear = resveVO.getSearchYear(); - String sMonth = resveVO.getSearchMonth(); - sYear = "2018"; - sMonth = "11"; - - int iYear = cal.get(java.util.Calendar.YEAR); - int iMonth = cal.get(java.util.Calendar.MONTH); - //int iDate = cal.get(java.util.Calendar.DATE); - - //검색 설정 - String sSearchDate = ""; - if(("").equals(sYear) || ("").equals(sMonth)){ - sSearchDate += Integer.toString(iYear); - sSearchDate += Integer.toString(iMonth+1).length() == 1 ? "0" + Integer.toString(iMonth+1) : Integer.toString(iMonth+1); - }else{ - iYear = Integer.parseInt(sYear); - iMonth = Integer.parseInt(sMonth); - sSearchDate += sYear; - sSearchDate += Integer.toString(iMonth+1).length() == 1 ? "0" + Integer.toString(iMonth+1) :Integer.toString(iMonth+1); - } - - model.addAttribute("schdulSe", null); - model.addAttribute("searchMonth", sSearchDate); - model.addAttribute("searchMode", "MONTH"); - model.addAttribute("resultList", null);*/ - - return "/web/cop/resve/resveList"; - } - -} diff --git a/src/main/java/itn/let/cop/smt/sim/service/EgovIndvdlSchdulManageService.java b/src/main/java/itn/let/cop/smt/sim/service/EgovIndvdlSchdulManageService.java deleted file mode 100644 index 7847e5d..0000000 --- a/src/main/java/itn/let/cop/smt/sim/service/EgovIndvdlSchdulManageService.java +++ /dev/null @@ -1,103 +0,0 @@ -package itn.let.cop.smt.sim.service; - -import java.util.List; -import java.util.Map; - -import itn.com.cmm.ComDefaultVO; - -/** - * 일정관리를 처리하는 서비스인터페이스 클래스 - * @since 2009.04.10 - * @see - *
- * << 개정이력(Modification Information) >>
- *   수정일      수정자           수정내용
- *   -------    --------    ---------------------------
- *   2009.04.10  장동한          최초 생성
- *   2011.05.31  JJY           경량환경 커스터마이징버전 생성
- * 
- * @author 조재영 - * @version 1.0 - * @created 09-6-2011 오전 10:08:04 - */ -public interface EgovIndvdlSchdulManageService { - - /** - * 일정를(을) 삭제한다. - * - * @param indvdlSchdulManageVO - 일정 정보 담김 VO - * @exception Exception Exception - */ - public void deleteIndvdlSchdulManage(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception; - - /** - * 일정를(을) 등록한다. - * - * @param indvdlSchdulManageVO - 일정 정보 담김 VO - * @exception Exception Exception - */ - public void insertIndvdlSchdulManage(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception; - - /** - * 일정를(을) 상세조회 한다. - * @return List - * - * @param indvdlSchdulManageVO - 일정 정보 담김 VO - * @exception Exception Exception - */ - public List selectIndvdlSchdulManageDetail(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception; - - /** - * 일정 목록을 VO(model)형식으로 조회한다. - * @return List - * - * @param indvdlSchdulManageVO - 조회할 정보가 담긴 VO - * @exception Exception Exception - */ - public IndvdlSchdulManageVO selectIndvdlSchdulManageDetailVO(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception; - - /** - * 일정 목록을 조회한다. - * @return List - * - * @param searchVO - 조회할 정보가 담긴 VO - * @exception Exception Exception - */ - public List selectIndvdlSchdulManageList(ComDefaultVO searchVO) throws Exception; - - /** - * 일정를(을) 목록 전체 건수를(을) 조회한다. - * @return int - * - * @param searchVO - 조회할 정보가 담긴 VO - * @exception Exception Exception - */ - public int selectIndvdlSchdulManageListCnt(ComDefaultVO searchVO) throws Exception; - - /** - * 메인페이지/일정관리조회 - * @return List - * - * @param map - 조회할 정보가 담긴 map - * @exception Exception Exception - */ - public List selectIndvdlSchdulManageMainList(Map map) throws Exception; - - /** - * 일정 목록을 Map(map)형식으로 조회한다. - * @param Map(map) - 조회할 정보가 담긴 Map - * @return List - * - * @param map - * @exception Exception Exception - */ - public List selectIndvdlSchdulManageRetrieve(Map map) throws Exception; - - /** - * 일정를(을) 수정한다. - * - * @param indvdlSchdulManageVO - 일정 정보 담김 VO - * @exception Exception Exception - */ - public void updateIndvdlSchdulManage(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception; -} \ No newline at end of file diff --git a/src/main/java/itn/let/cop/smt/sim/service/IndvdlSchdulManageVO.java b/src/main/java/itn/let/cop/smt/sim/service/IndvdlSchdulManageVO.java deleted file mode 100644 index 0adf73a..0000000 --- a/src/main/java/itn/let/cop/smt/sim/service/IndvdlSchdulManageVO.java +++ /dev/null @@ -1,501 +0,0 @@ -package itn.let.cop.smt.sim.service; - -import java.io.Serializable; - -/** - * 일정관리 VO Class 구현 - * @since 2009.04.10 - * @see - *
- * << 개정이력(Modification Information) >>  수정일      수정자           수정내용 -------    ---
- * -----    --------------------------- 2009.04.10  장동한          최초 생성 2011.05.31
- * JJY           경량환경 커스터마이징버전 생성
- * 
- * @author 조재영 - * @version 1.0 - * @created 09-6-2011 오전 10:08:07 - */ -public class IndvdlSchdulManageVO implements Serializable { - - /** - * serialVersionUID - */ - private static final long serialVersionUID = 1L; - - /** 일정ID */ - private String schdulId; - - /** 일정구분(회의/교육/세미나/강의 기타) */ - private String schdulSe; - - /** 일정부서ID */ - private String schdulDeptId; - - /** 일정종류(부서일정/개인일정) */ - private String schdulKindCode; - - /** 일정시작일자 */ - private String schdulBgnde; - - /** 일정종료일자 */ - private String schdulEndde; - - /** 일정명 */ - private String schdulNm; - - /** 일정내용 */ - private String schdulCn; - - /** 일정장소 */ - private String schdulPlace; - - /** 일정중요도코드 */ - private String schdulIpcrCode; - - /** 일정담담자ID */ - private String schdulChargerId; - - /** 첨부파일ID */ - private String atchFileId; - - /** 반복구분(반복, 연속, 요일반복) */ - private String reptitSeCode; - - /** 최초등록시점 */ - private String frstRegisterPnttm = ""; - - /** 최초등록자ID */ - private String frstRegisterId = ""; - - /** 최종수정시점 */ - private String lastUpdusrPnttm = ""; - - /** 최종수정ID */ - private String lastUpdusrId = ""; - - /** 일정시작일자(시간) */ - private String schdulBgndeHH = ""; - - /** 일정시작일자(분) */ - private String schdulBgndeMM = ""; - - /** 일정종료일자(시간) */ - private String schdulEnddeHH = ""; - - /** 일정종료일자(분) */ - private String schdulEnddeMM = ""; - - /** 일정시작일자(Year/Month/Day) */ - private String schdulBgndeYYYMMDD = ""; - - /** 일정종료일자(Year/Month/Day) */ - private String schdulEnddeYYYMMDD = ""; - - /** 담당부서 */ - private String schdulDeptName = ""; - - /** 담당자명 */ - private String schdulChargerName = ""; - - /** - * schdulId attribute 를 리턴한다. - * @return the String - */ - public String getSchdulId() { - return schdulId; - } - - /** - * schdulId attribute 값을 설정한다. - * @return schdulId String - */ - public void setSchdulId(String schdulId) { - this.schdulId = schdulId; - } - - /** - * schdulSe attribute 를 리턴한다. - * @return the String - */ - public String getSchdulSe() { - return schdulSe; - } - - /** - * schdulSe attribute 값을 설정한다. - * @return schdulSe String - */ - public void setSchdulSe(String schdulSe) { - this.schdulSe = schdulSe; - } - - /** - * schdulDeptId attribute 를 리턴한다. - * @return the String - */ - public String getSchdulDeptId() { - return schdulDeptId; - } - - /** - * schdulDeptId attribute 값을 설정한다. - * @return schdulDeptId String - */ - public void setSchdulDeptId(String schdulDeptId) { - this.schdulDeptId = schdulDeptId; - } - - /** - * schdulKindCode attribute 를 리턴한다. - * @return the String - */ - public String getSchdulKindCode() { - return schdulKindCode; - } - - /** - * schdulKindCode attribute 값을 설정한다. - * @return schdulKindCode String - */ - public void setSchdulKindCode(String schdulKindCode) { - this.schdulKindCode = schdulKindCode; - } - - /** - * schdulBgnde attribute 를 리턴한다. - * @return the String - */ - public String getSchdulBgnde() { - return schdulBgnde; - } - - /** - * schdulBgnde attribute 값을 설정한다. - * @return schdulBgnde String - */ - public void setSchdulBgnde(String schdulBgnde) { - this.schdulBgnde = schdulBgnde; - } - - /** - * schdulEndde attribute 를 리턴한다. - * @return the String - */ - public String getSchdulEndde() { - return schdulEndde; - } - - /** - * schdulEndde attribute 값을 설정한다. - * @return schdulEndde String - */ - public void setSchdulEndde(String schdulEndde) { - this.schdulEndde = schdulEndde; - } - - /** - * schdulNm attribute 를 리턴한다. - * @return the String - */ - public String getSchdulNm() { - return schdulNm; - } - - /** - * schdulNm attribute 값을 설정한다. - * @return schdulNm String - */ - public void setSchdulNm(String schdulNm) { - this.schdulNm = schdulNm; - } - - /** - * schdulCn attribute 를 리턴한다. - * @return the String - */ - public String getSchdulCn() { - return schdulCn; - } - - /** - * schdulCn attribute 값을 설정한다. - * @return schdulCn String - */ - public void setSchdulCn(String schdulCn) { - this.schdulCn = schdulCn; - } - - /** - * schdulPlace attribute 를 리턴한다. - * @return the String - */ - public String getSchdulPlace() { - return schdulPlace; - } - - /** - * schdulPlace attribute 값을 설정한다. - * @return schdulPlace String - */ - public void setSchdulPlace(String schdulPlace) { - this.schdulPlace = schdulPlace; - } - - /** - * schdulIpcrCode attribute 를 리턴한다. - * @return the String - */ - public String getSchdulIpcrCode() { - return schdulIpcrCode; - } - - /** - * schdulIpcrCode attribute 값을 설정한다. - * @return schdulIpcrCode String - */ - public void setSchdulIpcrCode(String schdulIpcrCode) { - this.schdulIpcrCode = schdulIpcrCode; - } - - /** - * schdulChargerId attribute 를 리턴한다. - * @return the String - */ - public String getSchdulChargerId() { - return schdulChargerId; - } - - /** - * schdulChargerId attribute 값을 설정한다. - * @return schdulChargerId String - */ - public void setSchdulChargerId(String schdulChargerId) { - this.schdulChargerId = schdulChargerId; - } - - /** - * atchFileId attribute 를 리턴한다. - * @return the String - */ - public String getAtchFileId() { - return atchFileId; - } - - /** - * atchFileId attribute 값을 설정한다. - * @return atchFileId String - */ - public void setAtchFileId(String atchFileId) { - this.atchFileId = atchFileId; - } - - /** - * reptitSeCode attribute 를 리턴한다. - * @return the String - */ - public String getReptitSeCode() { - return reptitSeCode; - } - - /** - * reptitSeCode attribute 값을 설정한다. - * @return reptitSeCode String - */ - public void setReptitSeCode(String reptitSeCode) { - this.reptitSeCode = reptitSeCode; - } - - /** - * frstRegisterPnttm attribute 를 리턴한다. - * @return the String - */ - public String getFrstRegisterPnttm() { - return frstRegisterPnttm; - } - - /** - * frstRegisterPnttm attribute 값을 설정한다. - * @return frstRegisterPnttm String - */ - public void setFrstRegisterPnttm(String frstRegisterPnttm) { - this.frstRegisterPnttm = frstRegisterPnttm; - } - - /** - * frstRegisterId attribute 를 리턴한다. - * @return the String - */ - public String getFrstRegisterId() { - return frstRegisterId; - } - - /** - * frstRegisterId attribute 값을 설정한다. - * @return frstRegisterId String - */ - public void setFrstRegisterId(String frstRegisterId) { - this.frstRegisterId = frstRegisterId; - } - - /** - * lastUpdusrPnttm attribute 를 리턴한다. - * @return the String - */ - public String getLastUpdusrPnttm() { - return lastUpdusrPnttm; - } - - /** - * lastUpdusrPnttm attribute 값을 설정한다. - * @return lastUpdusrPnttm String - */ - public void setLastUpdusrPnttm(String lastUpdusrPnttm) { - this.lastUpdusrPnttm = lastUpdusrPnttm; - } - - /** - * lastUpdusrId attribute 를 리턴한다. - * @return the String - */ - public String getLastUpdusrId() { - return lastUpdusrId; - } - - /** - * lastUpdusrId attribute 값을 설정한다. - * @return lastUpdusrId String - */ - public void setLastUpdusrId(String lastUpdusrId) { - this.lastUpdusrId = lastUpdusrId; - } - - /** - * schdulBgndeHH attribute 를 리턴한다. - * @return the String - */ - public String getSchdulBgndeHH() { - return schdulBgndeHH; - } - - /** - * schdulBgndeHH attribute 값을 설정한다. - * @return schdulBgndeHH String - */ - public void setSchdulBgndeHH(String schdulBgndeHH) { - this.schdulBgndeHH = schdulBgndeHH; - } - - /** - * schdulBgndeMM attribute 를 리턴한다. - * @return the String - */ - public String getSchdulBgndeMM() { - return schdulBgndeMM; - } - - /** - * schdulBgndeMM attribute 값을 설정한다. - * @return schdulBgndeMM String - */ - public void setSchdulBgndeMM(String schdulBgndeMM) { - this.schdulBgndeMM = schdulBgndeMM; - } - - /** - * schdulEnddeHH attribute 를 리턴한다. - * @return the String - */ - public String getSchdulEnddeHH() { - return schdulEnddeHH; - } - - /** - * schdulEnddeHH attribute 값을 설정한다. - * @return schdulEnddeHH String - */ - public void setSchdulEnddeHH(String schdulEnddeHH) { - this.schdulEnddeHH = schdulEnddeHH; - } - - /** - * schdulEnddeMM attribute 를 리턴한다. - * @return the String - */ - public String getSchdulEnddeMM() { - return schdulEnddeMM; - } - - /** - * schdulEnddeMM attribute 값을 설정한다. - * @return schdulEnddeMM String - */ - public void setSchdulEnddeMM(String schdulEnddeMM) { - this.schdulEnddeMM = schdulEnddeMM; - } - - /** - * schdulBgndeYYYMMDD attribute 를 리턴한다. - * @return the String - */ - public String getSchdulBgndeYYYMMDD() { - return schdulBgndeYYYMMDD; - } - - /** - * schdulBgndeYYYMMDD attribute 값을 설정한다. - * @return schdulBgndeYYYMMDD String - */ - public void setSchdulBgndeYYYMMDD(String schdulBgndeYYYMMDD) { - this.schdulBgndeYYYMMDD = schdulBgndeYYYMMDD; - } - - /** - * schdulEnddeYYYMMDD attribute 를 리턴한다. - * @return the String - */ - public String getSchdulEnddeYYYMMDD() { - return schdulEnddeYYYMMDD; - } - - /** - * schdulEnddeYYYMMDD attribute 값을 설정한다. - * @return schdulEnddeYYYMMDD String - */ - public void setSchdulEnddeYYYMMDD(String schdulEnddeYYYMMDD) { - this.schdulEnddeYYYMMDD = schdulEnddeYYYMMDD; - } - - /** - * schdulDeptName attribute 를 리턴한다. - * @return the String - */ - public String getSchdulDeptName() { - return schdulDeptName; - } - - /** - * schdulDeptName attribute 값을 설정한다. - * @return schdulDeptName String - */ - public void setSchdulDeptName(String schdulDeptName) { - this.schdulDeptName = schdulDeptName; - } - - /** - * schdulChargerName attribute 를 리턴한다. - * @return the String - */ - public String getSchdulChargerName() { - return schdulChargerName; - } - - /** - * schdulChargerName attribute 값을 설정한다. - * @return schdulChargerName String - */ - public void setSchdulChargerName(String schdulChargerName) { - this.schdulChargerName = schdulChargerName; - } - - -} diff --git a/src/main/java/itn/let/cop/smt/sim/service/impl/EgovIndvdlSchdulManageServiceImpl.java b/src/main/java/itn/let/cop/smt/sim/service/impl/EgovIndvdlSchdulManageServiceImpl.java deleted file mode 100644 index 9b8fefa..0000000 --- a/src/main/java/itn/let/cop/smt/sim/service/impl/EgovIndvdlSchdulManageServiceImpl.java +++ /dev/null @@ -1,134 +0,0 @@ -package itn.let.cop.smt.sim.service.impl; - -import java.util.List; -import java.util.Map; - -import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import itn.com.cmm.ComDefaultVO; -import itn.let.cop.smt.sim.service.EgovIndvdlSchdulManageService; -import itn.let.cop.smt.sim.service.IndvdlSchdulManageVO; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - -/** - * 일정관리를 처리하는 ServiceImpl Class 구현 - * @since 2009.04.10 - * @see - *
- * << 개정이력(Modification Information) >>  수정일      수정자           수정내용 -------    ---
- * -----    --------------------------- 2009.04.10  장동한          최초 생성 2011.05.31
- * JJY           경량환경 커스터마이징버전 생성
- * 
- * @author 조재영 - * @version 1.0 - * @created 09-6-2011 오전 10:08:05 - */ -@Service("egovIndvdlSchdulManageService") -public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl implements EgovIndvdlSchdulManageService{ - - @Resource(name="indvdlSchdulManageDao") - private IndvdlSchdulManageDao dao; - - - /** - * 메인페이지/일정관리조회 - * @param map - 조회할 정보가 담긴 map - * @return List - * @throws Exception - */ - @Override - public List selectIndvdlSchdulManageMainList(Map map) throws Exception{ - return dao.selectIndvdlSchdulManageMainList(map); - } - - /** - * 일정 목록을 Map(map)형식으로 조회한다. - * @param Map(map) - 조회할 정보가 담긴 VO - * @return List - * @throws Exception - */ - @Override - public List selectIndvdlSchdulManageRetrieve(Map map) throws Exception{ - return dao.selectIndvdlSchdulManageRetrieve(map); - } - - /** - * 일정 목록을 VO(model)형식으로 조회한다. - * @param indvdlSchdulManageVO - 조회할 정보가 담긴 VO - * @return List - * @throws Exception - */ - @Override - public IndvdlSchdulManageVO selectIndvdlSchdulManageDetailVO(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception{ - return dao.selectIndvdlSchdulManageDetailVO(indvdlSchdulManageVO); - } - - /** - * 일정 목록을 조회한다. - * @param searchVO - 조회할 정보가 담긴 VO - * @return List - * @throws Exception - */ - @Override - public List selectIndvdlSchdulManageList(ComDefaultVO searchVO) throws Exception{ - return dao.selectIndvdlSchdulManageList(searchVO); - } - - /** - * 일정를(을) 상세조회 한다. - * @param IndvdlSchdulManage - 회정정보가 담김 VO - * @return List - * @throws Exception - */ - @Override - public List selectIndvdlSchdulManageDetail(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception{ - return dao.selectIndvdlSchdulManageDetail(indvdlSchdulManageVO); - } - - /** - * 일정를(을) 목록 전체 건수를(을) 조회한다. - * @param searchVO - 조회할 정보가 담긴 VO - * @return int - * @throws Exception - */ - @Override - public int selectIndvdlSchdulManageListCnt(ComDefaultVO searchVO) throws Exception{ - return dao.selectIndvdlSchdulManageListCnt(searchVO); - } - - /** - * 일정를(을) 등록한다. - * @param indvdlSchdulManageVO - 조회할 정보가 담긴 VO - * @throws Exception - */ - @Override - public void insertIndvdlSchdulManage(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception { - String sMakeId = "ERROR"; - indvdlSchdulManageVO.setSchdulId(sMakeId); - - dao.insertIndvdlSchdulManage(indvdlSchdulManageVO); - } - - /** - * 일정를(을) 수정한다. - * @param indvdlSchdulManageVO - 조회할 정보가 담긴 VO - * @throws Exception - */ - @Override - public void updateIndvdlSchdulManage(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception{ - dao.updateIndvdlSchdulManage(indvdlSchdulManageVO); - } - - /** - * 일정를(을) 삭제한다. - * @param indvdlSchdulManageVO - 조회할 정보가 담긴 VO - * @throws Exception - */ - @Override - public void deleteIndvdlSchdulManage(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception{ - dao.deleteIndvdlSchdulManage(indvdlSchdulManageVO); - } -} diff --git a/src/main/java/itn/let/cop/smt/sim/service/impl/IndvdlSchdulManageDao.java b/src/main/java/itn/let/cop/smt/sim/service/impl/IndvdlSchdulManageDao.java deleted file mode 100644 index 42335b0..0000000 --- a/src/main/java/itn/let/cop/smt/sim/service/impl/IndvdlSchdulManageDao.java +++ /dev/null @@ -1,118 +0,0 @@ -package itn.let.cop.smt.sim.service.impl; -import java.util.List; -import java.util.Map; - -import egovframework.rte.psl.dataaccess.EgovAbstractDAO; -import itn.com.cmm.ComDefaultVO; -import itn.let.cop.smt.sim.service.IndvdlSchdulManageVO; - -import org.springframework.stereotype.Repository; - -/** - * 일정관리를 처리하는 Dao Class 구현 - * @since 2009.04.10 - * @see - *
- * << 개정이력(Modification Information) >>  수정일      수정자           수정내용 -------    ---
- * -----    --------------------------- 2009.04.10  장동한          최초 생성 2011.05.31
- * JJY           경량환경 커스터마이징버전 생성
- * 
- * @author 조재영 - * @version 1.0 - * @created 09-6-2011 오전 10:08:07 - */ -@Repository("indvdlSchdulManageDao") -public class IndvdlSchdulManageDao extends EgovAbstractDAO { - - - /** - * 메인페이지/일정관리조회 목록을 Map(map)형식으로 조회한다. - * @param Map(map) - 조회할 정보가 담긴 VO - * @return List - * @throws Exception - */ - public List selectIndvdlSchdulManageMainList(Map map) throws Exception{ - return list("IndvdlSchdulManage.selectIndvdlSchdulManageMainList", map); - } - - /** - * 일정 목록을 Map(map)형식으로 조회한다. - * @param Map(map) - 조회할 정보가 담긴 VO - * @return List - * @throws Exception - */ - public List selectIndvdlSchdulManageRetrieve(Map map) throws Exception{ - return list("IndvdlSchdulManage.selectIndvdlSchdulManageRetrieve", map); - } - - - /** - * 일정 목록을 VO(model)형식으로 조회한다. - * @param indvdlSchdulManageVO - 조회할 정보가 담긴 VO - * @return IndvdlSchdulManageVO - * @throws Exception - */ - public IndvdlSchdulManageVO selectIndvdlSchdulManageDetailVO(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception{ - return (IndvdlSchdulManageVO)select("IndvdlSchdulManage.selectIndvdlSchdulManageDetailVO", indvdlSchdulManageVO); - } - - /** - * 일정 목록을 조회한다. - * @param searchVO - 조회할 정보가 담긴 VO - * @return List - * @throws Exception - */ - public List selectIndvdlSchdulManageList(ComDefaultVO searchVO) throws Exception{ - return list("IndvdlSchdulManage.selectIndvdlSchdulManage", searchVO); - } - - /** - * 일정를(을) 상세조회 한다. - * @param indvdlSchdulManageVO - 일정 정보 담김 VO - * @return List - * @throws Exception - */ - public List selectIndvdlSchdulManageDetail(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception{ - return list("IndvdlSchdulManage.selectIndvdlSchdulManageDetail", indvdlSchdulManageVO); - } - - /** - * 일정를(을) 목록 전체 건수를(을) 조회한다. - * @param searchVO - 조회할 정보가 담긴 VO - * @return int - * @throws Exception - */ - public int selectIndvdlSchdulManageListCnt(ComDefaultVO searchVO) throws Exception{ - return (Integer)select("IndvdlSchdulManage.selectIndvdlSchdulManageCnt", searchVO); - } - - /** - * 일정를(을) 등록한다. - * @param qindvdlSchdulManageVO - 일정 정보 담김 VO - * @throws Exception - */ - public void insertIndvdlSchdulManage(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception{ - insert("IndvdlSchdulManage.insertIndvdlSchdulManage", indvdlSchdulManageVO); - } - - /** - * 일정를(을) 수정한다. - * @param indvdlSchdulManageVO - 일정 정보 담김 VO - * @throws Exception - */ - public void updateIndvdlSchdulManage(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception{ - insert("IndvdlSchdulManage.updateIndvdlSchdulManage", indvdlSchdulManageVO); - } - - /** - * 일정를(을) 삭제한다. - * @param indvdlSchdulManageVO - 일정 정보 담김 VO - * @throws Exception - */ - public void deleteIndvdlSchdulManage(IndvdlSchdulManageVO indvdlSchdulManageVO) throws Exception{ - // 일지 삭제 - //delete("IndvdlSchdulManage.deleteDiaryManage", indvdlSchdulManageVO); - // 일정관리 삭제 - delete("IndvdlSchdulManage.deleteIndvdlSchdulManage", indvdlSchdulManageVO); - } -} diff --git a/src/main/java/itn/let/cop/smt/sim/web/EgovIndvdlSchdulManageController.java b/src/main/java/itn/let/cop/smt/sim/web/EgovIndvdlSchdulManageController.java deleted file mode 100644 index 1b836fa..0000000 --- a/src/main/java/itn/let/cop/smt/sim/web/EgovIndvdlSchdulManageController.java +++ /dev/null @@ -1,751 +0,0 @@ -package itn.let.cop.smt.sim.web; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Map; - -import egovframework.rte.fdl.cmmn.exception.EgovBizException; -import egovframework.rte.fdl.property.EgovPropertyService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.ComDefaultCodeVO; -import itn.com.cmm.ComDefaultVO; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.service.FileVO; -import itn.let.cop.smt.sim.service.EgovIndvdlSchdulManageService; -import itn.let.cop.smt.sim.service.IndvdlSchdulManageVO; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.validation.BindingResult; -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.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springmodules.validation.commons.DefaultBeanValidator; - -/** - * 일정관리를 처리하는 Controller Class 구현 - * - * 사용안함. 달력 일정관리. 대관현황 개발에 참조용. 추후 삭제 필요 - * - * @since 2009.04.10 - * @see - *
- * << 개정이력(Modification Information) >>
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *  2009.04.10  장동한          최초 생성
- *  2011.05.31  JJY           경량환경 커스터마이징버전 생성
- * 
- * @author 조재영 - * @version 1.0 - * @created 09-6-2011 오전 10:08:04 - */ -@Controller -public class EgovIndvdlSchdulManageController { - - @Autowired - private DefaultBeanValidator beanValidator; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name = "egovIndvdlSchdulManageService") - private EgovIndvdlSchdulManageService egovIndvdlSchdulManageService; - - @Resource(name="EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - /** EgovPropertyService */ - @Resource(name = "propertiesService") - protected EgovPropertyService propertiesService; - - // 첨부파일 관련 - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - /** - * 일정(일별) 목록을 조회한다. - * @param searchVO - * @param commandMap - * @param indvdlSchdulManageVO - * @param model - * @return "/cop/smt/sim/EgovIndvdlSchdulManageDailyList" - * @throws Exception - */ - @RequestMapping(value="/cop/smt/sim/EgovIndvdlSchdulManageDailyList.do") - public String EgovIndvdlSchdulManageDailyList( - @ModelAttribute("searchVO") ComDefaultVO searchVO, - @RequestParam Map commandMap, - IndvdlSchdulManageVO indvdlSchdulManageVO, - ModelMap model) - throws Exception { - - //일정구분 검색 유지 - model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); - model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); - - //공통코드 일정종류 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM030"); - model.addAttribute("schdulSe", cmmUseService.selectCmmCodeDetail(voComCode)); - - /* ***************************************************************** - // 캘런더 설정 로직 - ****************************************************************** */ - Calendar calNow = Calendar.getInstance(); - - String strYear = (String)commandMap.get("year"); - String strMonth = (String)commandMap.get("month"); - String strDay =( String)commandMap.get("day"); - String strSearchDay = ""; - int iNowYear = calNow.get(Calendar.YEAR); - int iNowMonth = calNow.get(Calendar.MONTH); - int iNowDay = calNow.get(Calendar.DATE); - - if(strYear != null) - { - iNowYear = Integer.parseInt(strYear); - iNowMonth = Integer.parseInt(strMonth); - iNowDay = Integer.parseInt(strDay); - } - - strSearchDay = Integer.toString(iNowYear); - strSearchDay += DateTypeIntForString(iNowMonth+1); - strSearchDay += DateTypeIntForString(iNowDay); - - commandMap.put("searchMode", "DAILY"); - commandMap.put("searchDay", strSearchDay); - - model.addAttribute("year", iNowYear); - model.addAttribute("month", iNowMonth); - model.addAttribute("day", iNowDay); - - model.addAttribute("resultList", egovIndvdlSchdulManageService.selectIndvdlSchdulManageRetrieve(commandMap)); - - return "/cop/smt/sim/EgovIndvdlSchdulManageDailyList"; - } - - /** - * 일정(주간별) 목록을 조회한다. - * @param searchVO - * @param commandMap - * @param indvdlSchdulManageVO - * @param model - * @return "/cop/smt/sim/EgovIndvdlSchdulManageWeekList" - * @throws Exception - */ - @RequestMapping(value="/cop/smt/sim/EgovIndvdlSchdulManageWeekList.do") - public String EgovIndvdlSchdulManageWeekList( - @ModelAttribute("searchVO") ComDefaultVO searchVO, - @RequestParam Map commandMap, - IndvdlSchdulManageVO indvdlSchdulManageVO, - ModelMap model) - throws Exception { - - //일정구분 검색 유지 - model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); - model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); - - //공통코드 일정종류 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM030"); - model.addAttribute("schdulSe", cmmUseService.selectCmmCodeDetail(voComCode)); - - /* ***************************************************************** - // 캘런더 설정 로직 - ****************************************************************** */ - Calendar calNow = Calendar.getInstance(); - Calendar calBefore = Calendar.getInstance(); - Calendar calNext = Calendar.getInstance(); - - - String strYear = (String)commandMap.get("year"); - String strMonth = (String)commandMap.get("month"); - String strWeek =( String)commandMap.get("week"); - int iNowYear = calNow.get(Calendar.YEAR); - int iNowMonth = calNow.get(Calendar.MONTH); - int iNowDate = calNow.get(Calendar.DATE); - int iNowWeek = 0; - - if(strYear != null) - { - iNowYear = Integer.parseInt(strYear); - iNowMonth = Integer.parseInt(strMonth); - iNowWeek = Integer.parseInt(strWeek); - } - - //년도/월 셋팅 - calNow.set(iNowYear, iNowMonth, 1); - calBefore.set(iNowYear, iNowMonth, 1); - calNext.set(iNowYear, iNowMonth, 1); - - calBefore.add(Calendar.MONTH, -1); - calNext.add(Calendar.MONTH, +1); - - //int startDay = calNow.getMinimum(Calendar.DATE); - int endDay = calNow.getActualMaximum(Calendar.DAY_OF_MONTH); - int startWeek = calNow.get(Calendar.DAY_OF_WEEK); - - - ArrayList> listWeekGrop = new ArrayList>(); - ArrayList listWeekDate = new ArrayList(); - - String sUseDate = ""; - - calBefore.add(Calendar.DATE , calBefore.getActualMaximum(Calendar.DAY_OF_MONTH) - (startWeek-1)); - for(int i = 1; i < startWeek ; i++ ) - { - sUseDate = Integer.toString(calBefore.get(Calendar.YEAR)); - sUseDate += DateTypeIntForString(calBefore.get(Calendar.MONTH)+1); - sUseDate += DateTypeIntForString(calBefore.get(Calendar.DATE)); - - listWeekDate.add(sUseDate); - calBefore.add(Calendar.DATE, +1); - } - - int iBetweenCount = startWeek; - - // 주별로 자른다. BETWEEN 구하기 - for(int i=1; i <= endDay; i++) - { - sUseDate = Integer.toString(iNowYear); - sUseDate += Integer.toString(iNowMonth+1).length() == 1 ? "0" + Integer.toString(iNowMonth+1) : Integer.toString(iNowMonth+1); - sUseDate += Integer.toString(i).length() == 1 ? "0" + Integer.toString(i) : Integer.toString(i); - - listWeekDate.add(sUseDate); - - if( iBetweenCount % 7 == 0){ - listWeekGrop.add(listWeekDate); - listWeekDate = new ArrayList(); - - if(strYear == null && i < iNowDate){ - iNowWeek++; - - } - } - - //미지막 7일 자동계산 - if(i == endDay){ - - for(int j=listWeekDate.size(); j < 7;j++){ - String sUseNextDate = Integer.toString(calNext.get(Calendar.YEAR)); - sUseNextDate += DateTypeIntForString(calNext.get(Calendar.MONTH)+1); - sUseNextDate += DateTypeIntForString(calNext.get(Calendar.DATE)); - listWeekDate.add(sUseNextDate); - calNext.add(Calendar.DATE, +1); - } - - listWeekGrop.add(listWeekDate); - } - - iBetweenCount++; - } - - model.addAttribute("year", iNowYear); - model.addAttribute("month", iNowMonth); - model.addAttribute("week", iNowWeek); - - - model.addAttribute("listWeekGrop", listWeekGrop); - List listWeek = listWeekGrop.get(iNowWeek); - commandMap.put("searchMode", "WEEK"); - commandMap.put("schdulBgnde", listWeek.get(0)); - commandMap.put("schdulEndde", listWeek.get(listWeek.size()-1)); - - model.addAttribute("resultList", egovIndvdlSchdulManageService.selectIndvdlSchdulManageRetrieve(commandMap)); - - return "/cop/smt/sim/EgovIndvdlSchdulManageWeekList"; - } - - /** - * 일정(월별) 목록을 조회한다. - * @param searchVO - * @param commandMap - * @param indvdlSchdulManageVO - * @param model - * @return "/cop/smt/sim/EgovIndvdlSchdulManageMonthList" - * @throws Exception - */ - @RequestMapping(value="/cop/smt/sim/EgovIndvdlSchdulManageMonthList.do") - public String EgovIndvdlSchdulManageMonthList(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, - IndvdlSchdulManageVO indvdlSchdulManageVO, ModelMap model) - throws Exception { - - //if (!checkAuthority(model)) return "cmm/uat/uia/EgovLoginUsr"; // server-side 권한 확인 - - //일정구분 검색 유지 - model.addAttribute("searchKeyword", commandMap.get("searchKeyword") == null ? "" : (String)commandMap.get("searchKeyword")); - model.addAttribute("searchCondition", commandMap.get("searchCondition") == null ? "" : (String)commandMap.get("searchCondition")); - - java.util.Calendar cal = java.util.Calendar.getInstance(); - - String sYear = (String)commandMap.get("year"); - String sMonth = (String)commandMap.get("month"); - - int iYear = cal.get(java.util.Calendar.YEAR); - int iMonth = cal.get(java.util.Calendar.MONTH); - //int iDate = cal.get(java.util.Calendar.DATE); - - //검색 설정 - String sSearchDate = ""; - if(sYear == null || sMonth == null){ - sSearchDate += Integer.toString(iYear); - sSearchDate += Integer.toString(iMonth+1).length() == 1 ? "0" + Integer.toString(iMonth+1) : Integer.toString(iMonth+1); - }else{ - iYear = Integer.parseInt(sYear); - iMonth = Integer.parseInt(sMonth); - sSearchDate += sYear; - sSearchDate += Integer.toString(iMonth+1).length() == 1 ? "0" + Integer.toString(iMonth+1) :Integer.toString(iMonth+1); - } - - //공통코드 일정종류 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM030"); - model.addAttribute("schdulSe", cmmUseService.selectCmmCodeDetail(voComCode)); - - commandMap.put("searchMonth", sSearchDate); - commandMap.put("searchMode", "MONTH"); - model.addAttribute("resultList", egovIndvdlSchdulManageService.selectIndvdlSchdulManageRetrieve(commandMap)); - - return "/cop/smt/sim/EgovIndvdlSchdulManageMonthList"; - } - - /** - * 일정 목록을 상세조회 조회한다. - * @param searchVO - * @param indvdlSchdulManageVO - * @param commandMap - * @param model - * @return "/cop/smt/sim/EgovIndvdlSchdulManageDetail" - * @throws Exception - */ - @RequestMapping(value="/cop/smt/sim/EgovIndvdlSchdulManageDetail.do") - public String EgovIndvdlSchdulManageDetail( - @ModelAttribute("searchVO") ComDefaultVO searchVO, - IndvdlSchdulManageVO indvdlSchdulManageVO, - @RequestParam Map commandMap, - ModelMap model) - throws Exception { - - String sLocationUrl = "/cop/smt/sim/EgovIndvdlSchdulManageDetail"; - - String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); - - if(sCmd.equals("del")){ - egovIndvdlSchdulManageService.deleteIndvdlSchdulManage(indvdlSchdulManageVO); - sLocationUrl = "redirect:/cop/smt/sim/EgovIndvdlSchdulManageMonthList.do"; - }else{ - - //공통코드 중요도 조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM019"); - model.addAttribute("schdulIpcrCode", cmmUseService.selectCmmCodeDetail(voComCode)); - //공통코드 일정구분 조회 - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM030"); - model.addAttribute("schdulSe", cmmUseService.selectCmmCodeDetail(voComCode)); - //공통코드 반복구분 조회 - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM031"); - model.addAttribute("reptitSeCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - model.addAttribute("resultList", egovIndvdlSchdulManageService.selectIndvdlSchdulManageDetail(indvdlSchdulManageVO)); - } - - return sLocationUrl; - } - - /** - * 일정 수정 폼 - * @param searchVO - * @param commandMap - * @param indvdlSchdulManageVO - * @param bindingResult - * @param model - * @return "/cop/smt/sim/EgovIndvdlSchdulManageModify" - * @throws Exception - */ - @RequestMapping(value="/cop/smt/sim/EgovIndvdlSchdulManageModify.do") - public String IndvdlSchdulManageModify( - @ModelAttribute("searchVO") ComDefaultVO searchVO, - @RequestParam Map commandMap, - IndvdlSchdulManageVO indvdlSchdulManageVO, - BindingResult bindingResult, - ModelMap model) - throws Exception { - - if (!checkAuthority(model)) return "cmm/uat/uia/EgovLoginUsr"; // server-side 권한 확인 - - String sLocationUrl = "/cop/smt/sim/EgovIndvdlSchdulManageModify"; - - //공통코드 중요도 조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM019"); - //List listComCode = cmmUseService.selectCmmCodeDetail(voComCode); - model.addAttribute("schdulIpcrCode", cmmUseService.selectCmmCodeDetail(voComCode)); - //공통코드 일정구분 조회 - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM030"); - //listComCode = cmmUseService.selectCmmCodeDetail(voComCode); - model.addAttribute("schdulSe", cmmUseService.selectCmmCodeDetail(voComCode)); - //공통코드 반복구분 조회 - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM031"); - //listComCode = cmmUseService.selectCmmCodeDetail(voComCode); - model.addAttribute("reptitSeCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - //일정시작일자(시) - model.addAttribute("schdulBgndeHH", getTimeHH()); - //일정시작일자(분) - model.addAttribute("schdulBgndeMM", getTimeMM()); - //일정종료일자(시) - model.addAttribute("schdulEnddeHH", getTimeHH()); - //일정정료일자(분) - model.addAttribute("schdulEnddeMM", getTimeMM()); - - IndvdlSchdulManageVO resultIndvdlSchdulManageVOReuslt = egovIndvdlSchdulManageService.selectIndvdlSchdulManageDetailVO(indvdlSchdulManageVO); - - String sSchdulBgnde = resultIndvdlSchdulManageVOReuslt.getSchdulBgnde(); - String sSchdulEndde = resultIndvdlSchdulManageVOReuslt.getSchdulEndde(); - - resultIndvdlSchdulManageVOReuslt.setSchdulBgndeYYYMMDD(sSchdulBgnde.substring(0, 4) +"-"+sSchdulBgnde.substring(4, 6)+"-"+sSchdulBgnde.substring(6, 8) ); - resultIndvdlSchdulManageVOReuslt.setSchdulBgndeHH(sSchdulBgnde.substring(8, 10)); - resultIndvdlSchdulManageVOReuslt.setSchdulBgndeMM(sSchdulBgnde.substring(10, 12)); - - resultIndvdlSchdulManageVOReuslt.setSchdulEnddeYYYMMDD(sSchdulEndde.substring(0, 4) +"-"+sSchdulEndde.substring(4, 6)+"-"+sSchdulEndde.substring(6, 8) ); - resultIndvdlSchdulManageVOReuslt.setSchdulEnddeHH(sSchdulEndde.substring(8, 10)); - resultIndvdlSchdulManageVOReuslt.setSchdulEnddeMM(sSchdulEndde.substring(10, 12)); - - //팝업정보창 사용하여 셋팅하지 않고 고정하여 설정함(템플릿에서 기능 축소) - resultIndvdlSchdulManageVOReuslt.setSchdulDeptName("관리자부서"); - resultIndvdlSchdulManageVOReuslt.setSchdulChargerName("관리자"); - - model.addAttribute("indvdlSchdulManageVO", resultIndvdlSchdulManageVOReuslt); - - - return sLocationUrl; - } - - /** - * 일정를 수정 처리 한다. - * @param multiRequest - * @param searchVO - * @param commandMap - * @param indvdlSchdulManageVO - * @param bindingResult - * @param model - * @return "/cop/smt/sim/EgovIndvdlSchdulManageModifyActor" - * @throws Exception - */ - @RequestMapping(value="/cop/smt/sim/EgovIndvdlSchdulManageModifyActor.do") - public String IndvdlSchdulManageModifyActor( - final MultipartHttpServletRequest multiRequest, - ComDefaultVO searchVO, - @RequestParam Map commandMap, - @ModelAttribute("indvdlSchdulManageVO") IndvdlSchdulManageVO indvdlSchdulManageVO, - BindingResult bindingResult, - ModelMap model, - HttpServletRequest request) - throws Exception { - - if (!checkAuthority(model)) return "cmm/uat/uia/EgovLoginUsr"; // server-side 권한 확인 - - //로그인 객체 선언 - LoginVO user = (LoginVO)request.getSession().getAttribute("LoginVO"); - Boolean isAuthenticated = (LoginVO)request.getSession().getAttribute("LoginVO") == null ? false:true; - if(!isAuthenticated) { - model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); - return "cmm/uat/uia/EgovLoginUsr"; - } - - String sLocationUrl = "/cop/smt/sim/EgovIndvdlSchdulManageModify"; - - String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); - - - if(sCmd.equals("save")){ - //서버 validate 체크 - beanValidator.validate(indvdlSchdulManageVO, bindingResult); - if(bindingResult.hasErrors()){ - - //공통코드 중요도 조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM019"); - model.addAttribute("schdulIpcrCode", cmmUseService.selectCmmCodeDetail(voComCode)); - //공통코드 일정구분 조회 - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM030"); - model.addAttribute("schdulSe", cmmUseService.selectCmmCodeDetail(voComCode)); - //공통코드 반복구분 조회 - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM031"); - model.addAttribute("reptitSeCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - //일정시작일자(시) - model.addAttribute("schdulBgndeHH", getTimeHH()); - //일정시작일자(분) - model.addAttribute("schdulBgndeMM", getTimeMM()); - //일정종료일자(시) - model.addAttribute("schdulEnddeHH", getTimeHH()); - //일정정료일자(분) - model.addAttribute("schdulEnddeMM", getTimeMM()); - - return sLocationUrl; - } - - /* ***************************************************************** - // 아이디 설정 - ****************************************************************** */ - indvdlSchdulManageVO.setFrstRegisterId(user.getUniqId()); - indvdlSchdulManageVO.setLastUpdusrId(user.getUniqId()); - /* ***************************************************************** - // 첨부파일 관련 ID 생성 start.... - ****************************************************************** */ - String _atchFileId = indvdlSchdulManageVO.getAtchFileId(); - - - final Map files = multiRequest.getFileMap(); - - if(!files.isEmpty()){ - String atchFileAt = commandMap.get("atchFileAt") == null ? "" : (String)commandMap.get("atchFileAt"); - if("N".equals(atchFileAt)){ - List _result = fileUtil.parseFileInf(files, "DSCH_", 0, _atchFileId, "" , ""); - _atchFileId = fileMngService.insertFileInfs(_result); - - // 첨부파일 ID 셋팅 - indvdlSchdulManageVO.setAtchFileId(_atchFileId); // 첨부파일 ID - - }else{ - FileVO fvo = new FileVO(); - fvo.setAtchFileId(_atchFileId); - int _cnt = fileMngService.getMaxFileSN(fvo); - List _result = fileUtil.parseFileInf(files, "DSCH_", _cnt, _atchFileId, "" , ""); - fileMngService.updateFileInfs(_result); - } - } - - /* ***************************************************************** - // 일정관리정보 업데이트 처리 - ****************************************************************** */ - egovIndvdlSchdulManageService.updateIndvdlSchdulManage(indvdlSchdulManageVO); - sLocationUrl = "redirect:/cop/smt/sim/EgovIndvdlSchdulManageMonthList.do"; - } - - return sLocationUrl; - } - - /** - * 일정를 등록 폼 - * @param searchVO - * @param commandMap - * @param indvdlSchdulManageVO - * @param bindingResult - * @param model - * @return "/cop/smt/sim/EgovIndvdlSchdulManageRegist" - * @throws Exception - */ - @RequestMapping(value="/cop/smt/sim/EgovIndvdlSchdulManageRegist.do") - public String IndvdlSchdulManageRegist(@ModelAttribute("searchVO") ComDefaultVO searchVO, @RequestParam Map commandMap, - @ModelAttribute("indvdlSchdulManageVO") IndvdlSchdulManageVO indvdlSchdulManageVO, BindingResult bindingResult, ModelMap model, HttpServletRequest request) - throws Exception { - - String sLocationUrl = "/cop/smt/sim/EgovIndvdlSchdulManageRegist"; - - //공통코드 중요도 조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM019"); - model.addAttribute("schdulIpcrCode", cmmUseService.selectCmmCodeDetail(voComCode)); - //공통코드 일정구분 조회 - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM030"); - model.addAttribute("schdulSe", cmmUseService.selectCmmCodeDetail(voComCode)); - //공통코드 반복구분 조회 - voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("COM031"); - model.addAttribute("reptitSeCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - //일정시작일자(시) - model.addAttribute("schdulBgndeHH", getTimeHH()); - //일정시작일자(분) - model.addAttribute("schdulBgndeMM", getTimeMM()); - //일정종료일자(시) - model.addAttribute("schdulEnddeHH", getTimeHH()); - //일정정료일자(분) - model.addAttribute("schdulEnddeMM", getTimeMM()); - - //팝업정보창 사용하여 셋팅하지 않고 고정하여 설정함(템플릿에서 기능 축소) - indvdlSchdulManageVO.setSchdulDeptName("관리자부서"); - indvdlSchdulManageVO.setSchdulDeptId("ORGNZT_0000000000000"); - indvdlSchdulManageVO.setSchdulChargerName("관리자"); - indvdlSchdulManageVO.setSchdulChargerId("USRCNFRM_00000000000"); - return sLocationUrl; - } - - /** - * 일정를 등록 처리 한다. - * @param multiRequest - * @param searchVO - * @param commandMap - * @param indvdlSchdulManageVO - * @param bindingResult - * @param model - * @return "/cop/smt/sim/EgovIndvdlSchdulManageRegistActor" - * @throws Exception - */ - @RequestMapping(value="/cop/smt/sim/EgovIndvdlSchdulManageRegistActor.do") - public String IndvdlSchdulManageRegistActor( - final MultipartHttpServletRequest multiRequest, - @ModelAttribute("searchVO") ComDefaultVO searchVO, - @RequestParam Map commandMap, - @ModelAttribute("indvdlSchdulManageVO") IndvdlSchdulManageVO indvdlSchdulManageVO, - BindingResult bindingResult, - ModelMap model, - HttpServletRequest request) - throws Exception { - - - //LoginVO user = (LoginVO)request.getSession().getAttribute("LoginVO"); - LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - - String sLocationUrl = "/cop/smt/sim/EgovIndvdlSchdulManageRegist"; - - String sCmd = commandMap.get("cmd") == null ? "" : (String)commandMap.get("cmd"); - //log.info("cmd =>" + sCmd); - - if(sCmd.equals("save")){ - //서버 validate 체크 - beanValidator.validate(indvdlSchdulManageVO, bindingResult); - if(bindingResult.hasErrors()){ - - return sLocationUrl; - } - - // 첨부파일 관련 첨부파일ID 생성 - List _result = null; - String _atchFileId = ""; - - final Map files = multiRequest.getFileMap(); - - if(!files.isEmpty()){ - _result = fileUtil.parseFileInf(files, "DSCH_", 0, "", "", ""); - _atchFileId = fileMngService.insertFileInfs(_result); //파일이 생성되고나면 생성된 첨부파일 ID를 리턴한다. - } - - // 리턴받은 첨부파일ID를 셋팅한다.. - indvdlSchdulManageVO.setAtchFileId(_atchFileId); // 첨부파일 ID - - //아이디 설정 - indvdlSchdulManageVO.setFrstRegisterId(user.getUniqId()); - indvdlSchdulManageVO.setLastUpdusrId(user.getUniqId()); - - egovIndvdlSchdulManageService.insertIndvdlSchdulManage(indvdlSchdulManageVO); - sLocationUrl = "redirect:/cop/smt/sim/EgovIndvdlSchdulManageMonthList.do"; - } - - return sLocationUrl; - - - } - /** - * 시간을 LIST를 반환한다. - * @return List - * @throws - */ - private List getTimeHH (){ - ArrayList listHH = new ArrayList(); - //HashMap hmHHMM; - for(int i=0;i < 24; i++){ - String sHH = ""; - String strI = String.valueOf(i); - if(i<10){ - sHH = "0" + strI; - }else{ - sHH = strI; - } - - ComDefaultCodeVO codeVO = new ComDefaultCodeVO(); - codeVO.setCode(sHH); - codeVO.setCodeNm(sHH); - - listHH.add(codeVO); - } - - return listHH; - } - /** - * 분을 LIST를 반환한다. - * @return List - * @throws - */ - private List getTimeMM (){ - ArrayList listMM = new ArrayList(); - //HashMap hmHHMM; - for(int i=0;i < 60; i++){ - - String sMM = ""; - String strI = String.valueOf(i); - if(i<10){ - sMM = "0" + strI; - }else{ - sMM = strI; - } - - ComDefaultCodeVO codeVO = new ComDefaultCodeVO(); - codeVO.setCode(sMM); - codeVO.setCodeNm(sMM); - - listMM.add(codeVO); - } - return listMM; - } - /** - * 0을 붙여 반환 - * @return String - * @throws - */ - public String DateTypeIntForString(int iInput){ - String sOutput = ""; - if(Integer.toString(iInput).length() == 1){ - sOutput = "0" + Integer.toString(iInput); - }else{ - sOutput = Integer.toString(iInput); - } - - return sOutput; - } - - /** - * 운영자 권한을 확인한다.(로그인 여부를 확인한다.) - * - * @param boardMaster - * @throws EgovBizException - */ - protected boolean checkAuthority(ModelMap model) throws Exception { - // 사용자권한 처리 - if(!EgovUserDetailsHelper.isAuthenticated()) { - model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); - return false; - }else{ - return true; - } - } - -} \ No newline at end of file diff --git a/src/main/java/itn/let/crypto/web/EgovCryptoController.java b/src/main/java/itn/let/crypto/web/EgovCryptoController.java deleted file mode 100644 index 12ed128..0000000 --- a/src/main/java/itn/let/crypto/web/EgovCryptoController.java +++ /dev/null @@ -1,95 +0,0 @@ -package itn.let.crypto.web; - -import java.util.Map; - -import javax.annotation.Resource; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; - -import itn.let.utl.fcc.service.EgovCryptoUtil; - -/** - * 암호화/복호화 관한 controller 클래스를 정의한다. - * @author 공통서비스 개발팀 신용호 - * @since 2018.12.03 - * @version 3.8 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *  수정일               수정자              수정내용
- *  ----------   --------    ---------------------------
- *  2018.12.03   신용호              최초 생성
- * 
- */ - -@Controller -public class EgovCryptoController { - - /** 로그설정 */ - private static final Logger LOGGER = LoggerFactory.getLogger(EgovCryptoController.class); - - /** 암호화서비스 */ - //@Resource(name = "egovEnvCryptoService") - //EgovEnvCryptoService cryptoService; - - //@Resource(name = "egovEnvPasswordEncoderService") - //EgovPasswordEncoder egovPasswordEncoder; - - @Resource(name = "egovCryptoUtil") - EgovCryptoUtil egovCryptoUtil; - - - /** EgovMessageSource */ - //@Resource(name="egovMessageSource") - //EgovMessageSource egovMessageSource; - - /** - * 암호화/복호화 입력 및 요청 페이지를 호출한다. - * - * @return - */ - //@IncludedInfo(name="암호화/복호화", listUrl="/sec/pki/EgovCryptoInfo.do", order = 2200 ,gid = 90) - @RequestMapping(value="/web/sample/EgovCryptoInfo.do") - public String displayCryptoInfo( @RequestParam Map commandMap, - ModelMap model) throws Exception { - // 0. Spring Security 사용자권한 처리 - /* - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - if(!isAuthenticated) { - model.addAttribute("message", egovMessageSource.getMessage("fail.common.login")); - return "egovframework/com/uat/uia/EgovLoginUsr"; - } - */ - - System.out.println(); - - - - String plainText = (String)commandMap.get("plainText"); - - if ( plainText != null ) { - - int plainTextLen = plainText.length(); - //String cryptText = encrypt(plainText); - String cryptText = egovCryptoUtil.encrypt(plainText); - - String decryptText = egovCryptoUtil.decrypt(cryptText); - int decryptTextLen = decryptText.length(); - - model.addAttribute("plainText", plainText); - model.addAttribute("plainTextLen", plainTextLen); - model.addAttribute("cryptText", cryptText); - model.addAttribute("decryptText", decryptText); - model.addAttribute("decryptTextLen", decryptTextLen); - } - - return "web/sample/EgovCryptoInfo"; - } -} \ No newline at end of file diff --git a/src/main/java/itn/let/fax/addr/web/FaxAddrController.java b/src/main/java/itn/let/fax/addr/web/FaxAddrController.java deleted file mode 100644 index b432ff4..0000000 --- a/src/main/java/itn/let/fax/addr/web/FaxAddrController.java +++ /dev/null @@ -1,1949 +0,0 @@ -package itn.let.fax.addr.web; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -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.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.JsonResult; -import itn.com.cmm.LoginVO; -import itn.com.cmm.util.MJUtil; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.fax.addr.service.FaxAddrGroupService; -import itn.let.fax.addr.service.FaxAddrGroupVO; -import itn.let.fax.addr.service.FaxAddrService; -import itn.let.fax.addr.service.FaxAddrTransHistVO; -import itn.let.fax.addr.service.FaxAddrVO; -import itn.let.mjo.msgdata.service.PhoneVO; - -@Controller -public class FaxAddrController { - - @Resource (name = "FaxAddrService") - private FaxAddrService faxAddrService; - - @Resource (name = "FaxAddrGroupService") - private FaxAddrGroupService faxAddrGroupService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - - /** - * 주소록 타 회원으로 이전(복사) 처리 - * @param addrVO - * @param addrGroupVO - * @param addrTransHistVO - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/transFaxAddrGroupAjax.do") - public ModelAndView transFaxAddrGroupAjax(FaxAddrVO addrVO, FaxAddrGroupVO addrGroupVO, FaxAddrTransHistVO addrTransHistVO) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - String successCd = faxAddrService.updateFaxAddrAnotherMember(addrVO, addrGroupVO, addrTransHistVO); - - modelAndView.addObject("status", "success"); - modelAndView.addObject("result", successCd); - - }catch(Exception e) { - e.printStackTrace(); - modelAndView.addObject("status", "fail"); - return modelAndView; - } - - return modelAndView; - } - - /** - * 팩스 주소록 사용자 화면 껍데기 - * @param FaxAddrVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/selectFaxAddrList.do") - public String selectFaxAddrWebList(@ModelAttribute("searchVO") FaxAddrVO faxAddrVO - , FaxAddrGroupVO faxAddrGroupVO, ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - /*redirectAttributes.addFlashAttribute("fail", true);*/ - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - - return "/web/fax/addr/FaxAddrList"; - } - - - /** - * 주소록 그룹 선택시 우측 주소록 리스트 화면 불러오기 - * - * @param AddrGroupVO - * @param AddrVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/addr/selectFaxAddrListAjax.do"}) - public ModelAndView selectMsgAddrListAjax( - @ModelAttribute("searchVO") FaxAddrVO faxAddrVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - faxAddrVO.setMberId(userId); - }else { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - return modelAndView; - - } - try { - - List resultAddrList = faxAddrService.selectFaxAddrListAjax(faxAddrVO); - System.out.println("resultAddrList.size() :: "+ resultAddrList.size()); - - modelAndView.addObject("resultAddrList", resultAddrList); - modelAndView.addObject("result", "success"); - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - } - - - return modelAndView; - } - - /** - * 사용자 팩스 주소록 리스트 Ajax - * @param request - * @param model - * @param addrVO - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/selectFaxAddrAjax.do") - public String selectFaxAddrAjax(HttpServletRequest request, ModelMap model, - @ModelAttribute("searchVO") FaxAddrVO addrVO) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - } - - if(addrVO.getPageUnit() != 10) { - addrVO.setPageUnit(addrVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(addrVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(addrVO.getPageUnit()); - paginationInfo.setPageSize(addrVO.getPageSize()); - - addrVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - addrVO.setLastIndex(paginationInfo.getLastRecordIndex()); - addrVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrVO.setSearchSortCnd("addrId"); - addrVO.setSearchSortOrd("asc"); - } - List addrList = new ArrayList(); - if(StringUtils.isNotEmpty(addrVO.getSearchAddrGrpId())) { - addrList = faxAddrService.selectFaxAddrList(addrVO); - - } - - int totCnt = 0; - if(addrList.size() > 0) { - totCnt = addrList.get(0).getTotcnt(); - } - - paginationInfo.setTotalRecordCount(totCnt); - - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("addrList", addrList); - model.addAttribute("startKeyword",addrVO.getStartKeyword()); - model.addAttribute("userId", userId); - - return "/web/fax/addr/FaxAddrListAjax"; - } - - /** - * 사용자 주소록 중복 리스트 Ajax - * @param request - * @param model - * @param addrVO - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/selectFaxAddrDupliAjax.do") - public String selectFaxAddrDupliAjax(HttpServletRequest request, ModelMap model, - @ModelAttribute("searchVO") FaxAddrVO addrVO) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - } - - if(addrVO.getPageUnit() != 10) { - addrVO.setPageUnit(addrVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(addrVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(addrVO.getPageUnit()); - paginationInfo.setPageSize(addrVO.getPageSize()); - - addrVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - addrVO.setLastIndex(paginationInfo.getLastRecordIndex()); - addrVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrVO.setSearchSortCnd("addrId"); - addrVO.setSearchSortOrd("asc"); - } - - List addrDupliList = faxAddrService.selectFaxAddrDupliListByAll(addrVO); - - int totCnt = 0; - if(addrDupliList.size() > 0) { - totCnt = addrDupliList.get(0).getTotcnt(); - } - - paginationInfo.setTotalRecordCount(totCnt); - - model.addAttribute("paginationInfo2", paginationInfo); - model.addAttribute("addrDupliList", addrDupliList); - - return "/web/fax/addr/FaxAddrListDupliAjax"; - } - - @RequestMapping("/web/mjon/fax/addr/selectFaxAddrPrintAjax.do") - public String selectFaxAddrPrint(@RequestParam("cellCheck2") String[] cellCheck, - FaxAddrVO addrVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - } - - addrVO.setRecordCountPerPage(100000); - addrVO.setFirstIndex(0); - - List addrList = faxAddrService.selectFaxAddrList(addrVO); - - String chk = ""; - - for(int i=0; i 0) { - mv.addObject("result","dupl"); - }else { - if(userId != "") { - try { - faxAddrService.insertFaxAddr(addrVO); - mv.addObject("result","success"); - } catch (Exception e) { - e.printStackTrace(); - mv.addObject("result","fail"); - } - - } else { - mv.addObject("result","fail"); - } - } - return mv; - } - - - /** - * 주소록 다중수정 ajax - * @param addrCheck - * @param request - * @param addrVO - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/updateFaxAddrListAjax.do") - public ModelAndView updateFaxAddrListAjax(HttpServletRequest request, - FaxAddrVO addrVO, Model model - ,RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrVO.setLastUpdusrId(user.getId()); - addrVO.setMberId(user.getId()); - - int listSize = addrVO.getAddrIds().length; - - for(int i=0; i 주소록그룹 수정 추가 - if (addrVO.getAddrGrpIds()[i].equals("bookmark")) { - // 자주보내는 번호 - addrVO.setAddrGrpId("0"); - addrVO.setBookmark("Y"); - } - else { - addrVO.setAddrGrpId(addrVO.getAddrGrpIds()[i]); - addrVO.setBookmark("N"); - } - - addrVO.setAddrId(addrVO.getAddrIds()[i]); - - if(addrVO.getAddrPhones().length > 0) { - addrVO.setAddrPhoneNo(addrVO.getAddrPhones()[i]); - } - else { - addrVO.setAddrPhoneNo(null); - } - - if(addrVO.getAddrNms().length > 0) { - addrVO.setAddrNm(addrVO.getAddrNms()[i]); - } - else { - addrVO.setAddrNm(null); - } - - faxAddrService.updateFaxAddr(addrVO); - - modelAndView.addObject("result", "success"); - } catch (Exception e) { - e.printStackTrace(); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - } - return modelAndView; - } - - - /** - * 주소록 다중수정 ajax - * @param addrCheck - * @param request - * @param addrVO - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/updateFaxAddrAjax.do") - public ModelAndView updateFaxAddrAjax(@RequestParam("addrCheck") String[] addrCheck, HttpServletRequest request, - FaxAddrVO addrVO, Model model - ,RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrVO.setLastUpdusrId(user.getId()); - addrVO.setMberId(user.getId()); - - for(String id:addrCheck) { - try { - - if("0".equals (addrVO.getAddrGrpId())) { - addrVO.setBookmark("Y"); - } else if(addrVO.getAddrGrpId() != null && !"".equals(addrVO.getAddrGrpId())) { - addrVO.setBookmark("N"); - } - - addrVO.setAddrId(id); - faxAddrService.updateMemoFaxAddr(addrVO); - - modelAndView.addObject("result", "success"); - } catch (Exception e) { - e.printStackTrace(); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - } - - return modelAndView; - - } - - - /** - * 주소록 그룹이동 ajax - * @param addrCheck - * @param request - * @param addrVO - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/updateFaxAddrMoveGrpAjax.do") - public ModelAndView updateFaxAddrMoveGrpAjax(@RequestParam("addrCheck") String[] addrCheck, - @RequestParam("addrPhoneNos") String[] addrPhoneNos, - HttpServletRequest request, - FaxAddrVO addrVO, Model model, - RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrVO.setLastUpdusrId(user.getId()); - addrVO.setMberId(user.getId()); - - // 그룹미지정, 자주보내는 번호 구분처리 - if("0".equals (addrVO.getAddrGrpId())) { - // 그룹미지정 - addrVO.setBookmark("N"); - } - else if("bookmark".equals (addrVO.getAddrGrpId())) { - // 자주보내는 번호 - addrVO.setBookmark("Y"); - addrVO.setAddrGrpId("0"); - } - else if(addrVO.getAddrGrpId() != null && !"".equals(addrVO.getAddrGrpId())) { - addrVO.setBookmark("N"); - } - - /** - * 보내려는 그룹에 등록되어있는 전화번호를 변수에 담아둠 - */ - List addrPhoneList = faxAddrService.selectPhoneNumInFaxAddrGroup(addrVO); - - String phoneNos = ""; - for(int i=0; i addrPhoneList = faxAddrService.selectPhoneNumInFaxAddrGroup(addrVO); - - String phoneNos = ""; - for(int i=0; i addrIdList = addrVO.getAddrIdList(); - List tempList = new ArrayList(); - - for(String seqStr : addrIdList) { - - String seqId = seqStr.replace("[", ""); - seqId = seqId.replace("]", ""); - - tempList.add(seqId); - } - - addrVO.setAddrIdList(tempList); - - List resultList = faxAddrService.selectFaxAddrDataList(addrVO); - - - if(resultList == null) { - modelAndView.addObject("status", "emptyList"); - modelAndView.addObject("message", "가져온 주소록 목록이 없습니다."); - - }else { - - modelAndView.addObject("status", "success"); - modelAndView.addObject("resultList", resultList); - modelAndView.addObject("resultListCnt", resultList.size()); - - } - - return modelAndView; - } - - - - - //주소록 엑셀 다운로드 - @RequestMapping("/web/mjon/fax/addr/faxAddrExcelDownload.do") - public void faxAddrExcelDownload(@RequestParam("cellCheck") String[] cellCheck, - FaxAddrVO addrVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - addrVO.setRecordCountPerPage(100000); - addrVO.setFirstIndex(0); - - if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrVO.setSearchSortCnd("addrId"); - addrVO.setSearchSortOrd("asc"); - } - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - CellStyle styleHeader = wb.createCellStyle(); - styleHeader.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - styleHeader.setBorderLeft(CellStyle.BORDER_THIN); - styleHeader.setBorderRight(CellStyle.BORDER_THIN); - styleHeader.setBorderTop(CellStyle.BORDER_THIN); - - CellStyle styleList = wb.createCellStyle(); - - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - Cell cell = null; - Row row = null; - - String fileName ="주소록"; - - String sheetTitle = ""; - try{ - if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrVO.setSearchSortOrd("desc"); - } - addrVO.setMberId(loginVO.getId()); - List addrList = faxAddrService.selectFaxAddrList(addrVO); - { - // row, cell 개수 순서대로 증가용 필드 - int rowNumber = 0; - int celNumber = 0; - //화면 리스트 - sheetTitle = "주소록" ; //제목 - Sheet sheet = wb.createSheet(sheetTitle); - row = sheet.createRow(rowNumber++); - row = sheet.createRow(rowNumber++); //줄추가 - - //cell = row.createCell(celNumber++); - //cell.setCellValue("번호"); - //cell.setCellStyle(style); - - int y = 0; - for(String field : cellCheck) { - //셀 칼럼 크기 설정 - sheet.setColumnWidth(y, 4000); - - cell = row.createCell(celNumber++); - cell.setCellValue(addrVO.getHeaderName(field)); - cell.setCellStyle(styleHeader); - - y++; - } - - for(int i=0; i < addrList.size(); i++){ - row = sheet.createRow(rowNumber++); //줄추가 - celNumber = 0; - //cell = row.createCell(celNumber++); - //cell.setCellStyle(style); - //cell.setCellValue(i+1); //번호 - - for(String field : cellCheck) { - cell = row.createCell(celNumber++); - cell.setCellStyle(styleList); - cell.setCellValue(((FaxAddrVO)addrList.get(i)).getFieldValue(field)); - } - } - } - - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - - - /** - * 주소록 대량등록 - 엑셀파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/fax/addr/sendExelFilePhoneNumAjax.do") - @ResponseBody - public Object sendExelFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); - - try { - - //final Map files = multiRequest.getFileMap(); - List files = (List) multiRequest.getFiles("file0"); - - // 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx - int fileNameSplitCnt = 0; - - if(!files.isEmpty()) { - fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length; - //System.out.println("fileNameSplitCnt : " + fileNameSplitCnt); - - if (files.get(0).getSize() > 0 - && (files.get(0).getContentType().indexOf("spreadsheetml") > -1) - || files.get(0).getContentType().indexOf("ms-excel") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) { - - // 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("엑셀 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - String Ext = files.get(0).getOriginalFilename().split("[.]")[1]; - String errMessage = ""; - String cellValue = ""; - - String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - //String phoneRegExp = "^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - int errPhoneCnt = 0; - int errNameCnt = 0; - /*int errRep1Cnt = 0; - int errRep2Cnt = 0; - int errRep3Cnt = 0; - int errRep4Cnt = 0;*/ - int errMemoCnt = 0; - - - //엑셀 확장자에 따른 처리 로직 분리 - if(Ext.equals("xls")) { - - HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); - HSSFSheet sheet = workbook.getSheetAt(0); - - if(sheet.getLastRowNum() > 20000) { // - errMessage = "2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - HSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - HSSFCell cell = null; - boolean errSts = true; - for(int j = 0 ; j < 3; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/info1/info2/info3/info4/메모 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - boolean nmChk = getNameRepLenChk("name", cellValue); - - if(nmChk && errSts) { - jm.put("name", cellValue); - }else { - errNameCnt++; - errSts = false; - break; - } - } - if(j == 1) { - // 문자열에서 숫자만 추출 - cellValue = getOnlyNumber(cellValue); - - //전화번호 - if(MJUtil.checkFaxNum(cellValue) && errSts) {//휴대폼 번호 타입이 아닌 경우에만 저장 되도록 함 - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errSts = false; - break; - } - } - if(j == 2) { - //메모 - boolean repChk = getNameRepLenChk("memo", cellValue); - - if(repChk && errSts) { - jm.put("memo", cellValue); - }else { - errMemoCnt++; - errSts = false; - break; - } - } - } - if(null != jm.get("phone")) { - json.add(jm); - } - - } - - int resultErrCnt = errPhoneCnt + errNameCnt + errMemoCnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - jr.setMessage("올바르지 않은 팩스 번호가 "+ resultErrCnt +" 건 있습니다."); - }else { - jr.setMessage(""); - } - - }else { //확장자가 xlsx - - OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - opcPackage.close(); - - //실제 데이터가 있는 셀의 갯수를 카운팅 한다.(팩스번호만 체크) - int totRowDataCnt = 0; - for(int r=1; r 20000) { // - if(totRowDataCnt > 20001) { // - errMessage = "2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - //for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - for(int i=2; i< totRowDataCnt + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - XSSFRow row = sheet.getRow(i); //열읽기 - System.out.println(i); - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(핸드폰부터 받아오기) - XSSFCell cell = null; - boolean errSts = true; - - for(int j = 0 ; j < 3; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5/메모 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - boolean nmChk = getNameRepLenChk("name", cellValue); - - if(nmChk && errSts) { - jm.put("name", cellValue); - }else { - errNameCnt++; - errSts = false; - break; - } - } - if(j == 1) { - // 문자열에서 숫자만 추출 - cellValue = getOnlyNumber(cellValue); - //전화번호 - if(MJUtil.checkFaxNum(cellValue) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errSts = false; - break; - } - } - if(j == 2) { - //메모 - boolean repChk = getNameRepLenChk("memo", cellValue); - - if(repChk && errSts) { - jm.put("memo", cellValue); - }else { - errMemoCnt++; - errSts = false; - break; - } - } - - } - if(null != jm.get("phone") && errSts) { - json.add(jm); - } - - } - - int resultErrCnt = errPhoneCnt + errNameCnt ; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - jr.setMessage("올바르지 않은 팩스 번호가 "+ resultErrCnt +" 건 있습니다."); - }else { - jr.setMessage(""); - } - } //xlsx 처리 끝 - - } - else { - - String ttt = files.get(0).getSize() + "_" + - files.get(0).getContentType() + "_" + - files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1]; - - jr.setSuccess(false); - jr.setMessage("엑셀파일 인식오류."); - //jr.setMessage("엑셀파일 인식오류" + ttt); - } - } - else { - jr.setSuccess(false); - jr.setMessage("엑셀파일 인식오류."); - } - - return jr; - - } catch (Exception e) { - - System.out.println("+++++++++++++++ sendExelFilePhoneNumAjax Fax Controller Error!!! "+e); - - jr.setSuccess(false); - jr.setMessage("엑셀파일 인식오류."); - return jr; - } - - - - } - - - /** - * 주소록 대량등록 - TXT파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/fax/addr/sendTxtFilePhoneNumAjax.do") - @ResponseBody - public Object sendTxtFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("TXT 파일만 업로드할 수 있습니다."); - - List files = (List) multiRequest.getFiles("file0"); - - if(!files.isEmpty()) { - - if (files.get(0).getSize() > 0 - || files.get(0).getOriginalFilename().split("[.]")[1].indexOf("txt") > -1) { - - // txt 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("txt 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(multiRequest.getFile("file0").getInputStream())); - - String line = null; - String[] splitedStr = null; - String[] tempStr = null; - int errPhoneCnt = 0; - int totRowNum = 0; - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - //String phoneRegExp = "^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - List> json = new ArrayList>(); - - //파일 읽어서 탭으로 구분해주기 - while ((line = reader.readLine()) != null) { - - HashMap jm = new HashMap<>(); - splitedStr = null; - tempStr = null; - - //txt 파일의 데이터가 탭 혹은 콤마로 구분되어 있는지 구분처리 - tempStr = line.split("\\,"); - if(tempStr.length > 1) { - splitedStr = line.split("\\,"); - }else { - splitedStr = line.split("\t");; - } - - for (int i = 0; i < splitedStr.length; i++) { - splitedStr[i] = splitedStr[i].trim(); - if(i == 0) { - //이름 - jm.put("name", splitedStr[i]); - } - if(i == 1) { - // 문자열에서 숫자만 추출 - splitedStr[i] = getOnlyNumber(splitedStr[i]); - - if(MJUtil.checkFaxNum(splitedStr[i])) {//휴대폰번호 타입이 아닌 경우만 입력 되도록 함. - //팩스 번호 - jm.put("phone", splitedStr[i]); - }else { - errPhoneCnt++; - } - } - if(i == 2) { - //메모 - jm.put("memo", splitedStr[i]); - } - } - - if(jm.get("phone") != null) { - json.add(jm); - } - - totRowNum++; - } // end while - jr.setData(json); - jr.setSuccess(true); - - if (totRowNum > 20000) { - jr.setMessage("20000"); - } - else { - if(errPhoneCnt > 0) { - jr.setMessage("올바르지 않은 팩스 번호가 "+ errPhoneCnt +" 건 있습니다."); - }else { - jr.setMessage(""); - } - } - } - - } - - return jr; - } - - - /** - * 주소록 대량등록 저장 - * @param searchVO - * @param model - * @return "/web/mjon/addr/addrMassInsertByTempAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/addr/faxAddrMassInsertByTempAjax.do"}) - public ModelAndView faxAddrMassInsertByTempAjax(@ModelAttribute("searchVO") FaxAddrVO addrVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - //String phoneRegExp = "^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - boolean isSuccess = true; - String msg = ""; - int resultCnt = 0; - int dupliCnt = 0; // 중복 데이터 수 - int errPhoneCnt = 0; - List addrMassDupliList = new ArrayList(); // 중복 휴대폰번호 - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - isSuccess = false; - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", "로그인 후 이용이 가능합니다."); - return modelAndView; - } - else { - addrVO.setMberId(userId); - } - - //회원별 주소록 전체 갯수 조회 - int addrBefAfterCnt = 0; - int addrBefCnt = faxAddrService.selectFaxAddrTotalCount(addrVO); - int addrNewCnt = addrVO.getPhoneList().length; //신규 추가할 주소록 갯수 - int sumAddrCnt = addrBefCnt + addrNewCnt; //기존 + 신규 주소록 합산 - - // 신규 주소록 여부 체크 - if (addrVO.getAddrGrpId().equals("NEW")) { - - FaxAddrGroupVO addrGroupVO = new FaxAddrGroupVO(); - addrGroupVO.setMberId(userId); - addrGroupVO.setAddrGrpNm(addrVO.getAddrGrpNm()); - // 정렬순서 - int nextOrderNumber = faxAddrGroupService.selectMaxOrderFaxNumber(addrGroupVO); - addrGroupVO.setGrpOrder(nextOrderNumber); - - faxAddrGroupService.insertFaxAddrGroup(addrGroupVO); - - // 신규 추가한 그룹아이디 - addrVO.setAddrGrpId(addrGroupVO.getAddrGrpId()); - } - - // 그룹미지정, 자주보내는 번호 구분처리 - if("bookmark".equals (addrVO.getAddrGrpId())) { - // 자주보내는 번호 - addrVO.setBookmark("Y"); - addrVO.setAddrGrpId("0"); - } - else { - addrVO.setBookmark("N"); - } - - // 2024.01.24 10만건 -> 50만건으로 증설 요청으로 인한 증설 - List addrDataInfo = new ArrayList(); - if(addrBefCnt < 500000) { // 기존 등록된 주소록이 10만건 미만이면 - - //받는사람 리스트 건수 체크해주기 - if(sumAddrCnt > 500000) { - isSuccess = false; - msg = "주소록은 총 50만개까지만 등록이 가능합니다."; - } - else { - for(int i=0; i < addrNewCnt; i++) { - FaxAddrVO tempAddrVO = new FaxAddrVO(); - - if(addrVO.getNameList().length > 0) { - if(addrVO.getNameList()[i].equals("-")) { - tempAddrVO.setAddrNm(null); - }else { - String tmpNm = addrVO.getNameList()[i].trim().replaceAll("§", ","); - int nmLen = tmpNm.length(); - - if(nmLen > 12) { - //isSuccess = false; - //msg = "이름 항목의 내용(\" " + tmpNm + " \")이 길이를 초과하여 입력되었습니다. 12글자 이하로 입력해 주세요."; - //break; - - tempAddrVO.setAddrNm(addrVO.getNameList()[i].trim().replaceAll("§", ",").substring(0, 12)); - }else { - tempAddrVO.setAddrNm(addrVO.getNameList()[i].trim().replaceAll("§", ",")); - } - - } - } - else { - tempAddrVO.setAddrNm(null); - } - - if(addrVO.getPhoneList().length > 0) { - if(addrVO.getPhoneList()[i].equals("-")) { - tempAddrVO.setAddrPhoneNo(null); - }else { - tempAddrVO.setAddrPhoneNo(addrVO.getPhoneList()[i].trim().replaceAll("§", ",")); - } - } - else { - tempAddrVO.setAddrPhoneNo(null); - } - - if(addrVO.getMemoList().length > 0) { - if(addrVO.getMemoList()[i].equals("-")) { - tempAddrVO.setAddrComment(null); - }else { - String tmpComment = addrVO.getMemoList()[i].replaceAll("§", ","); - int commLen = tmpComment.length(); - - if(commLen > 125) { - //isSuccess = false; - //msg = "메모 항목의 내용(\" " + tmpComment + " \")이 길이를 초과하여 입력되었습니다. 100글자 이하로 입력해 주세요."; - //break; - - tempAddrVO.setAddrComment(addrVO.getMemoList()[i].replaceAll("§", ",").substring(0, 125)); - }else { - tempAddrVO.setAddrComment(addrVO.getMemoList()[i].replaceAll("§", ",")); - } - } - } - else { - tempAddrVO.setAddrComment(null); - } - - tempAddrVO.setMberId(userId); - tempAddrVO.setFrstRegisterId(userId); - tempAddrVO.setAddrGrpId(addrVO.getAddrGrpId()); // 그룹 지정 - - // 그룹미지정, 자주보내는 번호 구분처리 - if("Y".equals (addrVO.getBookmark())) { - // 자주보내는 번호 - tempAddrVO.setBookmark("Y"); - tempAddrVO.setAddrGrpId("0"); - } - else { - tempAddrVO.setBookmark("N"); - } - - FaxAddrVO addrVO2 = new FaxAddrVO(); - addrVO2.setMberId(userId); - addrVO2.setAddrGrpId(addrVO.getAddrGrpId()); // 그룹 지정 - addrVO2.setAddrPhoneNo(addrVO.getPhoneList()[i]); // 연락처 - - // 팩스 번호 유효성 검사 - boolean isPhoneNoErr = true; - if(!addrVO.getPhoneList()[i].matches(phoneRegExp)) {//휴대폼 번호 타입이 아닌 경우에만 통과 되도록 함 - isPhoneNoErr = false; - }else { - errPhoneCnt++; - } - - //int usedCnt = addrService.selectDuplAddrCnt(addrVO2); - if(isPhoneNoErr == false) { - //주소록 리스트에 데이터 추가해 주기 - addrDataInfo.add(tempAddrVO); - } - } - - System.out.println("======================================================"); - System.out.println("+++++++++++++++++++++++++ isSuccess ::: "+isSuccess); - System.out.println("======================================================"); - - //주소록에 데이터 추가해 주기 - if (isSuccess == true && addrDataInfo.size() > 0) { - // 주소록 대량등록 By Temp 주소록 All - resultCnt = faxAddrService.insertFaxAddrByTempAddrAll(addrDataInfo, addrVO); - - addrBefAfterCnt = faxAddrService.selectFaxAddrTotalCount(addrVO); - - addrMassDupliList = faxAddrService.selectTempFaxAddrDupliList(addrVO); - - resultCnt = addrBefAfterCnt - addrBefCnt; - dupliCnt = addrNewCnt - resultCnt; - } - } - } - else { - isSuccess = false; - msg = "주소록은 총 50만개까지만 등록이 가능합니다."; - } - } - catch(Exception e) { - - isSuccess = false; - msg = "주소록 저장에 오류가 발생하였습니다. 시스템 관리자에게 문의 바랍니다."; - System.out.println("=============================================="); - System.out.println("+++++++++++++++++++ addrMassInsertByTempAjax Error ::: "+e.getMessage()); - System.out.println("=============================================="); - - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("dupliCnt", dupliCnt); - modelAndView.addObject("errPhoneCnt", errPhoneCnt); - modelAndView.addObject("addrMassDupliList", addrMassDupliList); - - return modelAndView; - } - - - - /** - * 주소록 그룹 리스트 화면 불러오기 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/addr/selectFaxAddrGroupListAjaxView.do"}) - public String selectFaxAddrGroupListAjaxView( - @ModelAttribute("searchVO") FaxAddrGroupVO faxaddrGroupVO, - FaxAddrVO faxaddrVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(loginVO == null) { - - return "redirect:/web/main/mainPage.do"; - - } - - if(userId != "") { - faxaddrGroupVO.setMberId(userId); - faxaddrVO.setMberId(userId); - } - - if(faxaddrGroupVO.getPageUnit() != 10) { - faxaddrGroupVO.setPageUnit(faxaddrGroupVO.getPageUnit()); - } - - if("".equals(faxaddrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - faxaddrGroupVO.setSearchSortCnd("addrGrpId"); - faxaddrGroupVO.setSearchSortOrd("desc"); - } - - faxaddrGroupVO.setSiteId("web"); - List addrGroupList = faxAddrGroupService.selectFaxAddrGroupList(faxaddrGroupVO); - - //회원별 주소록 전체 갯수 조회 -// int addrTotalCount = faxAddrService.selectFaxAddrTotalCount(faxaddrVO); - - faxaddrVO.setType("bookmark"); - List addrBookmarkList = faxAddrService.selectFaxAddrBasicGrpList(faxaddrVO); - - faxaddrVO.setType("noGrp"); - List addrNoGrpList = faxAddrService.selectFaxAddrBasicGrpList(faxaddrVO); - - - - int totalGrpCount = addrGroupList.stream() - .mapToInt(group -> { - String grpCountStr = group.getGrpCount(); - if (grpCountStr != null && !grpCountStr.isEmpty()) { - try { - return Integer.parseInt(grpCountStr); - } catch (NumberFormatException e) { - // 파싱에 실패한 경우 0을 반환하거나 예외 처리를 합니다. - return 0; - } - } else { - return 0; - } - }) - .sum(); - - int addrTotalCount = (addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0) - + (addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0) - + totalGrpCount - ; - - - model.addAttribute("addrTotalCount", addrTotalCount); - model.addAttribute("addrGroupList", addrGroupList); - model.addAttribute("addrBookmarkList", addrBookmarkList); - model.addAttribute("addrNoGrpList", addrNoGrpList); - - return "web/fax/addr/FaxAddrGroupListAjaxView"; - } - - - /** - * 주소록 그룹 목록 - * @param searchVO - * @param model - * @return "/web/mjon/addr/addrGroupListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/addr/faxAddrGroupListAjax.do"}) - public ModelAndView faxAddrGroupListAjax(@ModelAttribute("searchVO") FaxAddrGroupVO addrGroupVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - List addrGroupList = null; - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrGroupVO.setMberId(userId); - - if(addrGroupVO.getPageUnit() != 10) { - addrGroupVO.setPageUnit(addrGroupVO.getPageUnit()); - } - - if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrGroupVO.setSearchSortCnd("grpOrder"); - addrGroupVO.setSearchSortOrd("desc"); - } - - addrGroupVO.setSiteId("web"); - addrGroupList = faxAddrGroupService.selectFaxAddrGroupList(addrGroupVO); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - model.addAttribute("addrGroupList", addrGroupList); - - return modelAndView; - } - - /** - * 주소록 그룹별 중복 연락처 목록 - * @param searchVO - * @param model - * @return "/web/mjon/addr/addrDupliListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/addr/faxAddrDupliListAjax.do"}) - public ModelAndView faxAddrDupliListAjax(@ModelAttribute("searchVO") FaxAddrVO addrVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - List addrDupliList = null; - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - - // 주소록 그룹별 중복 연락처 목록 - addrDupliList = faxAddrService.selectFaxAddrDupliList(addrVO); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - model.addAttribute("addrDupliList", addrDupliList); - - return modelAndView; - } - - /** - * 주소록 그룹별 중복 연락처 삭제 - * @param searchVO - * @param model - * @return "/web/mjon/addr/deleteAddrDupliList.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/addr/deleteFaxAddrDupliListAjax.do"}) - public ModelAndView deleteFaxAddrDupliListAjax(@ModelAttribute("searchVO") FaxAddrVO addrVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - - // 주소록 그룹별 중복 연락처 삭제 - faxAddrService.deleteFaxAddrDupliList(addrVO); - } - else { - isSuccess = false; - msg = "로그인후 이용하세요."; - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - - /** - * 주소록 그룹별 중복 연락처 삭제 - * @param searchVO - * @param model - * @return "/web/mjon/addr/deleteAddrByAllDupliListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/addr/deleteFaxAddrByAllDupliListAjax.do"}) - public ModelAndView deleteFaxAddrByAllDupliListAjax(@ModelAttribute("searchVO") FaxAddrVO addrVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - - // 주소록 그룹별 중복 연락처 삭제 - faxAddrService.deleteFaxAddrDupliListByAll(addrVO); - } - else { - isSuccess = false; - msg = "로그인후 이용하세요."; - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - - - public boolean getNameRepLenChk(String type, String value) { - - boolean rtnValue = true; - - // JSPark 2023.02.17 : 글자길이체크 주석처리 => 저장시 절삭하기 때문 - /* - if(type.equals("name")) { - - String tmpNm = value; - int nmLen = tmpNm.length(); - - if(nmLen > 12) { - - rtnValue = false; - - } - - }else if(type.equals("rep")) { - - String tmpRep = value; - int repLen = tmpRep.length(); - - if(repLen > 20) { - - rtnValue = false; - - } - - }else if(type.equals("memo")) { - - String tmpRep = value; - int repLen = tmpRep.length(); - - if(repLen > 120) { - - rtnValue = false; - - } - - } - */ - - return rtnValue; - } - - // 문자열에서 숫자만 추출 - public String getOnlyNumber(String str) { - //String str = "aaa1234, ^&*2233pp"; - - String intStr = str.replaceAll("[^\\d]", ""); - - return intStr; - } -} diff --git a/src/main/java/itn/let/fax/addr/web/FaxAddrGroupController.java b/src/main/java/itn/let/fax/addr/web/FaxAddrGroupController.java deleted file mode 100644 index ae341a0..0000000 --- a/src/main/java/itn/let/fax/addr/web/FaxAddrGroupController.java +++ /dev/null @@ -1,594 +0,0 @@ -package itn.let.fax.addr.web; - -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -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.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.fax.addr.service.FaxAddrGroupService; -import itn.let.fax.addr.service.FaxAddrGroupVO; -import itn.let.fax.addr.service.FaxAddrService; -import itn.let.fax.addr.service.FaxAddrVO; -import itn.let.mjo.msgsent.service.MjonMsgSentService; -import itn.let.mjo.pay.service.KmcVO; -import itn.let.uat.uia.service.AuthCertVO; -import itn.let.uat.uia.web.KmcCertChecker; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.MberManageVO; - -@Controller -public class FaxAddrGroupController { - - @Resource(name = "MjonMsgSentService") - private MjonMsgSentService mjonMsgSentService; - - @Resource (name = "FaxAddrGroupService") - private FaxAddrGroupService faxAddrGroupService; - - @Resource (name = "FaxAddrService") - private FaxAddrService faxAddrService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - /** mberManageService */ - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - - /** - * 팩스 주소록 그룹 리스트 - * @param FaxAddrGroupVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/selectFaxAddrGroupListAjax.do") - public String selectFaxAddrGroupListAjax(@ModelAttribute("searchVO") FaxAddrGroupVO addrGroupVO, FaxAddrVO addrVO - ,ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrGroupVO.setMberId(userId); - addrVO.setMberId(userId); - } else { - redirectAttributes.addFlashAttribute("fail", true); - return "redirect:/web/user/login/login.do"; - } - - - if(addrGroupVO.getPageUnit() != 10) { - addrGroupVO.setPageUnit(addrGroupVO.getPageUnit()); - } - - if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrGroupVO.setSearchSortCnd("grpOrder"); - addrGroupVO.setSearchSortOrd("desc"); - } - - addrGroupVO.setSiteId("web"); - List addrGroupList = faxAddrGroupService.selectFaxAddrGroupList(addrGroupVO); - -// //회원별 주소록 전체 갯수 조회 -// int addrTotalCount = faxAddrService.selectFaxAddrTotalCount(addrVO); - - addrVO.setType("bookmark"); - List addrBookmarkList = faxAddrService.selectFaxAddrBasicGrpList(addrVO); - - addrVO.setType("noGrp"); - List addrNoGrpList = faxAddrService.selectFaxAddrBasicGrpList(addrVO); - - - int totalGrpCount = addrGroupList.stream() - .mapToInt(group -> { - String grpCountStr = group.getGrpCount(); - if (grpCountStr != null && !grpCountStr.isEmpty()) { - try { - return Integer.parseInt(grpCountStr); - } catch (NumberFormatException e) { - // 파싱에 실패한 경우 0을 반환하거나 예외 처리를 합니다. - return 0; - } - } else { - return 0; - } - }) - .sum(); - - int addrTotalCount = (addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0) - + (addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0) - + totalGrpCount - ; - - - model.addAttribute("addrTotalCount", addrTotalCount); - model.addAttribute("addrGroupList", addrGroupList); - model.addAttribute("addrBookmarkList", addrBookmarkList); - model.addAttribute("addrNoGrpList", addrNoGrpList); - model.addAttribute("userId", userId); - - return "/web/fax/addr/FaxAddrGroupListAjax"; - - } - - /** - * 주소록 합치기 팝업 리스트 - * @param addrGroupVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/selectFaxAddrGroupMergetAjax.do") - public ModelAndView selectFaxAddrGroupMergetAjax(@ModelAttribute("searchVO") FaxAddrGroupVO addrGroupVO, FaxAddrVO addrVO - , ModelMap model) throws Exception { - - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrGroupVO.setMberId(userId); - addrVO.setMberId(userId); - } - - if(addrGroupVO.getPageUnit() != 10) { - addrGroupVO.setPageUnit(addrGroupVO.getPageUnit()); - } - - if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrGroupVO.setSearchSortCnd("addrGrpId"); - addrGroupVO.setSearchSortOrd("desc"); - } - - addrGroupVO.setSiteId("web"); - List addrGroupList = faxAddrGroupService.selectFaxAddrGroupList(addrGroupVO); - - model.addAttribute("addrGroupList", addrGroupList); - modelAndView.addObject("status", "success"); - - return modelAndView; - - } - - /** - * 팩스 주소록 등록 페이지(ajax) - * @param FaxAddrGroupVO - * @param redirectAttributes - * @param request - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/selectFaxAddrGroupAjax.do") - public String selectFaxAddrGroupAjax(HttpServletRequest request, ModelMap model, - FaxAddrGroupVO addrGroupVO, FaxAddrVO addrVO, RedirectAttributes redirectAttributes - ) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrGroupVO.setMberId(userId); - addrVO.setMberId(userId); - } else { - redirectAttributes.addFlashAttribute("fail", true); - return "redirect:/web/user/login/login.do"; - } - - if(addrGroupVO.getPageUnit() != 10) { - addrGroupVO.setPageUnit(addrGroupVO.getPageUnit()); - } - - addrGroupVO.setSiteId("web"); - List faxAddrGroupList = faxAddrGroupService.selectFaxAddrGroupList(addrGroupVO); - - model.addAttribute("addrGroupList", faxAddrGroupList); - - - return "/web/fax/addr/FaxAddrGroupSelectAjax"; - } - - /** - * 주소록 그룹 등록 로직 (ajax) - * @param addrGroupVO - * @param request - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/insertFaxAddrGroupAjax.do") - public ModelAndView insertFaxAddrGroup(HttpServletRequest request, ModelMap model, - FaxAddrGroupVO addrGroupVO - ) throws Exception { - ModelAndView mv = new ModelAndView(); - mv.setViewName("jsonView"); - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - addrGroupVO.setMberId(userId); - - int usedCnt = faxAddrGroupService.selectDuplFaxAddrGroupCnt(addrGroupVO); - if(usedCnt > 0) { - mv.addObject("result","dupl"); - }else { - if(userId != "") { - try { - faxAddrGroupService.insertFaxAddrGroup(addrGroupVO); - mv.addObject("result","success"); - } catch (Exception e) { - e.printStackTrace(); - mv.addObject("result","fail"); - } - } else { - mv.addObject("result","fail"); - } - } - return mv; - } - - /** - * 주소록 그룹 중복체크 로직 (ajax) - * @param addrGroupVO - * @param request - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/getFaxAddrGroupDuplCheckAjax.do") - public ModelAndView getFaxAddrGroupDuplCheckAjax(HttpServletRequest request, ModelMap model, - FaxAddrGroupVO addrGroupVO - ) throws Exception { - ModelAndView mv = new ModelAndView(); - mv.setViewName("jsonView"); - - boolean isSuccess = true; - boolean isDupl = false; - String msg = ""; - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - try { - addrGroupVO.setMberId(userId); - - int usedCnt = faxAddrGroupService.selectDuplFaxAddrGroupCnt(addrGroupVO); - if(usedCnt > 0) { - isDupl = true; - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - mv.addObject("isSuccess", isSuccess); - mv.addObject("isDupl", isDupl); - mv.addObject("msg", msg); - - return mv; - } - - - /** - * 주소록 그룹 수정 로직 Ajax - * - * @param request - * @param addrGroupVO - * @param redirectAttributes - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/updateFaxAddrGroupAjax.do") - public ModelAndView updateFaxAddrGroupAjax(@RequestParam("addrGrpNms") String[] addrGrpNms, - @RequestParam("addrGrpIds") String[] addrGrpIds, - HttpServletRequest request, - @ModelAttribute("searchVO") FaxAddrGroupVO addrGroupVO, Model model - ,RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrGroupVO.setLastUpdusrId(user.getId()); - addrGroupVO.setMberId(user.getId()); - - boolean dupl = false; - for (int i=0; i 0) { - modelAndView.addObject("result1", "dupl"); - } else { - modelAndView.addObject("result1", "success"); - } - modelAndView.addObject("status1", "success"); - - return modelAndView; - } - - /** - * 주소록 합치기 - * @param addrGrpNewNm - * @param request - * @param addrGroupVO - * @param addrVO - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - - @RequestMapping("/web/mjon/fax/addr/mergeFaxAddrGroupAjax.do") - public ModelAndView mergeFaxAddrGroupAjax(@RequestParam("addrGrpNewNm") String addrGrpNewNm - ,HttpServletRequest request - ,@ModelAttribute("searchVO") FaxAddrGroupVO addrGroupVO - ,FaxAddrVO addrVO - ,Model model - ,RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrGroupVO.setLastUpdusrId(user.getId()); - addrGroupVO.setMberId(user.getId()); - addrGroupVO.setFrstRegisterId(user.getId()); - addrGroupVO.setAddrGrpNm(addrGrpNewNm); - - int usedCnt = faxAddrGroupService.selectDuplFaxAddrGroupCnt(addrGroupVO); - - if(usedCnt > 0) { - modelAndView.addObject("result", "dupl"); - }else { - addrVO.setMberId(user.getId()); - addrVO.setLastUpdusrId(user.getId()); - - try { - faxAddrGroupService.mergeFaxAddrGroupAjax(addrGroupVO, addrVO); - - modelAndView.addObject("result", "success"); - } catch (Exception e) { - e.printStackTrace(); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - } - - - return modelAndView; - - } - - - - - /** - * 주소록 그룹 복사하기 - * @param addrGrpNewNm - * @param request - * @param addrGroupVO - * @param addrVO - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - - @RequestMapping("/web/mjon/fax/addr/copyFaxAddrGroupAjax.do") - public ModelAndView copyFaxAddrGroupAjax(@RequestParam("addrGrpNewNm") String addrGrpNewNm - ,HttpServletRequest request - ,@ModelAttribute("searchVO") FaxAddrGroupVO addrGroupVO - ,FaxAddrVO addrVO - ,Model model - ,RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrGroupVO.setLastUpdusrId(user.getId()); - addrGroupVO.setMberId(user.getId()); - addrGroupVO.setFrstRegisterId(user.getId()); - addrGroupVO.setAddrGrpNm(addrGrpNewNm); - - int usedCnt = faxAddrGroupService.selectDuplFaxAddrGroupCnt(addrGroupVO); - - if(usedCnt > 0) { - modelAndView.addObject("result", "dupl"); - }else { - addrVO.setMberId(user.getId()); - addrVO.setLastUpdusrId(user.getId()); - - try { - faxAddrGroupService.copyFaxAddrGroupAjax(addrGroupVO, addrVO); - - modelAndView.addObject("result", "success"); - } catch (Exception e) { - e.printStackTrace(); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - } - - - return modelAndView; - - } - - - // 주소록 내보내기 kmc본인인증 - @RequestMapping(value = "/web/mjon/fax/addr/kmcPopupFaxAddrSubmitPramAjax.do") - public ModelAndView kmcPopupIdPwPramAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, - HttpServletRequest request) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - KmcCertChecker kmcCertCheck = new KmcCertChecker(); - - // mberId null일경우 ""로 - mberManageVO.setMberId(EgovStringUtil.isNullToString(mberManageVO.getMberId())); - - // kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://219.240.88.15:8095"; - } else { - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } - - AuthCertVO certVO = kmcCertCheck.authCertCheckEight(serverNm + "/web/cop/kmc/authRequestAddrSubmitAjax.do", - mberManageVO.getMberId()); - - modelAndView.addObject("tr_cert", certVO.getTr_cert()); - modelAndView.addObject("tr_url", certVO.getTr_url()); - modelAndView.addObject("tr_add", certVO.getTr_add()); - - modelAndView.addObject("result", "success"); - - } catch (Exception e) { - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - } - - return modelAndView; - } - - - // 파라미터 유효성 검증 -------------------------------------------- - public Boolean paramChk(String patn, String param) { - Pattern pattern = Pattern.compile(patn); - Matcher matcher = pattern.matcher(param); - boolean b = matcher.matches(); - return b; - } - - // 파라미터 유효성 검증 -------------------------------------------- - public String returnPage(ModelMap model, String errMessage, KmcVO kmcVO) { - kmcVO.setErrMessage(errMessage); - model.addAttribute("kmcVO", kmcVO); - return "web/cop/nicepay/payRequestAjax"; - } - - -} diff --git a/src/main/java/itn/let/fax/addr/web/FaxAddrRestController.java b/src/main/java/itn/let/fax/addr/web/FaxAddrRestController.java deleted file mode 100644 index 9f3b665..0000000 --- a/src/main/java/itn/let/fax/addr/web/FaxAddrRestController.java +++ /dev/null @@ -1,81 +0,0 @@ -package itn.let.fax.addr.web; - -import java.time.LocalDateTime; -import java.util.List; - -import javax.annotation.Resource; - -import org.apache.commons.vfs2.util.DelegatingFileSystemOptionsBuilder; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.fax.addr.service.FaxAddrGroupService; -import itn.let.fax.addr.service.FaxAddrService; -import itn.let.fax.addr.service.FaxAddrVO; -import itn.let.mail.service.StatusResponse; - -/** - * 팩스 주소록 관한 controller 클래스를 정의한다. - * @author ITN - * @since 2024.11.08 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2021.04.08  ITN          최초 생성
- *
- * 
- */ -@RestController -public class FaxAddrRestController { - - - @Resource (name = "FaxAddrService") - private FaxAddrService faxAddrService; - - @Resource (name = "FaxAddrGroupService") - private FaxAddrGroupService faxAddrGroupService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - /** - * 팩스 주소록 대량등록 저장 - * @param searchVO - * @param model - * @return "/web/mjon/addr/addrMassInsertByTempAjax_advc.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/addr/faxAddrMassInsertByTempAjax_advc.do"}) - public ResponseEntity faxAddrMassInsertByTempAjax_advc( - @RequestBody List faxAddrListVO - ,ModelMap model) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - return ResponseEntity.ok( - new StatusResponse(HttpStatus.UNAUTHORIZED - , "로그인을 하셔야 이용 가능합니다." - , LocalDateTime.now() - ) - ); - } - - return ResponseEntity.ok().body(faxAddrService.faxAddrMassInsertByTempAjax_advc(faxAddrListVO, userId)); - } -} \ No newline at end of file diff --git a/src/main/java/itn/let/fax/addr/web/FaxAddrTransHistController.java b/src/main/java/itn/let/fax/addr/web/FaxAddrTransHistController.java deleted file mode 100644 index e21df0e..0000000 --- a/src/main/java/itn/let/fax/addr/web/FaxAddrTransHistController.java +++ /dev/null @@ -1,265 +0,0 @@ -package itn.let.fax.addr.web; - -import java.io.OutputStream; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.LoginVO; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.fax.addr.service.FaxAddrTransHistService; -import itn.let.fax.addr.service.FaxAddrTransHistVO; - -@Controller -public class FaxAddrTransHistController { - - @Resource (name = "FaxAddrTransHistService") - private FaxAddrTransHistService faxAddrTransHistService; - - - /** - * 주소록 리스트 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/selectFaxAddrTransHistListAjax.do") - public String selectFaxAddrTransHistListAjax(@ModelAttribute("searchVO") FaxAddrTransHistVO addrTransHistVO - ,ModelMap model) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrTransHistVO.setSendMberId(userId); - } - - addrTransHistVO.setPageUnit(5); - - /** paging */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(addrTransHistVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(addrTransHistVO.getPageUnit()); - paginationInfo.setPageSize(addrTransHistVO.getPageSize()); - - addrTransHistVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - addrTransHistVO.setLastIndex(paginationInfo.getLastRecordIndex()); - addrTransHistVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - addrTransHistVO.setSearchSortCnd("sendDate"); - addrTransHistVO.setSearchSortOrd("desc"); - - - List addrTransHistList = faxAddrTransHistService.selectFaxAddrTransHistList(addrTransHistVO); - - int totCnt = 0; - if(addrTransHistList.size() > 0) { - totCnt = addrTransHistList.get(0).getTotcnt(); - } - - paginationInfo.setTotalRecordCount(totCnt); - model.addAttribute("addrTransHistList", addrTransHistList); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totCnt", totCnt); - - return "/web/fax/addr/FaxAddrTransHistListAjax"; - } - - - - - - /** - * 주소록 리스트 인쇄페이지 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/fax/addr/selectFaxAddrTransHistPrint.do") - public String selectFaxAddrTransHistPrint(@ModelAttribute("searchVO") FaxAddrTransHistVO addrTransHistVO - ,ModelMap model) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrTransHistVO.setSendMberId(userId); - } - addrTransHistVO.setRecordCountPerPage(100000); - addrTransHistVO.setFirstIndex(0); - - List addrTransHistList = faxAddrTransHistService.selectFaxAddrTransHistList(addrTransHistVO); - - model.addAttribute("addrTransHistList", addrTransHistList); - - return "/web/fax/addr/FaxAddrTransHistPrint"; - } - - - - - - - - //주소록 엑셀 다운로드 - @RequestMapping("/web/mjon/fax/addr/faxAddrTransHistExcelDownload.do") - public void faxAddrTransHistExcelDownload(FaxAddrTransHistVO addrTransHistVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - addrTransHistVO.setRecordCountPerPage(100000); - addrTransHistVO.setFirstIndex(0); - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - Cell cell = null; - Row row = null; - - String fileName ="주소록 내보내기 관리"; - - String sheetTitle = ""; - try{ - if("".equals(addrTransHistVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrTransHistVO.setSearchSortOrd("desc"); - } - addrTransHistVO.setSendMberId(loginVO.getId()); - List addrTransHistList = faxAddrTransHistService.selectFaxAddrTransHistList(addrTransHistVO); - - { - // row, cell 개수 순서대로 증가용 필드 - int rowNumber = 0; - int celNumber = 0; - //화면 리스트 - sheetTitle = "주소록" ; //제목 - Sheet sheet = wb.createSheet(sheetTitle); - row = sheet.createRow(rowNumber++); - - cell = row.createCell(celNumber++); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(celNumber++); - cell.setCellValue("보낸주소록(그룹)명"); - cell.setCellStyle(style); - - cell = row.createCell(celNumber++); - cell.setCellValue("보낸날짜"); - cell.setCellStyle(style); - - cell = row.createCell(celNumber++); - cell.setCellValue("수신날짜"); - cell.setCellStyle(style); - - cell = row.createCell(celNumber++); - cell.setCellValue("수신인ID"); - cell.setCellStyle(style); - - cell = row.createCell(celNumber++); - cell.setCellValue("수신상태"); - cell.setCellStyle(style); - - - for(int i=0; i < addrTransHistList.size(); i++){ - row = sheet.createRow(rowNumber++); //줄추가 - celNumber = 0; - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - cell.setCellValue(i+1); //번호 - - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - cell.setCellValue(((FaxAddrTransHistVO)addrTransHistList.get(i)).getAddrGrpNm()); // 보낸주소록 그룹명 - - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - cell.setCellValue(((FaxAddrTransHistVO)addrTransHistList.get(i)).getSendDate()); // 보낸주소록 그룹명 - - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - cell.setCellValue(((FaxAddrTransHistVO)addrTransHistList.get(i)).getRecvDate()); // 수신날짜 - - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - cell.setCellValue(((FaxAddrTransHistVO)addrTransHistList.get(i)).getRecvMberId()); // 수신인 - - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - String recvStatus = ""; - if("Y".equals(((FaxAddrTransHistVO)addrTransHistList.get(i)).getRecvStatus())) { - recvStatus = "수신완료"; - } else if("W".equals(((FaxAddrTransHistVO)addrTransHistList.get(i)).getRecvStatus())) { - recvStatus = "수신대기"; - } else if("N".equals(((FaxAddrTransHistVO)addrTransHistList.get(i)).getRecvStatus())) { - recvStatus = "수신거부"; - } else { - recvStatus = "-"; - } - cell.setCellValue(recvStatus); // 수신상태 - - } - - } - - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - -} diff --git a/src/main/java/itn/let/fax/admin/web/FaxAdmController.java b/src/main/java/itn/let/fax/admin/web/FaxAdmController.java index ead0b55..750b865 100644 --- a/src/main/java/itn/let/fax/admin/web/FaxAdmController.java +++ b/src/main/java/itn/let/fax/admin/web/FaxAdmController.java @@ -108,7 +108,7 @@ public class FaxAdmController { String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); if(StringUtils.isEmpty(userId)) { - return "redirect:/web/user/login/login.do"; + return "redirect:/cmm/main/mainPage.do"; } model.addAttribute("loginVO", loginVO); @@ -174,7 +174,7 @@ public class FaxAdmController { String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); if(StringUtils.isEmpty(userId)) { - return "redirect:/web/user/login/login.do"; + return "redirect:/cmm/main/mainPage.do"; } model.addAttribute("loginVO", loginVO); @@ -208,7 +208,7 @@ public class FaxAdmController { String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); if(StringUtils.isEmpty(userId)) { - return "redirect:/web/user/login/login.do"; + return "redirect:/cmm/main/mainPage.do"; } model.addAttribute("loginVO", loginVO); diff --git a/src/main/java/itn/let/fax/user/web/FaxController.java b/src/main/java/itn/let/fax/user/web/FaxController.java deleted file mode 100644 index c3d1183..0000000 --- a/src/main/java/itn/let/fax/user/web/FaxController.java +++ /dev/null @@ -1,375 +0,0 @@ -package itn.let.fax.user.web; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.LoginVO; -import itn.com.cmm.util.FileUtil; -import itn.com.cmm.util.PdfUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.fax.addr.service.FaxAddrService; -import itn.let.fax.addr.service.FaxAddrVO; -import itn.let.fax.user.service.FaxConvertVO; -import itn.let.fax.user.service.FaxGroupDataVO; -import itn.let.fax.user.service.FaxService; -import itn.let.mjo.msgdata.service.MjonMsgDataService; - -@Controller -public class FaxController { - - - private static final Logger logger = LoggerFactory.getLogger(FaxController.class); - - @Resource(name = "faxService") - private FaxService faxService; - - @Resource (name = "FaxAddrService") - private FaxAddrService faxAddrService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - /** fax 변환 파일 저장 경로*/ - @Value("#{globalSettings['Globals.fax.file.convert.path']}") - private String FAX_CONVERT_FILE_PATH; - - /** - * @methodName : selectFaxDataView - * @author : 이호영 - * @date : 2023.02.07 - * @description : - * @param cateCode - * @param request - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/faxDataView.do"}) - public String faxDataView(HttpServletRequest request, ModelMap model - ,FaxAddrVO faxAddrVO, RedirectAttributes redirectAttributes) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(StringUtils.isEmpty(userId)) { - //return "redirect:/web/user/login/login.do"; - } - // TODO 미로그인 시 로그인 페이지로 이동 처리 - model.addAttribute("loginVO", loginVO); - - //주소록에서 전달 받은 주소록 정보 조회하기 - String moveAddrFlag = faxAddrVO.getMoveAddrFlag(); - String moveAddrAllFlag = faxAddrVO.getMoveAddrAllFlag(); - - if(moveAddrFlag == null || moveAddrFlag.equals("")) { - moveAddrFlag = "N"; - } - - if(moveAddrAllFlag == null || moveAddrAllFlag.equals("")) { - moveAddrAllFlag = "N"; - } - - List addrIdList = faxAddrVO.getAddrIdList(); - List tempList = new ArrayList(); - List resultFaxAddrList = new ArrayList(); - List addrNmList = new ArrayList(); - List addrPhoneNoList = new ArrayList(); - int listCnt = 0; - //주소록 선택 전송시 - if(moveAddrFlag.equals("Y")) { - - for(String seqStr : addrIdList) { - - String seqId = seqStr.replace("[", ""); - seqId = seqId.replace("]", ""); - - tempList.add(seqId); - } - - if (null != userId && !userId.equals("")) { - faxAddrVO.setAddrIdList(tempList); - faxAddrVO.setMberId(userId); - resultFaxAddrList = faxAddrService.selectFaxAddrDataList(faxAddrVO); - } - - for(FaxAddrVO tmp : resultFaxAddrList) { - - addrNmList.add(tmp.getAddrNm()); - addrPhoneNoList.add(tmp.getAddrPhoneNo()); - - } - - listCnt = resultFaxAddrList.size(); - - } - - //주소록 전체 전송시 - if(moveAddrAllFlag.equals("Y")) { - FaxAddrVO faxAddrAllVO = new FaxAddrVO(); - - faxAddrAllVO.setMberId(userId); - faxAddrAllVO.setRecordCountPerPage(100000); - faxAddrAllVO.setFirstIndex(0); - faxAddrAllVO.setSearchAddrGrpId(request.getParameter("searchAddrGrpId")); - faxAddrAllVO.setSearchCondition(request.getParameter("searchCondition")); - faxAddrAllVO.setSearchKeyword(request.getParameter("searchKeyword")); - faxAddrAllVO.setStartKeyword(request.getParameter("startKeyword")); - List reaultaddrAllList = faxAddrService.selectFaxAddrList(faxAddrAllVO); - - for(FaxAddrVO tmpAll : reaultaddrAllList) { - - addrNmList.add(tmpAll.getAddrNm()); - addrPhoneNoList.add(tmpAll.getAddrPhoneNo()); - - } - - listCnt = reaultaddrAllList.size(); - } - - /* 목록을 가져 온다 */ - Map faxDataViewMap = new HashMap(); - - if (null != userId && !userId.equals("")) { - faxDataViewMap = faxService.selectFaxDataView(userId); - } - - //최근 전송내역 - model.addAttribute("resultLatestMsgList", faxDataViewMap.get("resultLatestMsgList")); - //자주보내는 번호 - model.addAttribute("resultBookMarkMsgList", faxDataViewMap.get("resultBookMarkMsgList")); - //사용자 보유 잔액 - model.addAttribute("userMoney", faxDataViewMap.get("userMoney")); - //단가 - model.addAttribute("faxPrice", faxDataViewMap.get("faxPrice")); - - //주소록에서 전달 받은 주소록 정보 - model.addAttribute("addrNmList", addrNmList); - model.addAttribute("addrPhoneNoList", addrPhoneNoList); - model.addAttribute("resultFaxAddrListCnt", listCnt); - model.addAttribute("moveAddrFlag", moveAddrFlag); - model.addAttribute("moveAddrAllFlag", moveAddrAllFlag); - - return "/web/fax/faxDataView"; - } - @RequestMapping(value= {"/web/mjon/fax/faxSendList.do"}) - public String faxSendList(@ModelAttribute("searchVO") FaxGroupDataVO faxGroupDataVO - , ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(StringUtils.isEmpty(userId)) { - return "redirect:/web/user/login/login.do"; - } - model.addAttribute("loginVO", loginVO); - - try { - - /* 목록을 가져 온다 */ - faxGroupDataVO.setUserId(userId); - Map faxSendListMap = faxService.selectFaxSendList(faxGroupDataVO); - // 전송내역 - model.addAttribute("faxGroupListVO", faxSendListMap.get("faxGroupListVO")); - model.addAttribute("searchKeyword", faxSendListMap.get("searchKeyword")); - model.addAttribute("paginationInfo", faxSendListMap.get("paginationInfo")); - - - - // 총 건수 - model.addAttribute("totalEaSum" ,faxSendListMap.get("totalEaSum")); - // 총 대기 건수 - model.addAttribute("holdEaSum" ,faxSendListMap.get("holdEaSum")); - // 총 성공 건수 - model.addAttribute("sentEaSum" ,faxSendListMap.get("sentEaSum")); - // 총 실패 건수 - model.addAttribute("errorEaSum" ,faxSendListMap.get("errorEaSum")); - // 총 기타 건수 - model.addAttribute("unSendEaSum" ,faxSendListMap.get("unSendEaSum")); - - - - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - } - - - return "/web/fax/faxSendList"; - } - - /** - * @methodName : faxSendDetailList - * @author : 이호영 - * @date : 2023.04.05 - * @description : 상세 팝업 - * @param faxGroupDataVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/faxSendDetailPopup.do"}) - public String faxSendDetailList(@ModelAttribute("searchVO") FaxGroupDataVO faxGroupDataVO - , ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(StringUtils.isEmpty(userId)) { - return "redirect:/web/user/login/login.do"; - } - model.addAttribute("loginVO", loginVO); - - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(faxGroupDataVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(faxGroupDataVO.getPageUnit()); - paginationInfo.setPageSize(faxGroupDataVO.getPageSize()); - - faxGroupDataVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - faxGroupDataVO.setLastIndex(paginationInfo.getLastRecordIndex()); - faxGroupDataVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - /* 목록을 가져 온다 */ - faxGroupDataVO.setUserId(userId); - Map resultMap = faxService.selectFaxSendDetailList(faxGroupDataVO); - - // 전송내역 - model.addAttribute("faxDetailListVO", resultMap.get("faxDetailListVO")); - model.addAttribute("paginationInfo", resultMap.get("paginationInfo")); - - return "/web/fax/faxSendDetailPopup"; - } - - /** - * @methodName : pdfPreview - * @author : 이호영 - * @date : 2023.04.06 - * @description : pdf 미리보기 / [상세 팝업]문서보기 - * @param response - * @param faxConvertVO - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/pdfPreview.do"}) - public void pdfPreview(HttpServletResponse response, FaxConvertVO faxConvertVO) throws Exception{ - - String pdfFileName = faxConvertVO.getFaxConvertFilePath(); - - if(pdfFileName.indexOf("/") < 0) - pdfFileName = FAX_CONVERT_FILE_PATH+"/" + pdfFileName; - - PdfUtil.showPdf(response, pdfFileName); - } - - /** - * @methodName : tifDownload - * @author : 이호영 - * @date : 2023.04.06 - * @description : tif 파일 다운로드 - * @param response - * @param faxConvertVO - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/tifDownload.do"}) - public void tifDownload(HttpServletResponse response, FaxConvertVO faxConvertVO) throws Exception{ - String fileInfo = faxConvertVO.getFaxConvertFilePath(); - - if(fileInfo.indexOf("/") < 0) - fileInfo = FAX_CONVERT_FILE_PATH+"/" + fileInfo; - FileUtil.downLoad(response, fileInfo, ""); - } - - - /** - * @methodName : getExcelForFaxSendList - * @author : 이호영 - * @date : 2023.04.07 - * @description : 팩스 전송리스트 엑셀 다운로드 - * @param faxGroupDataVO - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/getExcelForFaxSendList.do"}) - public void getExcelForFaxSendList( FaxGroupDataVO faxGroupDataVO) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - /* 목록을 가져 온다 */ - faxGroupDataVO.setUserId(userId); - faxService.getExcelForFaxSendList(faxGroupDataVO); - } - - /** - * @methodName : printfaxSentDataAjax - * @author : 이호영 - * @date : 2023.04.07 - * @description : 팩스 전송결과 출력하기 - * @param faxGroupDataVO - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/printfaxSentDataAjax.do"}) - public String printfaxSentDataAjax( FaxGroupDataVO faxGroupDataVO - , ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - /* 목록을 가져 온다 */ - faxGroupDataVO.setUserId(userId); - Map resultMap = faxService.printfaxSentDataAjax(faxGroupDataVO); - - model.addAttribute("faxGroupListVO", resultMap.get("faxGroupListVO")); - model.addAttribute("dateMap", resultMap.get("dateMap")); - model.addAttribute("userNm", userNm); - - - return "web/fax/faxSentPrintListPopUp"; - } - - @RequestMapping(value= {"/web/mjon/fax/faxSendListAjax.do"}) - public String faxSendListAjax(@ModelAttribute("searchVO") FaxGroupDataVO faxGroupDataVO - , ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(StringUtils.isEmpty(userId)) { - return "redirect:/web/user/login/login.do"; - } - model.addAttribute("loginVO", loginVO); - - /* 목록을 가져 온다 */ - faxGroupDataVO.setUserId(userId); - FaxGroupDataVO faxFileInfo = faxService.selectFaxSendDetailInfo(faxGroupDataVO); - - // 전송내역 - model.addAttribute("faxFileInfo", faxFileInfo); - - return "/web/fax/faxSentListPopAjax"; - } -} diff --git a/src/main/java/itn/let/fax/user/web/FaxRestController.java b/src/main/java/itn/let/fax/user/web/FaxRestController.java deleted file mode 100644 index 6719276..0000000 --- a/src/main/java/itn/let/fax/user/web/FaxRestController.java +++ /dev/null @@ -1,220 +0,0 @@ -package itn.let.fax.user.web; - -import java.awt.image.BufferedImage; -import java.io.File; -import java.time.LocalDateTime; - -import javax.annotation.Resource; -import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.lang3.StringUtils; -import org.apache.pdfbox.pdmodel.PDDocument; -import org.apache.pdfbox.rendering.ImageType; -import org.apache.pdfbox.rendering.PDFRenderer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartHttpServletRequest; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.JsonResult; -import itn.com.cmm.LoginVO; -import itn.com.cmm.util.FaxUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.fax.user.service.FaxConvertMngVO; -import itn.let.fax.user.service.FaxConvertVO; -import itn.let.fax.user.service.FaxService; -import itn.let.fax.user.service.FaxTranVO; -import itn.let.mail.service.StatusResponse; -import itn.let.uss.umt.service.EgovUserManageService; - -/** - * - * @author : 이호영 - * @fileName : FaxRestController.java - * @date : 2023.03.20 - * @description : 팩스 Rest Controller - * =========================================================== - * DATE AUTHOR NOTE - * ----------------------------------------------------------- * - * 2023.03.20 이호영 최초 생성 - * - * - * - */ -@RestController -public class FaxRestController { - - @Resource(name = "faxService") - private FaxService faxService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - private static final Logger logger = LoggerFactory.getLogger(FaxRestController.class); - - /** - * @methodName : selectMsgDataView - * @author : 이호영 - * @date : 2023.02.07 - * @description : - * @param cateCode - * @param request - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/faxFileConvertAjax.do"}) - public ResponseEntity selectMsgDataView(final MultipartHttpServletRequest multiRequest, FaxConvertMngVO faxMngVO) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - // 로그인 안되어있음 return - if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); - - - faxMngVO.setUserId(userId); - try { - return ResponseEntity.ok().body(faxService.faxFileConvert(multiRequest, faxMngVO)); - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "파일 변환중 에러가 발생하였습니다.", LocalDateTime.now())); - } - - - } - - /** - * @methodName : findByConvertTbStatus - * @author : 이호영 - * @date : 2023.03.13 - * @description : - * @param faxConvertVO - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/findByConvertTbStatus.do"}) - public ResponseEntity findByConvertTbStatus(FaxConvertVO faxConvertVO) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - // 로그인 안되어있음 return - if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); - System.out.println("faxConvertVO.getFaxConvertSeq() : "+ faxConvertVO.getFaxConvertSeq()); - try { - return ResponseEntity.ok().body(faxService.findByConvertTbStatus(faxConvertVO.getFaxConvertSeq())); - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "파일 변환 체크 중 에러가 발생하였습니다.", LocalDateTime.now())); - } - } - - /** - * @methodName : sendData - * @author : 이호영 - * @date : 2023.03.21 - * @description : 팩스 발송 - * @param faxConvertVO - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/fax/sendData.do"}) - public ResponseEntity sendData(FaxTranVO faxTranVO, HttpServletRequest request) throws Exception{ - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - // 로그인 안되어있음 return - if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); - - /** - * 회원 정지된 상태이면 팩스 발송이되지 않도록 처리 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - request.getSession().invalidate(); - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 팩스를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.", LocalDateTime.now())); - } - - try { - return ResponseEntity.ok().body(faxService.sendData(faxTranVO, userId)); -// return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "임시 성공.", LocalDateTime.now())); - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "발송 요청 중 오류가 발생하였습니다.", LocalDateTime.now())); - } - } - - /** - * @methodName : sendExelFilePhoneNumAjax - * @author : 이준호 - * @date : 2023.03.20 - * @description : - * @param multiRequest - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/fax/sendExelFileFaxNumAjax.do") - public Object sendExelFileFaxNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = FaxUtil.exelFileConvertForFax(multiRequest); - return jr; - } - - - - - - /** - * @methodName : test - * @author : 이호영 - * @date : 2023.04.06 - * @description : pdf -> image 변환 추후 진행 예정 - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/fax/test.do") - public void test() throws Exception { - - File file = new File("D:\\usr\\local\\tomcat\\file\\sht\\fax\\Convert\\00000000602.pdf"); - PDDocument document = PDDocument.load(file); - try { - - int pageCount = document.getNumberOfPages(); - PDFRenderer pdfRenderer = new PDFRenderer(document); - - System.out.println("pageCount : "+ pageCount); - for (int i = 0; i < pageCount; i++) { - - BufferedImage imageObj = pdfRenderer.renderImageWithDPI(i, 100, ImageType.RGB); - File outputfile = new File("D:\\usr\\local\\tomcat\\file\\sht\\fax\\Convert\\images\\00000000602_"+i+".jpg"); - ImageIO.write(imageObj, "jpg", outputfile); - } - - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - }finally { - if (document != null) { - document.close(); - } - } - - } - - - - -} diff --git a/src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoATController.java b/src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoATController.java index b4513d7..c91bd17 100644 --- a/src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoATController.java +++ b/src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoATController.java @@ -20,7 +20,6 @@ import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.ComDefaultCodeVO; import itn.com.cmm.LoginVO; import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.service.FileVO; import itn.com.cmm.util.MJUtil; import itn.com.cmm.util.StringUtil; import itn.let.kakao.admin.kakaoAt.service.ChannelIDVO; @@ -33,8 +32,6 @@ import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; import itn.let.mjo.msg.service.MjonMsgResultCodeVO; import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.msg.service.MjonMsgVO; -import itn.let.mjo.reservmsg.service.MjonReservMsgService; -import itn.let.uss.umt.service.EgovMberCmpHstService; import itn.let.uss.umt.service.EgovMberManageService; import itn.let.uss.umt.service.MberManageVO; import itn.let.utl.fcc.service.EgovStringUtil; @@ -69,14 +66,6 @@ public class MjonKakaoATController { @Resource(name = "EgovCmmUseService") private EgovCmmUseService cmmUseService; - - @Resource(name = "egovMberCmpHstService") - private EgovMberCmpHstService egovMberCmpHstService; - - - @Resource(name = "MjonReservMsgService") - private MjonReservMsgService mjonReservMsgService; - /** mberManageService */ @Resource(name = "mberManageService") private EgovMberManageService mberManageService; @@ -90,103 +79,6 @@ public class MjonKakaoATController { @Autowired KakaoApiTemplate kakaoApiTemplate; - /* - - //문자발송테스트 - @Resource(name = "mjonMsgSentTestService") - private MjonMsgSentTestService mjonMsgSentTestService; - - //문자수신테스트 - @Resource(name = "mjonMsgRecvTestService") - private MjonMsgRecvTestService mjonMsgRecvTestService; - - /** EgovMessageSource */ - /* - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - @Resource(name = "certService") - private CertService certService; - - //문자발송 서비스 - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "MjonReservMsgService") - private MjonReservMsgService mjonReservMsgService; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - /** mberManageService */ - /* - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - /** 첨부파일 저장경로 */ - /* - @Value("#{globalSettings['Globals.file.saveDir']}") - private String fileSaveDir; - - /** userManageService */ - /* - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - */ - - /* - //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} - private String[][] sendMsgExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "아이디" , "itn" , ""}, - {"2", "발신번호" , "01012345678", ""}, - {"3", "발송건수" , "3", ""}, - {"4", "요청시간" , "2021-06-01 19:05:12", ""}, - {"5", "내용" , "문자메시지 내용", ""}, - {"6", "메시지타입" , "SMS전송", ""}, - {"7", "접속기기" , "", ""}, - {"8", "메시지타입" , "NPRO(아이하트)", ""} - }; - - //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} - private String[][] sendMsgDtlExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "아이디" , "itn" , ""}, - {"2", "발신번호" , "01012345678", ""}, - {"3", "수신번호" , "01012345678", ""}, - {"4", "전송시간" , "2021-06-01 19:19:57", ""}, - {"5", "내용" , "문자메시지 내용", ""}, - {"6", "현재상태" , "결과수신", ""}, - {"7", "처리결과" , "410/i", ""}, - {"8", "메시지타입" , "SMS전송", ""}, - {"9", "접속기기" , "", ""}, - {"10", "메시지타입" , "NPRO(아이하트)", ""}, - {"11", "통신사" , "ETC", ""} , - {"12", "삭제여부" , "미삭제", ""} - } ; - - //회원정보 팝업 최근 발송 문자 리스트 엑셀 다운로드 - private String[][] sendMsgUsrExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "아이디" , "itn" , ""}, - {"2", "발신번호" , "01012345678", ""}, - {"3", "요청시간" , "2021-06-01 19:05:12", ""}, - {"4", "내용" , "문자메시지 내용", ""}, - {"5", "문자종류" , "SMS전송", ""}, - {"6", "건수" , "", ""}, - {"7", "금액" , "", ""}, - {"8", "발송결과" , "", ""}, - {"9", "전송사" , "", ""} - }; - - */ - /** * 알림톡전송 리스트 * @param searchVO @@ -1236,26 +1128,4 @@ public class MjonKakaoATController { //return "cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop"; } - - //파일 이름을 이용하여 첨부파일 아이디(atchFileId), 첨부파일 순번(fileExtsn)을 찾는 함수 - private FileVO getFilePathToAtchFileId(String filePath) throws Exception{ - - //마지막 / 의 인덱스 값 +1을 기준으로 문자열을 짤라줌 - String strFilePath = filePath.substring(filePath.lastIndexOf("/")+1); - - FileVO returnFileVO = new FileVO(); - - //파일 이름과 확장자를 분리해줌 - String[] arrFileNm = strFilePath.split("\\."); - String fileNm = arrFileNm[0]; - String fileExtsn = arrFileNm[1]; - - FileVO fileVO = new FileVO(); - fileVO.setStreFileNm(fileNm); - fileVO.setFileExtsn(fileExtsn); - returnFileVO = mjonReservMsgService.selectFileNmToAtchFileIdInfo(fileVO); - - return returnFileVO; - - } } \ No newline at end of file diff --git a/src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoTemplateSampleController.java b/src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoTemplateSampleController.java index 1da98e5..821734d 100644 --- a/src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoTemplateSampleController.java +++ b/src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoTemplateSampleController.java @@ -21,32 +21,22 @@ import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATService; import itn.let.kakao.admin.kakaoAt.service.MjonKakaoSampleTemplateService; import itn.let.kakao.admin.kakaoAt.service.MjonKakaoSampleTemplateVO; import itn.let.kakao.kakaoComm.KakaoVO; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiImageUpload; import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; -import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.symbol.service.MjonSymbolService; import itn.let.mjo.symbol.service.MjonSymbolVO; @Controller public class MjonKakaoTemplateSampleController { - - //알림톡 - @Resource(name = "mjonKakaoATService") - private MjonKakaoATService mjonKakaoATService; //알림톡 @Resource(name = "mjonKakaoSampleTemplateService") private MjonKakaoSampleTemplateService mjonKakaoSampleTemplateService; - //문자발송 - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - @Resource(name = "kakaoApiService") private KakaoApiService kakaoApiService; diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java index edf92d0..8dbaef1 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java @@ -18,7 +18,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Component; -import egovframework.rte.fdl.idgnr.EgovIdGnrService; import itn.com.cmm.util.StringUtil; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; @@ -45,9 +44,6 @@ public class KakaoSendUtil { @Autowired KakaoApiTemplate kakaoApiTemplate; - @Autowired - private PriceAndPoint priceAndPoint; - @Autowired private MjonCommon mjonCommon; diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkController.java b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkController.java deleted file mode 100644 index 9ac8b44..0000000 --- a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkController.java +++ /dev/null @@ -1,406 +0,0 @@ -package itn.let.kakao.user.kakaoAt.web; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Resource; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.kakao.kakaoComm.KakaoReturnVO; -import itn.let.kakao.kakaoComm.KakaoVO; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfileCategory; -import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; -import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; -import itn.let.uss.umt.service.EgovUserManageService; - -@Controller -public class KakaoAlimTalkController { - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - @Resource(name = "kakaoApiService") - private KakaoApiService kakaoApiService; - - @Resource(name = "kakaoAlimTalkService") - private KakaoAlimTalkService kakaoAlimTalkService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Autowired - KakaoApiProfile kakaoApiProfile; - - @Autowired - KakaoApiProfileCategory kakaoApiProfileCategory; - - - // 카카오 발신 프로필 등록 페이지 - @RequestMapping(value= {"/web/mjon/kakao/profile/selectKaKaoProfileList.do"}) - public String selectKaKaoProfileList(KakaoVO paramKakaoVO, ModelMap model) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - model.addAttribute("loginVO", loginVO); - - /** - * 회원 정지된 상태이면 알림톡 설정화면으로 이동되지 않도록 처리 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - return "redirect:/web/uat/uia/actionLogout.do"; - } - - - KakaoVO kakaoVO = new KakaoVO(); - kakaoVO.setUserId(userId); - kakaoVO.setCategoryDepth("1"); - kakaoVO.setCategoryType("P"); - List firstCatagoryList = kakaoApiService.selectKakaoCategory(kakaoVO); - model.addAttribute("firstCatagoryList", firstCatagoryList); - - //사용자 등록 발신프로필 정보 조회해오기 - List resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("resultProfileList", resultProfileList); - - List resultApiProfileList = new ArrayList(); - for(int i=0; i < resultProfileList.size(); i++) { - - KakaoVO kakaoProfileVO = new KakaoVO(); - - String senderKey = resultProfileList.get(i).getSenderKey(); - String profileId = resultProfileList.get(i).getProfileId(); - kakaoProfileVO.setSenderKey(senderKey); - kakaoProfileVO.setProfileId(profileId); - - KakaoReturnVO tmpProfileVO = kakaoApiProfile.kakaoApiProfileList(kakaoProfileVO); - - resultApiProfileList.add(tmpProfileVO); - - } - - model.addAttribute("resultApiProfileList", resultApiProfileList); - model.addAttribute("paramKakaoVO", paramKakaoVO); - - return "/web/kakao/profile/KakaoProfileList"; - } - - // 발신프로필 카테고리 선택 조회 - @RequestMapping(value= {"/web/mjon/kakao/profile/selectKakaoProfileCategoryAjax.do"}) - public ModelAndView selectKakaoProfileCategoryAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - kakaoVO.setCategoryType("P"); - List selectCatagoryList = kakaoApiService.selectKakaoCategory(kakaoVO); - modelAndView.addObject("selectCatagoryList", selectCatagoryList); - - return modelAndView; - } - - // 카카오 발신 프로필 인증토큰 요청 - @RequestMapping(value= {"/web/mjon/kakao/profile/kakaoApiProfileTokenSendAjax.do"}) - public ModelAndView kakaoApiProfileTokenSendAjax( - KakaoVO kakaoVO - , ModelAndView modelAndView - ) throws Exception { - //json 알림 - modelAndView.setViewName("jsonView"); - - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - try { - - KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileToken(kakaoVO); //발신프로필 인증 토큰 요청하기 - - String bizReturnCd = kakaoInfo.getBizReturnCode(); - String bizReturnMsg = kakaoInfo.getBizReturnMsg(); - - List delProfileList = new ArrayList(); - if(bizReturnCd.equals("310") && bizReturnMsg.equals("이미 등록되어 있는 발신프로필 입니다")) { - - kakaoVO.setUserId(userId); - delProfileList = kakaoAlimTalkService.selectDeleteProfileInfo(kakaoVO); - - } - - int listSize = delProfileList.size(); - modelAndView.addObject("kakaoInfo", kakaoInfo); - modelAndView.addObject("result", "success"); - modelAndView.addObject("delInfoCnt", listSize); - - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - - // 삭제된 발신프로필 복구 해주기 - @RequestMapping(value= {"/web/mjon/kakao/profile/updateKaKaoProfileStatusAjax.do"}) - public ModelAndView updateKaKaoProfileStatusAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "loginFail"); - return modelAndView; - }else { - - kakaoVO.setUserId(userId); - - /* - * 기존에 등록된 발신프로필이라고 결과가 오는 경우 데이터베이스에서 삭제 기록을 조회해 본다. - * 삭제 기록이 있는 경우 복구를 해주고(deleteYn 값을 'N'으로 변경) - * 기록이 없는 경우 타 사이트에 등록되었을 수 있음. - * - * */ - - List delProfileList = new ArrayList(); - delProfileList = kakaoAlimTalkService.selectDeleteProfileInfo(kakaoVO); - - //삭제처리된 발신프로필이 있는 경우 - if(delProfileList != null) { - - int resultCnt = 0; - for(int i=0; i< delProfileList.size(); i++) { - - KakaoVO tmpKakaoVO = new KakaoVO(); - tmpKakaoVO.setUserId(userId); - tmpKakaoVO.setProfileId(delProfileList.get(i).getProfileId()); - tmpKakaoVO.setDeleteYn("N"); - - int count = kakaoAlimTalkService.updateKakaoProfileStatus(tmpKakaoVO); - - resultCnt = resultCnt + count; - - } - - KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); - if(resultCnt > 0) { - - kakaoReturnVO.setBizReturnCode("200"); - kakaoReturnVO.setBizReturnMsg("삭제 발신프로필의 복구가 완료 되었습니다."); - modelAndView.addObject("kakaoInfo", kakaoReturnVO); - modelAndView.addObject("result", "success"); - - }else { - - kakaoReturnVO.setBizReturnCode("200"); - kakaoReturnVO.setBizReturnMsg("삭제 발신프로필의 복구에 오류가 발생하였습니다."); - modelAndView.addObject("kakaoInfo", kakaoReturnVO); - modelAndView.addObject("result", "zeroUpdate"); - - } - - - }else {//삭제된 내역이 없는 경우 타 사이트에 발신프로필이 등록되어 있을 수 있다. - - modelAndView.addObject("message", "이미 등록된 채널ID 입니다. 타 사이트에 등록된 채널ID인지 확인 부탁드리겠습니다."); - modelAndView.addObject("result", "reuseFail"); - - } - - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - - // 카카오 발신 프로필 카테고리 등록 - @RequestMapping(value= {"/web/mjon/kakao/profile/kakaoApiProfileCreateAjax.do"}) - public ModelAndView kakaoApiProfileCreateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "loginFail"); - return modelAndView; - }else { - kakaoVO.setUserId(userId); - kakaoVO.setFrstRegisterId(userId); - kakaoVO.setLastUpdusrId(userId); - KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileCreate(kakaoVO); - - String bizReturnCd = kakaoInfo.getBizReturnCode(); - String bizReturnMsg = kakaoInfo.getBizReturnMsg(); - - System.out.println(bizReturnCd); - System.out.println(bizReturnMsg); - - /* - * 기존에 등록된 발신프로필이라고 결과가 오는 경우 데이터베이스에서 삭제 기록을 조회해 본다. - * 삭제 기록이 있는 경우 복구를 해주고(deleteYn 값을 'N'으로 변경) - * 기록이 없는 경우 타 사이트에 등록되었을 수 있음. - * - * */ - - List delProfileList = new ArrayList(); - if((bizReturnCd.equals("509") && bizReturnMsg.equals("이미 사용중인 카카오톡 채널입니다.")) || (bizReturnCd.equals("310") && bizReturnMsg.equals("이미 등록되어 있는 발신프로필 입니다"))) { - - delProfileList = kakaoAlimTalkService.selectDeleteProfileInfo(kakaoVO); - - } - - //삭제처리된 발신프로필이 있는 경우 - if(delProfileList != null && delProfileList.size() > 0) { - - int resultCnt = 0; - for(int i=0; i< delProfileList.size(); i++) { - - KakaoVO tmpKakaoVO = new KakaoVO(); - tmpKakaoVO.setUserId(userId); - tmpKakaoVO.setProfileId(delProfileList.get(i).getProfileId()); - tmpKakaoVO.setDeleteYn("N"); - - int count = kakaoAlimTalkService.updateKakaoProfileStatus(tmpKakaoVO); - - resultCnt = resultCnt + count; - - } - - KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); - if(resultCnt > 0) { - - kakaoReturnVO.setBizReturnCode("200"); - kakaoReturnVO.setBizReturnMsg("삭제 발신프로필의 복구가 완료 되었습니다."); - modelAndView.addObject("kakaoInfo", kakaoReturnVO); - modelAndView.addObject("result", "success"); - - }else { - - kakaoReturnVO.setBizReturnCode("200"); - kakaoReturnVO.setBizReturnMsg("삭제 발신프로필의 복구에 오류가 발생하였습니다."); - modelAndView.addObject("kakaoInfo", kakaoReturnVO); - modelAndView.addObject("result", "zeroUpdate"); - - } - - - }else {//삭제된 내역이 없는 경우 타 사이트에 발신프로필이 등록되어 있을 수 있다. - - modelAndView.addObject("kakaoInfo", kakaoInfo); - modelAndView.addObject("result", "success"); - - } - - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - // 카카오 발신 프로필 카테고리 등록 - @RequestMapping(value= {"/web/mjon/kakao/profile/deleteKakaoProfileDataAjax.do"}) - public ModelAndView deleteKakaoProfileDataAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - int resultCnt = 0; - if(userId == "") { - modelAndView.addObject("result", "loginFail"); - return modelAndView; - }else { - - System.out.println(kakaoVO.getProfileId()); - String[] arrProfileId = kakaoVO.getProfileId().split(","); - kakaoVO.setUserId(userId); - kakaoVO.setDeleteYn("Y"); - if(arrProfileId.length > 0) { - - for(String profileId : arrProfileId) { - - kakaoVO.setProfileId(profileId); - int count = kakaoAlimTalkService.updateKakaoProfileStatus(kakaoVO); - - resultCnt = resultCnt + count; - } - - } - - if(resultCnt > 0) { - - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("message", "발신프로필 삭제가 완료 되었습니다."); - modelAndView.addObject("result", "success"); - - }else { - - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("message", "삭제된 발신프로필이 없습니다."); - modelAndView.addObject("result", "zeroUpdate"); - - } - - - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } -} diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java deleted file mode 100644 index cf1641b..0000000 --- a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java +++ /dev/null @@ -1,1543 +0,0 @@ -package itn.let.kakao.user.kakaoAt.web; - -import java.io.OutputStream; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFDataFormat; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.JsonResult; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.util.MJUtil; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.kakao.kakaoComm.KakaoReturnVO; -import itn.let.kakao.kakaoComm.KakaoSendAdvcVO; -import itn.let.kakao.kakaoComm.KakaoSendUtil; -import itn.let.kakao.kakaoComm.KakaoVO; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfileCategory; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; -import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; -import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; -import itn.let.mail.service.StatusResponse; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.mjocommon.MjonHolidayApi; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.msgdata.service.MjonMsgDataVO; -import itn.let.mjo.msgdata.service.MjonMsgReturnVO; -import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; -import itn.let.mjo.msgholiday.service.MsgHolidayService; -import itn.let.mjo.msgholiday.service.MsgHolidayVO; -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.uss.umt.service.UserManageVO; - -/** - * - * @author : 이호영 - * @fileName : KakaoAlimTalkSendController.java - * @date : 2023.02.21 - * @description : - * =========================================================== - * DATE AUTHOR NOTE - * ----------------------------------------------------------- * - * 2023.02.21 이호영 최초 생성 - * - * - * - */ -@Controller -public class KakaoAlimTalkSendController { - - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - @Resource(name = "kakaoApiService") - private KakaoApiService kakaoApiService; - - @Resource(name = "kakaoAlimTalkService") - private KakaoAlimTalkService kakaoAlimTalkService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - /** 사이트 설정 */ - @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; - - @Resource(name = "MsgHolidayService") - private MsgHolidayService msgHolidayService; - - @Autowired - KakaoApiProfile kakaoApiProfile; - - @Autowired - KakaoApiProfileCategory kakaoApiProfileCategory; - - @Autowired - KakaoApiTemplate kakaoApiTemplate; - - @Autowired - KakaoSendUtil kakaoSendUtil; - - @Autowired - KakaoApiJsonSave kakaoApiJsonSave; - - @Autowired - private MjonCommon mjonCommon; - - @RequestMapping(value= {"/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do"}) - public String KakaoAlimtalkMsgDataView(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - model.addAttribute("loginVO", loginVO); -/* if(userId == "") { - return "redirect:/web/user/login/login.do"; - }*/ - - - //2.사용자 개인 단가 정보 불러오기 - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - // 사용자 아이디를 이용한 발신프로필 조회 - kakaoVO.setUserId(userId); - List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("kakaoProfileList", selectKakaoProfileList); - - //발신번호 불러오기 - //아이디 발신번호 리스트 불러오기. - List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); - List resultPhonList = new ArrayList(); - MJUtil mjUtil = new MJUtil(); - - for(String phone : resultSendPhonList) { - - resultPhonList.add(mjUtil.addDash(phone)); - - } - model.addAttribute("resultPhonList", resultPhonList); - - - MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn()); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - - model.addAttribute("userMoney", userMoney); - - - ////////////////////////////////////////////////////////////////// - - //최근 전송 내역 - MjonMsgDataVO searchVO = new MjonMsgDataVO(); - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - cal.setTime(now); - cal.add(Calendar.DATE, -3); - String chkDate = format.format(cal.getTime()); - searchVO.setUserId(userId); - searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 - model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO)); - - //자주보내는 번호 - model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO)); - - // 사용자 저으이 - model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId)); - } - - if("Y".equals(kakaoVO.getMsgResendAllFlag())) { - List resendList = new ArrayList(); - - MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); - mjonMsgDataVO.setMsgGroupId(kakaoVO.getMsgResendAllGroupId()); - mjonMsgDataVO.setUserId(userId); - resendList = mjonMsgDataService.selectMjMsgListByResend(mjonMsgDataVO); - - ObjectMapper mapper = new ObjectMapper(); - try { - String resendListJson = mapper.writeValueAsString(resendList); - model.addAttribute("resendListJson", resendListJson); - } catch (Exception e) { - e.printStackTrace(); - } - - } - - - - return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView"; -// return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_advcbackup_20250310"; - - } - - - /* - * 20240829 신규 추가 우영두 - * 기존 Script에서 처리하던 방식 변경 - * 카카오 알림톡 엑셀 불러오기 엑셀 처리 - * - * */ - @RequestMapping(value = "/web/mjon/alimtalk/sendAlimtalkExelFilePhoneNumAjax.do") - @ResponseBody - public Object sendAlimtalkExelFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); - - try { - - //final Map files = multiRequest.getFileMap(); - List files = (List) multiRequest.getFiles("file0"); - - // 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx - int fileNameSplitCnt = 0; - - if(!files.isEmpty()) { - fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length; - - if (files.get(0).getSize() > 0 - && (files.get(0).getContentType().indexOf("spreadsheetml") > -1) - || files.get(0).getContentType().indexOf("ms-excel") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) { - - // 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - String Ext = files.get(0).getOriginalFilename().split("[.]")[1]; - String errMessage = ""; - String cellValue = ""; - String errPhoneLine = ""; - int errPhoneCnt = 0; - - //수신번호 유효성 체크 - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - if(Ext.equals("xls")) { - - HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); - HSSFSheet sheet = workbook.getSheetAt(0); - - if(sheet.getLastRowNum() > 501) { - errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - HSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - HSSFCell cell = null; - boolean errSts = true; - for(int j = 0 ; j < 1; j++){ //행읽기(첫번째 컬럼만 필요) - - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - break; - } - - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - - if(cellValue.matches(phoneRegExp) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errPhoneLine += (i+1) + "행 "; - errSts = false; - break; - } - } - - } - - if(null != jm.get("phone") && errSts) { - json.add(jm); - } - } - - int resultErrCnt = errPhoneCnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - if (errPhoneCnt <= 10) { - if (StringUtils.isNotEmpty(errPhoneLine.trim())) { - errPhoneLine = "[" + errPhoneLine.trim() + "]"; - } - } - else { - errPhoneLine = ""; - } - - jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + " 있습니다.\n해당 건을 제외하고 문자 발송됩니다."); - }else { - jr.setMessage(""); - } - - }else {//xlsx 확장자 처리 - - OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - opcPackage.close(); - - int totRowDataCnt = 0; - for(int r=1; r 501) { // - errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - XSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - XSSFCell cell = null; - boolean errSts = true; - - for(int j = 0 ; j < 1; j++){ //행읽기(첫번째 컬럼만 필요) - - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - //System.out.println("Cell 데이터가 없습니다."); - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - break; - - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - - if(cellValue.matches(phoneRegExp) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errPhoneLine += (i+1) + "행 "; - errSts = false; - break; - } - - } - - } - - if(null != jm.get("phone") && errSts) { - json.add(jm); - } - - } - - int resultErrCnt = errPhoneCnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - if (errPhoneCnt <= 10) { - if (StringUtils.isNotEmpty(errPhoneLine.trim())) { - errPhoneLine = "[" + errPhoneLine.trim() + "]"; - } - } - else { - errPhoneLine = ""; - } - - jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + " 있습니다.\n해당 건을 제외하고 문자 발송됩니다."); - }else { - jr.setMessage(""); - } - - } - - } - } - - } catch (Exception e) { - // TODO: handle exception - System.out.println("+++++++++++++++++ sendAlimtalkExelFilePhoneNumAjax Controller Error !!! "+e); - jr.setSuccess(false); - jr.setMessage("엑셀 데이터에 오류가 있습니다. 엑셀 데이터를 확인해 주세요."); - return jr; - } - - return jr; - } - - - /* - * 20240829 신규 추가 우영두 - * 기존 Script에서 처리하던 방식 변경 - * 카카오 알림톡 엑셀 불러오기 엑셀 처리 - * - * */ - @RequestMapping(value = "/web/mjon/alimtalk/sendAlimtalkExelVarFilePhoneNumAjax.do") - @ResponseBody - public Object sendAlimtalkExelVarFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); - - - try { - - //final Map files = multiRequest.getFileMap(); - List files = (List) multiRequest.getFiles("file0"); - - // 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx - int fileNameSplitCnt = 0; - int excelVarCnt = Integer.parseInt(multiRequest.getParameter("excelVarCnt"));// 알림톡 템플릿 변수 갯수 데이터 - String [] excelVarArr = multiRequest.getParameter("excelVarList").split(","); - - - if(!files.isEmpty()) { - fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length; - - if (files.get(0).getSize() > 0 - && (files.get(0).getContentType().indexOf("spreadsheetml") > -1) - || files.get(0).getContentType().indexOf("ms-excel") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) { - - // 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - String Ext = files.get(0).getOriginalFilename().split("[.]")[1]; - String errMessage = ""; - String cellValue = ""; - String errPhoneLine = ""; - int errPhoneCnt = 0; - - //수신번호 유효성 체크 - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - if(Ext.equals("xls")) { - HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); - HSSFSheet sheet = workbook.getSheetAt(0); - - if(sheet.getLastRowNum() > 300000) { - errMessage = "한번에 전송 가능한 최대 발송건은 300,000건 입니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - for(int i=1; i< sheet.getLastRowNum() + 1; i++){ //먼저 밸리데이션 체크(1줄은 생략) - HSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - HSSFCell cell = null; - boolean errSts = true; - String rtnValueStr = ""; - for(int j = 0 ; j < excelVarCnt + 1; j++){ //행읽기(변수갯수 +1 개 만큼 컬럼을 읽음 수신번호 + 변수들) - - cellValue = ""; - cell = row.getCell(j); //수신번호 , 변수들 - if(null == cell || "".equals(cell.toString().trim())) { //수신번호 셀에 값이 없으면 - if(j == 0) { - if (sheet.getLastRowNum() == i) { - continue; - } - - break; - } - - } - - if(j == 0) { - - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - - if(cellValue.matches(phoneRegExp) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errPhoneLine += (i+1) + "행 "; - errSts = false; - break; - } - } - }else { - - if(cell != null) { - - if(j <= excelVarCnt) {//등록 변수 갯수 까지만 입력 - - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - - if(cellValue != null && !cellValue.equals("")) { - rtnValueStr += cellValue + "§"; - }else {//변ㅅ - rtnValueStr += "" + "§"; - } - - } - - }else { - rtnValueStr += "" + "§"; - - } - - } - - } - - jm.put("varVal", rtnValueStr.replaceFirst(".$", ""));//변수 데이터 추가 - if(null != jm.get("phone") && errSts) { - json.add(jm); - } - } - - int resultErrCnt = errPhoneCnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - if (errPhoneCnt <= 10) { - if (StringUtils.isNotEmpty(errPhoneLine.trim())) { - errPhoneLine = "[" + errPhoneLine.trim() + "]"; - } - } - else { - errPhoneLine = ""; - } - - jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + " 있습니다.\n해당 건을 제외하고 문자 발송됩니다."); - }else { - jr.setMessage(""); - } - - }else {//xlsx 엑셀 자료 처리 - - OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - opcPackage.close(); - - int totRowDataCnt = 0; - for(int r=1; r 501) { // -// errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다."; -// jr.setSuccess(false); -// jr.setMessage(errMessage); -// return jr; -// } - - if(sheet.getLastRowNum() > 300000) { - errMessage = "한번에 전송 가능한 최대 발송건은 300,000건 입니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - - List> json = new ArrayList>(); - - for(int i=1; i< sheet.getLastRowNum() + 1; i++){ //먼저 밸리데이션 체크(1줄은 생략) - XSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - XSSFCell cell = null; - boolean errSts = true; - String rtnValueStr = ""; - for(int j = 0 ; j < excelVarCnt + 1; j++){ //행읽기(변수갯수 +1 개 만큼 컬럼을 읽음 수신번호 + 변수들) - - cellValue = ""; - cell = row.getCell(j); //수신번호 , 변수들 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - //System.out.println("Cell 데이터가 없습니다."); - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - break; - - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) {//수신번호 추가 - - if(cellValue.matches(phoneRegExp) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errPhoneLine += (i+1) + "행 "; - errSts = false; - break; - } - - }else {//변수 데이터 추가 - - if(cell != null) { - - if(j <= excelVarCnt) {//등록 변수 갯수 까지만 입력 - - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - - if(cellValue != null && !cellValue.equals("")) { - rtnValueStr += cellValue + "§"; - }else { - rtnValueStr += "" + "§"; - } - - } - - }else { - rtnValueStr += "" + "§"; - - } - - } - - } - - jm.put("varVal", rtnValueStr.replaceFirst(".$", ""));//변수 데이터 추가 - if(null != jm.get("phone") && errSts) { - json.add(jm); - } - - } - - int resultErrCnt = errPhoneCnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - if (errPhoneCnt <= 10) { - if (StringUtils.isNotEmpty(errPhoneLine.trim())) { - errPhoneLine = "[" + errPhoneLine.trim() + "]"; - } - } - else { - errPhoneLine = ""; - } - - jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + " 있습니다.\n해당 건을 제외하고 문자 발송됩니다."); - }else { - jr.setMessage(""); - } - - } - - } - } - - } catch (Exception e) { - // TODO: handle exception - System.out.println("+++++++++++++++++ sendAlimtalkExelVarFilePhoneNumAjax Controller Error !!! "+e); - jr.setSuccess(false); - jr.setMessage("엑셀 데이터에 오류가 있습니다. 엑셀 데이터를 확인해 주세요."); - return jr; - - } - - return jr; - } - - - // 카카오 템플릿 목록 조회 - @RequestMapping(value= {"/web/mjon/kakao/alimtalk/selectKakaoApiTemplateAjax.do"}) - public ModelAndView selectKakaoApiTemplateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - KakaoReturnVO kakaoTemplateTempList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO); - - - /* - * serviceStatus가 RDY(발송전) / ACT(정상) 값만 추출 - * */ - kakaoTemplateTempList.setTemplatList( - kakaoTemplateTempList.getTemplatList().stream() - .filter(t -> "발송전".equals(t.getServiceStatus()) || "정상".equals(t.getServiceStatus())) - .collect(Collectors.toList()) - ); - - modelAndView.addObject("kakaoTemplateList", kakaoTemplateTempList); - modelAndView.addObject("result", "success"); - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - /** - * @methodName : selectKakaoApiTemplateLoadAjax - * @author : 이호영 - * @date : 2023.02.17 - * @description : 카카오 템플릿 목록 조회 load용 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/alimtalk/selectKakaoApiTemplateLoadAjax.do"}) - public String selectKakaoApiTemplateLoadAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO, ModelMap model, HttpServletResponse response - ) throws Exception { - - kakaoVO.setCount("10"); //페이지 별 템플릿 개수 디폴트:30 - KakaoReturnVO kakaoTemplateList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO); - - System.out.println("++++++++++++++"+kakaoTemplateList.getBizReturnCode()+"-----------------------"); - - model.addAttribute("kakaoTemplateList", kakaoTemplateList); //카카오 API 조회 정보 - model.addAttribute("templatList", kakaoTemplateList.getTemplatList()); //카카오 API 템플릿 조회 정보 - - //템플릿 페이징 처리 - 결과가 있는 경우(코드 200) - if("200".equals(kakaoTemplateList.getBizReturnCode())) { - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(Integer.parseInt(kakaoTemplateList.getCurrentPage())); //현재페이지 - paginationInfo.setRecordCountPerPage(Integer.parseInt(kakaoVO.getCount())); //한 페이지당 게시되는 템플릿 개수 - paginationInfo.setPageSize(10); //페이지 건수 - paginationInfo.setTotalRecordCount(Integer.parseInt(kakaoTemplateList.getTotalCount()));//전체 템플릿 수 - - model.addAttribute("paginationInfo", paginationInfo); - } - return "/uss/ion/test/TestTemplaKakaoLoadListAjax"; - } - - - /** - * @methodName : kakaoApiNotityTalkSampleExcelDownload - * @author : 이지우 - * @date : 2023.02.17 - * @description : 카카오 알림톡 발송 시 샘플 엑셀 다운로드 테스트 메뉴 - * @param model - * @param varNmList - * @param response - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/alimtalk/kakaoApiNotityTalkSampleExcelDownload.do"}) - public void kakaoApiNotityTalkSampleExcelDownload(ModelMap model - , @RequestParam(value = "varNmList", required = false) String[] varNmList - , HttpServletResponse response - ) throws Exception { - - Map aaa = new HashMap(); - - //받아온 변수 리스트 중복 제거하기 - List varListDistinct = Arrays.asList(varNmList).stream().distinct().collect(Collectors.toList()); - - SXSSFWorkbook wb = new SXSSFWorkbook(100); - CellStyle style = wb.createCellStyle(); - //텍스트 서식 처리 - 수신번호 010 입력 시 0 제거를 방지 - XSSFDataFormat format = (XSSFDataFormat)wb.createDataFormat(); - style.setDataFormat(format.getFormat("@")); //@ 텍스트 서식 - - Cell cell = null; - Row row = null; - - String fileName ="전송하기 업로드 양식"; - - String sheetTitle = "전송하기 업로드 양식"; - try{ - - // row, cell 개수 순서대로 증가용 필드 - int rowNumber = 0; - int celNumber = 0; - // 엑셀 시트명 설정 - Sheet sheet = wb.createSheet(sheetTitle); - sheet.setDefaultColumnStyle(0, style); //텍스트 서식 처리 - 수신번호 010 입력 시 0 제거를 방지 - sheet.setColumnWidth(0, 7000); - for(int i = 1 ; i <= varListDistinct.size(); i++){ - sheet.setColumnWidth(i, 4000); - sheet.setDefaultColumnStyle(i, style); - } - - row = sheet.createRow(rowNumber++); - - cell = row.createCell(celNumber++); - cell.setCellValue("수신번호"); - cell.setCellStyle(style); - - for(String field : varListDistinct) { - cell = row.createCell(celNumber++); - cell.setCellValue("#{"+field+"}"); - cell.setCellStyle(style); - } - - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - - }catch(Exception e) { - e.printStackTrace(); - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - - /** - * @Method Name : KakaoAlimtalkMsgDataTestPop - * @작성일 : 2023. 3. 23. - * @작성자 : WYH - * @Method 설명 : 카카오 테스트 발송 팝업 - */ - @RequestMapping(value= {"/web/mjon/kakao/alimtalk/selectKakaoAlimtalkTemplateDataTestPopup.do"}) - public String KakaoAlimtalkMsgDataTestPop(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - }else { - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - Float kakaoAtPrice = mberManageVO.getKakaoAtPrice(); - - if(kakaoAtPrice < 1) { - kakaoAtPrice = sysJoinSetVO.getKakaoAtPrice(); - } - - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - model.addAttribute("userMoney", userMoney); - model.addAttribute("kakaoAtPrice", kakaoAtPrice); - } - - KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); - model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); - - // 변환문자가 있는경우 텍스트 변환 - if(kakaoVO.getTxtReplYn().equals("Y")) { - String testMag = kakaoSendUtil.kakaoSendMsgTest(kakaoVO); - model.addAttribute("testMag", testMag); - } - - model.addAttribute("kakaoVO", kakaoVO); - return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataTestPop"; - } - - - /** - * @Method Name : selectSpamKakaoAlimtalkMsgChkAjax - * @작성일 : 2023. 3. 28. - * @작성자 : WYH - * @Method 설명 : 카카오 알림톡 전송시 스팸문구 확인 체크 - */ - @RequestMapping(value= {"/web/mjon/alimtalk/selectSpamKakaoAlimtalkMsgChkAjax.do"}) - public ModelAndView selectSpamKakaoAlimtalkMsgChkAjax(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - List resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); - System.out.println("알림톡 확인 전송"); - - if(resultSpamTxt == null) { - modelAndView.addObject("result", "listEmpty"); - return modelAndView; - }else { - //변환변수 포함(Y) 미포함(N) - if(kakaoVO.getTxtReplYn().equals("Y")) { - List varValList = kakaoVO.getVarValList(); // value 값 - for(int i=0; i < varValList.size(); i++) { - String[] array = varValList.get(i)[0].split("§"); - for(int j=0; j < array.length; j++) { - for(String spmTxt : resultSpamTxt) { - if(array[j].contains(spmTxt)) { - System.out.println("스펨문구 등록문구 : "+spmTxt + " 카카오 업로드 문구 : "+array[j]); - modelAndView.addObject("result", "spams"); - return modelAndView; - } - } - } - } - } - - //대체문자 포함(Y), 미포함(N) - if(kakaoVO.getSubMsgSendYn().equals("Y")) { - for(String spmTxt : resultSpamTxt) { - System.out.println("spmTxt : "+spmTxt); - if(kakaoVO.getSubMsgTxt().contains(spmTxt)) { - System.out.println("스펨문구 등록문구 : "+spmTxt + " 카카오 대체문자 문구 : "+kakaoVO.getSubMsgTxt()); - modelAndView.addObject("result", "spams"); - return modelAndView; - } - } - } - } - - }catch (Exception e) { - e.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - @RequestMapping(value= {"/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax_advc.do"}, method = RequestMethod.POST) - public ResponseEntity kakaoAlimTalkMsgSendAjax_advc( - @RequestBody KakaoVO kakaoVO, - HttpServletRequest request - ) throws Exception { - - System.out.println(" + kakaoAlimTalkMsgSendAjax_advc + "); - return ResponseEntity.ok().body(kakaoAlimTalkService.insertKakaoAtSandAjax_advc(kakaoVO, request)) ; - } - - @RequestMapping(value= {"/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax.do"}, method = RequestMethod.POST) -// @ResponseBody - public ModelAndView kakaoAlimTalkMsgSendAjax( -// @RequestBody KakaoVO kakaoVO - HttpServletRequest request, - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - // 시작 시간 - long startTime = System.currentTimeMillis(); - - System.out.println(" :: kakaoAlimTalkMsgSendAjax :: "); - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - System.out.println("kakaoVO.getCallFrom() :: "+ kakaoVO.getCallFrom()); - - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - try { - - if(userId == "") { - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - return modelAndView; - }else { - - /** - * 회원 정지된 상태이면 알림톡 발송이 안되도록 처리함 - * 현재 로그인 세션도 만료 처리함 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - - modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); - modelAndView.addObject("result", "authFail"); - - request.getSession().invalidate(); - - return modelAndView; - - } - -/** 카카오톡 전송 기본 설정 -------------------------------------------*/ - kakaoVO.setSendType("AT"); - kakaoVO.setMsgType("8"); - kakaoVO.setUserId(userId); - - } - -/** 전송금액 설정 --------------------------------------------------*/ - KakaoVO priceSet = kakaoSendUtil.kakaoSendPrice(kakaoVO); - - - if(priceSet.getResultCode() != null && priceSet.getResultCode().equals("2000")) { - - modelAndView.addObject("message", "대체문자 치환 후 전송 문자 길이를 초과하였습니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - BigDecimal befCash = new BigDecimal(priceSet.getBefCash()).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(priceSet.getTotPrice()).setScale(2, RoundingMode.HALF_EVEN); - - kakaoVO.setEachPrice(priceSet.getEachPrice()); - kakaoVO.setBefCash(befCash.toString()); - kakaoVO.setTotPrice(totMsgPrice.toString()); - - //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - //BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice, - - kakaoVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); // 문자 그룹ID 설정 - -/** 카카오톡 전송 분할 설정 ----------------------------------------------*/ - - String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열 - List tempVarValList = new ArrayList(); //임시 변수 리스트 저장용 - - String[] phoneList = kakaoVO.getCallToList(); - List varValList = null; - - - if(kakaoVO.getTxtReplYn().equals("Y")) { - varValList = kakaoVO.getVarValList(); - } - - int callToListCnt = kakaoVO.getCallToList().length; - if(callToListCnt > 500) { - modelAndView.addObject("message", "한번에 전송가능한 최대 발송건은 500건 입니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - kakaoVO.setTotalCallCnt(callToListCnt); - -/** 예약 문자인 경우 설정 ----------------------------------------------*/ - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - int turmMin = 0; - int totalCallCnt = 0; // 수신자 전체 갯수 - int divideCnt = 0; - int count = 1; //분할 카운트 - - if(!kakaoVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 - - Date toDate = transFormat.parse(kakaoVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - turmMin = Integer.parseInt(kakaoVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = kakaoVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(kakaoVO.getDivideCnt()); //분할 발송 갯수 - - } - - //분할 예약 시간 저장 리스트 생성 - List dividDayList = new ArrayList(); - - if(callToListCnt > 200) { - - int sendCnt = 0; - /** 카카오톡 전송 200개 이상일때 ----------------------------------------------*/ - for(int i =0; i < callToListCnt; i++) { - - //분할 발송을 체크 한 경우 - if(kakaoVO.getDivideChk().equals("Y")) { - if(count > divideCnt) { - count = 1; - cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다. - dividDay = transFormat.format(cal.getTime()); - dividDayList.add(dividDay); - count++; - }else { - dividDayList.add(dividDay); - count++; - } - } - - - if((i < callToListCnt -1) && sendCnt == 199) { - - tempPhoneList[sendCnt] = phoneList[i]; - - if(varValList != null) { - tempVarValList.add(varValList.get(i)); - } - - List arrPhoneList = new ArrayList(); - for(String temp : tempPhoneList) { - if(temp != null) { - arrPhoneList.add(temp); - } - } - - String[] sendPhoneList = new String[arrPhoneList.size()]; - for(int j=0; j< arrPhoneList.size(); j++) { - sendPhoneList[j] = arrPhoneList.get(j); - } - -/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/ - kakaoVO.setCallToList(sendPhoneList); - kakaoVO.setVarValList(tempVarValList); - KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoSendMsg(kakaoVO); - kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList()); - -/** 카카오톡 발송 처리 --------------------------------------------------*/ - kakaoVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoAtSandAjax(kakaoVO); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - //전송 초기화 - sendCnt = 0; - Arrays.fill(tempPhoneList, null); - tempVarValList.clear(); - dividDayList.clear(); - - }else if((i == callToListCnt -1) && sendCnt < 200){//200개의 마지막일 경우 처리 - - tempPhoneList[sendCnt] = phoneList[i]; - - if(varValList != null) { - - tempVarValList.add(varValList.get(i)); - - } - - List arrPhoneList = new ArrayList(); - for(String temp : tempPhoneList) { - if(temp != null) { - arrPhoneList.add(temp); - } - } - - String[] sendPhoneList = new String[arrPhoneList.size()]; - for(int j=0; j< arrPhoneList.size(); j++) { - sendPhoneList[j] = arrPhoneList.get(j); - } - -/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/ - kakaoVO.setCallToList(sendPhoneList); - kakaoVO.setVarValList(tempVarValList); - KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoSendMsg(kakaoVO); - kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList()); - kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt()); -/** 카카오톡 발송 처리 --------------------------------------------------*/ - kakaoVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoAtSandAjax(kakaoVO); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - }else {//198개가 될때까지 배열에 데이터를 쌓는다 - - tempPhoneList[sendCnt] = phoneList[i]; - - if(varValList != null && varValList.get(i).length > 0) { - tempVarValList.add(varValList.get(i)); - } - - sendCnt++; - } - } - }else { - /** 카카오톡 전송 200개 미만일때 ----------------------------------------------*/ - //분할 발송을 체크 한 경우 - if(kakaoVO.getDivideChk().equals("Y")) { - for(int i =0; i < callToListCnt; i++) { - if(count > divideCnt) { - count = 1; - cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다. - dividDay = transFormat.format(cal.getTime()); - dividDayList.add(dividDay); - count++; - }else { - dividDayList.add(dividDay); - count++; - } - } - } - - - -/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/ - KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoSendMsg(kakaoVO); - kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList()); - kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt()); - -/** 카카오톡 발송 처리 --------------------------------------------------*/ - kakaoVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoAtSandAjax(kakaoVO); - resultSts = Integer.parseInt(returnVO.getSendMsgCnt()); - - } - -/** 카카오톡 결과 처리 --------------------------------------------------*/ - }else { - modelAndView.addObject("message", "알림톡 발송에 필요한 보유 잔액이 부족 합니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - modelAndView.addObject("message", "알림톡 전송이 완료되었습니다."); - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultSts", resultSts); - - -/** 카카오톡 발송 내용 법인폰, 알림톡 결과 처리 --------------------------------------------------*/ - try { - String adminSmsNoticeYn = "Y"; - String spamStatus = kakaoVO.getAtSmishingYn(); // 스미싱 의심으로 체크된 고객 정보 - - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setMberId(userId); - - if(!userId.equals("")) { - userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO); - adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); - } - - //법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송 - if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y")) { - - if(spamStatus.equals("Y")) { - kakaoVO.setAtDelayYn("Y"); - } - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - - String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); - - //야간 스미싱의심 알림이 활성화 되어있는 경우만 슬랙 알림 전송처리 - if(holiSmishingNoti.equals("Y")) { - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); - - List resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO); - - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); - - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - - List resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO); - - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); - - if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송 - -// mjonCommon.getAdminKakaoAtSendSlack(kakaoVO); - - } - - } - - } - } - - } catch (Exception e) { - throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e); - } - // 종료 시간 - long endTime = System.currentTimeMillis(); - -// 실행 시간 계산 (초 단위) - double executionTimeSeconds = (endTime - startTime) / 1000.0; - - System.out.println("실행 시간: " + String.format("%.3f", executionTimeSeconds) + "초"); - - - String returnTxt = String.format("%.3f", executionTimeSeconds) + "초"; - modelAndView.addObject("seconds", returnTxt); - - return modelAndView; - } - - - @RequestMapping(value= {"/web/mjon/alimtalk/kakaoAlimtalkMsgDataView_test_set.do"}) - public String kakaoAlimtalkMsgDataView_test_set(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - model.addAttribute("loginVO", loginVO); -/* if(userId == "") { - return "redirect:/web/user/login/login.do"; - }*/ - - - //2.사용자 개인 단가 정보 불러오기 - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - // 사용자 아이디를 이용한 발신프로필 조회 - kakaoVO.setUserId(userId); - List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("kakaoProfileList", selectKakaoProfileList); - - //발신번호 불러오기 - //아이디 발신번호 리스트 불러오기. - List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); - List resultPhonList = new ArrayList(); - MJUtil mjUtil = new MJUtil(); - - for(String phone : resultSendPhonList) { - - resultPhonList.add(mjUtil.addDash(phone)); - - } - model.addAttribute("resultPhonList", resultPhonList); - - - MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn()); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - - model.addAttribute("userMoney", userMoney); - - - ////////////////////////////////////////////////////////////////// - - //최근 전송 내역 - MjonMsgDataVO searchVO = new MjonMsgDataVO(); - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - cal.setTime(now); - cal.add(Calendar.DATE, -3); - String chkDate = format.format(cal.getTime()); - searchVO.setUserId(userId); - searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 - model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO)); - - //자주보내는 번호 - model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO)); - - // 사용자 저으이 - model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId)); - } - - return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp"; - } -} diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkTemplateController.java b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkTemplateController.java deleted file mode 100644 index f6a3a06..0000000 --- a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkTemplateController.java +++ /dev/null @@ -1,1138 +0,0 @@ -package itn.let.kakao.user.kakaoAt.web; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.beans.factory.annotation.Autowired; -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.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.kakao.admin.kakaoAt.service.MjonKakaoSampleTemplateService; -import itn.let.kakao.admin.kakaoAt.service.MjonKakaoSampleTemplateVO; -import itn.let.kakao.admin.kakaoAt.service.MjonKakaoTemplateButtonVO; -import itn.let.kakao.kakaoComm.KakaoButtonVO; -import itn.let.kakao.kakaoComm.KakaoReturnVO; -import itn.let.kakao.kakaoComm.KakaoVO; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiImageUpload; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfileCategory; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; -import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; -import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; -import itn.let.mjo.symbol.service.MjonSymbolService; -import itn.let.mjo.symbol.service.MjonSymbolVO; -import itn.let.uss.ion.cnt.service.CntManageVO; -import itn.let.uss.umt.service.EgovUserManageService; - -@Controller -public class KakaoAlimTalkTemplateController { - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - @Resource(name = "kakaoApiService") - private KakaoApiService kakaoApiService; - - @Resource(name = "kakaoAlimTalkService") - private KakaoAlimTalkService kakaoAlimTalkService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name = "mjonSymbolService") - private MjonSymbolService mjonSymbolService; - - //알림톡 - @Resource(name = "mjonKakaoSampleTemplateService") - private MjonKakaoSampleTemplateService mjonKakaoSampleTemplateService; - - @Autowired - KakaoApiProfile kakaoApiProfile; - - @Autowired - KakaoApiProfileCategory kakaoApiProfileCategory; - - @Autowired - KakaoApiTemplate kakaoApiTemplate; - - @Autowired - KakaoApiImageUpload kakaoApiImageUpload; - - - @RequestMapping(value="/web/pop/kakaoTemplatePop.do") - public String siteContentIntro(@ModelAttribute CntManageVO cntManageVO, HttpServletRequest request, Model model) throws Exception { - - return "/web/pop/kakaoAtPop"; - } - - - /** - * @Method Name : selectKaKaoTemplateList - * @Project : mjon - * @Date : 2023. 2. 14. - * @작성자 : 우영두 - - * @프로그램 설명 :카카오 템플릿 목록 조회 - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKaKaoTemplateList.do"}) - public String selectKaKaoTemplateList(ModelMap model) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - model.addAttribute("loginVO", loginVO); - - /** - * 회원 정지된 상태이면 알림톡 템플릿 등록 화면으로 이동되지 않도록 처리 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - return "redirect:/web/uat/uia/actionLogout.do"; - } - - KakaoVO kakaoVO = new KakaoVO(); - kakaoVO.setUserId(userId); - kakaoVO.setCategoryDepth("1"); - kakaoVO.setCategoryType("P"); - List firstCatagoryList = kakaoApiService.selectKakaoCategory(kakaoVO); - model.addAttribute("firstCatagoryList", firstCatagoryList); - - //사용자 등록 발신프로필 정보 조회해오기 - List resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("resultProfileList", resultProfileList); - - //카카오 발신프로필(채널ID)의 상세 정보를 api를 통해서 불러온다. - List resultApiProfileList = new ArrayList(); - for(int i=0; i < resultProfileList.size(); i++) { - - KakaoVO kakaoProfileVO = new KakaoVO(); - - String senderKey = resultProfileList.get(i).getSenderKey(); - String profileId = resultProfileList.get(i).getProfileId(); - kakaoProfileVO.setSenderKey(senderKey); - kakaoProfileVO.setProfileId(profileId); - - //발신프로필 상세정보를 요청한다. - KakaoReturnVO tmpProfileVO = kakaoApiProfile.kakaoApiProfileList(kakaoProfileVO); - - String profileSts = tmpProfileVO.getProfileStatus(); - model.addAttribute("profileSts", profileSts); - //발신프로필 상태가 정상인 것들만 추가해준다. - if(profileSts.equals("A")) { - resultApiProfileList.add(tmpProfileVO); - } - - } - - model.addAttribute("resultApiProfileList", resultApiProfileList); - - if(resultApiProfileList.size() > 0) { - model.addAttribute("profileUuid", resultApiProfileList.get(0).getUuid()); - model.addAttribute("profileSenderkey", resultApiProfileList.get(0).getSenderKey()); - } - - return "/web/kakao/template/at/KakaoAlimtalkTemplateList"; - } - - /** - * @Method Name : selectKakaoApiTemplateLoadAjax - * @Project : mjon - * @Date : 2023. 2. 14. - * @작성자 : 우영두 - - * @프로그램 설명 :카카오 템플릿 목록 조회 load용 - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoApiTemplateLoadAjax.do"}) - public String selectKakaoApiTemplateLoadAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO, ModelMap model, HttpServletResponse response - ) throws Exception { - - //채널 아이디 정보 - String yellowId = kakaoVO.getYellowId(); - - kakaoVO.setCount("8"); //페이지 별 템플릿 개수 디폴트:30 - KakaoReturnVO kakaoTemplateList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO); - - model.addAttribute("kakaoVO", kakaoVO); - model.addAttribute("kakaoTemplateList", kakaoTemplateList); //카카오 API 조회 정보 - model.addAttribute("templatList", kakaoTemplateList.getTemplatList()); //카카오 API 템플릿 조회 정보 - - //템플릿 페이징 처리 - 결과가 있는 경우(코드 200) - if("200".equals(kakaoTemplateList.getBizReturnCode())) { - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(Integer.parseInt(kakaoTemplateList.getCurrentPage())); //현재페이지 - paginationInfo.setRecordCountPerPage(Integer.parseInt(kakaoVO.getCount())); //한 페이지당 게시되는 템플릿 개수 - paginationInfo.setPageSize(10); //페이지 건수 - paginationInfo.setTotalRecordCount(Integer.parseInt(kakaoTemplateList.getTotalCount()));//전체 템플릿 수 - - model.addAttribute("paginationInfo", paginationInfo); - - - //템플릿 리스트의 상세 내용 조회해 오기 - - List kakaoTemplateInfoList = new ArrayList(); - - for(KakaoReturnVO tmpTemplate : kakaoTemplateList.getTemplatList()) { - - KakaoVO tmpKakaoVO = new KakaoVO(); - - String senderKey = tmpTemplate.getSenderKey(); - String templateCode = tmpTemplate.getTemplateCode(); - String serviceStatus = tmpTemplate.getServiceStatus(); - - tmpKakaoVO.setSenderKey(senderKey); - tmpKakaoVO.setTemplateCode(templateCode); - - KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(tmpKakaoVO); - - kakaoTemplateInfo.setUuid(yellowId); //채널 ID정보 셋팅 해주기 - kakaoTemplateInfo.setServiceStatus(serviceStatus); - kakaoTemplateInfoList.add(kakaoTemplateInfo); - } - - model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList); - - } - return "/web/kakao/template/at/KakaoAlimtalkTemplateListAjax"; - - } - - /** - * @methodName : selectKakaoApiTemplateLoadAjax - * @author : 이호영 - * @date : 2023.02.23 - * @description : - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoAlimtalkTemplateListPopupAjax.do"}) - public String selectKakaoAlimtalkTemplateListPopupAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO, ModelMap model, HttpServletResponse response - ) throws Exception { - - //채널 아이디 정보 - String yellowId = kakaoVO.getYellowId(); - - kakaoVO.setCount("6"); //페이지 별 템플릿 개수 디폴트:30 - KakaoReturnVO kakaoTemplateList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO); - - model.addAttribute("kakaoVO", kakaoVO); - model.addAttribute("kakaoTemplateList", kakaoTemplateList); //카카오 API 조회 정보 - model.addAttribute("templatList", kakaoTemplateList.getTemplatList()); //카카오 API 템플릿 조회 정보 - - //템플릿 페이징 처리 - 결과가 있는 경우(코드 200) - if("200".equals(kakaoTemplateList.getBizReturnCode())) { - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(Integer.parseInt(kakaoTemplateList.getCurrentPage())); //현재페이지 - paginationInfo.setRecordCountPerPage(Integer.parseInt(kakaoVO.getCount())); //한 페이지당 게시되는 템플릿 개수 - paginationInfo.setPageSize(10); //페이지 건수 - paginationInfo.setTotalRecordCount(Integer.parseInt(kakaoTemplateList.getTotalCount()));//전체 템플릿 수 - - model.addAttribute("paginationInfo", paginationInfo); - - - //템플릿 리스트의 상세 내용 조회해 오기 - - List kakaoTemplateInfoList = new ArrayList(); - - for(KakaoReturnVO tmpTemplate : kakaoTemplateList.getTemplatList()) { - - KakaoVO tmpKakaoVO = new KakaoVO(); - - String senderKey = tmpTemplate.getSenderKey(); - String templateCode = tmpTemplate.getTemplateCode(); - - tmpKakaoVO.setSenderKey(senderKey); - tmpKakaoVO.setTemplateCode(templateCode); - - KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(tmpKakaoVO); - - kakaoTemplateInfo.setUuid(yellowId); //채널 ID정보 셋팅 해주기 - kakaoTemplateInfoList.add(kakaoTemplateInfo); - } - - model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList); - model.addAttribute("kakaoVO", kakaoVO); - - } - return "/web/kakao/template/at/KakaoAlimtalkTemplateListPopupAjax"; - - } - - /** - * @methodName : selectKakaoApiTemplateDataViewLoadAjax - * @author : 이호영 - * @date : 2023.02.23 - * @description : selectKaKaoTemplateList [ 알림톡 전송 ]에서 우측 미리보기 화면 데이터 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoApiTemplateDataViewLoadAjax.do"}) - public String selectKakaoApiTemplateDataViewLoadAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO, ModelMap model, HttpServletResponse response - ) throws Exception { - - KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); - - String kakaoButtonTypeDs = ""; - for(int i=0; i < kakaoTemplateInfo.getButtonList().size(); i++) { - String buttonType = kakaoTemplateInfo.getButtonList().get(i).getLinkType(); - if(buttonType.equals("DS")) { - kakaoButtonTypeDs = "DS"; - break; - } - } - model.addAttribute("kakaoButtonTypeDs", kakaoButtonTypeDs); - model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); - return "/web/kakao/template/at/KakaoAlimtalkTemplateAjax"; - } - - /** - * @Method Name : requestKakaoApiTemplateAjax - * @Project : mjon - * @Date : 2023. 2. 14. - * @작성자 : 우영두 - - * @프로그램 설명 :카카오 템플릿 검수 요청 - */ - @RequestMapping(value= {"/web/mjon/kakao/template/requestKakaoApiTemplateAjax.do"}) - public ModelAndView requestKakaoApiTemplateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - int resultCnt = 0; - int resultFailCnt = 0; - String returnMessage = ""; - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - //화면에서 넘어온 템플릿 코드 값을 배열로 저장 - String[] arrTemplateCode = kakaoVO.getArrTemplateCode(); - - //각 배열의 템플릿 코드 값으로 검수 요청 처리 - for(String tmpCode : arrTemplateCode) { - - kakaoVO.setTemplateCode(tmpCode); - KakaoReturnVO requestKakaoTemplate = kakaoApiTemplate.requestKakaoApiTemplate(kakaoVO); - - String resultCode = requestKakaoTemplate.getBizReturnCode(); - - //검수요청 결과가 성공이면 성공 처리 - if(resultCode.equals("200")) { - - resultCnt = resultCnt + 1; - returnMessage = "템플릿 심사요청을 완료하였습니다.";//requestKakaoTemplate.getBizReturnMsg(); - - }else {//검수요청 결과가 실패 이면 실패 건수 및 사유 내용 저장 - 여러건이면 마지막 내용만 저장되게 됨 - - resultFailCnt = resultFailCnt +1; - returnMessage = requestKakaoTemplate.getBizReturnMsg(); - - } - - } - - if(resultCnt > 0 && resultFailCnt == 0) { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("resultFailCnt", resultFailCnt); - modelAndView.addObject("message", returnMessage); - - }else { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("resultFailCnt", resultFailCnt); - modelAndView.addObject("message", returnMessage); - - } - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - /** - * @Method Name : requestCancelKakaoApiTemplateAjax - * @Project : mjon - * @Date : 2023. 3. 10. - * @작성자 : 우영두 - - * @프로그램 설명 :카카오 템플릿 검수 요청 취소 - */ - @RequestMapping(value= {"/web/mjon/kakao/template/requestCancelKakaoApiTemplateAjax.do"}) - public ModelAndView requestCancelKakaoApiTemplateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - int resultCnt = 0; - int resultFailCnt = 0; - String returnMessage = ""; - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - //알림톡 검수 취소 요청하기 - KakaoReturnVO requestKakaoTemplate = kakaoApiTemplate.requestCancelKakaoApiTemplate(kakaoVO); - - String resultCode = requestKakaoTemplate.getBizReturnCode(); - - //검수요청 결과가 성공이면 성공 처리 - if(resultCode.equals("200")) { - - resultCnt = resultCnt + 1; - returnMessage = "템플릿 심사요청을 취소하였습니다."; - - }else {//검수요청 결과가 실패 이면 실패 건수 및 사유 내용 저장 - 여러건이면 마지막 내용만 저장되게 됨 - - resultFailCnt = resultFailCnt +1; - returnMessage = requestKakaoTemplate.getBizReturnMsg(); - - } - - if(resultCnt > 0 && resultFailCnt == 0) { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("resultFailCnt", resultFailCnt); - modelAndView.addObject("message", returnMessage); - - }else { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("resultFailCnt", resultFailCnt); - modelAndView.addObject("message", returnMessage); - - } - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - /** - * @Method Name : requestDeleteKakaoApiTemplateAjax - * @Project : mjon - * @Date : 2023. 2. 14. - * @작성자 : 우영두 - - * @프로그램 설명 :카카오 템플릿 검수 요청 - */ - @RequestMapping(value= {"/web/mjon/kakao/template/requestDeleteKakaoApiTemplateAjax.do"}) - public ModelAndView requestDeleteKakaoApiTemplateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - int resultCnt = 0; - int resultFailCnt = 0; - String returnMessage = ""; - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - //화면에서 넘어온 템플릿 코드 값을 배열로 저장 - String[] arrTemplateCode = kakaoVO.getArrTemplateCode(); - - //각 배열의 템플릿 코드 값으로 검수 요청 처리 - for(String tmpCode : arrTemplateCode) { - - kakaoVO.setTemplateCode(tmpCode); - KakaoReturnVO requestKakaoTemplate = kakaoApiTemplate.deleteKakaoApiTemplate(kakaoVO); - - String resultCode = requestKakaoTemplate.getBizReturnCode(); - - //검수요청 결과가 성공이면 성공 처리 - if(resultCode.equals("200")) { - - resultCnt = resultCnt + 1; - returnMessage = "템플릿 삭제를 완료하였습니다.";//requestKakaoTemplate.getBizReturnMsg(); - - }else {//검수요청 결과가 실패 이면 실패 건수 및 사유 내용 저장 - 여러건이면 마지막 내용만 저장되게 됨 - - resultFailCnt = resultFailCnt +1; - returnMessage = requestKakaoTemplate.getBizReturnMsg(); - - } - - } - - if(resultCnt > 0 && resultFailCnt == 0) { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("resultFailCnt", resultFailCnt); - modelAndView.addObject("message", returnMessage); - - }else { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("resultFailCnt", resultFailCnt); - modelAndView.addObject("message", returnMessage); - - } - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - /** - * @FileName : KakaoAlimTalkTemplateController.java - * @Project : mjon - * @Date : 2023. 2. 14. - * @작성자 : 우영두 - - * @프로그램 설명 :카카오 템플릿 목록 조회 - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKaKaoTemplateRegist.do"}) - public String selectKaKaoTemplateRegist(ModelMap model, @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - - model.addAttribute("loginVO", loginVO); - - // 사용자 아이디를 이용한 발신프로필 조회 - kakaoVO.setUserId(userId); - List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("kakaoProfileList", selectKakaoProfileList); - - kakaoVO = new KakaoVO(); - kakaoVO.setCategoryDepth("1"); - kakaoVO.setCategoryType("T"); - List templateCatagoryfirstList = kakaoApiService.selectKakaoCategory(kakaoVO); - model.addAttribute("templateCatagoryfirstList", templateCatagoryfirstList); - - //카카오 탭 표시를 위해서 넘겨주는 파라미터 - 공통 탭 Include 에서 사용 - model.addAttribute("paramKakaoVO", kakaoVO); - - // 특수문자 리스트 불러오기 - MjonSymbolVO symbolVO = new MjonSymbolVO(); - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - return "/web/kakao/template/at/KakaoAlimtalkTemplateRegist"; - } - - // 카카오 템플릿 등록 - @RequestMapping(value= {"/web/mjon/kakao/template/insertKakaoApiTemplateAjax.do"}) - public ModelAndView insertKakaoApiTemplateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , final MultipartHttpServletRequest multiRequest - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - //알림톡 템플릿에 이미지가 포함되어 있는 경우 처리 - String code = ""; - String msg = ""; - - KakaoReturnVO kakaoTemplateInfo = kakaoApiTemplate.insertKakaoApiTemplate(kakaoVO); - modelAndView.addObject("kakaoTemplateInfo", kakaoTemplateInfo); - - code = kakaoTemplateInfo.getBizReturnCode(); - msg = kakaoTemplateInfo.getBizReturnMsg(); - - modelAndView.addObject("code", code); - modelAndView.addObject("msg", msg); - - if(code.equals("200")) { - modelAndView.addObject("result", "success"); - - }else { - modelAndView.addObject("result", "jsonFail"); - } - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - // 카카오 템플릿 수정 - @RequestMapping(value= {"/web/mjon/kakao/template/updateKakaoApiTemplateAjax.do"}) - public ModelAndView updateKakaoApiTemplateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , final MultipartHttpServletRequest multiRequest - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - //알림톡 템플릿에 이미지가 포함되어 있는 경우 처리 - String code = ""; - String msg = ""; - - String templateCode = kakaoVO.getTemplateCode(); - kakaoVO.setNewTemplateCode(templateCode); - KakaoReturnVO kakaoTemplateInfo = kakaoApiTemplate.updateKakaoApiTemplate(kakaoVO); - modelAndView.addObject("kakaoTemplateInfo", kakaoTemplateInfo); - - code = kakaoTemplateInfo.getBizReturnCode(); - msg = kakaoTemplateInfo.getBizReturnMsg(); - - modelAndView.addObject("code", code); - modelAndView.addObject("msg", msg); - - if(code.equals("200")) { - modelAndView.addObject("result", "success"); - - }else { - modelAndView.addObject("result", "jsonFail"); - } - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - // 카카오 템플릿 이미지 업로드 - @RequestMapping(value= {"/web/mjon/kakao/template/sendKakaoTemplateImageUploadAjax.do"}) - public ModelAndView sendKakaoTemplateImageUploadAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , final MultipartHttpServletRequest multiRequest - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - final Map files = multiRequest.getFileMap(); - - //알림톡 템플릿에 이미지가 포함되어 있는 경우 처리 - String code = ""; - String msg = ""; - String imgUrl = ""; - - if (!files.isEmpty()){ - - Map resultMap = kakaoApiImageUpload.kakaoApiTemplateImageUpload(kakaoVO, files, 0); - - code = resultMap.get("code").toString(); - msg = resultMap.get("msg").toString(); - - if(code.equals("200")) { - - imgUrl = resultMap.get("imgUrl").toString(); - - } - - - } - - modelAndView.addObject("code", code); - modelAndView.addObject("msg", msg); - modelAndView.addObject("imgUrl", imgUrl); - modelAndView.addObject("result", "success"); - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - // 카카오 템플릿 상세정보 요청 - @RequestMapping(value= {"/web/mjon/kakao/template/requestKakaoApiTemplateDetail.do"}) - public String requestKakaoApiTemplateDetail( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , ModelMap model) throws Exception { - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - model.addAttribute("loginVO", loginVO); - - if(userId == "") { - model.addAttribute("message", "로그인 후 이용이 가능합니다."); - return "redirect:/web/user/login/login.do"; - }else { - - String senderKey = kakaoVO.getSenderKey(); - model.addAttribute("senderKey", senderKey); - - //알림톡 템플릿 상세내용 요청하기 - KakaoReturnVO requestKakaoTemplateDetail = kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); - model.addAttribute("kakaoReturnVO", requestKakaoTemplateDetail); - String categoryCode = requestKakaoTemplateDetail.getCategoryCode(); - - String firstCateCode = categoryCode.substring(0,3); - model.addAttribute("firstCateCode", firstCateCode); - - // 사용자 아이디를 이용한 발신프로필 조회 - kakaoVO.setUserId(userId); - List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("kakaoProfileList", selectKakaoProfileList); - - //템플릿 카테고리 정보 불러오기 - KakaoVO kakaoCateVO = new KakaoVO(); - kakaoCateVO.setCategoryDepth("1"); - kakaoCateVO.setCategoryType("T"); - List templateCategoryfirstList = kakaoApiService.selectKakaoCategory(kakaoCateVO); - model.addAttribute("templateCatagoryfirstList", templateCategoryfirstList); - - /* - * 2Depth 카테고리 정보 불러오기 - * API에서 받아온 카테고리 번호에서 첫 3자리가 1Depth 카테고리 번호이므로 해당 번호로 2Depth 정보를 검색함. - * - * */ - kakaoCateVO.setCategoryDepth("2"); - kakaoCateVO.setCategoryType("T"); - kakaoCateVO.setCategoryCode(firstCateCode); - List templateCategorySecondList = kakaoApiService.selectKakaoCategory(kakaoCateVO); - model.addAttribute("templateCategorySecondList", templateCategorySecondList); - - // 특수문자 리스트 불러오기 - MjonSymbolVO symbolVO = new MjonSymbolVO(); - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - } - }catch(Exception ex){ - ex.printStackTrace(); - System.out.println("+++++++++++++++ requestKakaoApiTemplateDetail Controller Error !!! " + ex); - } - return "/web/kakao/template/at/KakaoAlimtalkTemplateDetail"; - } - - - /** - * 알림톡 샘플 템플릿 리스트 - * @param searchVO - * @param model - * @return "/web/mjon/kakao/template/selectKakaoSampleTemplateList.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoSampleTemplateList.do"}) - public String selectKakaoSampleTemplateList(@ModelAttribute("searchVO") MjonKakaoSampleTemplateVO searchVO, - HttpServletRequest request , - ModelMap model) throws Exception{ - - try { - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); - paginationInfo.setPageSize(searchVO.getPageSize()); - - searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); - searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - searchVO.setSearchSortCnd("sampleTemplatePriority"); - searchVO.setSearchSortOrd("asc"); - } - - List resultList = new ArrayList(); - // 문자발송 완료건은 모두 보이도록 처리 - resultList = mjonKakaoSampleTemplateService.selectMjonKakaoSampleTemplateList(searchVO); - model.addAttribute("resultList", resultList); - model.addAttribute("searchVO", searchVO); - - paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonKakaoSampleTemplateVO)resultList.get(0)).getTotCnt() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - //샘플 템플릿 관리용 카테고리 전체 리스트 불러오기 - MjonKakaoSampleTemplateVO sampleTemplateVO = new MjonKakaoSampleTemplateVO(); - List resultAdminCategoryList = new ArrayList(); - - resultAdminCategoryList = mjonKakaoSampleTemplateService.selectMjonKakaoSampleTemplateAdminCategoryListAll(sampleTemplateVO); - model.addAttribute("resultAdminCategoryList", resultAdminCategoryList); - - } catch (Exception e) { - System.out.println("+++++++++++++++ selectKakaoSampleTemplateList Controller Error !!! " + e); - } - - return "/web/kakao/template/at/sample/KakaoAlimtalkSampleTemplateList"; - - } - - - // 카카오 샘플 템플릿 선택시 상세정보 요청 - @RequestMapping(value= {"/web/mjon/kakao/template/requestKakaoApiTemplateSampleToRegist.do"}) - public String requestKakaoApiTemplateSampleToRegist( - @ModelAttribute("kakaoVO") MjonKakaoSampleTemplateVO sampleTemplateVO - , ModelMap model) throws Exception { - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - model.addAttribute("loginVO", loginVO); - - if(userId == "") { - model.addAttribute("message", "로그인 후 이용이 가능합니다."); - return "redirect:/web/user/login/login.do"; - }else { - - KakaoVO kakaoVO = new KakaoVO(); - kakaoVO.setCategoryDepth("1"); - kakaoVO.setCategoryType("T"); - List templateCatagoryfirstList = kakaoApiService.selectKakaoCategory(kakaoVO); - model.addAttribute("templateCatagoryfirstList", templateCatagoryfirstList); - - //샘플 템플릿 내용 불러오기 - MjonKakaoSampleTemplateVO resultSampleTemplate = mjonKakaoSampleTemplateService.selectMjonSampleTemplateDetail(sampleTemplateVO); - model.addAttribute("resultSampleTemplate", resultSampleTemplate); - model.addAttribute("resultButtonList", resultSampleTemplate.getButtonVOList()); //버튼 정보만 따로 분리해서 넘겨준다. - - //샘플 템플릿에 있는 내용을 알림톡 리턴 템플릿 VO에 셋팅해준다. - 변수명이 달라서 처리해줌. - KakaoReturnVO kakaoReturnVO = getKakaoReturnVO(resultSampleTemplate); - model.addAttribute("kakaoReturnVO", kakaoReturnVO); - - String categoryCode = resultSampleTemplate.getSampleTemplateCagetoryCode(); - - String firstCateCode = categoryCode.substring(0,3); - model.addAttribute("firstCateCode", firstCateCode); - - // 사용자 아이디를 이용한 발신프로필 조회 - kakaoVO.setUserId(userId); - List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("kakaoProfileList", selectKakaoProfileList); - - /* - * 2Depth 카테고리 정보 불러오기 - * API에서 받아온 카테고리 번호에서 첫 3자리가 1Depth 카테고리 번호이므로 해당 번호로 2Depth 정보를 검색함. - * - * */ - kakaoVO.setCategoryDepth("2"); - kakaoVO.setCategoryType("T"); - kakaoVO.setCategoryCode(firstCateCode); - List templateCategorySecondList = kakaoApiService.selectKakaoCategory(kakaoVO); - model.addAttribute("templateCategorySecondList", templateCategorySecondList); - - // 특수문자 리스트 불러오기 - MjonSymbolVO symbolVO = new MjonSymbolVO(); - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - } - }catch(Exception ex){ - ex.printStackTrace(); - System.out.println("+++++++++++++++ requestKakaoApiTemplateSampleToRegist Controller Error !!! " + ex); - } - return "/web/kakao/template/at/KakaoAlimtalkTemplateSampleToRegist"; - } - - - public KakaoReturnVO getKakaoReturnVO(MjonKakaoSampleTemplateVO sampleTemplateVO) throws Exception { - - KakaoReturnVO kakaoReturnVO = new KakaoReturnVO(); - - try { - - //String templateCode = sampleTemplateVO.getSampleTemplateId(); // 템플릿 코드 - String templateName = sampleTemplateVO.getSampleTemplateName(); // 템플릿 이름 - String categoryCode = sampleTemplateVO.getSampleTemplateCagetoryCode(); // 템플릿 카테고리 코드 - String templateMessageType = sampleTemplateVO.getSampleTemplateMsgType(); // 템플릿 메시지 유형 (BA:기본형(default), EX:부가정보형, AD:광고추가형, MI:복합형) - String templateEmphasizeType = sampleTemplateVO.getSampleTemplateEmphType(); // 템플릿 강조 유형 - String templateContent = sampleTemplateVO.getSampleTemplateContents(); // 템플릿 내용 - String templateExtra = sampleTemplateVO.getSampleTemplateExtra(); // 템플릿 부가정보 - String templateAd = sampleTemplateVO.getSampleTemplateAd(); // 템플릿 광고성 메시지 - String templateImageName = sampleTemplateVO.getSampleTemplateImageName(); // 템플릿 이미지 파일명 - templateEmphasizeType “IMAGE” 선택 시 필수 - String templateImageUrl = sampleTemplateVO.getSampleTemplateImageUrl(); // 템플릿 이미지 링크 - templateEmphasizeType “IMAGE” 선택 시 필수 - String templateTitle = sampleTemplateVO.getSampleTemplateTitle(); // 템플릿 내용 중 강조 표기할 핵심 정보 - templateEmphasizeType “TEXT” 선택 시 필수 - String templateSubtitle = sampleTemplateVO.getSampleTemplateSubtitle(); // 템플릿 강조 표기 보조 문 - templateEmphasizeType “TEXT” 선택 시 필수 - //String title = ""; // 템플릿 상세조회의 아이템하이라이트(templateItemHighlight), 아이템정보(templateItem) 데이터의 타이틀 컬럼 정보 - //String description = ""; // 템플릿 상세조회의 아이템하이라이트(templateItemHighlight), 아이템정보(templateItem) 데이터의 디스크립션 컬럼 정보 - //String imageUrl = ""; // 아이템하이라이트(templateItemHighlight) 썸네일 이미지 주소 - //String listTitle = ""; // 템플릿 상세조회 아이템정보(templateItem) list 정보의 제목 - //String listDescription = ""; // 템플릿 상세조회 아이템정보(templateItem) list 정보의 디스크립션 - //String sumTitle = ""; // 템플릿 상세조회 아이템정보(templateItem) summary 정보의 제목 - //String sumDescription = ""; // 템플릿 상세조회 아이템정보(templateItem) summary 정보의 디스크립션 - - kakaoReturnVO.setTemplateName(templateName); - kakaoReturnVO.setCategoryCode(categoryCode); - kakaoReturnVO.setTemplateMessageType(templateMessageType); - kakaoReturnVO.setTemplateEmphasizeType(templateEmphasizeType); - kakaoReturnVO.setTemplateContent(templateContent); - kakaoReturnVO.setTemplateExtra(templateExtra); - kakaoReturnVO.setTemplateAd(templateAd); - kakaoReturnVO.setTemplateImageName(templateImageName); - kakaoReturnVO.setTemplateImageUrl(templateImageUrl); - kakaoReturnVO.setTemplateTitle(templateTitle); - kakaoReturnVO.setTemplateSubtitle(templateSubtitle); - - List samButtonVOList = new ArrayList(); - - List alimButtonVOList = new ArrayList(); - - samButtonVOList = sampleTemplateVO.getButtonVOList(); - for(MjonKakaoTemplateButtonVO smButtonVO : samButtonVOList) { - - KakaoButtonVO tmpButtonVO = new KakaoButtonVO(); - - String name = smButtonVO.getButtonName(); // 버튼명 - linkType “AC” 선택 시 버튼명은 “채널추가” 로 고정 - String linkType = smButtonVO.getButtonLinktype(); // 버튼 링크 타입 (DS:배송조회, WL:웹링크, AL:앱링크, BK:봇키워, MD: 메시지전달, AC: 채널추가, BC: 상담톡전환, BT: 봇전환, P1: 이미지 보안전송 플러그인, P2 : 개인정보이용 플러그인, P3: 원클릭 결제 플러그인) - String linkAnd = smButtonVO.getButtonLinkand(); // Android 앱 링크 주소 (AL 사용시 필수) - linkIos, linkAnd, linkMo 중 2 가지 필수 입력 - String linkIos = smButtonVO.getButtonLinkios(); // IOS 앱 링크 주소 (AL 사용시 필수) - String linkMo = smButtonVO.getButtonLinkmo(); // 모바일 웹 링크 주소 (WL 사용시 필수) - String linkPc = smButtonVO.getButtonLinkpc(); // PC 웹 링크 주소 (WL 사용시 선택) - String pluginId = smButtonVO.getButtonPluginid(); // 플러그인 ID (P1, P2, P3 사용시 필수) - - tmpButtonVO.setName(name); - tmpButtonVO.setLinkType(linkType); - tmpButtonVO.setLinkAnd(linkAnd); - tmpButtonVO.setLinkIos(linkIos); - tmpButtonVO.setLinkMo(linkMo); - tmpButtonVO.setLinkPc(linkPc); - tmpButtonVO.setPluginId(pluginId); - - if(tmpButtonVO != null) { - - alimButtonVOList.add(tmpButtonVO); - - } - } - - kakaoReturnVO.setButtonList(alimButtonVOList); - - } catch (Exception e) { - System.out.println("+++++++++++++++ getKakaoReturnVO Method Error !!! " + e); - } - - - return kakaoReturnVO; - } - - - - /*-------------------------------------------------------------------------------------------------------------------------*/ - - - /** - * @Method Name : selectKaKaoTemplateList - * @Project : mjon - * @Date : 2023. 2. 14. - * @작성자 : 우영두 - - * @프로그램 설명 :카카오 템플릿 목록 조회 - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKaKaoTemplateOnlyList.do"}) - public String selectKaKaoTemplateOnlyList(ModelMap model) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - - KakaoVO kakaoVO = new KakaoVO(); - kakaoVO.setUserId(userId); - kakaoVO.setCategoryDepth("1"); - kakaoVO.setCategoryType("P"); - List firstCatagoryList = kakaoApiService.selectKakaoCategory(kakaoVO); - model.addAttribute("firstCatagoryList", firstCatagoryList); - - //사용자 등록 발신프로필 정보 조회해오기 - List resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("resultProfileList", resultProfileList); - - //카카오 발신프로필(채널ID)의 상세 정보를 api를 통해서 불러온다. - List resultApiProfileList = new ArrayList(); - for(int i=0; i < resultProfileList.size(); i++) { - - KakaoVO kakaoProfileVO = new KakaoVO(); - - String senderKey = resultProfileList.get(i).getSenderKey(); - String profileId = resultProfileList.get(i).getProfileId(); - kakaoProfileVO.setSenderKey(senderKey); - kakaoProfileVO.setProfileId(profileId); - - //발신프로필 상세정보를 요청한다. - KakaoReturnVO tmpProfileVO = kakaoApiProfile.kakaoApiProfileList(kakaoProfileVO); - - String profileSts = tmpProfileVO.getProfileStatus(); - - //발신프로필 상태가 정상인 것들만 추가해준다. - if(profileSts.equals("A")) { - resultApiProfileList.add(tmpProfileVO); - } - - } - - model.addAttribute("resultApiProfileList", resultApiProfileList); - - if(resultApiProfileList.size() > 0) { - model.addAttribute("profileUuid", resultApiProfileList.get(0).getUuid()); - model.addAttribute("profileSenderkey", resultApiProfileList.get(0).getSenderKey()); - } - - return "/web/kakao/template/at/KakaoAlimtalkTemplateOnlyList"; - } - - /** - * @Method Name : selectKakaoApiTemplateOnlyLoadAjax - * @Project : mjon - * @Date : 2023. 2. 14. - * @작성자 : 우영두 - - * @프로그램 설명 :카카오 템플릿 목록 조회 load용 - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoApiTemplateOnlyLoadAjax.do"}) - public String selectKakaoApiTemplateOnlyLoadAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO, ModelMap model, HttpServletResponse response - ) throws Exception { - - //채널 아이디 정보 - String yellowId = kakaoVO.getYellowId(); - - kakaoVO.setCount("8"); //페이지 별 템플릿 개수 디폴트:30 - KakaoReturnVO kakaoTemplateList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO); - - model.addAttribute("kakaoVO", kakaoVO); - model.addAttribute("kakaoTemplateList", kakaoTemplateList); //카카오 API 조회 정보 - model.addAttribute("templatList", kakaoTemplateList.getTemplatList()); //카카오 API 템플릿 조회 정보 - - //템플릿 페이징 처리 - 결과가 있는 경우(코드 200) - if("200".equals(kakaoTemplateList.getBizReturnCode())) { - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(Integer.parseInt(kakaoTemplateList.getCurrentPage())); //현재페이지 - paginationInfo.setRecordCountPerPage(Integer.parseInt(kakaoVO.getCount())); //한 페이지당 게시되는 템플릿 개수 - paginationInfo.setPageSize(10); //페이지 건수 - paginationInfo.setTotalRecordCount(Integer.parseInt(kakaoTemplateList.getTotalCount()));//전체 템플릿 수 - - model.addAttribute("paginationInfo", paginationInfo); - - - //템플릿 리스트의 상세 내용 조회해 오기 - - List kakaoTemplateInfoList = new ArrayList(); - - /*for(KakaoReturnVO tmpTemplate : kakaoTemplateList.getTemplatList()) { - - KakaoVO tmpKakaoVO = new KakaoVO(); - - String senderKey = tmpTemplate.getSenderKey(); - String templateCode = tmpTemplate.getTemplateCode(); - - tmpKakaoVO.setSenderKey(senderKey); - tmpKakaoVO.setTemplateCode(templateCode); - - System.out.println(tmpTemplate.getServiceStatus()); - //KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(tmpKakaoVO); - - //kakaoTemplateInfo.setUuid(yellowId); //채널 ID정보 셋팅 해주기 - //kakaoTemplateInfoList.add(kakaoTemplateInfo); - }*/ - - model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList); - - } - - return "/web/kakao/template/at/KakaoAlimtalkTemplateOnlyListAjax"; - } - -} diff --git a/src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java b/src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java deleted file mode 100644 index 0dc23c1..0000000 --- a/src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java +++ /dev/null @@ -1,761 +0,0 @@ -package itn.let.kakao.user.kakaoFt.web; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.List; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.util.MJUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.kakao.kakaoComm.KakaoSendUtil; -import itn.let.kakao.kakaoComm.KakaoVO; -import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; -import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; -import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.mjocommon.MjonHolidayApi; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.msgdata.service.MjonMsgDataVO; -import itn.let.mjo.msgdata.service.MjonMsgReturnVO; -import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; -import itn.let.mjo.msgholiday.service.MsgHolidayService; -import itn.let.mjo.msgholiday.service.MsgHolidayVO; -import itn.let.mjo.symbol.service.MjonSymbolService; -import itn.let.mjo.symbol.service.MjonSymbolVO; -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.uss.umt.service.UserManageVO; - -@Controller -public class KakaoFriendsTalkSendController { - - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name = "mjonSymbolService") - private MjonSymbolService mjonSymbolService; - - @Resource(name = "kakaoApiService") - private KakaoApiService kakaoApiService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "kakaoFriendsTalkTemplateService") - private KakaoFriendsTalkTemplateService kakaoFtTemplateService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - @Resource(name = "kakaoAlimTalkService") - private KakaoAlimTalkService kakaoAlimTalkService; - - /** 사이트 설정 */ - @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; - - @Resource(name = "MsgHolidayService") - private MsgHolidayService msgHolidayService; - - @Autowired - KakaoSendUtil kakaoSendUtil; - - - - /** - * @methodName : kakaoFriendsTalkMsgDataView - * @author : 우영두 - * @date : 2024.01.05 - * @description : kakaoFriendsTalkMsgDataView 카카오 친구톡 발송 화면 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - - @RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do"}) - public String KakaoAlimtalkMsgDataView(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - /*if(userId == "") { - return "redirect:/web/user/login/login.do"; - }*/ - - model.addAttribute("loginVO", loginVO); - - try { - - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - //사용자 등록 발신프로필 정보 조회해오기 - kakaoVO.setUserId(userId); - List resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("resultProfileList", resultProfileList); - - // 특수문자 리스트 불러오기 - MjonSymbolVO symbolVO = new MjonSymbolVO(); - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - //아이디 발신번호 리스트 불러오기. - List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); - List resultPhonList = new ArrayList(); - MJUtil mjUtil = new MJUtil(); - for(String phone : resultSendPhonList) { - resultPhonList.add(mjUtil.addDash(phone)); - } - model.addAttribute("resultPhonList", resultPhonList); - - - MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn()); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - /*Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price();*/ - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - - model.addAttribute("userMoney", userMoney); - - - ////////////////////////////////////////////////////////////////// - - //최근 전송 내역 - MjonMsgDataVO searchVO = new MjonMsgDataVO(); - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - cal.setTime(now); - cal.add(Calendar.DATE, -3); - String chkDate = format.format(cal.getTime()); - searchVO.setUserId(userId); - searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 - model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO)); - - //자주보내는 번호 - model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO)); - - // 사용자 정의 단가 정보 불러오기(시스템 단가 혹은 협의 단가) - model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId)); - - - //사용자 템플릿 정보 조회 - String friendId = kakaoVO.getFriendId(); - KakaoVO resultTemplateVO = new KakaoVO(); - - if(friendId != null) { - resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO); - } - model.addAttribute("resultTemplateVO", resultTemplateVO); - - - //친구톡 발송시간 체크 하기 - 20:50 ~ 익일 08:00 사이에는 발송 금지 - - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - Date nows = new Date(); - String nowDate = sdf1.format(nows); - cal.setTime(nows); - - int hours = cal.get(Calendar.HOUR_OF_DAY); - int minuts = cal.get(Calendar.MINUTE); - - boolean sendStatus = true; - - if(hours >= 20) { - - if(minuts >= 50) { - - System.out.println("발송금지 시간" + hours + ":" + minuts); - sendStatus = false; - - } - - } - - if(hours < 8) { - - System.out.println("발송금지 시간" + hours + ":" + minuts); - sendStatus = false; - - } - - System.out.println("발송상태는 ::: "+sendStatus); - model.addAttribute("sendStatus", sendStatus); - - } - - } catch (Exception e) { - System.out.println(" kakaoFriendsTalkMsgDataViewDataRegist Error ::: " + e); - } - - return "web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView"; - } - - - /** - * @Method Name : selectSpamKakaoFriendsTalkMsgChkAjax - * @작성일 : 2024. 1. 15. - * @작성자 : 우영두 - * @Method 설명 : 카카오 친구톡 전송시 스팸문구 확인 체크 - */ - @RequestMapping(value= {"/web/mjon/kakao/friendstalk/selectSpamKakaoFriendsTalkMsgChkAjax.do"}) - public ModelAndView selectSpamKakaoFriendsTalkMsgChkAjax(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - List resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); - System.out.println("친구톡 스팸 필터링"); - - if(resultSpamTxt == null) { - modelAndView.addObject("result", "listEmpty"); - return modelAndView; - }else { - //변환변수 포함(Y) 미포함(N) - String spmFilterTxt = ""; - - if(kakaoVO.getTxtReplYn().equals("Y")) { - List varValList = kakaoVO.getVarValList(); // value 값 - - String resultSpam = kakaoSendUtil.getKakaoFTCntRepToSpamFilter(varValList, resultSpamTxt, kakaoVO.getTemplateContent()); - - if(resultSpam.length() > 0) { - - modelAndView.addObject("result", "spams"); - return modelAndView; - - } - - if(kakaoVO.getSubMsgSendYn().equals("Y")) { - - String resultSmsTxtSpam = kakaoSendUtil.getKakaoFTCntRepToSpamFilter(varValList, resultSpamTxt, kakaoVO.getSmsTxtArea()); - - if(resultSmsTxtSpam.length() > 0) { - - modelAndView.addObject("result", "spams"); - return modelAndView; - - } - - } - - }else {//치환문자가 없는 경우 스팸 필터링 - - String resultSpam = kakaoSendUtil.getKakaoFTCntToSpamFilter(resultSpamTxt, kakaoVO.getTemplateContent()); - - if(resultSpam.length() > 0) { - - modelAndView.addObject("result", "spams"); - return modelAndView; - - } - - if(kakaoVO.getSubMsgSendYn().equals("Y")) { - - String resultSmsTxtSpam = kakaoSendUtil.getKakaoFTCntToSpamFilter(resultSpamTxt, kakaoVO.getSmsTxtArea()); - - if(resultSmsTxtSpam.length() > 0) { - - modelAndView.addObject("result", "spams"); - return modelAndView; - - } - - } - - } - - } - - }catch (Exception e) { - e.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - - - /** - * @Method Name : kakaoFriendsTalkMsgSendAjax - * @작성일 : 2024. 1. 16. - * @작성자 : 우영두 - * @Method 설명 : 카카오 친구톡 전송 - */ - @RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"}) - public ModelAndView kakaoFriendsTalkMsgSendAjax(ModelMap model - , HttpServletRequest request - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - try { - - if(userId == "") { - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - return modelAndView; - }else { - - /** - * 회원 정지된 상태이면 알림톡 발송이 안되도록 처리함 - * 현재 로그인 세션도 만료 처리함 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - - modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); - modelAndView.addObject("result", "authFail"); - - request.getSession().invalidate(); - - return modelAndView; - - } - } - -/** 카카오톡 전송 기본 설정 -------------------------------------------*/ - kakaoVO.setSendType("FT"); - kakaoVO.setMsgType("9"); - kakaoVO.setUserId(userId); - - -/** 전송금액 설정 --------------------------------------------------*/ - KakaoVO priceSet = kakaoSendUtil.kakaoFTSendPrice(kakaoVO); - - if(priceSet.getResultCode() != null && priceSet.getResultCode().equals("2000")) { - - modelAndView.addObject("message", "대체문자 치환 후 전송 문자 길이를 초과하였습니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - BigDecimal befCash = new BigDecimal(priceSet.getBefCash()).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(priceSet.getTotPrice()).setScale(2, RoundingMode.HALF_EVEN); - - kakaoVO.setEachPrice(priceSet.getEachPrice()); - kakaoVO.setBefCash(befCash.toString()); - kakaoVO.setTotPrice(totMsgPrice.toString()); - - //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - //BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice, - - kakaoVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); // 문자 그룹ID 설정 - -/** 카카오톡 전송 분할 설정 ----------------------------------------------*/ - - String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열 - List tempVarValList = new ArrayList(); //임시 변수 리스트 저장용 - - String[] phoneList = kakaoVO.getCallToList(); - List varValList = null; - - - //치환문자 포함 여부 - if(kakaoVO.getTxtReplYn().equals("Y")) { - varValList = kakaoVO.getVarValList(); - } - - System.out.println("+++++++++++++++++ 회원 스미싱 의심 온/오프 ::: "+kakaoVO.getAtSmishingYn()); - - //스팸 스미싱 여부 - 내용에 스팸 문자열 유무 체크 - if(kakaoVO.getSpamStatus().equals("Y") || kakaoVO.getAtSmishingYn().equals("Y")) { - kakaoVO.setAtSmishingYn("Y"); - }else { - kakaoVO.setAtSmishingYn("N"); - } - - //스미싱 의심이 아니면 delayYn 값 셋팅 - if(kakaoVO.getAtSmishingYn().equals("N")) { - kakaoVO.setAtDelayYn("N"); - }else { - kakaoVO.setAtDelayYn("Y"); - } - - //분할발송 여부 - 친구톡은 분할 발송이 없기애 N으로 픽스 - kakaoVO.setDivideChk("N"); - - int callToListCnt = kakaoVO.getCallToList().length; - kakaoVO.setTotalCallCnt(callToListCnt); - -/** 예약 문자인 경우 설정 ----------------------------------------------*/ - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - int turmMin = 0; - int totalCallCnt = 0; // 수신자 전체 갯수 - int divideCnt = 0; - int count = 1; //분할 카운트 - - if(!kakaoVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 - - Date toDate = transFormat.parse(kakaoVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //turmMin = Integer.parseInt(kakaoVO.getDivideTime()); //분할발송 시간 간격 - //dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = kakaoVO.getCallToList().length; // 수신자 전체 갯수 - //divideCnt = Integer.parseInt(kakaoVO.getDivideCnt()); //분할 발송 갯수 - - } - - //분할 예약 시간 저장 리스트 생성 - List dividDayList = new ArrayList(); - - if(callToListCnt > 200) { - - int sendCnt = 0; - /** 카카오톡 전송 200개 이상일때 ----------------------------------------------*/ - for(int i =0; i < callToListCnt; i++) { - - //분할 발송을 체크 한 경우 - /*if(kakaoVO.getDivideChk().equals("Y")) { - if(count > divideCnt) { - count = 1; - cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다. - dividDay = transFormat.format(cal.getTime()); - dividDayList.add(dividDay); - count++; - }else { - dividDayList.add(dividDay); - count++; - } - }*/ - - - if((i < callToListCnt -1) && sendCnt == 199) { - - tempPhoneList[sendCnt] = phoneList[i]; - - if(varValList != null) { - tempVarValList.add(varValList.get(i)); - } - - List arrPhoneList = new ArrayList(); - for(String temp : tempPhoneList) { - if(temp != null) { - arrPhoneList.add(temp); - } - } - - String[] sendPhoneList = new String[arrPhoneList.size()]; - for(int j=0; j< arrPhoneList.size(); j++) { - sendPhoneList[j] = arrPhoneList.get(j); - } - -/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/ - kakaoVO.setCallToList(sendPhoneList); - kakaoVO.setVarValList(tempVarValList); - KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO); - kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList()); - -/** 카카오톡 발송 처리 --------------------------------------------------*/ - kakaoVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - //전송 초기화 - sendCnt = 0; - Arrays.fill(tempPhoneList, null); - tempVarValList.clear(); - dividDayList.clear(); - - }else if((i == callToListCnt -1) && sendCnt < 200){//200개의 마지막일 경우 처리 - - tempPhoneList[sendCnt] = phoneList[i]; - - if(varValList != null) { - - tempVarValList.add(varValList.get(i)); - - } - - List arrPhoneList = new ArrayList(); - for(String temp : tempPhoneList) { - if(temp != null) { - arrPhoneList.add(temp); - } - } - - String[] sendPhoneList = new String[arrPhoneList.size()]; - for(int j=0; j< arrPhoneList.size(); j++) { - sendPhoneList[j] = arrPhoneList.get(j); - } - -/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/ - kakaoVO.setCallToList(sendPhoneList); - kakaoVO.setVarValList(tempVarValList); - KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO); - kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList()); - kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt()); -/** 카카오톡 발송 처리 --------------------------------------------------*/ - kakaoVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - }else {//198개가 될때까지 배열에 데이터를 쌓는다 - - tempPhoneList[sendCnt] = phoneList[i]; - - if(varValList != null && varValList.get(i).length > 0) { - tempVarValList.add(varValList.get(i)); - } - - sendCnt++; - } - } - }else { - /** 카카오톡 전송 200개 미만일때 ----------------------------------------------*/ - //분할 발송을 체크 한 경우 - /*if(kakaoVO.getDivideChk().equals("Y")) { - for(int i =0; i < callToListCnt; i++) { - if(count > divideCnt) { - count = 1; - cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다. - dividDay = transFormat.format(cal.getTime()); - dividDayList.add(dividDay); - count++; - }else { - dividDayList.add(dividDay); - count++; - } - } - }*/ - - - -/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/ - KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO); - kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList()); - kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt()); - -/** 카카오톡 발송 처리 --------------------------------------------------*/ - kakaoVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO); - resultSts = Integer.parseInt(returnVO.getSendMsgCnt()); - - } - -/** 카카오톡 결과 처리 --------------------------------------------------*/ - }else { - modelAndView.addObject("message", "친구톡 발송에 필요한 보유 잔액이 부족 합니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - } catch (Exception e) { - System.out.println("kakaoFriendsTalkMsgSendAjax Controller Error !!!! "+e); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - modelAndView.addObject("message", "친구톡 전송이 완료되었습니다."); - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultSts", resultSts); - - -/** 카카오 친구톡 발송 내용 법인폰, 친구톡 결과 처리 --------------------------------------------------*/ - try { - String adminSmsNoticeYn = "Y"; - String spamStatus = kakaoVO.getAtSmishingYn(); // 스미싱 의심으로 체크된 고객 정보 - - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setMberId(userId); - - if(!userId.equals("")) { - userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO); - adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); - } - - //법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송 - if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y")) { - - if(spamStatus.equals("Y")) { - kakaoVO.setAtDelayYn("Y"); - } - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - - String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); - - //야간 스미싱의심 알림이 활성화 되어있는 경우 예외 알림 시간대가 아닌경우 슬랙 알림 발송 처리한다. - if(holiSmishingNoti.equals("Y")) { - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); - - List resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO); - - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); - - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - - List resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO); - - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); - - if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송 - - MjonCommon comm = new MjonCommon(); -// comm.getAdminKakaoAtSendSlack(kakaoVO); - - } - - } - - } - - // SLACK 체크 - /*if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - //Slack으로 메세지 전송 처리 - MjonCommon comm = new MjonCommon(); - comm.getAdminKakaoAtSandSlack(kakaoVO); - }*/ - } - - } catch (Exception e) { - throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e); - } - - - return modelAndView; - } - - - /** - * @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax - * @작성일 : 2024. 1. 18. - * @작성자 : 우영두 - * @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트 - */ - @RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendRefundTestAjax.do"}) - public ModelAndView kakaoFriendsTalkMsgSendRefundTestAjax(ModelMap model - , HttpServletRequest request - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - kakaoAlimTalkService.selectKakaoFtSentRefundList(); - - modelAndView.addObject("result", "success"); - return modelAndView; - } - - /** - * @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax - * @작성일 : 2024. 1. 18. - * @작성자 : 우영두 - * @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트 - */ - @RequestMapping(value= {"/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do"}) - public String selectKakaoFriendsTalkTestSendPopup(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { - - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - }else { - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - Float kakaoFtPrice = mberManageVO.getKakaoFtPrice(); - - if(kakaoFtPrice < 1) { - kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice(); - } - - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - model.addAttribute("userMoney", userMoney); - model.addAttribute("kakaoFtPrice", kakaoFtPrice); - } - - String tmpContents = kakaoVO.getTemplateContent(); - String txtReplYn = kakaoVO.getTxtReplYn(); - - if(txtReplYn.equals("Y")) { - - String[] varValStr = kakaoVO.getVarValList().get(0); - tmpContents = kakaoSendUtil.getKakaoFTCntReplace(varValStr[0], tmpContents); - - kakaoVO.setTemplateContent(tmpContents); - - } - - model.addAttribute("kakaoVO", kakaoVO); - - return "web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataTestPop"; - } - - -} diff --git a/src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkTemplateController.java b/src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkTemplateController.java deleted file mode 100644 index 9b9540b..0000000 --- a/src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkTemplateController.java +++ /dev/null @@ -1,667 +0,0 @@ -package itn.let.kakao.user.kakaoFt.web; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.kakao.kakaoComm.KakaoReturnVO; -import itn.let.kakao.kakaoComm.KakaoVO; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiImageUpload; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfileCategory; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoFTJsonSave; -import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; -import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService; -import itn.let.mjo.symbol.service.MjonSymbolService; -import itn.let.mjo.symbol.service.MjonSymbolVO; -import itn.let.uss.umt.service.EgovUserManageService; - -@Controller -public class KakaoFriendsTalkTemplateController { - - @Resource(name = "kakaoFriendsTalkTemplateService") - private KakaoFriendsTalkTemplateService kakaoFtTemplateService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - @Resource(name = "kakaoApiService") - private KakaoApiService kakaoApiService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name = "mjonSymbolService") - private MjonSymbolService mjonSymbolService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - @Autowired - KakaoApiProfile kakaoApiProfile; - - @Autowired - KakaoApiProfileCategory kakaoApiProfileCategory; - - @Autowired - KakaoApiTemplate kakaoApiTemplate; - - @Autowired - KakaoApiImageUpload kakaoApiImageUpload; - - @Autowired - KakaoFTJsonSave kakaoFTJsonSave; - - /** - * @methodName : selectKakaoFriendsTemplateDataRegist - * @author : 우영두 - * @date : 2023.03.20 - * @description : selectKakaoFriendsTemplateDataRegist 카카오 친구톡 템플릿 등록 화면 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateDataRegist.do"}) - public String selectKakaoFriendsTemplateDataRegist( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO, ModelMap model, HttpServletResponse response - ) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - - model.addAttribute("loginVO", loginVO); - - try { - - //사용자 등록 발신프로필 정보 조회해오기 - kakaoVO.setUserId(userId); - List resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("resultProfileList", resultProfileList); - - // 특수문자 리스트 불러오기 - MjonSymbolVO symbolVO = new MjonSymbolVO(); - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - } catch (Exception e) { - System.out.println(" selectKakaoFriendsTemplateDataRegist Error ::: " + e); - } - - - - return "/web/kakao/template/ft/KakaoFriendstalkTemplateRegist"; - } - - // 카카오 친구톡 이미지 등록요청 - /** - * @methodName : sendKakaoFriendsTemplateImageUploadAjax - * @author : 우영두 - * @date : 2023.03.20 - * @description : sendKakaoFriendsTemplateImageUploadAjax 카카오 친구톡 이미지 등록요청 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/sendKakaoFriendsTemplateImageUploadAjax.do"}) - public ModelAndView sendKakaoFriendsTemplateImageUploadAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , final MultipartHttpServletRequest multiRequest - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "loginFail"); - return modelAndView; - }else { - - final Map files = multiRequest.getFileMap(); - if (!files.isEmpty()){ - - Map resultMap = kakaoApiImageUpload.kakaoApiImageUpload(kakaoVO, files, 0); - - //테스트 용 - modelAndView.addObject("code", resultMap.get("code")); - modelAndView.addObject("msg", resultMap.get("msg")); - modelAndView.addObject("imgUrl", resultMap.get("imgUrl")); - } - - modelAndView.addObject("result", "success"); - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - - // 카카오 친구톡 템플릿 등록요청 - /** - * @methodName : insertKakaoFriendsTemplateDataAjax - * @author : 우영두 - * @date : 2023.03.22 - * @description : insertKakaoFriendsTemplateDataAjax 카카오 친구톡 템플릿 등록요청 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/insertKakaoFriendsTemplateDataAjax.do"}) - public ModelAndView insertKakaoFriendsTemplateDataAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , final MultipartHttpServletRequest multiRequest - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "loginFail"); - return modelAndView; - }else { - - kakaoVO.setUserId(userId); - kakaoVO.setUserCallbackYn(userId); - kakaoVO.setFrstRegisterId(userId); - kakaoVO.setLastUpdusrId(userId); - kakaoVO.setSendType("FT"); - - String imgUrl = kakaoVO.getTemplateImageUrl(); - int buttonSize = kakaoVO.getButtonVOList().size(); - - if(!imgUrl.equals("") || buttonSize > 0) { - - //json 파일 생성 처리 - String resultJsonPath = kakaoFTJsonSave.kakaoApiJsonSave(kakaoVO); - kakaoVO.setBizJsonName(resultJsonPath); - - } - - int result = kakaoFtTemplateService.insertKakaoFriendsTemplateData(kakaoVO); - - if(result > 0) { - modelAndView.addObject("result", "success"); - }else { - modelAndView.addObject("result", "fail"); - } - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - /** - * @methodName : deleteKakaoFriendsImageDataAjax - * @author : 우영두 - * @date : 2023.03.23 - * @description : deleteKakaoFriendsImageDataAjax 카카오 친구톡 이미지 삭제요청 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/deleteKakaoFriendsImageDataAjax.do"}) - public ModelAndView deleteKakaoFriendsImageDataAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , final MultipartHttpServletRequest multiRequest - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "loginFail"); - return modelAndView; - }else { - - - KakaoReturnVO result = kakaoApiImageUpload.kakaoApiImageDelete(kakaoVO); - - String code = result.getBizReturnCode(); - - if(code.equals("200")) {//이미지 삭제 성공시 템플릿 디비에 있는 이미지 정보도 함께 지워준다. - - kakaoVO.setUserId(userId); - kakaoVO.setLastUpdusrId(userId); - kakaoFtTemplateService.updateKakaoFriendsTemplateImageDataDel(kakaoVO); - - } - - modelAndView.addObject("code", result.getBizReturnCode()); - modelAndView.addObject("msg", result.getBizReturnMsg()); - modelAndView.addObject("result", "success"); - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - - /** - * @methodName : selectKakaoFriendsTemplateList - * @author : 우영두 - * @date : 2023.03.23 - * @description : selectKakaoFriendsTemplateList 카카오 친구톡 템플릿 리스트 화면 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateList.do"}) - public String selectKakaoFriendsTemplateList(@ModelAttribute("searchVO") KakaoVO searchVO, - HttpServletRequest request , - ModelMap model) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - - model.addAttribute("loginVO", loginVO); - - try { - - /** - * 회원 정지된 상태이면 알림톡 템플릿 등록 화면으로 이동되지 않도록 처리 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - return "redirect:/web/uat/uia/actionLogout.do"; - } - - //사용자 등록 발신프로필 정보 조회해오기 - searchVO.setUserId(userId); - List resultProfileList = kakaoApiService.selectKakaoProfileList(searchVO); - model.addAttribute("resultProfileList", resultProfileList); - - if(resultProfileList.size() > 0) { - model.addAttribute("profileYellowId", resultProfileList.get(0).getYellowId()); - model.addAttribute("profileSenderkey", resultProfileList.get(0).getSenderKey()); - } - - } catch (Exception e) { - System.out.println("selectKakaoFriendsTemplateList Controller Error !!! " + e); - } - - return "/web/kakao/template/ft/KakaoFriendstalkTemplateList"; - - } - - - /** - * @methodName : selectKakaoFriendsTemplateListAjax - * @author : 우영두 - * @date : 2023.03.23 - * @description : selectKakaoFriendsTemplateListAjax 카카오 친구톡 템플릿 하단 리스트 정보 조회 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateListAjax.do"}) - public String selectKakaoFriendsTemplateListAjax(@ModelAttribute("searchVO") KakaoVO searchVO, - HttpServletRequest request , - ModelMap model) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/uat/uia/EgovLoginUsr.do"; - } - - try { - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(9); - paginationInfo.setPageSize(searchVO.getPageSize()); - - searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); - searchVO.setRecordCountPerPage(9); - - if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - searchVO.setSearchSortCnd("FRIEND_ID"); - searchVO.setSearchSortOrd("desc"); - } - - List kakaoTemplateInfoList = new ArrayList(); - // 문자발송 완료건은 모두 보이도록 처리 - searchVO.setUserId(userId); - kakaoTemplateInfoList = kakaoFtTemplateService.selectKakaoFriendsTemplateList(searchVO); - model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList); - model.addAttribute("searchVO", searchVO); - - paginationInfo.setTotalRecordCount(kakaoTemplateInfoList.size() > 0 ? ((KakaoVO)kakaoTemplateInfoList.get(0)).getTotCnt() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - } catch (Exception e) { - System.out.println("selectKakaoFriendsTemplateListAjax Controller Error !!! " + e); - } - - return "/web/kakao/template/ft/KakaoFriendstalkTemplateListAjax"; - - } - - /** - * @Method Name : deleteKakaoFriendstalkTemplateAjax - * @Project : mjon - * @Date : 2023. 3. 24. - * @작성자 : 우영두 - - * @프로그램 설명 :카카오 친구톡 템플릿 삭제 처리 - */ - @RequestMapping(value= {"/web/mjon/kakao/template/deleteKakaoFriendstalkTemplateAjax.do"}) - public ModelAndView deleteKakaoFriendstalkTemplateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - int resultCnt = 0; - int resultFailCnt = 0; - String returnMessage = ""; - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - //화면에서 넘어온 템플릿 코드 값을 배열로 저장 - String[] arrTemplateCode = kakaoVO.getArrTemplateCode(); - - //각 배열의 템플릿 코드 값으로 검수 요청 처리 - for(String tmpId : arrTemplateCode) { - - kakaoVO.setFriendId(tmpId); - kakaoVO.setUserId(userId); - int cnt = kakaoFtTemplateService.deleteKakaoFriendstalkTemplate(kakaoVO); - - if(cnt > 0) { - - resultCnt++; - - }else { - - resultFailCnt++; - } - - } - - if(resultCnt > 0 && resultFailCnt == 0) { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("resultFailCnt", resultFailCnt); - modelAndView.addObject("message", "친구톡 템플릿 삭제가 완료되었습니다."); - - }else if(resultCnt == 0 && resultFailCnt == 0){ - - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("resultFailCnt", resultFailCnt); - modelAndView.addObject("message", "친구톡 템플릿 삭제에 오류가 발생하였습니다."); - - }else { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("resultFailCnt", resultFailCnt); - modelAndView.addObject("message", "친구톡 템플릿 삭제가 완료되었습니다."); - - } - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - - /** - * @methodName : selectKakaoFriendsTemplateDataDetail - * @author : 우영두 - * @date : 2024.01.04 - * @description : selectKakaoFriendsTemplateDataDetail 카카오 친구톡 템플릿 상세 화면 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateDataDetail.do"}) - public String selectKakaoFriendsTemplateDataDetail( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO, ModelMap model, HttpServletResponse response - ) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - - model.addAttribute("loginVO", loginVO); - - try { - - //사용자 등록 발신프로필 정보 조회해오기 - kakaoVO.setUserId(userId); - List resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("resultProfileList", resultProfileList); - - // 특수문자 리스트 불러오기 - MjonSymbolVO symbolVO = new MjonSymbolVO(); - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - KakaoVO resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO); - - System.out.println("++++++++++++++++++ templateCode ::: "+kakaoVO.getFriendId()); - System.out.println("++++++++++++++++++ senderKey ::: "+kakaoVO.getSenderKey()); - - model.addAttribute("resultTemplateVO", resultTemplateVO); - - } catch (Exception e) { - System.out.println(" selectKakaoFriendsTemplateDataDetail Error ::: " + e); - } - - return "/web/kakao/template/ft/KakaoFriendstalkTemplateDetail"; - } - - // 카카오 친구톡 템플릿 수정요청 - /** - * @methodName : updateKakaoFriendsTemplateDataAjax - * @author : 우영두 - * @date : 2024.01.05 - * @description : updateKakaoFriendsTemplateDataAjax 카카오 친구톡 템플릿 수정요청 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/updateKakaoFriendsTemplateDataAjax.do"}) - public ModelAndView updateKakaoFriendsTemplateDataAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , final MultipartHttpServletRequest multiRequest - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "loginFail"); - return modelAndView; - }else { - - kakaoVO.setUserId(userId); - kakaoVO.setUserCallbackYn(userId); - kakaoVO.setFrstRegisterId(userId); - kakaoVO.setLastUpdusrId(userId); - kakaoVO.setSendType("FT"); - - String imgUrl = kakaoVO.getTemplateImageUrl(); - int buttonSize = kakaoVO.getButtonVOList().size(); - - if(!imgUrl.equals("") || buttonSize > 0) { - - //json 파일 생성 처리 - String resultJsonPath = kakaoFTJsonSave.kakaoApiJsonSave(kakaoVO); - kakaoVO.setBizJsonName(resultJsonPath); - - } - - int result = kakaoFtTemplateService.updateKakaoFriendsTemplateData(kakaoVO); - - if(result > 0) { - modelAndView.addObject("result", "success"); - }else { - modelAndView.addObject("result", "fail"); - } - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - - /** - * @methodName : selectKakaoFriendsTemplateListPopupAjax - * @author : 우영두 - * @date : 2024.01.05 - * @description : selectKakaoFriendsTemplateListPopupAjax 카카오 친구톡 발송화면 템플릿 팝업 리스트 화면 - * @param kakaoVO - * @param model - * @param response - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do"}) - public String selectKakaoFriendsTemplateListPopupAjax(@ModelAttribute("searchVO") KakaoVO searchVO, - HttpServletRequest request , - ModelMap model) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/uat/uia/EgovLoginUsr.do"; - } - - try { - - searchVO.setUserId(userId); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(6); - paginationInfo.setPageSize(searchVO.getPageSize()); - - searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); - searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - searchVO.setSearchSortCnd("FRIEND_ID"); - searchVO.setSearchSortOrd("desc"); - } - - List kakaoTemplateInfoList = new ArrayList(); - // 문자발송 완료건은 모두 보이도록 처리 - searchVO.setUserId(userId); - kakaoTemplateInfoList = kakaoFtTemplateService.selectKakaoFriendsTemplateList(searchVO); - model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList); - model.addAttribute("searchVO", searchVO); - - paginationInfo.setTotalRecordCount(kakaoTemplateInfoList.size() > 0 ? ((KakaoVO)kakaoTemplateInfoList.get(0)).getTotCnt() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - //사용자 등록 발신프로필 정보 조회해오기 - searchVO.setUserId(userId); - List resultProfileList = kakaoApiService.selectKakaoProfileList(searchVO); - model.addAttribute("resultProfileList", resultProfileList); - - } catch (Exception e) { - System.out.println("selectKakaoFriendsTemplateListAjax Controller Error !!! " + e); - } - - return "/web/kakao/template/ft/KakaoFriendstalkTemplateListPopupAjax"; - - } - -} diff --git a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java deleted file mode 100644 index 5dc1b8a..0000000 --- a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java +++ /dev/null @@ -1,1078 +0,0 @@ -package itn.let.kakao.user.sent.web; - -import java.io.FileReader; - -import org.apache.commons.lang3.StringUtils; -import itn.com.cmm.util.DateUtils; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; - -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.util.CellRangeAddress; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.LoginVO; -import itn.com.cmm.util.StringUtil; -import itn.com.cmm.util.StringUtil2; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; -import itn.let.kakao.kakaoComm.KakaoButtonVO; -import itn.let.kakao.kakaoComm.KakaoReturnVO; -import itn.let.kakao.kakaoComm.KakaoVO; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; -import itn.let.kakao.user.sent.service.KakaoSentDetailVO; -import itn.let.kakao.user.sent.service.KakaoSentService; -import itn.let.kakao.user.sent.service.KakaoSentVO; - -@Controller -public class KakaoSentController { - - @Resource(name = "KakaoSentService") - private KakaoSentService kakaoSentService; - - @Autowired - KakaoApiTemplate kakaoApiTemplate; - - - private static final Logger logger = LoggerFactory.getLogger(KakaoSentController.class); - - - /** - * 발송관리 화면 - * @param searchVO - * @param model - * @return "/web/kakao/sent/selectKakaoSentView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentView.do"}) - public String selectMsgSentView(@ModelAttribute("searchVO") KakaoSentVO kakaoSentVO, - RedirectAttributes redirectAttributes, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(loginVO == null) { - return "redirect:/web/user/login/login.do"; - } - - kakaoSentVO.setUserId(userId); - - //전체 발송 건수 통계 불러오기 - kakaoSentVO.setMsgType(""); - -// List totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO); -// model.addAttribute("totalMsgCnt", totalMsgCnt); -// -// List atCnt = new ArrayList(); -// List ftCnt = new ArrayList(); -// -// -// totalMsgCnt.forEach(t->{ -// if (Integer.parseInt(t.getFilePath1())>0) { -// atCnt.add(t); -// } else if (Integer.parseInt(t.getFilePath2())>0) { -// ftCnt.add(t); -// } -// }); -// -// //알림톡 성공건, 실패건 불러오기 -// model.addAttribute("atCnt", atCnt); -// -// //친구톡 성공건, 실패건 불러오기 -// model.addAttribute("ftCnt", ftCnt); - - // 검색 리스트 불러오기 - if(kakaoSentVO.getPageUnit() != 10) kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit()); - - //기본 내림차순 정렬 - if(kakaoSentVO.getSearchSortOrd().equals("")) kakaoSentVO.setSearchSortOrd("desc"); - - //기본 등록일자 정렬 - if(kakaoSentVO.getSearchSortCnd().equals("")) kakaoSentVO.setSearchSortCnd("regdate"); - - - - String startDate = kakaoSentVO.getStartDate(); - String endDate = kakaoSentVO.getEndDate(); - - if(StringUtils.isEmpty(startDate) - && StringUtils.isEmpty(endDate)) - { - - kakaoSentVO.setStartDate(DateUtils.getDateMonthsAgo(3)); - kakaoSentVO.setEndDate(DateUtils.getCurrentDate()); - - } - - model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword()); - model.addAttribute("kakaoSentVO", kakaoSentVO); - model.addAttribute("siteId", "tabKakao"); - return "web/kakao/sent/KakaoSentView"; - } - - - /** - * 발송관리 탭 리스트 화면 - * @param searchVO - * @param model - * @return "/web/mjon/reservmsg/selectReservMsgListViewAjax.do" - * @throws Exception - */ - - @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentListViewAjax.do"}) - public String selectKakaoSentListViewAjax(@ModelAttribute("searchVO") KakaoSentVO kakaoSentVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - kakaoSentVO.setUserId(userId); - - // 검색 리스트 불러오기 - if(kakaoSentVO.getPageUnit() != 10) { - kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(kakaoSentVO.getSearchSortOrd().equals("")) { - kakaoSentVO.setSearchSortOrd("desc"); - kakaoSentVO.setSearchSortCnd("regdate"); - } - - if(kakaoSentVO.getListType().equals("")) { - kakaoSentVO.setListType("groupList"); - } - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(kakaoSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(kakaoSentVO.getPageUnit()); - paginationInfo.setPageSize(kakaoSentVO.getPageSize()); - - kakaoSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - kakaoSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - kakaoSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - kakaoSentVO.setReserveCYn("N"); - - //전체 발송 리스트 불러오기 - List resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO); - System.out.println("??"); - model.addAttribute("resultAllSentList", resultAllSentList); -// model.addAttribute("resultAllSentCnt", resultAllSentList.size()); - - model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - //발송 결과 성공 실패 건수 리스트 불러오기 -// List resultMsgSucFailList = kakaoSentService.selectAllKakaoSentSucFailList(resultAllSentList, kakaoSentVO); -// model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); - - model.addAttribute("kakaoSentVO", kakaoSentVO); - - String pageUrl = "web/kakao/sent/KakaoSentAllListAjax"; - //String stateType = kakaoSentVO.getStateType(); - /* - if(stateType.equals("ready")) { - pageUrl = "web/kakao/sent/KakaoSentReadyListAjax"; - - }else if(stateType.equals("complete")) { - pageUrl = "web/kakao/sent/KakaoSentCompleteListAjax"; - - }else if(stateType.equals("fail")) { - pageUrl = "web/kakao/sent/KakaoSentFailListAjax"; - - }*/ - return pageUrl; - } - - - /** - * @methodName : selectMsgSentDetailDataAjax - * @author : 이호영 - * @date : 2023.03.06 - * @description : 알림톡 전송 - 내용 상세 팝업 [전송건별] - * @param mjonKakaoATVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailDataAjax.do"}) - public String selectMsgSentDetailDataAjax(@ModelAttribute("searchVO") MjonKakaoATVO mjonKakaoATVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonKakaoATVO.setUserId(userId); - - - - //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) - MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailDataAjax(mjonKakaoATVO); - // 대체문자 엔터키 치환 - mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt())); - model.addAttribute("resultMsgDetail", mjonKakaoATResultVO); - - String msgType = mjonKakaoATResultVO.getMsgType(); - - if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리 - - // 템플릿 api 가져오기 - KakaoVO kakaoVO = new KakaoVO(); - kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); - kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); - - KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); - - model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); - // //템플릿 api 가져오기 - - }else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리 - - //String smsTxt = mjonKakaoATResultVO.getSmsTxt(); - - KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); - //kakaoTemplateInfo.setTemplateContent(smsTxt); - - model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); - - }else { - - model.addAttribute("kakaoTemplateInfo", ""); - - } - - model.addAttribute("msgType", msgType); - return "web/kakao/sent/KakaoSentDetailPopAjax"; - } - - - /** - * @methodName : selectKakaoSentDetailData2Ajax - * @author : 이호영 - * @date : 2023.03.07 - * @description : 알림톡 전송 - 내용 상세 팝업 [개인별] - * @param mjonKakaoATVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailData2Ajax.do"}) - public String selectKakaoSentDetailData2Ajax(@ModelAttribute("searchVO") MjonKakaoATVO mjonKakaoATVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonKakaoATVO.setUserId(userId); - - //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) - MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailData2Ajax(mjonKakaoATVO); - - String msgType = mjonKakaoATResultVO.getMsgType(); - - if(msgType.equals("8")) { - - // 대체문자 엔터키 치환 - mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans())); - - // 강조형 타이틀이 있는지 없는지 구분 - if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle())) - { - String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§"); - mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]); - mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]); - } - - model.addAttribute("resultMsgDetail", mjonKakaoATResultVO); - - // 템플릿 api 가져오기 - KakaoVO kakaoVO = new KakaoVO(); - kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); - kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); - - KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); - - model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); - - }else if(msgType.equals("9")) { - - KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); - - model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); - model.addAttribute("resultMsgDetail", mjonKakaoATResultVO); - - }else { - - model.addAttribute("kakaoTemplateInfo", ""); - - } - - return "web/kakao/sent/KakaoSentDetailPop2Ajax"; - } - - - @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentSFDetailListAjax.do"}) - public String selectKakaoSentSFDetailListAjax(@ModelAttribute("searchVO") KakaoSentVO kakaoSentVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - kakaoSentVO.setUserId(userId); - - // 검색 리스트 불러오기 - if(kakaoSentVO.getPageUnit() != 10) { - kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if("".equals(kakaoSentVO.getSearchSortOrd())) { - kakaoSentVO.setSearchSortOrd("desc"); - kakaoSentVO.setSearchSortCnd("regdate"); - } - - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(kakaoSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(kakaoSentVO.getPageUnit()); - paginationInfo.setPageSize(kakaoSentVO.getPageSize()); - - kakaoSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - kakaoSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - kakaoSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - kakaoSentVO.setReserveCYn("N"); - - //전체 발송 리스트 불러오기 - List resultAllSentList = kakaoSentService.selectKakaoSentSFDetailListAjax(kakaoSentVO); - model.addAttribute("resultAllSentList", resultAllSentList); - model.addAttribute("resultAllSentCnt", resultAllSentList.size()); - - model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - //발송 결과 성공 실패 건수 리스트 불러오기 -// List resultMsgSucFailList = kakaoSentService.selectAllKakaoSentSucFailList(resultAllSentList, kakaoSentVO); -// model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); - - model.addAttribute("kakaoSentVO", kakaoSentVO); - - return "web/kakao/sent/KakaoSentSFDetailListAjax"; - } - - - - /** - * 발송관리 출력하기 팝업화면 - * - * @param MjonMsgSentVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/kakao/sent/printKakaoSentDataAjax.do"}) - public String printKakaoSentDataAjax(@ModelAttribute("searchVO") KakaoSentVO kakaoSentVO, - ModelMap model) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - if(userId.equals("")) { - - /*modelAndView.addObject("status", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView;*/ - - }else { - kakaoSentVO.setUserId(userId); - } - - // 검색 리스트 불러오기 - if(kakaoSentVO.getPageUnit() != 10) { - kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(kakaoSentVO.getSearchSortOrd().equals("")) { - - kakaoSentVO.setSearchSortOrd("desc"); - kakaoSentVO.setSearchSortCnd("regdate"); - } - - if(kakaoSentVO.getListType().equals("")) { - - kakaoSentVO.setListType("groupList"); - - } - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(kakaoSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(kakaoSentVO.getPageUnit()); - paginationInfo.setPageSize(kakaoSentVO.getPageSize()); - - kakaoSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - kakaoSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - kakaoSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - List resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO); - model.addAttribute("resultAllSentList", resultAllSentList); - model.addAttribute("resultAllSentCnt", resultAllSentList.size()); - - model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - //발송 결과 성공 실패 건수 리스트 불러오기 - List resultMsgSucFailList = kakaoSentService.selectAllKakaoSentSucFailList(resultAllSentList, kakaoSentVO); - model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); - - model.addAttribute("kakaoSentVO", kakaoSentVO); - model.addAttribute("userNm", userNm); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - - return "web/kakao/sent/KakaoSentPrintListPopUp"; - } - - /** - * 발송관리 엑셀다운로드 기능 - 카카오톡 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/kakaoSentExcelDownLoadAjax.do"}) - public void kakaoSentExcelDownLoadAjax( - KakaoSentVO kakaoSentVO, - HttpServletResponse response) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(!userId.equals("")) { - - kakaoSentVO.setUserId(userId); -// -// String stateType = kakaoSentVO.getStateType(); -// String tabType = kakaoSentVO.getTabType(); -// -// // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. -// SXSSFWorkbook wb = new SXSSFWorkbook(100); -// String fileName ="발송관리 엑셀 리스트"; // 저장 파일명 -// String sheetTitle = "문자 발송 내역" ; // 셀 제목 -// Sheet sheet = wb.createSheet(sheetTitle); -// Cell cell = null; -// Row row = null; -// -// CellStyle style = wb.createCellStyle(); -// style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 -// style.setBorderLeft(CellStyle.BORDER_THIN); -// style.setBorderRight(CellStyle.BORDER_THIN); -// style.setBorderTop(CellStyle.BORDER_THIN); -// -// CellStyle styleLastCell = wb.createCellStyle(); -// styleLastCell.setBorderLeft(CellStyle.BORDER_THIN); -// -// // 정렬 -// style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬 -// style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬 -// -// Font font = wb.createFont(); -// font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold -// -// -// String type = ""; -// String fCnt = ""; -// -// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); -// -// try{ -// -// -// kakaoSentVO.setRecordCountPerPage(100000); -// kakaoSentVO.setFirstIndex(0); -// -// if("".equals(kakaoSentVO.getSearchSortCnd())){ //최초조회시 최신것 조회List -// kakaoSentVO.setSearchSortCnd("regdate"); -// kakaoSentVO.setSearchSortOrd("desc"); -// } -// kakaoSentVO.setReserveCYn("N"); -// //발송결과-카카오톡 리스트 불러오기 -// List resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO); -// if("groupList".equals(kakaoSentVO.getListType())) { -// //받는사람(전송건별) -// kakaoSentExcelGroup(resultAllSentList, row, sheet, cell, style, styleLastCell, type, fCnt, sdf); -// }else { -// kakaoSentExcelPrivate(resultAllSentList, row, sheet, cell, style, styleLastCell, type, fCnt, sdf); -// } -// -// -// response.setHeader("Set-Cookie", "fileDownload=true; path=/"); -// SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA ); -// Date currentTime = new Date (); -// String mTime = mSimpleDateFormat.format ( currentTime ); -// fileName = fileName+"("+mTime+")"; -// -// response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); -// wb.write(response.getOutputStream()); -// }catch(Exception e) { -// response.setHeader("Set-Cookie", "fileDownload=false; path=/"); -// response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); -// response.setHeader("Content-Type","text/html; charset=utf-8"); -// OutputStream out = null; -// try { -// out = response.getOutputStream(); -// byte[] data = new String("fail..").getBytes(); -// out.write(data, 0, data.length); -// } catch(Exception ignore) { -// ignore.printStackTrace(); -// } finally { -// if(out != null) try { out.close(); } catch(Exception ignore) {} -// } -// }finally { -// // 디스크 적었던 임시파일을 제거합니다. -// wb.dispose(); -// try { wb.close(); } catch(Exception ignore) {} -// } - - kakaoSentService.kakaoExcelDown(kakaoSentVO, response); - - }else { - response.sendRedirect("/web/kakao/sent/selectKakaoSentView.do"); - } - } - - private void kakaoSentExcelGroup(List resultAllSentList - , Row row - ,Sheet sheet - ,Cell cell - ,CellStyle style - ,CellStyle styleLastCell - ,String type - ,String fCnt - ,SimpleDateFormat sdf) { - - {//화면 리스트 - row = sheet.createRow(0); - - sheet.setColumnWidth(1, 5000); // 발송일시 칼럼의 폭 조절 - sheet.setColumnWidth(3, 10000); // 내용 칼럼의 폭 조절 - sheet.setColumnWidth(4, 5000); // 수신번호 칼럼의 폭 조절 - sheet.setColumnWidth(5, 5000); // 발신번호 칼럼의 폭 조절 - - //셀병합 처리 - sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //번호 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //발송일시 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //형태 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //내용 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); //받는사람 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,5,5)); //발신번호 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); //발송건수 셀병합 - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("발송일시"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("형태"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("수신번호"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("발신번호"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("카카오톡 결과"); - sheet.addMergedRegion(new CellRangeAddress(0,0,7,9)); // 발송결과 건수 가로 셀병합 - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellValue("대체문자 결과"); - sheet.addMergedRegion(new CellRangeAddress(0,0,10,11)); // 발송결과 건수 가로 셀병합 - cell.setCellStyle(style); - - cell = row.createCell(12); - cell.setCellStyle(styleLastCell); - - row = sheet.createRow(1); - - cell = row.createCell(0); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("정상수신"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("실패"); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("대기"); - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellValue("정상수신"); - cell.setCellStyle(style); - - cell = row.createCell(11); - cell.setCellValue("실패"); - cell.setCellStyle(style); - } - - for(int i=0; i < resultAllSentList.size(); i++) { - String msgType = ""; - if(resultAllSentList.get(i).getMsgType().equals("8") && resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "알림톡"; - }else if(resultAllSentList.get(i).getMsgType().equals("9") && !resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "친구톡"; - } - int excelLen = 0; - row = sheet.createRow(i+2); - excelLen = 12; - - for(int j=0 ; j < excelLen ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(sdf.format((resultAllSentList.get(i)).getReqdate())); //발송일자 - if(j==2) { - type = resultAllSentList.get(i).getMsgType(); - fCnt = resultAllSentList.get(i).getFileCnt(); - if(type.equals("8")) { - cell.setCellValue("알림톡"); //형태 - }else { - if(fCnt.equals("9")) { - cell.setCellValue("친구톡"); //형태 - } - } - } - if(j==3) cell.setCellValue((resultAllSentList.get(i)).getSmsTxt()); //내용 - if(j==4) cell.setCellValue((resultAllSentList.get(i)).getCallToComma()); - if(j==5) cell.setCellValue((resultAllSentList.get(i)).getCallFromComma()); //발신번호 - if(j==6) cell.setCellValue((resultAllSentList.get(i)).getMsgGroupCnt()); //발송건수 - - //발송결과 성공, 실패 처리 - if(j==7) cell.setCellValue(resultAllSentList.get(i).getSuccessCount()); //알림톡 발송결과 성공 - if(j==8) cell.setCellValue(resultAllSentList.get(i).getFailCount()); //알림톡 발송결과 실패 - if(j==9) cell.setCellValue(resultAllSentList.get(i).getWaitCount()); //알림톡 발송결과 대기 - - if(j==10) cell.setCellValue(resultAllSentList.get(i).getKakaoResendSuccCount()); //대체문자 발송결과 대기 - if(j==11) cell.setCellValue(resultAllSentList.get(i).getKakaoResendFailCount()); //대체문자 발송결과 대기 - } - } - } - - private void kakaoSentExcelPrivate(List resultAllSentList - , Row row - ,Sheet sheet - ,Cell cell - ,CellStyle style - ,CellStyle styleLastCell - ,String type - ,String fCnt - ,SimpleDateFormat sdf) { - - {//화면 리스트 - row = sheet.createRow(0); - - sheet.setColumnWidth(1, 5000); // 발송일시 칼럼의 폭 조절 - sheet.setColumnWidth(3, 10000); // 내용 칼럼의 폭 조절 - sheet.setColumnWidth(4, 5000); // 수신번호 칼럼의 폭 조절 - sheet.setColumnWidth(5, 5000); // 발신번호 칼럼의 폭 조절 - - sheet.setColumnWidth(7, 5000); // 카카오톡 결과 칼럼의 폭 조절 - sheet.setColumnWidth(8, 5000); // 대체문자 결과 칼럼의 폭 조절 - - //셀병합 처리 -// sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //번호 세로 셀병합 -// sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //발송일시 세로 셀병합 -// sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //형태 세로 셀병합 -// sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //내용 세로 셀병합 -// sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); //받는사람 셀병합 -// sheet.addMergedRegion(new CellRangeAddress(0,1,5,5)); //발신번호 셀병합 -// sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); //발송건수 셀병합 - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("발송일시"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("형태"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("수신번호"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("발신번호"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("카카오톡 결과"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("대체문자 결과"); - cell.setCellStyle(style); - - } - - for(int i=0; i < resultAllSentList.size(); i++) { - String msgType = ""; - if(resultAllSentList.get(i).getMsgType().equals("8") && resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "알림톡"; - }else if(resultAllSentList.get(i).getMsgType().equals("9") && !resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "친구톡"; - } - int excelLen = 0; - row = sheet.createRow(i+1); - excelLen = 9; - - for(int j=0 ; j < excelLen ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(sdf.format((resultAllSentList.get(i)).getReqdate())); //발송일자 - if(j==2) { - type = resultAllSentList.get(i).getMsgType(); - fCnt = resultAllSentList.get(i).getFileCnt(); - if(type.equals("8")) { - cell.setCellValue("알림톡"); //형태 - }else { - if(fCnt.equals("9")) { - cell.setCellValue("친구톡"); //형태 - } - } - } - if(j==3) cell.setCellValue((resultAllSentList.get(i)).getSmsTxt()); //내용 - if(j==4) cell.setCellValue((resultAllSentList.get(i)).getCallToComma()); - if(j==5) cell.setCellValue((resultAllSentList.get(i)).getCallFromComma()); //발신번호 - if(j==6) cell.setCellValue((resultAllSentList.get(i)).getMsgGroupCnt()); //발송건수 - - //카카오톡 결과 - String msgResult = ""; - if("S".equals(resultAllSentList.get(i).getMsgResult())) { - msgResult = "정상수신"; - }else if("W".equals(resultAllSentList.get(i).getMsgResult())) { - msgResult = "발송대기"; - }else if("F".equals(resultAllSentList.get(i).getMsgResult())) { - msgResult = "수신오류"; - } - - //대체문자 결과 - String callStatus = ""; - if("Y".equals(resultAllSentList.get(i).getBizKakaoResendYn())) { - if("S".equals(resultAllSentList.get(i).getMsgResult())) { - callStatus = "정상수신"; - }else if("W".equals(resultAllSentList.get(i).getMsgResult())) { - callStatus = "발송대기"; - }else if("F".equals(resultAllSentList.get(i).getMsgResult())) { - callStatus = "수신오류"; - } - }else { - callStatus = "-"; - } - - if(j==7) cell.setCellValue(msgResult); //카카오톡 결과 - if(j==8) cell.setCellValue(callStatus); //대체문자 결과 - } - } - - } - - - /* - * 20240122 우영두 추가 - * 친구톡 발송 결과 내용 팝업 처리 - * 발송 내용 처리 및 첨부 이미지, 버튼 정보 처리 - * - * */ - public KakaoReturnVO getKakaoFTSendTemplateInfo(MjonKakaoATVO kakaoATVO) throws Exception { - - KakaoReturnVO returnVO = new KakaoReturnVO(); - try { - - String tmpContent = kakaoATVO.getSmsTxtTrans(); - String jsonFilePath = kakaoATVO.getBizKakaoJsonFile(); - - //친구톡 이미지 또는 버튼 정보가 있다면 실행 - if(jsonFilePath != null && jsonFilePath.length() > 0) { - - FileReader reader = new FileReader(jsonFilePath); - int ch; - String resultStr = ""; - while ((ch = reader.read()) != -1) { - - resultStr = resultStr + (char)ch; - } - - JSONParser parser = new JSONParser(); - Object obj = parser.parse(resultStr); - JSONObject object = (JSONObject) obj; - - String image = (object.get("image") == null) ? null : object.get("image").toString(); - String button = (object.get("button") == null) ? null : object.get("button").toString(); - - if(image != null) { - - Object imagObj = parser.parse(image); - JSONObject jsonImgObj = (JSONObject) imagObj; - - System.out.println(jsonImgObj.toJSONString()); - - String imgUrl = (jsonImgObj.get("img_url") == null) ? null : jsonImgObj.get("img_url").toString(); - - System.out.println(imgUrl); - - returnVO.setTemplateEmphasizeType("IMAGE"); - returnVO.setTemplateImageUrl(imgUrl); - - } - - if(button != null) { - - JSONArray buttonJsonList = (JSONArray) object.get("button"); - - System.out.println(buttonJsonList.size()); - - List buttonList = new ArrayList(); - - for(int i=0; i < buttonJsonList.size(); i++) { - - JSONObject itemInfo = (JSONObject)buttonJsonList.get(i); - - String name = itemInfo.get("name").toString(); - - System.out.println(name); - - KakaoButtonVO buttonVO = new KakaoButtonVO(); - - buttonVO.setName(name); - - buttonList.add(buttonVO); - - } - - returnVO.setButtonList(buttonList); - - for(KakaoButtonVO butVO : returnVO.getButtonList()) { - - System.out.println("+++++++++++++ btn name ::: "+butVO.getName()); - - } - - } - - } - - //친구톡 내용 셋팅 - returnVO.setTemplateContent(tmpContent); - - } catch (Exception e) { - e.printStackTrace(); - } - - return returnVO; - - } - - @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do"}) - public ResponseEntity selectKakaoSentViewTotalSumAjax( - KakaoSentVO kakaoSentVO - ) throws Exception{ - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(loginVO == null) { -// return "redirect:/web/user/login/login.do"; - } - - kakaoSentVO.setUserId(userId); - - Map returnMap = kakaoSentService.selectKakaoSentCntAll_Advc(kakaoSentVO); - - return new ResponseEntity<>(returnMap, HttpStatus.OK); - } - - /** - * 발송관리 상세화면 - * @param searchVO - * @param model - * @return "/web/kakao/sent/selectKakaoSentDetailView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailView.do"}) - public String selectKakaoSentDetailView(@ModelAttribute("searchVO") KakaoSentDetailVO kakaoSentDetailVO, - RedirectAttributes redirectAttributes, ModelMap model) throws Exception{ - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(loginVO == null) { - return "redirect:/web/user/login/login.do"; - } - - kakaoSentDetailVO.setUserId(userId); - - model.addAttribute("result", kakaoSentService.selectKakaoSentDetailView(kakaoSentDetailVO)); - - return "web/kakao/sent/KakaoSentDetailView"; - } - - - /** - * @methodName : selectMsgSentDetailDataAjax - * @author : 이호영 - * @date : 2023.03.06 - * @description : 알림톡 전송 - 내용 상세 팝업 [전송건별] - * @param mjonKakaoATVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailViewPhoneAjax.do"}) - public String selectKakaoSentDetailViewPhoneAjax(@ModelAttribute("searchVO") MjonKakaoATVO mjonKakaoATVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonKakaoATVO.setUserId(userId); - - - - //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) - MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailDataAjax(mjonKakaoATVO); - // 대체문자 엔터키 치환 - mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt())); - model.addAttribute("resultMsgDetail", mjonKakaoATResultVO); - - String msgType = mjonKakaoATResultVO.getMsgType(); - - if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리 - - // 템플릿 api 가져오기 - KakaoVO kakaoVO = new KakaoVO(); - kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); - kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); - - KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); - - model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); - // //템플릿 api 가져오기 - - }else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리 - - //String smsTxt = mjonKakaoATResultVO.getSmsTxt(); - - KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); - //kakaoTemplateInfo.setTemplateContent(smsTxt); - - model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); - - }else { - - model.addAttribute("kakaoTemplateInfo", ""); - - } - - model.addAttribute("msgType", msgType); - return "web/kakao/sent/KakaoSentDetailPopAjax"; - } -} diff --git a/src/main/java/itn/let/kakao/user/stepInfo/web/KakaoStepInfoController.java b/src/main/java/itn/let/kakao/user/stepInfo/web/KakaoStepInfoController.java deleted file mode 100644 index e33d5ca..0000000 --- a/src/main/java/itn/let/kakao/user/stepInfo/web/KakaoStepInfoController.java +++ /dev/null @@ -1,236 +0,0 @@ -package itn.let.kakao.user.stepInfo.web; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.FileVO; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.cop.bbs.service.BoardMasterVO; -import itn.let.cop.bbs.service.BoardVO; -import itn.let.cop.bbs.service.EgovBBSAttributeManageService; -import itn.let.cop.bbs.service.EgovBBSManageService; -import itn.let.uss.umt.service.EgovUserManageService; - -@Controller -public class KakaoStepInfoController { - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name = "EgovBBSAttributeManageService") - private EgovBBSAttributeManageService bbsAttrbService; - - @Resource(name = "EgovBBSManageService") - private EgovBBSManageService bbsMngService; - - @Resource(name = "EgovFileMngService") - private EgovFileMngService fileService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - - /** - * @Method Name : selectKaKaoStepInfo - * @Project : mjon - * @Date : 2023. 2. 21. - * @작성자 : 우영두 - - * @프로그램 설명 :카카오 사용안내 화면 - */ - @RequestMapping(value= {"/web/mjon/kakao/stepinfo/selectKaKaoStepInfo.do"}) - public String selectKaKaoStepInfo(HttpServletRequest request, - @ModelAttribute("searchVO") BoardMasterVO boardMasterVO, ModelMap model , BoardVO boardVO , - RedirectAttributes redirectAttributes) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - model.addAttribute("loginVO", loginVO); - - /** - * 회원 정지된 상태이면 알림톡 사용안내 화면으로 이동되지 않도록 처리 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - return "redirect:/web/uat/uia/actionLogout.do"; - } - - BoardMasterVO bmVO = new BoardMasterVO(); - PaginationInfo paginationInfo = new PaginationInfo(); - Map map = new HashMap(); - - String bbsId = ""; - - String serverName = request.getServerName();//URL 도메인정보 받아오기 - if(serverName.equals("www.munjaon.co.kr")) {//운영서버 카카오 사용안내 FAQ 게시판 번호 셋팅해주기 - bbsId = "BBSMSTR_000000000782"; - }else {//개발서버 카카오 사용안내 FAQ 게시판 번호 셋팅해주기 - bbsId = "BBSMSTR_000000000791"; - } - - boardVO.setBbsId(bbsId); - bmVO.setBbsId(bbsId); - bmVO = bbsAttrbService.selectBBSMasterInf(bmVO); - //UserVO userVO = (UserVO)request.getSession().getAttribute("userVO"); // 사용자 정보 - - if(boardMasterVO.getPageUnit() != 10) { - bmVO.setPageUnit(boardMasterVO.getPageUnit()); - } - - boardVO.setPageUnit(Integer.parseInt(bmVO.getListNum())); - boardVO.setPageSize(Integer.parseInt(bmVO.getPageNum())); - - 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.setRecordCountPerPage(100); - - map = bbsMngService.selectBoardArticlesWeb(boardVO, null); - - int totCnt = Integer.parseInt((String) map.get("resultCnt")); - - paginationInfo.setTotalRecordCount(totCnt); - List resultList = (List)map.get("resultList"); - for (BoardVO bvo: resultList) { - Document doc = Jsoup.parse(bvo.getNttCn()); - String text = doc.text(); - bvo.setNttCn2(text); - - if(bvo.getAtchFileCnt() > 0) { - FileVO fileVO = new FileVO(); - fileVO.setAtchFileId(bvo.getAtchFileId()); - List fileList = fileService.selectFileInfs(fileVO); - bvo.setFileList(fileList); - } - } - - - //게시판 마스터 옵션 정보 - BoardMasterVO searchVO = new BoardMasterVO(); - searchVO.setBbsId(boardVO.getBbsId()); - BoardMasterVO bbsMasterInfo = bbsAttrbService.selectBBSMasterInf(searchVO); - - /** - * FAQ 타이틀 및 내용에 대한 XSS 변환 태그 원복 - * faqUnscript() 를 이용하여 디비에 변환 태그로 되어있는 코드를 다시 원복 시킴 - * ret.replaceAll("<", "<").replaceAll(">", ">"); - * - * */ - for(int i=0; i", ">"); - ret = ret.replaceAll("alert", ""); - ret = ret.replaceAll("iframe", ""); - - ret = ret.replaceAll("<", "<").replaceAll(">", ">"); - ret = ret.replaceAll("(", "\\(").replaceAll(")", "\\)"); - ret = ret.replaceAll("'", "'"); - ret = ret.replaceAll("eval\\((.*)\\)", ""); - ret = ret.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\""); - ret = ret.replaceAll("script", ""); - - return ret; - } - - - -} diff --git a/src/main/java/itn/let/komoran/KomoranUtils.java b/src/main/java/itn/let/komoran/KomoranUtils.java deleted file mode 100644 index fa538d2..0000000 --- a/src/main/java/itn/let/komoran/KomoranUtils.java +++ /dev/null @@ -1,253 +0,0 @@ -package itn.let.komoran; - -import java.util.ArrayList; -import java.util.List; - -import itn.com.cmm.util.MJUtil; -import kr.co.shineware.nlp.komoran.constant.DEFAULT_MODEL; -import kr.co.shineware.nlp.komoran.core.Komoran; -import kr.co.shineware.nlp.komoran.model.KomoranResult; -import kr.co.shineware.nlp.komoran.model.Token; - -public class KomoranUtils { - -public List parseKomoranTextByList(String ocrText, String filePath) throws Exception { - - Komoran komoran = new Komoran(DEFAULT_MODEL.FULL); - /* - * 사용자 지정 단아를 추가 학습하기 위해 아래 파일을 추가 적용해 준다. - * 파일은 dic.user 이름으로 확장자까지 만들어 준다(확장자를 .user로 해야한다) - * 파일 내용으로는 적용할 단어와 품사를 탭 구분으로 입력하면 된다. - * Ex) 톡줘 NNP - * */ - komoran.setUserDic(filePath + "komoran/dic.user"); - - String strToAnalyze = ocrText; - - KomoranResult analyzeResultList = komoran.analyze(strToAnalyze); //형태소 분석 전체 문장 - - String resultText = analyzeResultList.getPlainText(); - - - //형태소 분석 각 단어별 토큰화 시킴 - List tokenList = analyzeResultList.getTokenList(); - List resultTokenList = new ArrayList(); - String[] split = resultText.split("\n"); - //String[] split = resultText.split(System.getProperty("line.separator").toString()); - - /*for(String text : split) { - - //text = text.replace(System.getProperty("line.separator").toString(), ""); - text = text.replace("\r", ""); - text = text.replaceAll("/SW ", ""); - - resultTokenList.add(text); - }*/ - - - - for (Token token : tokenList) { - //System.out.format("(%2d, %2d) %s/%s\n", token.getBeginIndex(), token.getEndIndex(), token.getMorph(), token.getPos()); - - String pos = token.getPos(); //형태소 종류 - String mor = token.getMorph(); //분석 단어 - - /* NNG 일반명사 - * NNP 고유명사 - * NNB 의존명사 - * NP 대명사 - * NR 수사 - * VV 동사 - * VA 형용사 - * SL 외국어 - * SH 한자 - * NF 명사추정범주 - * - */ - if(pos.contains("NNG") || - pos.contains("NNP") || - pos.contains("NP") || - pos.contains("VV") || - pos.contains("VA") || - pos.contains("SL") || - pos.contains("SH") || - pos.contains("NF")) { - - resultTokenList.add(mor); - - } - } - - //토큰 단어에서 중복 단어는 제거 후 리턴 - return MJUtil.getDuplicateList(resultTokenList); - } - - public List parseKomoranTextTypeNNGByList(String ocrText, String filePath) throws Exception { - - Komoran komoran = new Komoran(DEFAULT_MODEL.FULL); - /* - * 사용자 지정 단아를 추가 학습하기 위해 아래 파일을 추가 적용해 준다. - * 파일은 dic.user 이름으로 확장자까지 만들어 준다(확장자를 .user로 해야한다) - * 파일 내용으로는 적용할 단어와 품사를 탭 구분으로 입력하면 된다. - * Ex) 톡줘 NNP - * */ - komoran.setUserDic(filePath + "komoran/dic.user"); - String strToAnalyze = ocrText; - - KomoranResult analyzeResultList = komoran.analyze(strToAnalyze); //형태소 분석 전체 문장 - - String resultText = analyzeResultList.getPlainText(); - - - //형태소 분석 각 단어별 토큰화 시킴 - List tokenList = analyzeResultList.getTokenList(); - List resultTokenList = new ArrayList(); - String[] split = resultText.split("\n"); - //String[] split = resultText.split(System.getProperty("line.separator").toString()); - - for(String text : split) { - - //text = text.replace(System.getProperty("line.separator").toString(), ""); - /* - text = text.replace("\r", ""); - text = text.replaceAll("/SW ", ""); - - resultTokenList.add(text);*/ - } - - - - for (Token token : tokenList) { - //System.out.format("(%2d, %2d) %s/%s\n", token.getBeginIndex(), token.getEndIndex(), token.getMorph(), token.getPos()); - - String pos = token.getPos(); //형태소 종류 - String mor = token.getMorph(); //분석 단어 - - /* NNG 일반명사 - * NNP 고유명사 - * NNB 의존명사 - * NP 대명사 - * NR 수사 - * VV 동사 - * VA 형용사 - * SL 외국어 - * SH 한자 - * NF 명사추정범주 - * - */ - if(pos.contains("NNG") || - pos.contains("NNP") || - pos.contains("NP") || - pos.contains("SL") || - pos.contains("NF")) { - - resultTokenList.add(mor); - - } - } - - //토큰 단어에서 중복 단어는 제거 후 리턴 - return MJUtil.getDuplicateList(resultTokenList); - } - - public String parseKomoranTextByString(String ocrText, String filePath) throws Exception { - - Komoran komoran = new Komoran(DEFAULT_MODEL.FULL); - /* - * 사용자 지정 단아를 추가 학습하기 위해 아래 파일을 추가 적용해 준다. - * 파일은 dic.user 이름으로 확장자까지 만들어 준다(확장자를 .user로 해야한다) - * 파일 내용으로는 적용할 단어와 품사를 탭 구분으로 입력하면 된다. - * Ex) 톡줘 NNP - * */ - komoran.setUserDic(filePath + "komoran/dic.user"); - - String strToAnalyze = ocrText; - - KomoranResult analyzeResultList = komoran.analyze(strToAnalyze); //형태소 분석 전체 문장 - - String resultText = analyzeResultList.getPlainText(); - - //형태소 분석 각 단어별 토큰화 시킴 - List tokenList = analyzeResultList.getTokenList(); - List resultTokenList = new ArrayList(); - String[] split = resultText.split("\n"); - for(String text : split) { - - text = text.replace("\r", ""); - text = text.replaceAll("/SW ", ""); - - resultText = text; - - } - //System.out.println(resultText); - return resultText; - } - - public List parseKomoranWordCloudNNGByList(String ocrText, String filePath) throws Exception { - - List resultTokenList = new ArrayList(); - - try { - - Komoran komoran = new Komoran(DEFAULT_MODEL.FULL); - /* - * 사용자 지정 단아를 추가 학습하기 위해 아래 파일을 추가 적용해 준다. - * 파일은 dic.user 이름으로 확장자까지 만들어 준다(확장자를 .user로 해야한다) - * 파일 내용으로는 적용할 단어와 품사를 탭 구분으로 입력하면 된다. - * Ex) 톡줘 NNP - * */ - komoran.setUserDic(filePath + "komoran/dic.user"); - String strToAnalyze = ocrText; - - KomoranResult analyzeResultList = komoran.analyze(strToAnalyze); //형태소 분석 전체 문장 - String resultText = analyzeResultList.getPlainText(); - - //System.out.println("=============start===================="); - //System.out.println(strToAnalyze); - //System.out.println("+++++++++"); - //System.out.println(resultText); - //System.out.println("==============end====================="); - - //형태소 분석 각 단어별 토큰화 시킴 - List tokenList = analyzeResultList.getTokenList(); - - for (Token token : tokenList) { - - String pos = token.getPos(); //형태소 종류 - String mor = token.getMorph(); //분석 단어 - - /* NNG 일반명사 - * NNP 고유명사 - * NNB 의존명사 - * NP 대명사 - * NR 수사 - * VV 동사 - * VA 형용사 - * SL 외국어 - * SH 한자 - * NF 명사추정범주 - * - */ - if(mor.length() > 1 && (pos.contains("NNG") || - pos.contains("NNP") || - pos.contains("NNB") || - pos.contains("NP") || - pos.contains("SL") || - pos.contains("VV") || - pos.contains("VA") || - pos.contains("NF"))) { - - resultTokenList.add(mor); - - } - } - - } catch (Exception e) { - System.out.println("+++++++++++++++ parseKomoranWordCloudNNGByList Error !!! " + e); - } - - //토큰 단어에서 중복 단어는 제거 후 리턴 - return resultTokenList; - } - -} diff --git a/src/main/java/itn/let/lett/web/LetterController.java b/src/main/java/itn/let/lett/web/LetterController.java index e4e8b0a..8f40c49 100644 --- a/src/main/java/itn/let/lett/web/LetterController.java +++ b/src/main/java/itn/let/lett/web/LetterController.java @@ -35,8 +35,6 @@ import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import org.springframework.web.servlet.support.RequestContextUtils; -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.property.EgovPropertyService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.psl.dataaccess.util.EgovMap; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; @@ -48,7 +46,6 @@ import itn.com.cmm.service.FileVO; import itn.com.cmm.util.EgovDoubleSubmitHelper; import itn.com.cmm.util.RedirectUrlMaker; import itn.com.cmm.util.StringUtil; -import itn.com.uss.ion.fms.service.FmsFileService; import itn.com.uss.ion.fms.service.FmsFileVO; import itn.let.lett.service.CateConfVO; import itn.let.lett.service.HashConfVO; @@ -57,38 +54,23 @@ import itn.let.lett.service.LetterVO; import itn.let.mjo.msgagent.service.MjonMsgAgentStsService; import itn.let.mjo.msgagent.service.MjonMsgAgentStsVO; import itn.let.sym.ccm.cde.service.CateCode; -import itn.let.uss.umt.service.EgovUserManageService; import itn.let.uss.umt.service.UserDefaultVO; @Controller public class LetterController { - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; @Resource(name = "LetterService") private LetterService letterService; - /** EgovPropertyService */ - @Resource(name = "propertiesService") - protected EgovPropertyService propertiesService; - @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; - @Resource(name = "fmsFileService") - private FmsFileService fmsFileService; - @Resource(name="EgovFileMngUtil") private EgovFileMngUtil fileUtil; @Resource(name="EgovFileMngService") private EgovFileMngService fileMngService; - @Resource(name = "egovFmsFileGnrService") - private EgovIdGnrService idgenService; - /** 첨부파일 저장경로 */ @Value("#{globalSettings['Globals.file.saveDir']}") private String fileSaveDir; @@ -98,25 +80,6 @@ public class LetterController { - //카테고리 배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} - private String[][] categoryExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "카테고리 타입" , "ITN" , "[코드]"}, - {"2", "카테고리 이름" , "선거", "[코드]"}, - {"3", "순서" , "1", ""}, - {"4", "사용 유무" , "사용", ""}, - {"5", "등록일" ,"2019-10-31", ""} - } ; - - //해쉬태그 배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} - private String[][] hashTagExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "해쉬테그 이름" , "ITN" ,""}, - {"2", "순서" , "1", ""}, - {"3", "사용 유무" , "사용", ""}, - {"4", "등록일" ,"2019-10-31", ""} - } ; - /** * * 단문/장문 문자 목록 화면 @@ -2709,7 +2672,27 @@ public class LetterController { System.out.println("modelAndView.getViewName(): " + modelAndView.getViewName()) ; return modelAndView; - } + } + + + //카테고리 배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} + private String[][] categoryExcelValue ={ + {"0" ,"번호" , "1" , "" }, + {"1", "카테고리 타입" , "ITN" , "[코드]"}, + {"2", "카테고리 이름" , "선거", "[코드]"}, + {"3", "순서" , "1", ""}, + {"4", "사용 유무" , "사용", ""}, + {"5", "등록일" ,"2019-10-31", ""} + } ; + + //해쉬태그 배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} + private String[][] hashTagExcelValue ={ + {"0" ,"번호" , "1" , "" }, + {"1", "해쉬테그 이름" , "ITN" ,""}, + {"2", "순서" , "1", ""}, + {"3", "사용 유무" , "사용", ""}, + {"4", "등록일" ,"2019-10-31", ""} + } ; } diff --git a/src/main/java/itn/let/mail/web/MailTemplateController.java b/src/main/java/itn/let/mail/web/MailTemplateController.java deleted file mode 100644 index baee899..0000000 --- a/src/main/java/itn/let/mail/web/MailTemplateController.java +++ /dev/null @@ -1,60 +0,0 @@ -package itn.let.mail.web; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import itn.let.mail.service.MailTemplateService; -import itn.let.utl.user.service.MjonNoticeSendUtil; - -@Controller -public class MailTemplateController { - - @Resource (name = "MailTemplateService") - private MailTemplateService mailTemplateService; - - /** 알림전송 Util */ - @Resource(name = "mjonNoticeSendUtil") - private MjonNoticeSendUtil mjonNoticeSendUtil; - - // 휴면회원 메일발송 - @RequestMapping("/mail/mailTmplSendMemberDormantAjax.do") - public ModelAndView mailTmplSendMemberDormant( - HttpServletRequest request - ) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - // 시스템 문자발송 테스트 - String callTo = "01087872615"; - String smsTxt = "시스템발송 테스트"; - //mjonNoticeSendUtil.userSmsSendBySystem(callTo, smsTxt); - - // 휴면회원 메일발송 - //mailTemplateService.mailSendMemberDormant(); - - // 휴면회원 지정 - mailTemplateService.setMemberDormantUpdate(); - - } - catch(Exception e) { - isSuccess = false; - msg = "에러메시지 : " + e.getMessage(); - e.printStackTrace(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - -} diff --git a/src/main/java/itn/let/mail/web/MailTemplateRestController.java b/src/main/java/itn/let/mail/web/MailTemplateRestController.java index 5e74db2..583c418 100644 --- a/src/main/java/itn/let/mail/web/MailTemplateRestController.java +++ b/src/main/java/itn/let/mail/web/MailTemplateRestController.java @@ -6,8 +6,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.ResponseEntity; import org.springframework.util.MultiValueMap; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; diff --git a/src/main/java/itn/let/main/service/EgovMainContentsVO.java b/src/main/java/itn/let/main/service/EgovMainContentsVO.java deleted file mode 100644 index 8559bf6..0000000 --- a/src/main/java/itn/let/main/service/EgovMainContentsVO.java +++ /dev/null @@ -1,99 +0,0 @@ -package itn.let.main.service; - -import java.io.Serializable; - -/** - * 템플릿 메인화면 작업 List 항목 VO(Sample 소스) - * @author 실행환경 개발팀 JJY - * @since 2011.08.31 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *   
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2011.08.31  JJY            최초 생성
- *
- * 
- */ -public class EgovMainContentsVO implements Serializable { - /** - * serialVersionUID - */ - private static final long serialVersionUID = -2202175699511921484L; - /** - * 작업항목 이름 - */ - private String workItemName; - /** - * To-Do List 항목 별 업무화면 URL - */ - private String workItemURL; - - public EgovMainContentsVO(){ - - } - - /** - * - * @exception Throwable - */ - public void finalize() - throws Throwable{ - - } - - /** - * getItemCount 항목 개수 getter - * @return - */ - public int getItemCount(){ - return 0; - } - - /** - * getWorkItemName To-Do List 항목 명 getter - * @return To-Do List 항목 명 - */ - public String getWorkItemName(){ - return workItemName; - } - - /** - * getWorkItemURL 업무화면 URL getter - * @return 업무화면 URL - */ - public String getWorkItemURL(){ - return workItemURL; - } - - /** - * setItemCount 항목 개수 setter - * - * @param itemCount itemCount - */ - public void setItemCount(int itemCount){ - - } - - /** - * setWorkItemName To-Do List 항목 명 Setter - * - * @param workItemName To-Do List 항목 명 - */ - public void setWorkItemName(String workItemName){ - - } - - /** - * setWorkItemURL 업무화면 URL setter - * - * @param workItemURL 업무화면 URL - */ - public void setWorkItemURL(String workItemURL){ - - } - -} \ No newline at end of file diff --git a/src/main/java/itn/let/main/web/EgovMainController.java b/src/main/java/itn/let/main/web/EgovMainController.java index 4dd9aed..2ceced3 100644 --- a/src/main/java/itn/let/main/web/EgovMainController.java +++ b/src/main/java/itn/let/main/web/EgovMainController.java @@ -1,17 +1,10 @@ package itn.let.main.web; -import java.io.File; -import java.lang.management.ClassLoadingMXBean; -import java.lang.management.ManagementFactory; -import java.lang.management.MemoryMXBean; -import java.lang.management.MemoryUsage; -import java.lang.management.RuntimeMXBean; -import java.lang.management.ThreadMXBean; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; -import java.util.Locale; import java.util.Map; import javax.annotation.Resource; @@ -20,31 +13,22 @@ 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; 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 org.springframework.web.servlet.ModelAndView; -import com.sun.management.OperatingSystemMXBean; - -import egovframework.rte.fdl.security.intercept.EgovReloadableFilterInvocationSecurityMetadataSource; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.ComDefaultVO; import itn.com.cmm.LoginVO; import itn.com.cmm.util.RedirectUrlMaker; -import itn.com.uss.ion.bnr.service.BannerVO; -import itn.com.uss.ion.bnr.service.EgovBannerService; -import itn.com.uss.ion.pwm.service.EgovPopupManageService; -import itn.com.uss.ion.pwm.service.PopupManageVO; -import itn.com.uss.ion.pwm.service.PopupzoneVO; import itn.let.cop.bbs.service.BoardVO; import itn.let.cop.bbs.service.EgovBBSManageService; import itn.let.mjo.msg.service.MjPhoneMemberVO; @@ -53,7 +37,6 @@ import itn.let.mjo.msg.service.MjonMsgStatVO; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.pay.service.MjonPayService; import itn.let.mjo.pay.service.MjonPayVO; -import itn.let.mjo.pay.service.RefundService; import itn.let.sts.com.StatsVO; import itn.let.sts.cst.service.EgovConectStatsService; import itn.let.sym.log.clg.service.EgovLoginLogService; @@ -62,12 +45,9 @@ import itn.let.sym.mnu.mcm.service.EgovMenuCreateManageService; import itn.let.sym.mnu.mpm.service.EgovMenuManageService; import itn.let.sym.mnu.mpm.service.MenuManageJTreeVO; import itn.let.sym.mnu.mpm.service.MenuManageVO; -import itn.let.sym.site.service.EgovSiteIpService; import itn.let.sym.site.service.EgovSiteManagerService; import itn.let.sym.site.service.SiteManagerVO; -import itn.let.uss.umt.service.EgovUserManageService; import itn.let.uss.umt.service.MberManageVO; -import itn.let.utl.sim.service.EgovClntInfo; /** * 템플릿 메인 페이지 컨트롤러 클래스(Sample 소스) @@ -94,20 +74,9 @@ public class EgovMainController { @Resource(name = "EgovBBSManageService") private EgovBBSManageService bbsMngService; - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - /** EgovMenuManageService */ @Resource(name = "meunManageService") private EgovMenuManageService menuManageService; - - @Resource(name = "egovBannerService") - private EgovBannerService egovBannerService; - - /** EgovPopupManageService */ - @Resource(name = "egovPopupManageService") - private EgovPopupManageService egovPopupManageService; @Resource(name="EgovLoginLogService") private EgovLoginLogService loginLogService; @@ -118,12 +87,6 @@ public class EgovMainController { @Resource(name = "egovSiteManagerService") EgovSiteManagerService egovSiteManagerService; - @Resource(name="databaseSecurityMetadataSource") - EgovReloadableFilterInvocationSecurityMetadataSource databaseSecurityMetadataSource; - - @Resource(name = "egovSiteIpService") - EgovSiteIpService egovSiteIpService; - /** EgovMenuManageService */ @Resource(name = "meunCreateManageService") private EgovMenuCreateManageService menuCreateManageService; @@ -134,24 +97,7 @@ public class EgovMainController { @Resource(name = "mjonMsgService") private MjonMsgService mjonMsgService; - @Resource(name = "refundService") - private RefundService refundService; - - /** - * 메인 페이지에서 각 업무 화면으로 연계하는 기능을 제공한다. - * - * @param request - * @param commandMap - * @exception Exception Exception - */ - @RequestMapping(value = "/cmm/forwardPage.do") - public String forwardPageWithMenuNo(HttpServletRequest request, @RequestParam Map commandMap) - throws Exception{ - return ""; - - } - /** * 템플릿 메인 페이지 조회 * @return 메인페이지 정보 Map [key : 항목명] @@ -164,609 +110,381 @@ public class EgovMainController { @RequestMapping(value = "/cmm/main/mainPage.do") public String selectGetMgtMainPage(HttpServletRequest request, ModelMap model, HttpSession session) throws Exception{ - // 오늘날짜 - Date nowDate = new Date(); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); - String strNowDate = simpleDateFormat.format(nowDate); - - {//관리자, 사용자 어제/오늘 사용자수 - int tdayUcnt = 0; // 오늘 사용자수 - int tdayAcnt = 0; // 오늘 관리자수 - int ydayUcnt = 0; // 어제 사용자수 - int ydayAcnt = 0; // 어제 관리자수 - - StatsVO statsVO = new StatsVO(); - statsVO.setStatDate(strNowDate); - StatsVO rtnStatsVO = conectStatsService.selectDashBoardStatInfo(statsVO); - if (rtnStatsVO != null) { - tdayUcnt = rtnStatsVO.getTdayUcnt(); - tdayAcnt = rtnStatsVO.getTdayAcnt(); - ydayUcnt = rtnStatsVO.getYdayUcnt(); - ydayAcnt = rtnStatsVO.getYdayAcnt(); - } - - model.addAttribute("userViewCnt", tdayUcnt); - model.addAttribute("adminViewCnt", tdayAcnt); - model.addAttribute("userViewCnt2", ydayUcnt); - model.addAttribute("adminViewCnt2", ydayAcnt); - } +// // 오늘날짜 +// Date nowDate = new Date(); +// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); +// String strNowDate = simpleDateFormat.format(nowDate); +// +// {//관리자, 사용자 어제/오늘 사용자수 +// int tdayUcnt = 0; // 오늘 사용자수 +// int tdayAcnt = 0; // 오늘 관리자수 +// int ydayUcnt = 0; // 어제 사용자수 +// int ydayAcnt = 0; // 어제 관리자수 +// +// StatsVO statsVO = new StatsVO(); +// statsVO.setStatDate(strNowDate); +// StatsVO rtnStatsVO = conectStatsService.selectDashBoardStatInfo(statsVO); +// if (rtnStatsVO != null) { +// tdayUcnt = rtnStatsVO.getTdayUcnt(); +// tdayAcnt = rtnStatsVO.getTdayAcnt(); +// ydayUcnt = rtnStatsVO.getYdayUcnt(); +// ydayAcnt = rtnStatsVO.getYdayAcnt(); +// } +// +// model.addAttribute("userViewCnt", tdayUcnt); +// model.addAttribute("adminViewCnt", tdayAcnt); +// model.addAttribute("userViewCnt2", ydayUcnt); +// model.addAttribute("adminViewCnt2", ydayAcnt); +// } - /* - {//관리자 어제 사용자수 - StatsVO statsVO = new StatsVO(); - statsVO.setStatDate(strNowDate); - List conectStats = conectStatsService.selectMainConectStatsYesterDay(statsVO); - for( Object tempStatsVO : conectStats){ - if("A".equals(((StatsVO)tempStatsVO).getUserAt())){//관리자 - model.addAttribute("adminViewCnt2", ((StatsVO)tempStatsVO).getCnt()); - } - if("U".equals(((StatsVO)tempStatsVO).getUserAt())){//사용자 - model.addAttribute("userViewCnt2", ((StatsVO)tempStatsVO).getCnt()); - } - } - } +// BoardVO boardVO = new BoardVO(); +// +// // 로그인 정보 확인 +// LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); +// model.addAttribute("loginVO",loginVO); +// +// {// 최근 게시물 / 새개시물 카운트 +// //0번째 부터 6개의 항목만 조회 +// boardVO.setFirstIndex(0); +// boardVO.setRecordCountPerPage(5); +// // 최신날짜 우선순위 조회 +// boardVO.setSearchSortCnd("frstRegisterPnttm"); +// boardVO.setSearchSortOrd("desc"); +// List adminBoardList = bbsMngService.selectAdminMainBoardByDash(boardVO); +// model.addAttribute("adminBoardList", adminBoardList); +// //오늘 +// int adminMainNewBoardCnt = bbsMngService.selectAdminMainNewBoardCnt(boardVO); +// model.addAttribute("adminMainNewBoardCnt", adminMainNewBoardCnt); +// //어젝 +// int adminMainYdaBoardCnt = bbsMngService.selectAdminMainYdaBoardCnt(boardVO); +// model.addAttribute("adminMainYdaBoardCnt", adminMainYdaBoardCnt); +// } - {//관리자 오늘 사용자수 - StatsVO statsVO = new StatsVO(); - statsVO.setStatDate(strNowDate); - List conectStats = conectStatsService.selectMainConectStats(statsVO); - for( Object tempStatsVO : conectStats){ - if("A".equals(((StatsVO)tempStatsVO).getUserAt())){//관리자 - model.addAttribute("adminViewCnt", ((StatsVO)tempStatsVO).getCnt()); - } - if("U".equals(((StatsVO)tempStatsVO).getUserAt())){//사용자 - model.addAttribute("userViewCnt", ((StatsVO)tempStatsVO).getCnt()); - } - } - } - */ - - LoginVO user = null ; - BoardVO boardVO = new BoardVO(); - if(EgovUserDetailsHelper.getAuthorities().contains("ROLE_ADMIN")){ //통계, 접속통계 링크 관리자만 클릭되게 - model.addAttribute("ROLE_ADMIN", "ROLE_ADMIN"); - }else{ //관리자 아닌경우 자신의 게시판만 조회되게.. - try{ - user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - boardVO.setEmplyrId(user.getId()); - }catch (Exception e) { - return "forward:/uat/uia/actionMain.do"; - } - } - - // 로그인 정보 확인 - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - model.addAttribute("loginVO",loginVO); - - - /* - PaginationInfo paginationInfo = new PaginationInfo(); - {//일일관리자 접속 리스트 - LoginLog loginLog = new LoginLog(); - paginationInfo.setCurrentPageNo(loginLog.getPageIndex()); - paginationInfo.setRecordCountPerPage(loginLog.getPageUnit()); - paginationInfo.setPageSize(loginLog.getPageSize()); - - loginLog.setFirstIndex(paginationInfo.getFirstRecordIndex()); - loginLog.setLastIndex(paginationInfo.getLastRecordIndex()); - loginLog.setRecordCountPerPage(10); //50개까지 보여주기 - //if(null != loginVO){ loginLog.setSiteId(loginVO.getSiteId()); } - List adminLogList = loginLogService.selectMainAmdinLog(loginLog); - int adminLogListCnt = loginLogService.selectMainAmdinLogTotCnt(loginLog); - paginationInfo.setTotalRecordCount(adminLogListCnt); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("adminLogList", adminLogList); - } - */ - - {// 최근 게시물 / 새개시물 카운트 - //0번째 부터 6개의 항목만 조회 - boardVO.setFirstIndex(0); - boardVO.setRecordCountPerPage(5); - // 최신날짜 우선순위 조회 - boardVO.setSearchSortCnd("frstRegisterPnttm"); - boardVO.setSearchSortOrd("desc"); - List adminBoardList = bbsMngService.selectAdminMainBoardByDash(boardVO); - model.addAttribute("adminBoardList", adminBoardList); - //오늘 - int adminMainNewBoardCnt = bbsMngService.selectAdminMainNewBoardCnt(boardVO); - model.addAttribute("adminMainNewBoardCnt", adminMainNewBoardCnt); - //어젝 - int adminMainYdaBoardCnt = bbsMngService.selectAdminMainYdaBoardCnt(boardVO); - model.addAttribute("adminMainYdaBoardCnt", adminMainYdaBoardCnt); - } - {// 관리자 로그관리 리스트 - /* - LoginLog loginLog = new LoginLog(); - //0번째 부터 6개의 항목만 조회 - loginLog.setFirstIndex(0); - loginLog.setRecordCountPerPage(5); - // 최신날짜 우선순위 조회 - loginLog.setSearchSortCnd("creatDt"); - loginLog.setSearchSortOrd("desc"); - List adminLogList = loginLogService.selectAmdinLog(loginLog); - model.addAttribute("adminLogList", adminLogList); - */ - } - - // 2023.01.11 JSPark => 사용안하는 데이터로 판단되어 주석처리 - /* - {//신규가입회원 목록 - UserDefaultVO userSearchVO = new UserDefaultVO(); - - //0번째 부터 4개의 항목만 조회 - userSearchVO.setFirstIndex(0); - userSearchVO.setRecordCountPerPage(4); - - // 가입일시 우선순위 조회 - userSearchVO.setSearchSortCnd("sbscrbDe"); - userSearchVO.setSearchSortOrd("desc"); - - userSearchVO.setAdminYn("N"); - List userList = userManageService.selectUserList(userSearchVO); - model.addAttribute("userList", userList); - - UserDefaultVO userCount = userManageService.selectUserCount(); - model.addAttribute("userCount", userCount); - } - */ +// {//접속통계 사용자만 +// {// PC, 모바일 접속통계(주간) +// StatsVO statsVO = new StatsVO(); +// //0번째 부터 7개의 항목만 조회 +// statsVO.setFirstIndex(0); +// statsVO.setRecordCountPerPage(7); +// statsVO.setSearchSortCnd("statDate"); +// statsVO.setSearchSortOrd("ASC"); +// List deviceTypeVisitList = conectStatsService.selectDashBoardStatList(statsVO); +// model.addAttribute("deviceTypeVisitList", deviceTypeVisitList); +// +// {//PC +// JSONObject statsObject = new JSONObject(); +// JSONArray cntArray = new JSONArray(); +// JSONArray dateArray = new JSONArray(); +// for(StatsVO tempStatsVO : deviceTypeVisitList){ +// cntArray.add(tempStatsVO.getClickPcnt()); +// dateArray.add(tempStatsVO.getStatDate().substring(5,tempStatsVO.getStatDate().length()) ); +// } +// statsObject.put("cnt" , cntArray); +// statsObject.put("date" , dateArray); +// model.addAttribute("statsPcDayList", statsObject); +// } +// {//모바일 +// JSONObject statsObject = new JSONObject(); +// JSONArray cntArray = new JSONArray(); +// JSONArray dateArray = new JSONArray(); +// for(StatsVO tempStatsVO : deviceTypeVisitList){ +// cntArray.add(tempStatsVO.getClickMcnt()); +// dateArray.add(tempStatsVO.getStatDate().substring(5,tempStatsVO.getStatDate().length()) ); +// } +// statsObject.put("cnt" , cntArray); +// statsObject.put("date" , dateArray); +// model.addAttribute("statsMobileDayList", statsObject); +// } +// {//전체 +// JSONObject statsObject = new JSONObject(); +// JSONArray cntArray = new JSONArray(); +// JSONArray dateArray = new JSONArray(); +// for(StatsVO tempStatsVO : deviceTypeVisitList){ +// cntArray.add(tempStatsVO.getClickAcnt()); +// dateArray.add(tempStatsVO.getStatDate().substring(5,tempStatsVO.getStatDate().length()) ); +// } +// statsObject.put("cnt" , cntArray); +// statsObject.put("date" , dateArray); +// model.addAttribute("statsPcMobileDayList", statsObject); +// } +// } +// } - {//접속통계 사용자만 - // 2023.01.11 JSPark => 사용안하는 데이터로 판단되어 주석처리 - /* - StatsVO statsVO = new StatsVO(); - statsVO.setRecordCountPerPage(20); //일카운터(20개) - statsVO.setFirstIndex(0); - - List statsDayList = conectStatsService.selectMainStatsDay(statsVO); //일일접속카운터(관리자) - List statsMonthList = conectStatsService.selectMainStatsMonth(statsVO); //월별접속카운터(관리자) - List statsYearList = conectStatsService.selectMainStatsYear(statsVO); //연도변접속카운터(관리자) - {//일일통계 - JSONObject statsObject = new JSONObject(); - JSONArray cntArray = new JSONArray(); - JSONArray dateArray = new JSONArray(); - for(StatsVO tempStatsVO : statsDayList){ - cntArray.add(tempStatsVO.getCnt()); - dateArray.add(tempStatsVO.getStatsDate().substring(5,tempStatsVO.getStatsDate().length())); - } - statsObject.put("cnt" , cntArray); - statsObject.put("date" , dateArray); - model.addAttribute("statsDayList", statsObject); - } - {//월통계 - JSONObject statsObject = new JSONObject(); - JSONArray cntArray = new JSONArray(); - JSONArray dateArray = new JSONArray(); - for(StatsVO tempStatsVO : statsMonthList){ - cntArray.add(tempStatsVO.getCnt()); - dateArray.add(tempStatsVO.getStatsDate()); - } - statsObject.put("cnt" , cntArray); - statsObject.put("date" , dateArray); - model.addAttribute("statsMonthList", statsObject); - } - {//년통계 - JSONObject statsObject = new JSONObject(); - JSONArray cntArray = new JSONArray(); - JSONArray dateArray = new JSONArray(); - cntArray.add(0); //데이터가 2018 한건만 조회 되어서 2017년도 0 넣어줌 - dateArray.add("2017"); - for(StatsVO tempStatsVO : statsYearList){ - cntArray.add(tempStatsVO.getCnt()); - dateArray.add(tempStatsVO.getStatsDate()); - } - statsObject.put("cnt" , cntArray); - statsObject.put("date" , dateArray); - model.addAttribute("statsYearList", statsObject); - } - */ - - - {// PC, 모바일 접속통계(주간) - StatsVO statsVO = new StatsVO(); - //0번째 부터 7개의 항목만 조회 - statsVO.setFirstIndex(0); - statsVO.setRecordCountPerPage(7); - statsVO.setSearchSortCnd("statDate"); - statsVO.setSearchSortOrd("ASC"); - List deviceTypeVisitList = conectStatsService.selectDashBoardStatList(statsVO); - model.addAttribute("deviceTypeVisitList", deviceTypeVisitList); - - {//PC - JSONObject statsObject = new JSONObject(); - JSONArray cntArray = new JSONArray(); - JSONArray dateArray = new JSONArray(); - for(StatsVO tempStatsVO : deviceTypeVisitList){ - cntArray.add(tempStatsVO.getClickPcnt()); - dateArray.add(tempStatsVO.getStatDate().substring(5,tempStatsVO.getStatDate().length()) ); - } - statsObject.put("cnt" , cntArray); - statsObject.put("date" , dateArray); - model.addAttribute("statsPcDayList", statsObject); - } - {//모바일 - JSONObject statsObject = new JSONObject(); - JSONArray cntArray = new JSONArray(); - JSONArray dateArray = new JSONArray(); - for(StatsVO tempStatsVO : deviceTypeVisitList){ - cntArray.add(tempStatsVO.getClickMcnt()); - dateArray.add(tempStatsVO.getStatDate().substring(5,tempStatsVO.getStatDate().length()) ); - } - statsObject.put("cnt" , cntArray); - statsObject.put("date" , dateArray); - model.addAttribute("statsMobileDayList", statsObject); - } - {//전체 - JSONObject statsObject = new JSONObject(); - JSONArray cntArray = new JSONArray(); - JSONArray dateArray = new JSONArray(); - for(StatsVO tempStatsVO : deviceTypeVisitList){ - cntArray.add(tempStatsVO.getClickAcnt()); - dateArray.add(tempStatsVO.getStatDate().substring(5,tempStatsVO.getStatDate().length()) ); - } - statsObject.put("cnt" , cntArray); - statsObject.put("date" , dateArray); - model.addAttribute("statsPcMobileDayList", statsObject); - } - } - - /***** - //PC, 모바일 접속통계(주간) - StatsVO statsVO = new StatsVO(); - statsVO.setRecordCountPerPage(7); //일카운터(7일 : 일주일) - statsVO.setFirstIndex(0); - List statsPcDayList = conectStatsService.selectPcMainStatsDay(statsVO); //일일접속카운터(사용자) - List statsMobileDayList = conectStatsService.selectMobileMainStatsDay(statsVO); //일일접속카운터(사용자) - List statsAllDayList = conectStatsService.selectPcMobileMainStatsDay(statsVO); //모바일+PC(사용자) - {//PC - JSONObject statsObject = new JSONObject(); - JSONArray cntArray = new JSONArray(); - JSONArray dateArray = new JSONArray(); - for(StatsVO tempStatsVO : statsPcDayList){ - cntArray.add(tempStatsVO.getCnt()); - dateArray.add(tempStatsVO.getStatsDate().substring(5,tempStatsVO.getStatsDate().length()) ); - } - statsObject.put("cnt" , cntArray); - statsObject.put("date" , dateArray); - model.addAttribute("statsPcDayList", statsObject); - } - {//모바일 - JSONObject statsObject = new JSONObject(); - JSONArray cntArray = new JSONArray(); - JSONArray dateArray = new JSONArray(); - for(StatsVO tempStatsVO : statsMobileDayList){ - cntArray.add(tempStatsVO.getCnt()); - dateArray.add(tempStatsVO.getStatsDate().substring(5,tempStatsVO.getStatsDate().length()) ); - } - statsObject.put("cnt" , cntArray); - statsObject.put("date" , dateArray); - model.addAttribute("statsMobileDayList", statsObject); - } - {//전체 - JSONObject statsObject = new JSONObject(); - JSONArray cntArray = new JSONArray(); - JSONArray dateArray = new JSONArray(); - for(StatsVO tempStatsVO : statsAllDayList){ - cntArray.add(tempStatsVO.getCnt()); - dateArray.add(tempStatsVO.getStatsDate().substring(5,tempStatsVO.getStatsDate().length()) ); - } - statsObject.put("cnt" , cntArray); - statsObject.put("date" , dateArray); - model.addAttribute("statsPcMobileDayList", statsObject); - } - *****/ - } - - {//기업회원 신청, 반려 , 완료 건 통계 - - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setHstSttus("01"); //기업회원 신청 상태 셋팅 - List cmpHstStats01 = conectStatsService.selectMberCmpHstStatsDashboard(mberManageVO); //기업회원 신청 건수 - - mberManageVO.setHstSttus("02"); //기업회원 승인 상태 셋팅 - List cmpHstStats02 = conectStatsService.selectMberCmpHstStatsDashboard(mberManageVO); //기업회원 승인 건수 - - mberManageVO.setHstSttus("03"); //기업회원 반려 상태 셋팅 - List cmpHstStats03 = conectStatsService.selectMberCmpHstStatsDashboard(mberManageVO); //기업회원 반려 건수 - - - int totCmpHstSts01 = 0; - int totCmpHstSts02 = 0; - int totCmpHstSts03 = 0; - - if(cmpHstStats01.size() > 0) { - - totCmpHstSts01 = cmpHstStats01.get(0).getTotCnt(); - - } - - if(cmpHstStats02.size() > 0) { - - totCmpHstSts02 = cmpHstStats02.get(0).getTotCnt(); - - } - - if(cmpHstStats03.size() > 0) { - - totCmpHstSts03 = cmpHstStats03.get(0).getTotCnt(); - - } - - model.addAttribute("totCmpHstSts01", totCmpHstSts01); - model.addAttribute("totCmpHstSts02", totCmpHstSts02); - model.addAttribute("totCmpHstSts03", totCmpHstSts03); - } +// {//기업회원 신청, 반려 , 완료 건 통계 +// +// MberManageVO mberManageVO = new MberManageVO(); +// mberManageVO.setHstSttus("01"); //기업회원 신청 상태 셋팅 +// List cmpHstStats01 = conectStatsService.selectMberCmpHstStatsDashboard(mberManageVO); //기업회원 신청 건수 +// +// mberManageVO.setHstSttus("02"); //기업회원 승인 상태 셋팅 +// List cmpHstStats02 = conectStatsService.selectMberCmpHstStatsDashboard(mberManageVO); //기업회원 승인 건수 +// +// mberManageVO.setHstSttus("03"); //기업회원 반려 상태 셋팅 +// List cmpHstStats03 = conectStatsService.selectMberCmpHstStatsDashboard(mberManageVO); //기업회원 반려 건수 +// +// +// int totCmpHstSts01 = 0; +// int totCmpHstSts02 = 0; +// int totCmpHstSts03 = 0; +// +// if(cmpHstStats01.size() > 0) { +// +// totCmpHstSts01 = cmpHstStats01.get(0).getTotCnt(); +// +// } +// +// if(cmpHstStats02.size() > 0) { +// +// totCmpHstSts02 = cmpHstStats02.get(0).getTotCnt(); +// +// } +// +// if(cmpHstStats03.size() > 0) { +// +// totCmpHstSts03 = cmpHstStats03.get(0).getTotCnt(); +// +// } +// +// model.addAttribute("totCmpHstSts01", totCmpHstSts01); +// model.addAttribute("totCmpHstSts02", totCmpHstSts02); +// model.addAttribute("totCmpHstSts03", totCmpHstSts03); +// } +// +// {//개인 및 기업회원 전체 가입자 수 조회 +// +// MberManageVO mberManageTotStatsVO = new MberManageVO(); +// +// //개인회원 건수 +// mberManageTotStatsVO.setDept("P"); +// List mberTotStaStatsPrivate = conectStatsService.selectMberTotStats(mberManageTotStatsVO); //개인회원 반려 건수 +// model.addAttribute("mberTotStaStatsPrivate", mberTotStaStatsPrivate); +// +// //기업회원 건수 +// mberManageTotStatsVO.setDept("C"); +// List mberTotStaStatsCompany = conectStatsService.selectMberTotStats(mberManageTotStatsVO); //기업회원 반려 건수 +// model.addAttribute("mberTotStaStatsCompany", mberTotStaStatsCompany); +// +// int userNorCnt = 0; // 개인회원수 +// int userComCnt = 0; // 기업회원수 +// +// //일반회원 총계(개인 + 기업) +// int mberNorTot = 0; +// //이용정지 회원 총계 +// int mberBlockTot = 0; +// //회원 탈퇴 총계 +// int mberSecessTot = 0; +// +// //개인회원 합계 구하기 +// for(int i=0; i < mberTotStaStatsPrivate.size(); i++) { +// +// String type = mberTotStaStatsPrivate.get(i).getMberSttus(); +// +// if(type.equals("Y")) {//일반 회원수 +// userNorCnt = mberTotStaStatsPrivate.get(i).getTotCnt(); // 개인회원수 +// mberNorTot = mberNorTot + mberTotStaStatsPrivate.get(i).getTotCnt(); +// }else if(type.equals("B")) {//이용정지 회원수 +// mberBlockTot = mberBlockTot + mberTotStaStatsPrivate.get(i).getTotCnt(); +// }else if(type.equals("N")) {//탈퇴 회원수 +// mberSecessTot = mberSecessTot + mberTotStaStatsPrivate.get(i).getTotCnt(); +// } +// +// } +// +// +// //기업회원 합계 구하기 +// for(int i=0; i < mberTotStaStatsCompany.size(); i++) { +// +// String type = mberTotStaStatsCompany.get(i).getMberSttus(); +// +// if(type.equals("Y")) {//일반 회원수 +// userComCnt = mberTotStaStatsCompany.get(i).getTotCnt(); // 기업회원수 +// mberNorTot = mberNorTot + mberTotStaStatsCompany.get(i).getTotCnt(); +// }else if(type.equals("B")) {//이용정지 회원수 +// mberBlockTot = mberBlockTot + mberTotStaStatsCompany.get(i).getTotCnt(); +// }else if(type.equals("N")) {//탈퇴 회원수 +// mberSecessTot = mberSecessTot + mberTotStaStatsCompany.get(i).getTotCnt(); +// } +// +// } +// +// model.addAttribute("userNorCnt", userNorCnt); // 개인회원수 +// model.addAttribute("userComCnt", userComCnt); // 기업회원수 +// model.addAttribute("mberNorTot", mberNorTot); +// model.addAttribute("mberBlockTot", mberBlockTot); +// model.addAttribute("mberSecessTot", mberSecessTot); +// +// +// // 금일 탈퇴회원 수 X 금일 이용정지회원 수 X 환불 취소 수 +// +// String s_sttString = conectStatsService.selectTodaySttCountString(mberManageTotStatsVO); +// +// String[] a_s_sttString = s_sttString.split("_"); +// +// if (a_s_sttString.length==3) { +// // 금일 탈퇴회원 수 +// model.addAttribute("todayExpireCnt", a_s_sttString[0]); +// +// // 금일 이용정지회원 수 +// model.addAttribute("todayStopCnt", a_s_sttString[1]); +// +// //환불/결제 신청수 +// model.addAttribute("refundRequestCnt", a_s_sttString[2]); +// } +// } - {//개인 및 기업회원 전체 가입자 수 조회 - - MberManageVO mberManageTotStatsVO = new MberManageVO(); - - //개인회원 건수 - mberManageTotStatsVO.setDept("P"); - List mberTotStaStatsPrivate = conectStatsService.selectMberTotStats(mberManageTotStatsVO); //개인회원 반려 건수 - model.addAttribute("mberTotStaStatsPrivate", mberTotStaStatsPrivate); - - //기업회원 건수 - mberManageTotStatsVO.setDept("C"); - List mberTotStaStatsCompany = conectStatsService.selectMberTotStats(mberManageTotStatsVO); //기업회원 반려 건수 - model.addAttribute("mberTotStaStatsCompany", mberTotStaStatsCompany); - - int userNorCnt = 0; // 개인회원수 - int userComCnt = 0; // 기업회원수 - - //일반회원 총계(개인 + 기업) - int mberNorTot = 0; - //이용정지 회원 총계 - int mberBlockTot = 0; - //회원 탈퇴 총계 - int mberSecessTot = 0; - - //개인회원 합계 구하기 - for(int i=0; i < mberTotStaStatsPrivate.size(); i++) { - - String type = mberTotStaStatsPrivate.get(i).getMberSttus(); - - if(type.equals("Y")) {//일반 회원수 - userNorCnt = mberTotStaStatsPrivate.get(i).getTotCnt(); // 개인회원수 - mberNorTot = mberNorTot + mberTotStaStatsPrivate.get(i).getTotCnt(); - }else if(type.equals("B")) {//이용정지 회원수 - mberBlockTot = mberBlockTot + mberTotStaStatsPrivate.get(i).getTotCnt(); - }else if(type.equals("N")) {//탈퇴 회원수 - mberSecessTot = mberSecessTot + mberTotStaStatsPrivate.get(i).getTotCnt(); - } - - } - - - //기업회원 합계 구하기 - for(int i=0; i < mberTotStaStatsCompany.size(); i++) { - - String type = mberTotStaStatsCompany.get(i).getMberSttus(); - - if(type.equals("Y")) {//일반 회원수 - userComCnt = mberTotStaStatsCompany.get(i).getTotCnt(); // 기업회원수 - mberNorTot = mberNorTot + mberTotStaStatsCompany.get(i).getTotCnt(); - }else if(type.equals("B")) {//이용정지 회원수 - mberBlockTot = mberBlockTot + mberTotStaStatsCompany.get(i).getTotCnt(); - }else if(type.equals("N")) {//탈퇴 회원수 - mberSecessTot = mberSecessTot + mberTotStaStatsCompany.get(i).getTotCnt(); - } - - } - - model.addAttribute("userNorCnt", userNorCnt); // 개인회원수 - model.addAttribute("userComCnt", userComCnt); // 기업회원수 - model.addAttribute("mberNorTot", mberNorTot); - model.addAttribute("mberBlockTot", mberBlockTot); - model.addAttribute("mberSecessTot", mberSecessTot); - - - // 금일 탈퇴회원 수 X 금일 이용정지회원 수 X 환불 취소 수 - - String s_sttString = conectStatsService.selectTodaySttCountString(mberManageTotStatsVO); - - String[] a_s_sttString = s_sttString.split("_"); - - if (a_s_sttString.length==3) { - // 금일 탈퇴회원 수 - model.addAttribute("todayExpireCnt", a_s_sttString[0]); - - // 금일 이용정지회원 수 - model.addAttribute("todayStopCnt", a_s_sttString[1]); - - //환불/결제 신청수 - model.addAttribute("refundRequestCnt", a_s_sttString[2]); - } - - /* - // 금일 탈퇴회원 수 - int todayExpireCnt = conectStatsService.selectTodayExpireMberCount(mberManageTotStatsVO); - model.addAttribute("todayExpireCnt", todayExpireCnt); - - // 금일 이용정지회원 수 - int todayStopCnt = conectStatsService.selectTodayStopMberCount(mberManageTotStatsVO); - model.addAttribute("todayStopCnt", todayStopCnt); - - //환불/취소 수 - int refundRequestCnt = 0; - //환불/결제 신청수 - RefundVO refundVO = new RefundVO(); - refundRequestCnt = refundService.selectRefundRequestCount(refundVO); - model.addAttribute("refundRequestCnt", refundRequestCnt); - */ - } - - {//발신번호 통계 - - MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO(); - - //발신번호 타입이 "발신" 통계 - mjPhoneMemberVO.setPhmType("01"); //발신번호 타입 셋팅 - List mberPhoneTotStatsNor = conectStatsService.selectMberPhoneTotStats(mjPhoneMemberVO); //발신번호 심사, 반려 건수 - - //발신번호 타입이 "차단" 통계 - mjPhoneMemberVO.setPhmType("03"); //발신번호 타입 셋팅 - List mberPhoneTotStatsBlock = conectStatsService.selectMberPhoneTotStats(mjPhoneMemberVO); //발신번호 차단 건수 - - int phoneNorConfirm = 0; - int phoneNorReject = 0; - int phoneNorComplete = 0; - int phoneBlock = 0; - int phoneTotCnt = 0; - - for(int i=0; i < mberPhoneTotStatsNor.size(); i++) { - - String authYn = mberPhoneTotStatsNor.get(i).getAuthYn(); - - if(authYn.equals("C")) {//반려건 건수 - phoneNorReject = phoneNorReject + mberPhoneTotStatsNor.get(i).getTotCnt(); - }else if(authYn.equals("H")) {//심사중 건수 - phoneNorConfirm = phoneNorConfirm + mberPhoneTotStatsNor.get(i).getTotCnt(); - }else if(authYn.equals("Y")) {//승인완료 건수 - phoneNorComplete = phoneNorComplete + mberPhoneTotStatsNor.get(i).getTotCnt(); - } - - //전체 건수 - phoneTotCnt = mberPhoneTotStatsNor.get(i).getSumTotCnt(); - - } - - //발신번호 차단 전체 건수 - if(mberPhoneTotStatsBlock.size() > 0) { - phoneBlock = mberPhoneTotStatsBlock.get(0).getSumTotCnt(); - } - - model.addAttribute("phoneNorConfirm", phoneNorConfirm); - model.addAttribute("phoneNorReject", phoneNorReject); - model.addAttribute("phoneNorComplete", phoneNorComplete); - model.addAttribute("phoneBlock", phoneBlock); - model.addAttribute("phoneTotCnt", phoneTotCnt); - model.addAttribute("phoneTotSumCnt", phoneTotCnt + phoneBlock); //진행중 건수 + 발신차단된 건수 - - } +// {//발신번호 통계 +// +// MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO(); +// +// //발신번호 타입이 "발신" 통계 +// mjPhoneMemberVO.setPhmType("01"); //발신번호 타입 셋팅 +// List mberPhoneTotStatsNor = conectStatsService.selectMberPhoneTotStats(mjPhoneMemberVO); //발신번호 심사, 반려 건수 +// +// //발신번호 타입이 "차단" 통계 +// mjPhoneMemberVO.setPhmType("03"); //발신번호 타입 셋팅 +// List mberPhoneTotStatsBlock = conectStatsService.selectMberPhoneTotStats(mjPhoneMemberVO); //발신번호 차단 건수 +// +// int phoneNorConfirm = 0; +// int phoneNorReject = 0; +// int phoneNorComplete = 0; +// int phoneBlock = 0; +// int phoneTotCnt = 0; +// +// for(int i=0; i < mberPhoneTotStatsNor.size(); i++) { +// +// String authYn = mberPhoneTotStatsNor.get(i).getAuthYn(); +// +// if(authYn.equals("C")) {//반려건 건수 +// phoneNorReject = phoneNorReject + mberPhoneTotStatsNor.get(i).getTotCnt(); +// }else if(authYn.equals("H")) {//심사중 건수 +// phoneNorConfirm = phoneNorConfirm + mberPhoneTotStatsNor.get(i).getTotCnt(); +// }else if(authYn.equals("Y")) {//승인완료 건수 +// phoneNorComplete = phoneNorComplete + mberPhoneTotStatsNor.get(i).getTotCnt(); +// } +// +// //전체 건수 +// phoneTotCnt = mberPhoneTotStatsNor.get(i).getSumTotCnt(); +// +// } +// +// //발신번호 차단 전체 건수 +// if(mberPhoneTotStatsBlock.size() > 0) { +// phoneBlock = mberPhoneTotStatsBlock.get(0).getSumTotCnt(); +// } +// +// model.addAttribute("phoneNorConfirm", phoneNorConfirm); +// model.addAttribute("phoneNorReject", phoneNorReject); +// model.addAttribute("phoneNorComplete", phoneNorComplete); +// model.addAttribute("phoneBlock", phoneBlock); +// model.addAttribute("phoneTotCnt", phoneTotCnt); +// model.addAttribute("phoneTotSumCnt", phoneTotCnt + phoneBlock); //진행중 건수 + 발신차단된 건수 +// +// } // 일별 매출통계 - { - //0번째 부터 6개의 항목만 조회 - MjonPayVO mjonPayVO = new MjonPayVO(); - mjonPayVO.setFirstIndex(0); - mjonPayVO.setRecordCountPerPage(4); - // 최신날짜 우선순위 조회 - mjonPayVO.setSearchSortCnd("regDate"); - mjonPayVO.setSearchSortOrd("desc"); - List adminPayDayChart = mjonPayService.selectPayDayChartDashboard(mjonPayVO); - for(MjonPayVO item : adminPayDayChart){ - String strNewDtFormat = item.getRegDate().substring(5, 10); - item.setRegDate(strNewDtFormat); - } - model.addAttribute("adminPayDayChart", adminPayDayChart); - } +// { +// //0번째 부터 6개의 항목만 조회 +// MjonPayVO mjonPayVO = new MjonPayVO(); +// mjonPayVO.setFirstIndex(0); +// mjonPayVO.setRecordCountPerPage(4); +// // 최신날짜 우선순위 조회 +// mjonPayVO.setSearchSortCnd("regDate"); +// mjonPayVO.setSearchSortOrd("desc"); +// List adminPayDayChart = mjonPayService.selectPayDayChartDashboard(mjonPayVO); +// for(MjonPayVO item : adminPayDayChart){ +// String strNewDtFormat = item.getRegDate().substring(5, 10); +// item.setRegDate(strNewDtFormat); +// } +// model.addAttribute("adminPayDayChart", adminPayDayChart); +// } // 월별 매출통계 - { - //0번째 부터 6개의 항목만 조회 - MjonPayVO mjonPayVO = new MjonPayVO(); - mjonPayVO.setFirstIndex(0); - mjonPayVO.setRecordCountPerPage(4); - // 최신날짜 우선순위 조회 - mjonPayVO.setSearchSortCnd("regDate"); - mjonPayVO.setSearchSortOrd("desc"); - List adminPayMonthChart = mjonPayService.selectPayMonthChartDashboard(mjonPayVO); - for(MjonPayVO item : adminPayMonthChart){ - String strNewDtFormat = Integer.parseInt(item.getRegDate().substring(5, 7)) + " 월"; - item.setRegDate(strNewDtFormat); - } - model.addAttribute("adminPayMonthChart", adminPayMonthChart); - } +// { +// //0번째 부터 6개의 항목만 조회 +// MjonPayVO mjonPayVO = new MjonPayVO(); +// mjonPayVO.setFirstIndex(0); +// mjonPayVO.setRecordCountPerPage(4); +// // 최신날짜 우선순위 조회 +// mjonPayVO.setSearchSortCnd("regDate"); +// mjonPayVO.setSearchSortOrd("desc"); +// List adminPayMonthChart = mjonPayService.selectPayMonthChartDashboard(mjonPayVO); +// for(MjonPayVO item : adminPayMonthChart){ +// String strNewDtFormat = Integer.parseInt(item.getRegDate().substring(5, 7)) + " 월"; +// item.setRegDate(strNewDtFormat); +// } +// model.addAttribute("adminPayMonthChart", adminPayMonthChart); +// } - // 연간 매출통계 - { - MjonPayVO mjonPayVO = new MjonPayVO(); - MjonPayVO adminPayYearInfo = mjonPayService.selectPayYearChart(mjonPayVO); - model.addAttribute("regYear", adminPayYearInfo.getRegYear()); - model.addAttribute("amtYearSum", adminPayYearInfo.getAmtYearSum()); - } +// // 연간 매출통계 +// { +// MjonPayVO mjonPayVO = new MjonPayVO(); +// MjonPayVO adminPayYearInfo = mjonPayService.selectPayYearChart(mjonPayVO); +// model.addAttribute("amtYearSum", adminPayYearInfo.getAmtYearSum()); +// } // 일별 회원통계 - { - //0번째 부터 6개의 항목만 조회 - MjonMsgVO mjonMsgVO = new MjonMsgVO(); - mjonMsgVO.setFirstIndex(0); - mjonMsgVO.setRecordCountPerPage(4); - // 최신날짜 우선순위 조회 - mjonMsgVO.setSearchSortCnd("regDate"); - mjonMsgVO.setSearchSortOrd("desc"); - List adminMemDayChart = mjonMsgService.selectMemDayChartDashboard(mjonMsgVO); - model.addAttribute("adminMemDayChart", adminMemDayChart); - } +// { +// //0번째 부터 6개의 항목만 조회 +// MjonMsgVO mjonMsgVO = new MjonMsgVO(); +// mjonMsgVO.setFirstIndex(0); +// mjonMsgVO.setRecordCountPerPage(4); +// // 최신날짜 우선순위 조회 +// mjonMsgVO.setSearchSortCnd("regDate"); +// mjonMsgVO.setSearchSortOrd("desc"); +// List adminMemDayChart = mjonMsgService.selectMemDayChartDashboard(mjonMsgVO); +// model.addAttribute("adminMemDayChart", adminMemDayChart); +// } - // 월별 회원통계 - { - //0번째 부터 6개의 항목만 조회 - MjonMsgVO mjonMsgVO = new MjonMsgVO(); - mjonMsgVO.setFirstIndex(0); - mjonMsgVO.setRecordCountPerPage(4); - // 최신날짜 우선순위 조회 - mjonMsgVO.setSearchSortCnd("regDate"); - mjonMsgVO.setSearchSortOrd("desc"); - List adminMemMonthChart = mjonMsgService.selectMemMonthChartDashboard(mjonMsgVO); - model.addAttribute("adminMemMonthChart", adminMemMonthChart); - } +// // 월별 회원통계 +// { +// //0번째 부터 6개의 항목만 조회 +// MjonMsgVO mjonMsgVO = new MjonMsgVO(); +// mjonMsgVO.setFirstIndex(0); +// mjonMsgVO.setRecordCountPerPage(4); +// // 최신날짜 우선순위 조회 +// mjonMsgVO.setSearchSortCnd("regDate"); +// mjonMsgVO.setSearchSortOrd("desc"); +// List adminMemMonthChart = mjonMsgService.selectMemMonthChartDashboard(mjonMsgVO); +// model.addAttribute("adminMemMonthChart", adminMemMonthChart); +// } +// +// // 연간 누적 결제율(회원통계) +// { +// SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy"); +// Date now = new Date(); +// String thisYear = sdf1.format(now); +// model.addAttribute("thisYear", thisYear); +// +// //0번째 부터 6개의 항목만 조회 +// MjonMsgVO mjonMsgVO = new MjonMsgVO(); +// MjonMsgVO adminMemYearPayChart = mjonMsgService.selectMemYearPayDashboard(mjonMsgVO); +// String payPctByYear = "0"; +// if (adminMemYearPayChart != null) { +// payPctByYear = adminMemYearPayChart.getPayPct(); +// } +// model.addAttribute("payPctByYear", payPctByYear); +// } - // 연간 누적 결제율(회원통계) - { - SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy"); - Date now = new Date(); - String thisYear = sdf1.format(now); - model.addAttribute("thisYear", thisYear); - - //0번째 부터 6개의 항목만 조회 - MjonMsgVO mjonMsgVO = new MjonMsgVO(); - MjonMsgVO adminMemYearPayChart = mjonMsgService.selectMemYearPayDashboard(mjonMsgVO); - String payPctByYear = "0"; - if (adminMemYearPayChart != null) { - payPctByYear = adminMemYearPayChart.getPayPct(); - } - model.addAttribute("payPctByYear", payPctByYear); - } +// // 전송사 발송 통계 +// { +// MjonMsgStatVO mjonMsgStatVO = new MjonMsgStatVO(); +// mjonMsgStatVO.setFirstIndex(0); +// mjonMsgStatVO.setRecordCountPerPage(3); +// List agentCntList = mjonMsgService.selectAgentSmsCountStatMainList(mjonMsgStatVO); +// model.addAttribute("agentCntList", agentCntList); +// } - // 전송사 발송 통계 - { - MjonMsgStatVO mjonMsgStatVO = new MjonMsgStatVO(); - mjonMsgStatVO.setFirstIndex(0); - mjonMsgStatVO.setRecordCountPerPage(3); - List agentCntList = mjonMsgService.selectAgentSmsCountStatMainList(mjonMsgStatVO); - model.addAttribute("agentCntList", agentCntList); - } +// {// 회원 전환률 통계 +// StatsVO statsVO = new StatsVO(); +// //0번째 부터 4개의 항목만 조회 +// statsVO.setFirstIndex(0); +// statsVO.setRecordCountPerPage(4); +// statsVO.setSearchSortCnd("statDate"); +// statsVO.setSearchSortOrd("DESC"); +// List adminMemLoginDayChart = conectStatsService.selectDashBoardStatList(statsVO); +// model.addAttribute("adminMemLoginDayChart", adminMemLoginDayChart); +// } - // 회원 전환률 통계 - /* - { - //0번째 부터 6개의 항목만 조회 - MjonMsgVO mjonMsgVO = new MjonMsgVO(); - List adminMemLoginDayChart = mjonMsgService.selectMemLoginDayChartDashboard(mjonMsgVO); - model.addAttribute("adminMemLoginDayChart", adminMemLoginDayChart); - } - */ - - {// 회원 전환률 통계 - StatsVO statsVO = new StatsVO(); - //0번째 부터 4개의 항목만 조회 - statsVO.setFirstIndex(0); - statsVO.setRecordCountPerPage(4); - statsVO.setSearchSortCnd("statDate"); - statsVO.setSearchSortOrd("DESC"); - List adminMemLoginDayChart = conectStatsService.selectDashBoardStatList(statsVO); - model.addAttribute("adminMemLoginDayChart", adminMemLoginDayChart); - } - - //CPU정보등 조회 - /*showOSBean(); - showThreadBean(); - showClassLoading(); - showMemory(); - showDisk(); - showCPU();*/ return "main/EgovMainView"; } @@ -887,29 +605,10 @@ public class EgovMainController { menuManageVO.setTmp_OrgnztId(user.getOrgnztId()); menuManageVO.setTmp_UniqId(user.getUniqId()); - //menuManageVO.setMenuUserType("A"); //관리자만 조회 - - // /sym/mms/EgovMainMenuLeft.do 에서 조회함으로 주석 -// List list_headmenu = menuManageService.selectMainMenuHead(menuManageVO) ; -// model.addAttribute("list_headmenu", list_headmenu); -// List list_menulist = menuManageService.selectMainMenuLeft(menuManageVO); -// model.addAttribute("list_menulist", list_menulist); - model.addAttribute("adminUserName", user.getName()); model.addAttribute("uniqId", user.getUniqId()); - //이전접속정보 - LoginLog loginLog = new LoginLog(); - loginLog.setConectId(user.getUniqId()); - loginLog = loginLogService.selectBeforeAmdinLog(loginLog); //이전접속 시간 - if(loginLog !=null) { - model.addAttribute("beforeLoginDate", loginLog.getCreatDt()); - }else { - model.addAttribute("beforeLoginDate", ""); - } }else{ - //model.addAttribute("list_headmenu", menuManageService.selectMainMenuHeadAnonymous(menuManageVO)); - //model.addAttribute("list_menulist", menuManageService.selectMainMenuLeftAnonymous(menuManageVO)); } if(commandMap.get("before") !=null ){ return "main/inc/EgovIncTopnav1"; // 내부업무의 상단메뉴 이전 화면 @@ -921,15 +620,6 @@ public class EgovMainController { session.setMaxInactiveInterval(60* Integer.parseInt(siteManagerVO.getSessionTimeCdText())); //10분 model.addAttribute("sessionTime", siteManagerVO.getSessionTimeCdText()); - //즐겨찾기매뉴 - if(null != user){ - MenuManageJTreeVO menuManageJTreeVO = new MenuManageJTreeVO(); - menuManageJTreeVO.setSiteId(user.getSiteId()); - menuManageJTreeVO.setAuthorCode("ROLE_ADMIN") ; //관리자 페이지 - menuManageJTreeVO.setUserId(user.getId()); - List quickList = menuCreateManageService.selectQuickListIncTop(menuManageJTreeVO) ; - model.addAttribute("quickList", quickList); - } return "main/inc/EgovIncTopnav"; // 내부업무의 상단메뉴 화면 } @@ -958,8 +648,6 @@ public class EgovMainController { menuManageVO.setTmp_Email(user.getEmail()); menuManageVO.setTmp_OrgnztId(user.getOrgnztId()); menuManageVO.setTmp_UniqId(user.getUniqId()); - //menuManageVO.setMenuUserType("A"); //관리자만 조회 - //menuManageVO.setSiteId(user.getSiteId()); List list_headmenu = menuManageService.selectMainMenuHead(menuManageVO); model.addAttribute("list_headmenu", list_headmenu); @@ -971,262 +659,26 @@ public class EgovMainController { return "main/inc/EgovIncLeftmenu"; } - - /** - * 템플릿 메인 USER 페이지 조회 - * @return 메인페이지 정보 Map [key : 항목명] - * - * @param request - * @param model - * @exception Exception Exception - */ - @RequestMapping(value = "/cmm/main/mainUserPage.do") - public String mainUserPage(HttpServletRequest request, ModelMap model) throws Exception{ - // 공지사항 메인 컨텐츠 조회 시작 --------------------------------- - BoardVO boardVO = new BoardVO(); - boardVO.setPageUnit(5); - boardVO.setPageSize(10); - boardVO.setBbsId("BBSMSTR_000000000100"); //공지사항 - - PaginationInfo paginationInfo = new PaginationInfo(); - - paginationInfo.setCurrentPageNo(boardVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(boardVO.getPageUnit()); - paginationInfo.setPageSize(boardVO.getPageSize()); - - boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - boardVO.setLastIndex(paginationInfo.getLastRecordIndex()); - boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - Map map = bbsMngService.selectBoardArticles(boardVO, "BBSA02"); - model.addAttribute("notiList", map.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", facebookAPI.getPosts()); - model.addAttribute("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")); - - // 자유게시판 메인컨텐츠 조회 끝 ----------------------------------- - // FAQ 메인 컨텐츠 조회 시작 --------------------------------- - /** EgovPropertyService.SiteList */ - /*FaqManageDefaultVO searchVO = new FaqManageDefaultVO(); - searchVO.setPageUnit(3); - searchVO.setPageSize(10); - - *//** pageing *//* - paginationInfo.setCurrentPageNo(searchVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(searchVO.getPageUnit()); - paginationInfo.setPageSize(searchVO.getPageSize()); - - searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - searchVO.setLastIndex(paginationInfo.getLastRecordIndex()); - searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - model.addAttribute("faqList", faqManageService.selectFaqList(searchVO));*/ - - // FAQ 메인 컨텐츠 조회 끝 ----------------------------------- - - // 설문참여 메인 컨텐츠 조회 시작 ----------------------------------- - 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.setReflctAt("Y"); //반영이 Y 만 - bannerVO.setBannerList(egovBannerService.selectBannerList(bannerVO)); - model.addAttribute("bannerList", bannerVO.getBannerList()); - - //팝업리스트 조회 - 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(); - List popupzoneList = egovPopupManageService.selectPopupzoneList(popupzoneVo); - model.addAttribute("popupzoneList", popupzoneList); - - //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"); */ - String ip = EgovClntInfo.getClntIP(req); - 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 - loginLog.setProgrmFileNm(null); - if(isMobile(request)){ - loginLog.setDeviceType("M"); - }else{ - loginLog.setDeviceType("P"); - } - loginLogService.logInsertLoginLog(loginLog); - } - } - return "main/mainUserPage"; - } - - - @RequestMapping("/sym/mms/EgovPopup.do") - public String EgovPopup( @ModelAttribute("popupManageVO") PopupManageVO popupManageVO , ModelMap model ) throws Exception { - String popupUrl ="/uss/ion/pwm/sample/EgovPopupSample" ; //임시샘플 - try { - popupManageVO = egovPopupManageService.selectPopup(popupManageVO) ; //(Integer.parseInt(seq)); - model.addAttribute("popupManageVO", popupManageVO); - } - catch(Exception exception) { - //System.out.println("ERROR: "+exception.toString()); - } - return popupUrl; - } - - /* 페이스북 */ - @RequestMapping(value="/community/facebook.do") - public @ResponseBody Map facebookGetPosts(ModelMap model) throws Exception { - try { - FacebookAPI facebookAPI = FacebookAPI.getInstance(); - model.put("posts", facebookAPI.getPosts()); - model.put("photo", facebookAPI.getPhoto()); - } - catch(Exception exception) { - System.out.println("ERROR: "+exception.toString()); - } - return model; - } - - @RequestMapping(value="/sym/mms/EgovMainFooter.do") public String EgovMainFooter( @RequestParam Map commandMap ,ModelMap model) throws Exception { - 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") == null ? req.getHeader("X-Forwarded-For") : req.getHeader("X-Forwarded-For").replaceAll("10.12.107.11", "").replaceAll(",", "").trim(); - if (ip == null){ ip = req.getRemoteAddr();} - LoginLog loginLog = new LoginLog(); - loginLog.setLoginIp(ip); - loginLog.setCreatDt(mTime); - loginLog.setLoginMthd("I"); // 로그인:I, 로그아웃:O - loginLog.setErrOccrrAt("N"); - loginLog.setErrorCode(""); - loginLog.setUserAt("A"); //관리자 - loginLog.setLoginId(""); //connnect_id - loginLog.setUrl(req.getRequestURI()); - if(EgovUserDetailsHelper.isAuthenticated()){ - LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - loginLog.setLoginId(user.getUniqId()); - } - //loginLogService.logInsertAdminLoginLog(loginLog); - + LoginVO user = + EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + + //즐겨찾기매뉴 + if(null != user){ + MenuManageJTreeVO menuManageJTreeVO = new MenuManageJTreeVO(); + menuManageJTreeVO.setSiteId(user.getSiteId()); + menuManageJTreeVO.setAuthorCode("ROLE_ADMIN") ; //관리자 페이지 + menuManageJTreeVO.setUserId(user.getId()); + List quickList = menuCreateManageService.selectQuickListIncTop(menuManageJTreeVO) ; + model.addAttribute("quickList", quickList); + } return "main/inc/EgovIncFooter"; // 내부업무의 상단메뉴 화면 } - @RequestMapping("/web/main/EgovPopup.do") - public String EgovMainPopup( @ModelAttribute("popupManageVO") PopupManageVO popupManageVO , ModelMap model ) throws Exception { - String popupUrl ="/uss/ion/pwm/sample/EgovPopupSample" ; //임시샘플 - try { - popupManageVO = egovPopupManageService.selectPopup(popupManageVO) ; //(Integer.parseInt(seq)); - model.addAttribute("popupManageVO", popupManageVO); - } - catch(Exception exception) { - //System.out.println("ERROR: "+exception.toString()); - } - return popupUrl; - } - - /*메인에서 바로가기시 상단, 좌측의 메뉴 설정*/ @RequestMapping(value="/sym/mms/goSubsession.do") public String goSubsession( @@ -1240,108 +692,336 @@ public class EgovMainController { return redirectUrlMaker.getRedirectUrl(); } + //어제/오늘 접속현황 + @RequestMapping(value = "/cmm/main/selectVisitStatInfoAjax.do", method = RequestMethod.POST) + @ResponseBody + public Map selectVisitStatInfoAjax(@RequestBody(required = false) Map paramMap) throws Exception { + Map resultMap = new HashMap<>(); + + Date nowDate = new Date(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + String strNowDate = simpleDateFormat.format(nowDate); + + int tdayUcnt = 0, tdayAcnt = 0, ydayUcnt = 0, ydayAcnt = 0; + + StatsVO statsVO = new StatsVO(); + statsVO.setStatDate(strNowDate); + StatsVO rtnStatsVO = conectStatsService.selectDashBoardStatInfo(statsVO); + if (rtnStatsVO != null) { + tdayUcnt = rtnStatsVO.getTdayUcnt(); + tdayAcnt = rtnStatsVO.getTdayAcnt(); + ydayUcnt = rtnStatsVO.getYdayUcnt(); + ydayAcnt = rtnStatsVO.getYdayAcnt(); + } + + resultMap.put("isSuccess", true); + resultMap.put("userViewCnt", tdayUcnt); + resultMap.put("adminViewCnt", tdayAcnt); + resultMap.put("userViewCnt2", ydayUcnt); + resultMap.put("adminViewCnt2", ydayAcnt); + + return resultMap; + } - /*모바일접속 유무*/ - 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; - } + //최근 게시물 + @RequestMapping("/cmm/main/recentBoardAjax.do") + public String recentBoardAjax(Model model) { + BoardVO boardVO = new BoardVO(); + boardVO.setFirstIndex(0); + boardVO.setRecordCountPerPage(5); + boardVO.setSearchSortCnd("frstRegisterPnttm"); + boardVO.setSearchSortOrd("desc"); + + List adminBoardList = new ArrayList();; + try { + adminBoardList = bbsMngService.selectAdminMainBoardByDash(boardVO); + + } catch (Exception e) { + e.printStackTrace(); + } + model.addAttribute("adminBoardList", adminBoardList); + + return "main/recentBoard"; // View 이름만 반환 + } - /** - * OS 정보 - */ - public void showOSBean() - { - final long MEGABYTE = 1024L * 1024L; - OperatingSystemMXBean osbean = ( OperatingSystemMXBean ) ManagementFactory.getOperatingSystemMXBean( ); - System.out.println( "OS Name: " + osbean.getName() ); - System.out.println( "OS Arch: " + osbean.getArch() ); - - System.out.println( "Available Processors: " + osbean.getAvailableProcessors() ); - System.out.println( "TotalPhysicalMemorySize: " + osbean.getTotalPhysicalMemorySize() / MEGABYTE + " MB"); - - System.out.println( "FreePhysicalMemorySize: " + osbean.getFreePhysicalMemorySize() / MEGABYTE +" MB"); - System.out.println( "TotalSwapSpaceSize: " + osbean.getTotalSwapSpaceSize() / MEGABYTE +" MB"); - System.out.println( "FreeSwapSpaceSize: " + osbean.getFreeSwapSpaceSize() / MEGABYTE+" MB"); - System.out.println( "CommittedVirtualMemorySize: " + osbean.getCommittedVirtualMemorySize() / MEGABYTE+" MB"); - System.out.println( "SystemLoadAverage: " + osbean.getSystemLoadAverage() / MEGABYTE+" MB"); - } + //접속 통계 + @RequestMapping("/cmm/main/visitStatsAjax.do") + public String selectVisitStatsAjax(Model model) throws Exception { + StatsVO statsVO = new StatsVO(); + statsVO.setFirstIndex(0); + statsVO.setRecordCountPerPage(7); + statsVO.setSearchSortCnd("statDate"); + statsVO.setSearchSortOrd("ASC"); + + List deviceTypeVisitList = conectStatsService.selectDashBoardStatList(statsVO); + model.addAttribute("deviceTypeVisitList", deviceTypeVisitList); + + // PC + JSONObject pcStats = new JSONObject(); + JSONArray pcCnt = new JSONArray(); + JSONArray pcDate = new JSONArray(); + for (StatsVO vo : deviceTypeVisitList) { + pcCnt.add(vo.getClickPcnt()); + pcDate.add(vo.getStatDate().substring(5)); + } + pcStats.put("cnt", pcCnt); + pcStats.put("date", pcDate); + model.addAttribute("statsPcDayList", pcStats); + + // 모바일 + JSONObject mobileStats = new JSONObject(); + JSONArray mobCnt = new JSONArray(); + JSONArray mobDate = new JSONArray(); + for (StatsVO vo : deviceTypeVisitList) { + mobCnt.add(vo.getClickMcnt()); + mobDate.add(vo.getStatDate().substring(5)); + } + mobileStats.put("cnt", mobCnt); + mobileStats.put("date", mobDate); + model.addAttribute("statsMobileDayList", mobileStats); + + // 전체 + JSONObject totalStats = new JSONObject(); + JSONArray totCnt = new JSONArray(); + JSONArray totDate = new JSONArray(); + for (StatsVO vo : deviceTypeVisitList) { + totCnt.add(vo.getClickAcnt()); + totDate.add(vo.getStatDate().substring(5)); + } + totalStats.put("cnt", totCnt); + totalStats.put("date", totDate); + model.addAttribute("statsPcMobileDayList", totalStats); + + return "main/visitStats"; // JSP 경로 (tiles 제외) + } - public void showThreadBean( ) - { - ThreadMXBean tbean = ManagementFactory.getThreadMXBean( ); - long[] ids = tbean.getAllThreadIds( ); - System.out.println( "Thread Count: " + tbean.getThreadCount( ) ); - for ( long id : ids ) - { - System.out.println( "Thread CPU Time(" + id + ")" + tbean.getThreadCpuTime( id ) ); - System.out.println( "Thread User Time(" + id + ")" + tbean.getThreadCpuTime( id ) ); - } - } + //회원 통계 + @RequestMapping("/cmm/main/memberStatsAjax.do") + public String selectMemberStatsAjax(Model model) throws Exception { - public void showClassLoading( ) - { - ClassLoadingMXBean classbean = ManagementFactory.getClassLoadingMXBean( ); - System.out.println( "TotalLoadedClassCount: " + classbean.getTotalLoadedClassCount( ) ); - System.out.println( "LoadedClassCount: " + classbean.getLoadedClassCount( ) ); - System.out.println( "UnloadedClassCount: " + classbean.getUnloadedClassCount( ) ); - } + MberManageVO mberManageVO = new MberManageVO(); - /* - * 메모리 사용량 - */ - public void showMemory( ) - { - MemoryMXBean membean = ManagementFactory.getMemoryMXBean( ); - MemoryUsage heap = membean.getHeapMemoryUsage( ); - System.out.println( "Heap Memory: " + heap.toString( ) ); - MemoryUsage nonheap = membean.getNonHeapMemoryUsage( ); - System.out.println( "NonHeap Memory: " + nonheap.toString( ) ); - } + // 신청/승인/반려 + mberManageVO.setHstSttus("01"); + List cmpHstStats01 = conectStatsService.selectMberCmpHstStatsDashboard(mberManageVO); - /* - * 디스크용량 - */ - public static void showDisk( ) - { - File root = null; - try - { - root = new File( "C:/" ); - System.out.println( "Total Space: " + root.getTotalSpace( ) ); - System.out.println( "Usable Space: " + root.getUsableSpace( ) ); - } - catch ( Exception e ) - { - e.printStackTrace( ); - } - } + mberManageVO.setHstSttus("02"); + List cmpHstStats02 = conectStatsService.selectMberCmpHstStatsDashboard(mberManageVO); - /* - * cpu 사용량 - */ - public static void showCPU( ) - { - OperatingSystemMXBean osbean = ( OperatingSystemMXBean ) ManagementFactory.getOperatingSystemMXBean( ); - RuntimeMXBean runbean = ManagementFactory.getRuntimeMXBean( ); - long bfprocesstime = osbean.getProcessCpuTime( ); - long bfuptime = runbean.getUptime( ); - long ncpus = osbean.getAvailableProcessors( ); - for ( int i = 0 ; i < 1000000 ; ++i ) - { - ncpus = osbean.getAvailableProcessors( ); - } - long afprocesstime = osbean.getProcessCpuTime( ); - long afuptime = runbean.getUptime( ); - float cal = ( afprocesstime - bfprocesstime ) / ( ( afuptime - bfuptime ) * 10000f ); - float usage = Math.min( 99f , cal ); - System.out.println( "Calculation: " + cal ); - System.out.println( "CPU Usage: " + usage ); - } + mberManageVO.setHstSttus("03"); + List cmpHstStats03 = conectStatsService.selectMberCmpHstStatsDashboard(mberManageVO); + int totCmpHstSts01 = cmpHstStats01.isEmpty() ? 0 : cmpHstStats01.get(0).getTotCnt(); + int totCmpHstSts02 = cmpHstStats02.isEmpty() ? 0 : cmpHstStats02.get(0).getTotCnt(); + int totCmpHstSts03 = cmpHstStats03.isEmpty() ? 0 : cmpHstStats03.get(0).getTotCnt(); + + model.addAttribute("totCmpHstSts01", totCmpHstSts01); + model.addAttribute("totCmpHstSts02", totCmpHstSts02); + model.addAttribute("totCmpHstSts03", totCmpHstSts03); + + MberManageVO mberManageTotStatsVO = new MberManageVO(); + + // 개인 + mberManageTotStatsVO.setDept("P"); + List mberTotStaStatsPrivate = conectStatsService.selectMberTotStats(mberManageTotStatsVO); + + // 기업 + mberManageTotStatsVO.setDept("C"); + List mberTotStaStatsCompany = conectStatsService.selectMberTotStats(mberManageTotStatsVO); + + int userNorCnt = 0, userComCnt = 0, mberNorTot = 0, mberBlockTot = 0, mberSecessTot = 0; + + for (MberManageVO vo : mberTotStaStatsPrivate) { + switch (vo.getMberSttus()) { + case "Y": userNorCnt = vo.getTotCnt(); mberNorTot += vo.getTotCnt(); break; + case "B": mberBlockTot += vo.getTotCnt(); break; + case "N": mberSecessTot += vo.getTotCnt(); break; + } + } + for (MberManageVO vo : mberTotStaStatsCompany) { + switch (vo.getMberSttus()) { + case "Y": userComCnt = vo.getTotCnt(); mberNorTot += vo.getTotCnt(); break; + case "B": mberBlockTot += vo.getTotCnt(); break; + case "N": mberSecessTot += vo.getTotCnt(); break; + } + } + + model.addAttribute("userNorCnt", userNorCnt); + model.addAttribute("userComCnt", userComCnt); + model.addAttribute("mberNorTot", mberNorTot); + model.addAttribute("mberBlockTot", mberBlockTot); + model.addAttribute("mberSecessTot", mberSecessTot); + + String statStr = conectStatsService.selectTodaySttCountString(mberManageTotStatsVO); + String[] split = statStr.split("_"); + if (split.length == 3) { + model.addAttribute("todayExpireCnt", split[0]); + model.addAttribute("todayStopCnt", split[1]); + model.addAttribute("refundRequestCnt", split[2]); + } + + return "main/memberStats"; + } + + //발신번호 통계 + @RequestMapping("/cmm/main/sendNumberStatsAjax.do") + public String selectSendNumberStatsAjax(Model model) throws Exception { + MjPhoneMemberVO vo = new MjPhoneMemberVO(); + + vo.setPhmType("01"); // 발신 + List sendList = conectStatsService.selectMberPhoneTotStats(vo); + + vo.setPhmType("03"); // 차단 + List blockList = conectStatsService.selectMberPhoneTotStats(vo); + + int phoneNorConfirm = 0, phoneNorReject = 0, phoneNorComplete = 0, phoneTotCnt = 0, phoneBlock = 0; + + for (MjPhoneMemberVO item : sendList) { + String authYn = item.getAuthYn(); + int cnt = item.getTotCnt(); + + if ("C".equals(authYn)) phoneNorReject += cnt; + else if ("H".equals(authYn)) phoneNorConfirm += cnt; + else if ("Y".equals(authYn)) phoneNorComplete += cnt; + + phoneTotCnt = item.getSumTotCnt(); // 총합은 동일값 반복됨 + } + + if (!blockList.isEmpty()) { + phoneBlock = blockList.get(0).getSumTotCnt(); + } + + model.addAttribute("phoneNorConfirm", phoneNorConfirm); + model.addAttribute("phoneNorReject", phoneNorReject); + model.addAttribute("phoneNorComplete", phoneNorComplete); + model.addAttribute("phoneTotCnt", phoneTotCnt); + model.addAttribute("phoneBlock", phoneBlock); + model.addAttribute("phoneTotSumCnt", phoneTotCnt + phoneBlock); + + return "main/sendNumberStats"; + } + + //일매출액(VAT 포함) + @RequestMapping("/cmm/main/payDayChartStatsAjax.do") + public String selectPayDayChartStatsAjax(Model model) throws Exception { + MjonPayVO mjonPayVO = new MjonPayVO(); + mjonPayVO.setFirstIndex(0); + mjonPayVO.setRecordCountPerPage(4); + mjonPayVO.setSearchSortCnd("regDate"); + mjonPayVO.setSearchSortOrd("desc"); + + List adminPayDayChart = mjonPayService.selectPayDayChartDashboard(mjonPayVO); + + for (MjonPayVO item : adminPayDayChart) { + if (item.getRegDate() != null && item.getRegDate().length() >= 10) { + item.setRegDate(item.getRegDate().substring(5, 10)); // MM-DD 형식 + } + } + + model.addAttribute("adminPayDayChart", adminPayDayChart); + + return "main/payDayChartStats"; + } + + //월매출액(VAT 포함) + @RequestMapping("/cmm/main/payMonthChartStatsAjax.do") + public String selectPayMonthChartStatsAjax(Model model) throws Exception { + MjonPayVO mjonPayVO = new MjonPayVO(); + mjonPayVO.setFirstIndex(0); + mjonPayVO.setRecordCountPerPage(4); + mjonPayVO.setSearchSortCnd("regDate"); + mjonPayVO.setSearchSortOrd("desc"); + + List adminPayMonthChart = mjonPayService.selectPayMonthChartDashboard(mjonPayVO); + + for (MjonPayVO item : adminPayMonthChart) { + if (item.getRegDate() != null && item.getRegDate().length() >= 7) { + String month = item.getRegDate().substring(5, 7); + item.setRegDate(Integer.parseInt(month) + "월"); + } + } + + model.addAttribute("adminPayMonthChart", adminPayMonthChart); + + MjonPayVO mjonPayVO2 = new MjonPayVO(); + MjonPayVO adminPayYearInfo = mjonPayService.selectPayYearChart(mjonPayVO2); + model.addAttribute("amtYearSum", adminPayYearInfo.getAmtYearSum()); + + return "main/payMonthChartStats"; + } + + //일회원가입자수 + @RequestMapping("/cmm/main/memDayChartStatsAjax.do") + public String selectMemDayChartStatsAjax(Model model) throws Exception { + MjonMsgVO mjonMsgVO = new MjonMsgVO(); + mjonMsgVO.setFirstIndex(0); + mjonMsgVO.setRecordCountPerPage(4); + mjonMsgVO.setSearchSortCnd("regDate"); + mjonMsgVO.setSearchSortOrd("desc"); + + List adminMemDayChart = mjonMsgService.selectMemDayChartDashboard(mjonMsgVO); + + model.addAttribute("adminMemDayChart", adminMemDayChart); + + return "main/memDayChartStats"; + } + + //월회원가입자수 + @RequestMapping("/cmm/main/memMonthChartStatsAjax.do") + public String selectMemMonthChartStatsAjax(Model model) throws Exception { + MjonMsgVO mjonMsgVO = new MjonMsgVO(); + mjonMsgVO.setFirstIndex(0); + mjonMsgVO.setRecordCountPerPage(4); + mjonMsgVO.setSearchSortCnd("regDate"); + mjonMsgVO.setSearchSortOrd("desc"); + + List adminMemMonthChart = mjonMsgService.selectMemMonthChartDashboard(mjonMsgVO); + model.addAttribute("adminMemMonthChart", adminMemMonthChart); + + SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy"); + Date now = new Date(); + String thisYear = sdf1.format(now); + model.addAttribute("thisYear", thisYear); + + //0번째 부터 6개의 항목만 조회 + MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); + MjonMsgVO adminMemYearPayChart = mjonMsgService.selectMemYearPayDashboard(mjonMsgVO2); + String payPctByYear = "0"; + if (adminMemYearPayChart != null) { + payPctByYear = adminMemYearPayChart.getPayPct(); + } + model.addAttribute("payPctByYear", payPctByYear); + + return "main/memMonthChartStats"; + } + + //전송사별 문자발송통계 + @RequestMapping("/cmm/main/agentSmsStatsAjax.do") + public String selectAgentSmsStatsAjax(Model model) throws Exception { + MjonMsgStatVO mjonMsgStatVO = new MjonMsgStatVO(); + mjonMsgStatVO.setFirstIndex(0); + mjonMsgStatVO.setRecordCountPerPage(3); + + List agentCntList = mjonMsgService.selectAgentSmsCountStatMainList(mjonMsgStatVO); + model.addAttribute("agentCntList", agentCntList); + + return "main/agentSmsStats"; + } + + //회원 전환률 통계 + @RequestMapping("/cmm/main/memLoginDayChartStatsAjax.do") + public String selectMemLoginDayChartStatsAjax(Model model) throws Exception { + StatsVO statsVO = new StatsVO(); + statsVO.setFirstIndex(0); + statsVO.setRecordCountPerPage(4); + statsVO.setSearchSortCnd("statDate"); + statsVO.setSearchSortOrd("DESC"); + + List adminMemLoginDayChart = conectStatsService.selectDashBoardStatList(statsVO); + model.addAttribute("adminMemLoginDayChart", adminMemLoginDayChart); + + return "main/memLoginDayChartStats"; + } + + } \ No newline at end of file diff --git a/src/main/java/itn/let/main/web/FacebookAPI.java b/src/main/java/itn/let/main/web/FacebookAPI.java deleted file mode 100644 index bdce463..0000000 --- a/src/main/java/itn/let/main/web/FacebookAPI.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright 2008-2009 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package itn.let.main.web; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Scanner; - -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.json.simple.JSONValue; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; - - - - -/** - * @Class Name : FacebookAPI.java - * @Description : 페이스북 API Class - * @Modification Information - * @ - * @ 수정일 수정자 수정내용 - * @ --------- --------- ------------------------------- - * @ 2015.04.06 최초생성 - * - * @author (주)드림웨어 - * @version 1.0 - * @see - * - * - */ - -public class FacebookAPI{ - - private static FacebookAPI facebookAPI = null; - - private static String CLIENT_ID = "846197678724759"; - - private static String CLIENT_SECRET="75180f5cd6b38cd21ba7f756566e30e5"; - - //private static String REDIRECT_URI="http://YOUR_REDIRECT_URI"; - - private String getAccessToken() - { - URL url; - InputStream is = null; - try { - url = new URL("https://graph.facebook.com/oauth/access_token" - +"?client_id="+CLIENT_ID - +"&client_secret=" +CLIENT_SECRET - +"&grant_type=client_credentials"); - HttpURLConnection request = (HttpURLConnection) url.openConnection(); - is = request.getInputStream(); - } catch (MalformedURLException e) { - System.out.println("페이스북에러"); - } catch (IOException e) { - System.out.println("페이스북에러"); - } - - int result; - - StringBuffer buffer = new StringBuffer(); - Scanner scan = new Scanner(is, "UTF-8"); - while(scan.hasNextLine()) - { - buffer.append(scan.nextLine()); - - } - - //String access_token = buffer.substring(13); - JSONObject jsonObj = (JSONObject) JSONValue.parse(buffer.toString()); - String strAccess_token = jsonObj.get("access_token").toString() ; - - //System.out.println("access_token : "+access_token); - //return access_token; - return strAccess_token ; - } - - public String getPosts() - { - URL url; - InputStream is = null; - String access_token = getAccessToken(); - try { - /*url = new URL("https://graph.facebook.com/v2.3/457530414275899/posts" - +"?access_token="+access_token - +"&locale=ko_KR" - +"&limit=10");*/ - - access_token = "EAAMBnMAM1pcBAPZBlJUe2lP0CkXAbNoAyZBbZAjhZCZBVKI04p6ZA3Bu6z538bvh81IHM2HvZAP77DksglvH3SwJ8Sb0Rw3KTggGI21KYVaiNzshnRY8UOKUX8HpfnhEy1Gyu6ZB1YuDxvQq22KTiZAVpbXycH6x29tnJ6JIGQ6a7gKZAZBbBuvzwHd" ; - String fields = "type,picture,from,caption,message,description,story,name,link,permalink_url" ; - url = new URL("https://graph.facebook.com/v2.6/457530414275899/feed" - +"?access_token="+access_token - +"&fields="+fields + "&limit=10" ); - - HttpURLConnection request = (HttpURLConnection) url.openConnection(); - is = request.getInputStream(); - - } catch (IOException e) { - System.out.println("페이스북에러"); - } - - StringBuffer buffer = new StringBuffer(); - Scanner scan = new Scanner(is, "UTF-8"); - - while(scan.hasNextLine()) - { - buffer.append(scan.nextLine()); - } - return buffer.toString(); - } - - public String getPhoto() - { - URL url; - InputStream is = null; - try { - - url = new URL("https://graph.facebook.com/v2.3/457530414275899/picture?redirect=false"); - HttpURLConnection request = (HttpURLConnection) url.openConnection(); - is = request.getInputStream(); - } catch (IOException e) { - System.out.println("페이스북에러"); - } - StringBuffer buffer = new StringBuffer(); - Scanner scan = new Scanner(is, "UTF-8"); - while(scan.hasNextLine()) - { - buffer.append(scan.nextLine()); - } - return buffer.toString(); - } - - public static FacebookAPI getInstance() - { - if(facebookAPI==null) - { - facebookAPI = new FacebookAPI(); - } - return facebookAPI; - } - - private FacebookAPI() {} - -} diff --git a/src/main/java/itn/let/mjo/addr/web/AddrController.java b/src/main/java/itn/let/mjo/addr/web/AddrController.java index e4cb8f0..fb27c9f 100644 --- a/src/main/java/itn/let/mjo/addr/web/AddrController.java +++ b/src/main/java/itn/let/mjo/addr/web/AddrController.java @@ -1,68 +1,25 @@ package itn.let.mjo.addr.web; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; import java.util.List; -import java.util.Locale; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; 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.RequestBody; 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.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.JsonResult; import itn.com.cmm.LoginVO; import itn.com.cmm.util.RedirectUrlMaker; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.fax.addr.service.FaxAddrVO; -import itn.let.mail.service.StatusResponse; -import itn.let.mjo.addr.service.AddrGroupService; -import itn.let.mjo.addr.service.AddrGroupVO; import itn.let.mjo.addr.service.AddrService; -import itn.let.mjo.addr.service.AddrTransHistVO; import itn.let.mjo.addr.service.AddrVO; -import itn.let.mjo.msgdata.service.PhoneVO; import lombok.extern.slf4j.Slf4j; /** @@ -85,18 +42,13 @@ import lombok.extern.slf4j.Slf4j; @Controller public class AddrController { - @Resource (name = "AddrService") private AddrService addrService; - @Resource (name = "AddrGroupService") - private AddrGroupService addrGroupService; - /** EgovMessageSource */ @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; - /** * 주소록 리스트 * @param addrVO @@ -295,661 +247,6 @@ public class AddrController { return "redirect:/uss/ion/addr/selectAddrList.do"; } - - - - - /** - * 주소록 타 회원으로 이전(복사) 처리 - * @param addrVO - * @param addrGroupVO - * @param addrTransHistVO - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/addr/transAddrGroupAjax.do") - public ModelAndView transAddrGroupAjax(AddrVO addrVO, AddrGroupVO addrGroupVO, AddrTransHistVO addrTransHistVO) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - String successCd = addrService.updateAddrAnotherMember(addrVO, addrGroupVO, addrTransHistVO); - - modelAndView.addObject("status", "success"); - modelAndView.addObject("result", successCd); - - }catch(Exception e) { - e.printStackTrace(); - modelAndView.addObject("status", "fail"); - return modelAndView; - } - - return modelAndView; - } - - - - /** - * 주소록 사용자 화면 껍데기 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/addr/selectAddrList.do") - public String selectAddrWebList(@ModelAttribute("searchVO") AddrVO addrVO - ,AddrGroupVO addrGroupVO, ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - /*redirectAttributes.addFlashAttribute("fail", true);*/ - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - - return "/web/addr/AddrList"; - } - - - - /** - * 사용자 주소록 리스트 Ajax - * @param request - * @param model - * @param addrVO - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/addr/selectAddrAjax.do") - public String selectAddrAjax(HttpServletRequest request, ModelMap model, - @ModelAttribute("searchVO") AddrVO addrVO) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - } else { - return "/web/addr/AddrListAjax"; - } - - if(addrVO.getPageUnit() != 10) { - addrVO.setPageUnit(addrVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(addrVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(addrVO.getPageUnit()); - paginationInfo.setPageSize(addrVO.getPageSize()); - - addrVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - addrVO.setLastIndex(paginationInfo.getLastRecordIndex()); - addrVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrVO.setSearchSortCnd("addrId"); - addrVO.setSearchSortOrd("asc"); - } - - List addrList = new ArrayList(); - if(StringUtils.isNotEmpty(addrVO.getSearchAddrGrpId())) { - addrList = addrService.selectAddrList(addrVO); - } - - int totCnt = 0; - if(addrList.size() > 0) { - totCnt = addrList.get(0).getTotcnt(); - } - - paginationInfo.setTotalRecordCount(totCnt); - - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("addrList", addrList); - model.addAttribute("startKeyword",addrVO.getStartKeyword()); - model.addAttribute("userId", userId); - - return "/web/addr/AddrListAjax"; - } - - - - @RequestMapping("/web/mjon/addr/addrListforExcelAjax.do") - public String AddrListforExcel(HttpServletRequest request, ModelMap model, - @ModelAttribute("searchVO") AddrVO addrVO) throws Exception { - - return "/web/addr/addrListforExcel"; - } - /** - * 사용자 주소록 중복 리스트 Ajax - * @param request - * @param model - * @param addrVO - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/addr/selectAddrDupliAjax.do") - public String selectAddrDupliAjax(HttpServletRequest request, ModelMap model, - @ModelAttribute("searchVO") AddrVO addrVO) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - } - - if(addrVO.getPageUnit() != 10) { - addrVO.setPageUnit(addrVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(addrVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(addrVO.getPageUnit()); - paginationInfo.setPageSize(addrVO.getPageSize()); - - addrVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - addrVO.setLastIndex(paginationInfo.getLastRecordIndex()); - addrVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrVO.setSearchSortCnd("addrId"); - addrVO.setSearchSortOrd("asc"); - } - - List addrDupliList = addrService.selectAddrDupliListByAll(addrVO); - - int totCnt = 0; - if(addrDupliList.size() > 0) { - totCnt = addrDupliList.get(0).getTotcnt(); - } - - paginationInfo.setTotalRecordCount(totCnt); - - model.addAttribute("paginationInfo2", paginationInfo); - model.addAttribute("addrDupliList", addrDupliList); - - return "/web/addr/AddrListDupliAjax"; - } - - @RequestMapping("/web/mjon/addr/selectAddrPrint.do") - public String selectAddrPrint(@RequestParam("cellCheck2") String[] cellCheck, - AddrVO addrVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - } - - addrVO.setRecordCountPerPage(100000); - addrVO.setFirstIndex(0); - - List addrList = addrService.selectAddrList(addrVO); - - String chk = ""; - - for(int i=0; i 0) { - mv.addObject("result","dupl"); - }else { - if(userId != "") { - try { - addrService.insertAddr(addrVO); - mv.addObject("result","success"); - } catch (Exception e) { - e.printStackTrace(); - mv.addObject("result","fail"); - } - - } else { - mv.addObject("result","fail"); - } - } - return mv; - } - - - /** - * 주소록 다중수정 ajax - * @param addrCheck - * @param request - * @param addrVO - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/addr/updateAddrListAjax.do") - public ModelAndView updateAddrListAjax(HttpServletRequest request, - AddrVO addrVO, Model model - ,RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrVO.setLastUpdusrId(user.getId()); - addrVO.setMberId(user.getId()); - - int listSize = addrVO.getAddrIds().length; - - for(int i=0; i 주소록그룹 수정 추가 - if (addrVO.getAddrGrpIds()[i].equals("bookmark")) { - // 자주보내는 번호 - addrVO.setAddrGrpId("0"); - addrVO.setBookmark("Y"); - } - else { - addrVO.setAddrGrpId(addrVO.getAddrGrpIds()[i]); - addrVO.setBookmark("N"); - } - - addrVO.setAddrId(addrVO.getAddrIds()[i]); - - if(addrVO.getAddrPhones().length > 0) { - addrVO.setAddrPhoneNo(addrVO.getAddrPhones()[i]); - } - else { - addrVO.setAddrPhoneNo(null); - } - - if(addrVO.getAddrNms().length > 0) { - addrVO.setAddrNm(addrVO.getAddrNms()[i]); - } - else { - addrVO.setAddrNm(null); - } - - if(!addrVO.getAddrInfo1s()[i].equals(null) || !"".equals(addrVO.getAddrInfo1s()[i])) { - addrVO.setAddrInfo1(addrVO.getAddrInfo1s()[i]); - }else { - addrVO.setAddrInfo1(""); - } - - if(!addrVO.getAddrInfo2s()[i].equals(null) || !"".equals(addrVO.getAddrInfo2s()[i])) { - addrVO.setAddrInfo2(addrVO.getAddrInfo2s()[i]); - }else { - addrVO.setAddrInfo2(""); - } - - if(!addrVO.getAddrInfo3s()[i].equals(null) || !"".equals(addrVO.getAddrInfo3s()[i])) { - addrVO.setAddrInfo3(addrVO.getAddrInfo3s()[i]); - }else { - addrVO.setAddrInfo3(""); - } - - if(!addrVO.getAddrInfo4s()[i].equals(null) || !"".equals(addrVO.getAddrInfo4s()[i])) { - addrVO.setAddrInfo4(addrVO.getAddrInfo4s()[i]); - }else { - addrVO.setAddrInfo4(""); - } - - addrService.updateAddr(addrVO); - - modelAndView.addObject("result", "success"); - } catch (Exception e) { - e.printStackTrace(); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - } - return modelAndView; - } - - - /** - * 주소록 다중수정 ajax - * @param addrCheck - * @param request - * @param addrVO - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/addr/updateAddrAjax.do") - public ModelAndView updateAddrAjax(@RequestParam("addrCheck") String[] addrCheck, HttpServletRequest request, - AddrVO addrVO, Model model - ,RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrVO.setLastUpdusrId(user.getId()); - addrVO.setMberId(user.getId()); - - for(String id:addrCheck) { - try { - - if("0".equals (addrVO.getAddrGrpId())) { - addrVO.setBookmark("Y"); - } else if(addrVO.getAddrGrpId() != null && !"".equals(addrVO.getAddrGrpId())) { - addrVO.setBookmark("N"); - } - - addrVO.setAddrId(id); - addrService.updateMemoAddr(addrVO); - - modelAndView.addObject("result", "success"); - } catch (Exception e) { - e.printStackTrace(); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - } - - return modelAndView; - - } - - - /** - * 주소록 그룹이동 ajax - * @param addrCheck - * @param request - * @param addrVO - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/addr/updateAddrMoveGrpAjax.do") - public ModelAndView updateAddrMoveGrpAjax(@RequestParam("addrCheck") String[] addrCheck, - @RequestParam("addrPhoneNos") String[] addrPhoneNos, - HttpServletRequest request, - AddrVO addrVO, Model model, - RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrVO.setLastUpdusrId(user.getId()); - addrVO.setMberId(user.getId()); - - // 그룹미지정, 자주보내는 번호 구분처리 - if("0".equals (addrVO.getAddrGrpId())) { - // 그룹미지정 - addrVO.setBookmark("N"); - } - else if("bookmark".equals (addrVO.getAddrGrpId())) { - // 자주보내는 번호 - addrVO.setBookmark("Y"); - addrVO.setAddrGrpId("0"); - } - else if(addrVO.getAddrGrpId() != null && !"".equals(addrVO.getAddrGrpId())) { - addrVO.setBookmark("N"); - } - - /** - * 보내려는 그룹에 등록되어있는 전화번호를 변수에 담아둠 - */ - List addrPhoneList = addrService.selectPhoneNumInAddrGroup(addrVO); - - String phoneNos = ""; - for(int i=0; i addrPhoneList = addrService.selectPhoneNumInAddrGroup(addrVO); - - String phoneNos = ""; - for(int i=0; i addrIdList = addrVO.getAddrIdList(); - List tempList = new ArrayList(); - - for(String seqStr : addrIdList) { - - String seqId = seqStr.replace("[", ""); - seqId = seqId.replace("]", ""); - - tempList.add(seqId); - } - - addrVO.setAddrIdList(tempList); - - List resultList = addrService.selectAddrDataList(addrVO); - - - if(resultList == null) { - modelAndView.addObject("status", "emptyList"); - modelAndView.addObject("message", "가져온 주소록 목록이 없습니다."); - - }else { - - modelAndView.addObject("status", "success"); - modelAndView.addObject("resultList", resultList); - modelAndView.addObject("resultListCnt", resultList.size()); - - } - - return modelAndView; - } - - - - - //주소록 엑셀 다운로드 - @RequestMapping("/web/mjon/addr/addrExcelDownload.do") - public void addrExcelDownload(@RequestParam("cellCheck") String[] cellCheck, - AddrVO addrVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - addrVO.setRecordCountPerPage(100000); - addrVO.setFirstIndex(0); - - if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrVO.setSearchSortCnd("addrId"); - addrVO.setSearchSortOrd("asc"); - } - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - CellStyle styleHeader = wb.createCellStyle(); - styleHeader.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - styleHeader.setBorderLeft(CellStyle.BORDER_THIN); - styleHeader.setBorderRight(CellStyle.BORDER_THIN); - styleHeader.setBorderTop(CellStyle.BORDER_THIN); - - CellStyle styleList = wb.createCellStyle(); - - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - Cell cell = null; - Row row = null; - - String fileName ="주소록"; - - String sheetTitle = ""; - try{ - if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrVO.setSearchSortOrd("desc"); - } - addrVO.setMberId(loginVO.getId()); - List addrList = addrService.selectAddrList(addrVO); - { - // row, cell 개수 순서대로 증가용 필드 - int rowNumber = 0; - int celNumber = 0; - //화면 리스트 - sheetTitle = "주소록" ; //제목 - Sheet sheet = wb.createSheet(sheetTitle); - row = sheet.createRow(rowNumber++); - row = sheet.createRow(rowNumber++); //줄추가 - - //cell = row.createCell(celNumber++); - //cell.setCellValue("번호"); - //cell.setCellStyle(style); - - int y = 0; - for(String field : cellCheck) { - //셀 칼럼 크기 설정 - sheet.setColumnWidth(y, 4000); - - cell = row.createCell(celNumber++); - cell.setCellValue(addrVO.getHeaderName(field)); - cell.setCellStyle(styleHeader); - - y++; - } - - for(int i=0; i < addrList.size(); i++){ - row = sheet.createRow(rowNumber++); //줄추가 - celNumber = 0; - //cell = row.createCell(celNumber++); - //cell.setCellStyle(style); - //cell.setCellValue(i+1); //번호 - - for(String field : cellCheck) { - cell = row.createCell(celNumber++); - cell.setCellStyle(styleList); - cell.setCellValue(((AddrVO)addrList.get(i)).getFieldValue(field)); - } - } - } - - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - - - /** - * 주소록 대량등록 - 엑셀파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/addr/sendExelFilePhoneNumAjax.do") - @ResponseBody - public Object sendExelFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); - - //final Map files = multiRequest.getFileMap(); - List files = (List) multiRequest.getFiles("file0"); - - // 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx - int fileNameSplitCnt = 0; - - if(!files.isEmpty()) { - fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length; - //System.out.println("fileNameSplitCnt : " + fileNameSplitCnt); - - if (files.get(0).getSize() > 0 - && (files.get(0).getContentType().indexOf("spreadsheetml") > -1) - || files.get(0).getContentType().indexOf("ms-excel") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) { - - // 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("엑셀 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - String Ext = files.get(0).getOriginalFilename().split("[.]")[1]; - String errMessage = ""; - String cellValue = ""; - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - int errPhoneCnt = 0; - int errNameCnt = 0; - int errRep1Cnt = 0; - int errRep2Cnt = 0; - int errRep3Cnt = 0; - int errRep4Cnt = 0; - int errMemoCnt = 0; - - - //엑셀 확장자에 따른 처리 로직 분리 - if(Ext.equals("xls")) { - - HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); - HSSFSheet sheet = workbook.getSheetAt(0); - - if(sheet.getLastRowNum() > 20000) { // - errMessage = "2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - HSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - HSSFCell cell = null; - boolean errSts = true; - for(int j = 0 ; j < 7; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/info1/info2/info3/info4/메모 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - boolean nmChk = getNameRepLenChk("name", cellValue); - - if(nmChk && errSts) { - jm.put("name", cellValue); - }else { - errNameCnt++; - errSts = false; - break; - } - } - if(j == 1) { - // 문자열에서 숫자만 추출 - cellValue = getOnlyNumber(cellValue); - - //전화번호 - if(cellValue.matches(phoneRegExp) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errSts = false; - break; - } - } - if(j == 2) { - //치환1 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("info1", cellValue); - }else { - errRep1Cnt++; - errSts = false; - break; - } - } - if(j == 3) { - //치환2 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("info2", cellValue); - }else { - errRep2Cnt++; - errSts = false; - break; - } - } - if(j == 4) { - //치환3 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("info3", cellValue); - }else { - errRep3Cnt++; - errSts = false; - break; - } - } - if(j == 5) { - //치환4 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("info4", cellValue); - }else { - errRep4Cnt++; - errSts = false; - break; - } - } - if(j == 6) { - //메모 - boolean repChk = getNameRepLenChk("memo", cellValue); - - if(repChk && errSts) { - jm.put("memo", cellValue); - }else { - errMemoCnt++; - errSts = false; - break; - } - } - } - if(null != jm.get("phone")) { - json.add(jm); - } - - } - - int resultErrCnt = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt + errMemoCnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - jr.setMessage("올바르지 않은 휴대폰 번호가 "+ resultErrCnt +" 건 있습니다."); - }else { - jr.setMessage(""); - } - - }else { //확장자가 xlsx - - OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - opcPackage.close(); - - int totRowDataCnt = 0; - for(int r=1; r 20000) { // - if(totRowDataCnt > 20001) { - System.out.println("totRowDataCnt : " + totRowDataCnt); - errMessage = "2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - System.out.println("sheet.getLastRowNum() : " + sheet.getLastRowNum()); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - XSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(핸드폰부터 받아오기) - XSSFCell cell = null; - boolean errSts = true; - - for(int j = 0 ; j < 7; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5/메모 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - boolean nmChk = getNameRepLenChk("name", cellValue); - - if(nmChk && errSts) { - jm.put("name", cellValue); - }else { - errNameCnt++; - errSts = false; - break; - } - } - if(j == 1) { - // 문자열에서 숫자만 추출 - cellValue = getOnlyNumber(cellValue); - - //전화번호 - if(cellValue.matches(phoneRegExp) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errSts = false; - break; - } - } - if(j == 2) { - //치환1 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("info1", cellValue); - }else { - errRep1Cnt++; - errSts = false; - break; - } - } - if(j == 3) { - //치환2 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("info2", cellValue); - }else { - errRep2Cnt++; - errSts = false; - break; - } - } - if(j == 4) { - //치환3 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("info3", cellValue); - }else { - errRep3Cnt++; - errSts = false; - break; - } - } - if(j == 5) { - //치환4 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("info4", cellValue); - }else { - errRep4Cnt++; - errSts = false; - break; - } - } - if(j == 6) { - //메모 - boolean repChk = getNameRepLenChk("memo", cellValue); - - if(repChk && errSts) { - jm.put("memo", cellValue); - }else { - errMemoCnt++; - errSts = false; - break; - } - } - - } - if(null != jm.get("phone") && errSts) { - json.add(jm); - } - - } - - int resultErrCnt = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - jr.setMessage("올바르지 않은 휴대폰 번호가 "+ resultErrCnt +" 건 있습니다."); - }else { - jr.setMessage(""); - } - } //xlsx 처리 끝 - - } - else { - - String ttt = files.get(0).getSize() + "_" + - files.get(0).getContentType() + "_" + - files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1]; - - jr.setSuccess(false); - jr.setMessage("엑셀파일 인식오류."); - //jr.setMessage("엑셀파일 인식오류" + ttt); - } - } - else { - jr.setSuccess(false); - jr.setMessage("엑셀파일 인식오류."); - } - - return jr; - } - - - /** - * 주소록 대량등록 - TXT파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/addr/sendTxtFilePhoneNumAjax.do") - @ResponseBody - public Object sendTxtFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("TXT 파일만 업로드할 수 있습니다."); - - List files = (List) multiRequest.getFiles("file0"); - - if(!files.isEmpty()) { - - if (files.get(0).getSize() > 0 - || files.get(0).getOriginalFilename().split("[.]")[1].indexOf("txt") > -1) { - - // txt 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("txt 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(multiRequest.getFile("file0").getInputStream())); - - String line = null; - String[] splitedStr = null; - String[] tempStr = null; - int errPhoneCnt = 0; - int totRowNum = 0; - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - List> json = new ArrayList>(); - - //파일 읽어서 탭으로 구분해주기 - while ((line = reader.readLine()) != null) { - - HashMap jm = new HashMap<>(); - splitedStr = null; - tempStr = null; - - //txt 파일의 데이터가 탭 혹은 콤마로 구분되어 있는지 구분처리 - tempStr = line.split("\\,"); - if(tempStr.length > 1) { - splitedStr = line.split("\\,"); - }else { - splitedStr = line.split("\t");; - } - - for (int i = 0; i < splitedStr.length; i++) { - splitedStr[i] = splitedStr[i].trim(); - if(i == 0) { - //이름 - jm.put("name", splitedStr[i]); - } - if(i == 1) { - // 문자열에서 숫자만 추출 - splitedStr[i] = getOnlyNumber(splitedStr[i]); - - if(splitedStr[i].matches(phoneRegExp)) { - //휴대폰 번호 - jm.put("phone", splitedStr[i]); - }else { - errPhoneCnt++; - } - } - if(i == 2) { - //info1 - jm.put("info1", splitedStr[i]); - } - if(i == 3) { - //info2 - jm.put("info2", splitedStr[i]); - } - if(i == 4) { - //info3 - jm.put("info3", splitedStr[i]); - } - if(i == 5) { - //info4 - jm.put("info4", splitedStr[i]); - } - if(i == 6) { - //메모 - jm.put("memo", splitedStr[i]); - } - } - - if(jm.get("phone") != null) { - json.add(jm); - } - - totRowNum++; - } // end while - jr.setData(json); - jr.setSuccess(true); - - if (totRowNum > 20000) { - jr.setMessage("20000"); - } - else { - if(errPhoneCnt > 0) { - jr.setMessage("올바르지 않은 휴대폰 번호가 "+ errPhoneCnt +" 건 있습니다."); - }else { - jr.setMessage(""); - } - } - } - - } - - return jr; - } - - - /** - * 주소록 대량등록 저장 - * @param searchVO - * @param model - * @return "/web/mjon/addr/addrMassInsertByTempAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addr/addrMassInsertByTempAjax.do"}) - public ModelAndView addrMassInsertByTempAjax(@ModelAttribute("searchVO") AddrVO addrVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - String charset = "euc-kr"; - boolean isSuccess = true; - String msg = ""; - int resultCnt = 0; - int dupliCnt = 0; // 중복 데이터 수 - int errPhoneCnt = 0; - List addrMassDupliList = new ArrayList(); // 중복 휴대폰번호 - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - isSuccess = false; - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", "로그인 후 이용이 가능합니다."); - return modelAndView; - } - else { - addrVO.setMberId(userId); - } - - //회원별 주소록 전체 갯수 조회 - int addrBefAfterCnt = 0; - int addrBefCnt = addrService.selectAddrTotalCount(addrVO); - int addrNewCnt = addrVO.getPhoneList().length; //신규 추가할 주소록 갯수 - int sumAddrCnt = addrBefCnt + addrNewCnt; //기존 + 신규 주소록 합산 - - // 신규 주소록 여부 체크 - if (addrVO.getAddrGrpId().equals("NEW")) { - - AddrGroupVO addrGroupVO = new AddrGroupVO(); - addrGroupVO.setMberId(userId); - addrGroupVO.setAddrGrpNm(addrVO.getAddrGrpNm()); - // 정렬순서 - int nextOrderNumber = addrGroupService.selectMaxOrderNumber(addrGroupVO); - addrGroupVO.setGrpOrder(nextOrderNumber); - - addrGroupService.insertAddrGroup(addrGroupVO); - - // 신규 추가한 그룹아이디 - addrVO.setAddrGrpId(addrGroupVO.getAddrGrpId()); - } - - // 그룹미지정, 자주보내는 번호 구분처리 - if("bookmark".equals (addrVO.getAddrGrpId())) { - // 자주보내는 번호 - addrVO.setBookmark("Y"); - addrVO.setAddrGrpId("0"); - } - else { - addrVO.setBookmark("N"); - } - - // 2024.01.24 10만건 -> 50만건으로 증설 요청으로 인한 증설 - List addrDataInfo = new ArrayList(); - if(addrBefCnt < 500000) { // 기존 등록된 주소록이 10만건 미만이면 - - //받는사람 리스트 건수 체크해주기 - if(sumAddrCnt > 500000) { - isSuccess = false; - msg = "주소록은 총 50만개까지만 등록이 가능합니다."; - } - else { - for(int i=0; i < addrNewCnt; i++) { - AddrVO tempAddrVO = new AddrVO(); - - if(addrVO.getNameList().length > 0) { - if(addrVO.getNameList()[i].equals("-")) { - tempAddrVO.setAddrNm(null); - }else { - String tmpNm = addrVO.getNameList()[i].trim().replaceAll("§", ","); - int nmLen = tmpNm.getBytes(charset).length; - - if(nmLen >= 20) { - //isSuccess = false; - //msg = "이름 항목의 내용(\" " + tmpNm + " \")이 길이를 초과하여 입력되었습니다. 12글자 이하로 입력해 주세요."; - //break; - - tempAddrVO.setAddrNm(subStringBytes(addrVO.getNameList()[i].replaceAll("§", ","), 20, 2)); - }else { - tempAddrVO.setAddrNm(addrVO.getNameList()[i].trim().replaceAll("§", ",")); - } - - } - } - else { - tempAddrVO.setAddrNm(null); - } - - if(addrVO.getPhoneList().length > 0) { - if(addrVO.getPhoneList()[i].equals("-")) { - tempAddrVO.setAddrPhoneNo(null); - }else { - tempAddrVO.setAddrPhoneNo(addrVO.getPhoneList()[i].trim().replaceAll("§", ",")); - } - } - else { - tempAddrVO.setAddrPhoneNo(null); - } - - if(addrVO.getInfo1List().length > 0) { - if(addrVO.getInfo1List()[i].equals("-")) { - tempAddrVO.setAddrInfo1(null); - }else { - - String tmpInfo1 = addrVO.getInfo1List()[i].replaceAll("§", ","); - int info1Len = tmpInfo1.getBytes(charset).length; - - if(info1Len >= 40) { - //isSuccess = false; - //msg = "[*1*] 항목의 내용(\" " + tmpInfo1 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요."; - //break; - tempAddrVO.setAddrInfo1(subStringBytes(addrVO.getInfo1List()[i].replaceAll("§", ","), 40, 2)); - }else { - tempAddrVO.setAddrInfo1(addrVO.getInfo1List()[i].replaceAll("§", ",")); - } - } - } - else { - tempAddrVO.setAddrInfo1(null); - } - - if(addrVO.getInfo2List().length > 0) { - if(addrVO.getInfo2List()[i].equals("-")) { - tempAddrVO.setAddrInfo2(null); - }else { - String tmpInfo2 = addrVO.getInfo2List()[i].replaceAll("§", ","); - int info2Len = tmpInfo2.getBytes(charset).length; - - if(info2Len >= 40) { - //isSuccess = false; - //msg = "[*2*] 항목의 내용(\" " + tmpInfo2 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요."; - //break; - - tempAddrVO.setAddrInfo2(subStringBytes(addrVO.getInfo2List()[i].replaceAll("§", ","), 40, 2)); - }else { - tempAddrVO.setAddrInfo2(addrVO.getInfo2List()[i].replaceAll("§", ",")); - } - - } - } - else { - tempAddrVO.setAddrInfo2(null); - } - - if(addrVO.getInfo3List().length > 0) { - if(addrVO.getInfo3List()[i].equals("-")) { - tempAddrVO.setAddrInfo3(null); - }else { - String tmpInfo3 = addrVO.getInfo3List()[i].replaceAll("§", ","); - int info3Len = tmpInfo3.getBytes(charset).length; - - if(info3Len >= 40) { - //isSuccess = false; - //msg = "[*3*] 항목의 내용(\" " + tmpInfo3 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요."; - //break; - - tempAddrVO.setAddrInfo3(subStringBytes(addrVO.getInfo3List()[i].replaceAll("§", ","), 40, 2)); - }else { - tempAddrVO.setAddrInfo3(addrVO.getInfo3List()[i].replaceAll("§", ",")); - } - } - } - else { - tempAddrVO.setAddrInfo3(null); - } - - if(addrVO.getInfo4List().length > 0) { - if(addrVO.getInfo4List()[i].equals("-")) { - tempAddrVO.setAddrInfo4(null); - }else { - String tmpInfo4 = addrVO.getInfo4List()[i].replaceAll("§", ","); - int info4Len = tmpInfo4.getBytes(charset).length; - - if(info4Len >= 40) { - //isSuccess = false; - //msg = "[*4*] 항목의 내용(\" " + tmpInfo4 + " \")이 길이를 초과하여 입력되었습니다. 20글자 이하로 입력해 주세요."; - //break; - - tempAddrVO.setAddrInfo4(subStringBytes(addrVO.getInfo4List()[i].replaceAll("§", ","), 40, 2)); - }else { - tempAddrVO.setAddrInfo4(addrVO.getInfo4List()[i].replaceAll("§", ",")); - } - } - } - else { - tempAddrVO.setAddrInfo4(null); - } - - if(addrVO.getMemoList().length > 0) { - if(addrVO.getMemoList()[i].equals("-")) { - tempAddrVO.setAddrComment(null); - }else { - String tmpComment = addrVO.getMemoList()[i].replaceAll("§", ","); - int commLen = tmpComment.getBytes(charset).length; - - if(commLen >= 200) { - //isSuccess = false; - //msg = "메모 항목의 내용(\" " + tmpComment + " \")이 길이를 초과하여 입력되었습니다. 100글자 이하로 입력해 주세요."; - //break; - - tempAddrVO.setAddrComment(subStringBytes(addrVO.getMemoList()[i].replaceAll("§", ","), 200, 2)); - }else { - tempAddrVO.setAddrComment(addrVO.getMemoList()[i].replaceAll("§", ",")); - } - } - } - else { - tempAddrVO.setAddrComment(null); - } - - tempAddrVO.setMberId(userId); - tempAddrVO.setFrstRegisterId(userId); - tempAddrVO.setAddrGrpId(addrVO.getAddrGrpId()); // 그룹 지정 - - // 그룹미지정, 자주보내는 번호 구분처리 - if("Y".equals (addrVO.getBookmark())) { - // 자주보내는 번호 - tempAddrVO.setBookmark("Y"); - tempAddrVO.setAddrGrpId("0"); - } - else { - tempAddrVO.setBookmark("N"); - } - - AddrVO addrVO2 = new AddrVO(); - addrVO2.setMberId(userId); - addrVO2.setAddrGrpId(addrVO.getAddrGrpId()); // 그룹 지정 - addrVO2.setAddrPhoneNo(addrVO.getPhoneList()[i]); // 연락처 - - // 휴대폰 유효성 검사 - boolean isPhoneNoErr = true; - if(addrVO.getPhoneList()[i].matches(phoneRegExp)) { - isPhoneNoErr = false; // 유효성 통과 - }else { - errPhoneCnt++; - } - - //int usedCnt = addrService.selectDuplAddrCnt(addrVO2); - if(isPhoneNoErr == false) { - //주소록 리스트에 데이터 추가해 주기 - addrDataInfo.add(tempAddrVO); - } - } - - System.out.println("======================================================"); - System.out.println("+++++++++++++++++++++++++ isSuccess ::: "+isSuccess); - System.out.println("======================================================"); - - //주소록에 데이터 추가해 주기 - if (isSuccess == true && addrDataInfo.size() > 0) { - // 주소록 대량등록 By Temp 주소록 All - resultCnt = addrService.insertAddrByTempAddrAll(addrDataInfo, addrVO); - - addrBefAfterCnt = addrService.selectAddrTotalCount(addrVO); - - addrMassDupliList = addrService.selectTempAddrDupliList(addrVO); - - resultCnt = addrBefAfterCnt - addrBefCnt; - dupliCnt = addrNewCnt - resultCnt; - } - } - } - else { - isSuccess = false; - msg = "주소록은 총 50만개까지만 등록이 가능합니다."; - } - } - catch(Exception e) { - - isSuccess = false; - msg = "주소록 저장에 오류가 발생하였습니다. 시스템 관리자에게 문의 바랍니다."; - System.out.println("=============================================="); - System.out.println("+++++++++++++++++++ addrMassInsertByTempAjax Error ::: "+e.getMessage()); - System.out.println("=============================================="); - - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("dupliCnt", dupliCnt); - modelAndView.addObject("errPhoneCnt", errPhoneCnt); - modelAndView.addObject("addrMassDupliList", addrMassDupliList); - - return modelAndView; - } - - /* 바이트 자르기 - UTF-8일 경우 - subStringBytes("블라블라블라라", 10, 3); - EUC-KR일 경우 - subStringBytes("블라블라블라라", 10, 2); - */ - public String subStringBytes(String str, int byteLength, int sizePerLetter) { - int retLength = 0; - int tempSize = 0; - int asc; - if (str == null || "".equals(str) || "null".equals(str)) { - str = ""; - } - - int length = str.length(); - - for (int i = 1; i <= length; i++) { - asc = (int) str.charAt(i - 1); - if (asc > 127) { - if (byteLength >= tempSize + sizePerLetter) { - tempSize += sizePerLetter; - retLength++; - } - } else { - if (byteLength > tempSize) { - tempSize++; - retLength++; - } - } - } - - return str.substring(0, retLength); - } - - - - /** - * 주소록 그룹 목록 - * @param searchVO - * @param model - * @return "/web/mjon/addr/addrGroupListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addr/addrGroupListAjax.do"}) - public ModelAndView addrGroupListAjax(@ModelAttribute("searchVO") AddrGroupVO addrGroupVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - List addrGroupList = null; - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrGroupVO.setMberId(userId); - - if(addrGroupVO.getPageUnit() != 10) { - addrGroupVO.setPageUnit(addrGroupVO.getPageUnit()); - } - - if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrGroupVO.setSearchSortCnd("grpOrder"); - addrGroupVO.setSearchSortOrd("desc"); - } - - addrGroupVO.setSiteId("web"); - addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - model.addAttribute("addrGroupList", addrGroupList); - - return modelAndView; - } - - /** - * 주소록 그룹별 중복 연락처 목록 - * @param searchVO - * @param model - * @return "/web/mjon/addr/addrDupliListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addr/addrDupliListAjax.do"}) - public ModelAndView addrDupliListAjax(@ModelAttribute("searchVO") AddrVO addrVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - List addrDupliList = null; - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - - // 주소록 그룹별 중복 연락처 목록 - addrDupliList = addrService.selectAddrDupliList(addrVO); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - model.addAttribute("addrDupliList", addrDupliList); - - return modelAndView; - } - - /** - * 주소록 그룹별 중복 연락처 삭제 - * @param searchVO - * @param model - * @return "/web/mjon/addr/deleteAddrDupliList.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addr/deleteAddrDupliListAjax.do"}) - public ModelAndView deleteAddrDupliListAjax(@ModelAttribute("searchVO") AddrVO addrVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - - // 주소록 그룹별 중복 연락처 삭제 - addrService.deleteAddrDupliList(addrVO); - } - else { - isSuccess = false; - msg = "로그인후 이용하세요."; - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - - /** - * 주소록 그룹별 중복 연락처 삭제 - * @param searchVO - * @param model - * @return "/web/mjon/addr/deleteAddrByAllDupliListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addr/deleteAddrByAllDupliListAjax.do"}) - public ModelAndView deleteAddrByAllDupliListAjax(@ModelAttribute("searchVO") AddrVO addrVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - - // 주소록 그룹별 중복 연락처 삭제 - addrService.deleteAddrDupliListByAll(addrVO); - } - else { - isSuccess = false; - msg = "로그인후 이용하세요."; - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - - @RequestMapping(value = {"/web/mjon/addr/insertByAddrGrpDataAndAddrDataAjax.do"}) - public ResponseEntity insertByAddrGrpDataAndAddrDataAjax(@RequestBody AddrVO addrVO) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == null) { - if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); - } - - addrVO.setMberId(userId); - - - return ResponseEntity.ok().body(addrService.insertByAddrGrpDataAndAddrDataAjax(addrVO)); - } - - @RequestMapping(value = {"/web/mjon/addr/deleteAddrNoDataAjax.do"}) - public ResponseEntity deleteAddrNoDataAjax(@RequestBody AddrVO addrVO) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == null) { - if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); - } - - addrVO.setMberId(userId); - - return ResponseEntity.ok().body(addrService.deleteAddrNoDataAjax(addrVO)); - } - - - - - public boolean getNameRepLenChk(String type, String value) { - - boolean rtnValue = true; - - // JSPark 2023.02.17 : 글자길이체크 주석처리 => 저장시 절삭하기 때문 - /* - if(type.equals("name")) { - - String tmpNm = value; - int nmLen = tmpNm.length(); - - if(nmLen > 12) { - - rtnValue = false; - - } - - }else if(type.equals("rep")) { - - String tmpRep = value; - int repLen = tmpRep.length(); - - if(repLen > 20) { - - rtnValue = false; - - } - - }else if(type.equals("memo")) { - - String tmpRep = value; - int repLen = tmpRep.length(); - - if(repLen > 120) { - - rtnValue = false; - - } - - } - */ - - return rtnValue; - } - - // 문자열에서 숫자만 추출 - public String getOnlyNumber(String str) { - //String str = "aaa1234, ^&*2233pp"; - - String intStr = str.replaceAll("[^\\d]", ""); - - return intStr; - } } \ No newline at end of file diff --git a/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java b/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java index 11bda37..423b57f 100644 --- a/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java +++ b/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java @@ -1,20 +1,15 @@ package itn.let.mjo.addr.web; import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @@ -24,18 +19,11 @@ import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.cmm.util.RedirectUrlMaker; -import itn.com.utl.fcc.service.EgovStringUtil; import itn.let.mjo.addr.service.AddrGroupService; import itn.let.mjo.addr.service.AddrGroupVO; -import itn.let.mjo.addr.service.AddrService; import itn.let.mjo.addr.service.AddrVO; import itn.let.mjo.msgsent.service.MjonMsgSentService; import itn.let.mjo.msgsent.service.MjonMsgSentVO; -import itn.let.mjo.pay.service.KmcVO; -import itn.let.uat.uia.service.AuthCertVO; -import itn.let.uat.uia.web.KmcCertChecker; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.MberManageVO; /** * 주소록 그룹에 관한 controller 클래스를 정의한다. @@ -61,17 +49,10 @@ public class AddrGroupController { @Resource (name = "AddrGroupService") private AddrGroupService addrGroupService; - @Resource (name = "AddrService") - private AddrService addrService; - /** EgovMessageSource */ @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; - /** mberManageService */ - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - /** * 주소록 그룹 리스트 * @param addrGroupVO @@ -147,136 +128,6 @@ public class AddrGroupController { } - - - /** - * 주소록 그룹 리스트 - * @param addrGroupVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/addr/selectAddrGroupListAjax.do") - public String selectAddrGroupListAjax(@ModelAttribute("searchVO") AddrGroupVO addrGroupVO, AddrVO addrVO - ,ModelMap model, RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrGroupVO.setMberId(userId); - addrVO.setMberId(userId); - } else { - redirectAttributes.addFlashAttribute("fail", true); - return "redirect:/web/user/login/login.do"; - } - - - if(addrGroupVO.getPageUnit() != 10) { - addrGroupVO.setPageUnit(addrGroupVO.getPageUnit()); - } - - if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrGroupVO.setSearchSortCnd("grpOrder"); - addrGroupVO.setSearchSortOrd("desc"); - } - - addrGroupVO.setSiteId("web"); - List addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO); - - -// * JSPark 2023.08.30 => Ajax 로 변경 - //회원별 주소록 전체 갯수 조회 -// int addrTotalCount = addrService.selectAddrTotalCount(addrVO); - addrVO.setType("bookmark"); - List addrBookmarkList = addrService.selectAddrBasicGrpList(addrVO); - - addrVO.setType("noGrp"); - List addrNoGrpList = addrService.selectAddrBasicGrpList(addrVO); - - int totalGrpCount = addrGroupList.stream() - .mapToInt(group -> { - String grpCountStr = group.getGrpCount(); - if (grpCountStr != null && !grpCountStr.isEmpty()) { - try { - return Integer.parseInt(grpCountStr); - } catch (NumberFormatException e) { - // 파싱에 실패한 경우 0을 반환하거나 예외 처리를 합니다. - return 0; - } - } else { - return 0; - } - }) - .sum(); - - // 결과 출력 - - System.out.println("totalGrpCount :: "+ totalGrpCount); - - int addrTotalCount = (addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0) - + (addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0) - + totalGrpCount - ; - - model.addAttribute("addrTotalCount", addrTotalCount); - model.addAttribute("addrBookmarkCnt", addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0); - model.addAttribute("addrNoGrpCnt", addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0); - - model.addAttribute("addrGroupList", addrGroupList); - model.addAttribute("userId", userId); - - return "/web/addr/AddrGroupListAjax"; - - } - - - /** - * 주소록 합치기 팝업 리스트 - * @param addrGroupVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/addr/selectAddrGroupMergetAjax.do") - public ModelAndView selectAddrGroupMergetAjax(@ModelAttribute("searchVO") AddrGroupVO addrGroupVO, AddrVO addrVO - , ModelMap model) throws Exception { - - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrGroupVO.setMberId(userId); - addrVO.setMberId(userId); - } - - if(addrGroupVO.getPageUnit() != 10) { - addrGroupVO.setPageUnit(addrGroupVO.getPageUnit()); - } - - if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrGroupVO.setSearchSortCnd("addrGrpId"); - addrGroupVO.setSearchSortOrd("desc"); - } - - addrGroupVO.setSiteId("web"); - List addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO); - - model.addAttribute("addrGroupList", addrGroupList); - modelAndView.addObject("status", "success"); - - return modelAndView; - - } - - - /** * 주소록 그룹 등록 페이지 이동 * @param addrGroupVO @@ -290,8 +141,6 @@ public class AddrGroupController { model.addAttribute("addrGroupVO", addrGroupVO); return "/uss/ion/addr/AddrGroupRegist"; } - - /** * 주소록 그룹 등록 로직 @@ -333,233 +182,6 @@ public class AddrGroupController { return redirectUrlMaker.getRedirectUrl(); } - - /** - * 주소록 그룹 등록 로직 (ajax) - * @param addrGroupVO - * @param request - * @return - * @throws Exception - */ - @RequestMapping("/web/addr/insertAddrGroupAjax.do") - public ModelAndView insertAddrGroup(HttpServletRequest request, ModelMap model, - AddrGroupVO addrGroupVO - ) throws Exception { - ModelAndView mv = new ModelAndView(); - mv.setViewName("jsonView"); - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - addrGroupVO.setMberId(userId); - - int usedCnt = addrGroupService.selectDuplAddrGroupCnt(addrGroupVO); - if(usedCnt > 0) { - mv.addObject("result","dupl"); - }else { - if(userId != "") { - try { - addrGroupService.insertAddrGroup(addrGroupVO); - mv.addObject("result","success"); - } catch (Exception e) { - e.printStackTrace(); - mv.addObject("result","fail"); - } - } else { - mv.addObject("result","fail"); - } - } - return mv; - } - - /** - * 주소록 그룹 중복체크 로직 (ajax) - * @param addrGroupVO - * @param request - * @return - * @throws Exception - */ - @RequestMapping("/web/addr/getAddrGroupDuplCheckAjax.do") - public ModelAndView getAddrGroupDuplCheckAjax(HttpServletRequest request, ModelMap model, - AddrGroupVO addrGroupVO - ) throws Exception { - System.out.println(" :: /web/addr/getAddrGroupDuplCheckAjax.do :: "); - System.out.println(" :: /web/addr/getAddrGroupDuplCheckAjax.do :: "); - System.out.println(" :: /web/addr/getAddrGroupDuplCheckAjax.do :: "); - System.out.println(" :: addrGrpNm :: "+ addrGroupVO.getAddrGrpNm()); - - ModelAndView mv = new ModelAndView(); - mv.setViewName("jsonView"); - - boolean isSuccess = true; - boolean isDupl = false; - String msg = ""; - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - try { - addrGroupVO.setMberId(userId); - - int usedCnt = addrGroupService.selectDuplAddrGroupCnt(addrGroupVO); - if(usedCnt > 0) { - isDupl = true; - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - mv.addObject("isSuccess", isSuccess); - mv.addObject("isDupl", isDupl); - mv.addObject("msg", msg); - - return mv; - } - - - /** - * 주소록 등록 페이지(ajax) - * @param addrGroupVO - * @param redirectAttributes - * @param request - * @return - * @throws Exception - */ - @RequestMapping("/web/addr/selectAddrGroupAjax.do") - public String selectAddrGroupAjax(HttpServletRequest request, ModelMap model, - AddrGroupVO addrGroupVO, AddrVO addrVO, RedirectAttributes redirectAttributes - ) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrGroupVO.setMberId(userId); - addrVO.setMberId(userId); - } else { - redirectAttributes.addFlashAttribute("fail", true); - return "redirect:/web/user/login/login.do"; - } - - if(addrGroupVO.getPageUnit() != 10) { - addrGroupVO.setPageUnit(addrGroupVO.getPageUnit()); - } - - addrGroupVO.setSiteId("web"); - List addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO); - - model.addAttribute("addrGroupList", addrGroupList); - - - return "/web/addr/AddrGroupSelectAjax"; - } - - // 주소록 그룹 카운트 조회(전체) Ajax - @RequestMapping("/web/addr/selectAddrGroupTotCntAjax.do") - public ModelAndView selectAddrGroupTotCntAjax(HttpServletRequest request, - @ModelAttribute("searchVO") AddrGroupVO addrGroupVO - , Model model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - int addrTotCnt = 0; - - try{ - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrGroupVO.setMberId(user.getId()); - - addrGroupVO = addrGroupService.selectAddrGroupTotCnt(addrGroupVO); - if (addrGroupVO != null) { - addrTotCnt = addrGroupVO.getAddrTotCnt(); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - System.out.println("addrTotCnt : "+ addrTotCnt); - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - modelAndView.addObject("addrTotCnt", addrTotCnt); - - return modelAndView; - } - - // 주소록 그룹 카운트 조회(전체) Ajax - @RequestMapping("/web/addr/selectAddrGroupNogrpCntAjax.do") - public ModelAndView selectAddrGroupNogrpCntAjax(HttpServletRequest request, - @ModelAttribute("searchVO") AddrGroupVO addrGroupVO - , Model model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - int nogrpCnt = 0; - - try{ - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrGroupVO.setMberId(user.getId()); - - addrGroupVO = addrGroupService.selectAddrGroupNogrpCnt(addrGroupVO); - if (addrGroupVO != null) { - nogrpCnt = addrGroupVO.getNogrpCnt(); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - modelAndView.addObject("nogrpCnt", nogrpCnt); - - return modelAndView; - } - - // 주소록 그룹 카운트 조회(전체) Ajax - @RequestMapping("/web/addr/selectAddrGroupBookmarkCntAjax.do") - public ModelAndView selectAddrGroupBookmarkCntAjax(HttpServletRequest request, - @ModelAttribute("searchVO") AddrGroupVO addrGroupVO - , Model model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - int bookmarkCnt = 0; - - try{ - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrGroupVO.setMberId(user.getId()); - - addrGroupVO = addrGroupService.selectAddrGroupBookmarkCnt(addrGroupVO); - if (addrGroupVO != null) { - bookmarkCnt = addrGroupVO.getBookmarkCnt(); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - modelAndView.addObject("bookmarkCnt", bookmarkCnt); - - return modelAndView; - } - /** * 주소록 그룹 수정 로직 * @@ -609,69 +231,6 @@ public class AddrGroupController { } - - /** - * 주소록 그룹 수정 로직 Ajax - * - * @param request - * @param addrGroupVO - * @param redirectAttributes - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/addr/updateAddrGroupAjax.do") - public ModelAndView updateAddrGroupAjax(@RequestParam("addrGrpNms") String[] addrGrpNms, - @RequestParam("addrGrpIds") String[] addrGrpIds, - HttpServletRequest request, - @ModelAttribute("searchVO") AddrGroupVO addrGroupVO, Model model - ,RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrGroupVO.setLastUpdusrId(user.getId()); - addrGroupVO.setMberId(user.getId()); - - boolean dupl = false; - for (int i=0; i 0) { - modelAndView.addObject("result", "dupl"); - }else { - addrVO.setMberId(user.getId()); - addrVO.setLastUpdusrId(user.getId()); - - try { - addrGroupService.mergeAddrGroupAjax(addrGroupVO, addrVO); - - modelAndView.addObject("result", "success"); - } catch (Exception e) { - e.printStackTrace(); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - } - - - return modelAndView; - - } - - - - - /** - * 주소록 그룹 복사하기 - * @param addrGrpNewNm - * @param request - * @param addrGroupVO - * @param addrVO - * @param model - * @param redirectAttributes - * @return - * @throws Exception - */ - - @RequestMapping("/web/addr/copyAddrGroupAjax.do") - public ModelAndView copyAddrGroupAjax(@RequestParam("addrGrpNewNm") String addrGrpNewNm - ,HttpServletRequest request - ,@ModelAttribute("searchVO") AddrGroupVO addrGroupVO - ,AddrVO addrVO - ,Model model - ,RedirectAttributes redirectAttributes - ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - addrGroupVO.setLastUpdusrId(user.getId()); - addrGroupVO.setMberId(user.getId()); - addrGroupVO.setFrstRegisterId(user.getId()); - addrGroupVO.setAddrGrpNm(addrGrpNewNm); - - int usedCnt = addrGroupService.selectDuplAddrGroupCnt(addrGroupVO); - - if(usedCnt > 0) { - modelAndView.addObject("result", "dupl"); - }else { - addrVO.setMberId(user.getId()); - addrVO.setLastUpdusrId(user.getId()); - - try { - addrGroupService.copyAddrGroupAjax(addrGroupVO, addrVO); - - modelAndView.addObject("result", "success"); - } catch (Exception e) { - e.printStackTrace(); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - } - - - return modelAndView; - - } - - - // 주소록 내보내기 kmc본인인증 - @RequestMapping(value = "/web/addr/kmcPopupAddrSubmitPramAjax.do") - public ModelAndView kmcPopupIdPwPramAjax(@ModelAttribute("mberManageVO") MberManageVO mberManageVO, - HttpServletRequest request) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - KmcCertChecker kmcCertCheck = new KmcCertChecker(); - - // mberId null일경우 ""로 - mberManageVO.setMberId(EgovStringUtil.isNullToString(mberManageVO.getMberId())); - - // kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://219.240.88.15:8095"; - } else { - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } - - AuthCertVO certVO = kmcCertCheck.authCertCheckEight(serverNm + "/web/cop/kmc/authRequestAddrSubmitAjax.do", - mberManageVO.getMberId()); - - modelAndView.addObject("tr_cert", certVO.getTr_cert()); - modelAndView.addObject("tr_url", certVO.getTr_url()); - modelAndView.addObject("tr_add", certVO.getTr_add()); - - modelAndView.addObject("result", "success"); - - } catch (Exception e) { - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - } - - return modelAndView; - } - - /** - * 아이디 비밀번호 찾기 kmc 본인인증(PG사 전송화면) - * - * @param - * @return - * @throws Exception - */ - - @RequestMapping("/web/cop/kmc/authRequestAddrSubmitAjax.do") - public String authRequestFindIdPwAjax(HttpServletRequest request, ModelMap model, - @RequestParam Map commandMap, @ModelAttribute("searchVO") KmcVO kmcVO, - RedirectAttributes redirectAttributes) throws Exception { - - String errMessage = ""; // 에러메세지 - - String rec_cert = ""; // 결과값(암호화) - String certNum = ""; // certNum - - rec_cert = request.getParameter("rec_cert").trim(); - certNum = request.getParameter("certNum").trim(); - - kmcVO.setRecCert(rec_cert); - kmcVO.setCertNum(certNum); - // 파라미터 유효성 검증 - if (rec_cert.length() == 0 || certNum.length() == 0) { - errMessage = "비정상"; - return returnPage(model, errMessage, kmcVO); - } - - // 변수선언 - // -------------------------------------------------------------------------------------------------------- - String k_certNum = ""; // 파라미터로 수신한 요청번호 - k_certNum = certNum; - String date = ""; // 요청일시 - String CI = ""; // 연계정보(CI) - String DI = ""; // 중복가입확인정보(DI) - String phoneNo = ""; // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - String birthDay = ""; // 생년월일 - String gender = ""; // 성별 - String nation = ""; // 내국인 - String name = ""; // 성명 - String M_name = ""; // 미성년자 성명 - String M_birthDay = ""; // 미성년자 생년월일 - String M_Gender = ""; // 미성년자 성별 - String M_nation = ""; // 미성년자 내외국인 - String result = ""; // 결과값 - - String certMet = ""; // 인증방법 - String ip = ""; // ip주소 - String plusInfo = ""; - - String encPara = ""; - String encMsg1 = ""; - String encMsg2 = ""; - String msgChk = ""; - - com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager(); - - // 02. 1차 복호화 - // 수신된 certNum를 이용하여 복호화 - rec_cert = seed.getDec(rec_cert, k_certNum); - - // 03. 1차 파싱 - int inf1 = rec_cert.indexOf("/", 0); - int inf2 = rec_cert.indexOf("/", inf1 + 1); - - encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터 - encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값 - - // 04. 위변조 검증 - encMsg2 = seed.getMsg(encPara); - kmcVO.setEncMsg2(encMsg2); - if (encMsg2.equals(encMsg1)) { - msgChk = "Y"; - } - - if (!"Y".equals(msgChk)) { - errMessage = "비정상접근입니다."; - return returnPage(model, errMessage, kmcVO); - } - - // 05. 2차 복호화 - rec_cert = seed.getDec(encPara, k_certNum); - kmcVO.setRecCert(rec_cert); - // 06. 2차 파싱 - int info1 = rec_cert.indexOf("/", 0); - int info2 = rec_cert.indexOf("/", info1 + 1); - int info3 = rec_cert.indexOf("/", info2 + 1); - int info4 = rec_cert.indexOf("/", info3 + 1); - int info5 = rec_cert.indexOf("/", info4 + 1); - int info6 = rec_cert.indexOf("/", info5 + 1); - int info7 = rec_cert.indexOf("/", info6 + 1); - int info8 = rec_cert.indexOf("/", info7 + 1); - int info9 = rec_cert.indexOf("/", info8 + 1); - int info10 = rec_cert.indexOf("/", info9 + 1); - int info11 = rec_cert.indexOf("/", info10 + 1); - int info12 = rec_cert.indexOf("/", info11 + 1); - int info13 = rec_cert.indexOf("/", info12 + 1); - int info14 = rec_cert.indexOf("/", info13 + 1); - int info15 = rec_cert.indexOf("/", info14 + 1); - int info16 = rec_cert.indexOf("/", info15 + 1); - int info17 = rec_cert.indexOf("/", info16 + 1); - int info18 = rec_cert.indexOf("/", info17 + 1); - - certNum = rec_cert.substring(0, info1); - kmcVO.setCertNum(certNum); - date = rec_cert.substring(info1 + 1, info2); - kmcVO.setDate(date); - CI = rec_cert.substring(info2 + 1, info3); - kmcVO.setCI(CI); - phoneNo = rec_cert.substring(info3 + 1, info4); - kmcVO.setPhoneNo(phoneNo); - phoneCorp = rec_cert.substring(info4 + 1, info5); - kmcVO.setPhoneCorp(phoneCorp); - birthDay = rec_cert.substring(info5 + 1, info6); - kmcVO.setBirthDay(birthDay); - gender = rec_cert.substring(info6 + 1, info7); - kmcVO.setGender(gender); - nation = rec_cert.substring(info7 + 1, info8); - kmcVO.setNation(nation); - name = rec_cert.substring(info8 + 1, info9); - kmcVO.setName(name); - result = rec_cert.substring(info9 + 1, info10); - kmcVO.setResult(result); - certMet = rec_cert.substring(info10 + 1, info11); - kmcVO.setCertMet(certMet); - ip = rec_cert.substring(info11 + 1, info12); - kmcVO.setIp(ip); - M_name = rec_cert.substring(info12 + 1, info13); - kmcVO.setMName(M_name); - M_birthDay = rec_cert.substring(info13 + 1, info14); - kmcVO.setMBirthDay(M_birthDay); - M_Gender = rec_cert.substring(info14 + 1, info15); - kmcVO.setMGender(M_Gender); - M_nation = rec_cert.substring(info15 + 1, info16); - kmcVO.setMNation(M_nation); - plusInfo = rec_cert.substring(info16 + 1, info17); - kmcVO.setPlusInfo(plusInfo); - DI = rec_cert.substring(info17 + 1, info18); - kmcVO.setDI(DI); - - // 07. CI, DI 복호화 - CI = seed.getDec(CI, k_certNum); - kmcVO.setCI(CI); - DI = seed.getDec(DI, k_certNum); - kmcVO.setDI(DI); - - if ("Y".equals(result)) { - - } - - // -------------------------------------------------------------- - String regex = ""; - if (certNum.length() == 0 || certNum.length() > 40) { - errMessage = "요청번호 비정상."; - return returnPage(model, errMessage, kmcVO); - } - - regex = "[0-9]*"; - if (date.length() != 14 || !paramChk(regex, date)) { - errMessage = "요청일시"; - return returnPage(model, errMessage, kmcVO); - } - - regex = "[A-Z]*"; - if (certMet.length() != 1 || !paramChk(regex, certMet)) { - errMessage = "본인인증방법 비정상" + certMet; - return returnPage(model, errMessage, kmcVO); - } - - regex = "[0-9]*"; - if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo)) { - errMessage = "휴대폰번호 비정상"; - return returnPage(model, errMessage, kmcVO); - } - - regex = "[A-Z]*"; - if (phoneCorp.length() != 3 || !paramChk(regex, phoneCorp)) { - errMessage = "이동통신사 비정상"; - return returnPage(model, errMessage, kmcVO); - } - - regex = "[0-9]*"; - if (birthDay.length() != 8 || !paramChk(regex, birthDay)) { - errMessage = "생년월일 비정상"; - return returnPage(model, errMessage, kmcVO); - } - - regex = "[0-9]*"; - if (gender.length() != 1 || !paramChk(regex, gender)) { - errMessage = "성별 비정상"; - return returnPage(model, errMessage, kmcVO); - } - - regex = "[0-9]*"; - if (nation.length() != 1 || !paramChk(regex, nation)) { - errMessage = "내/외국인 비정상"; - return returnPage(model, errMessage, kmcVO); - } - - regex = "[\\sA-Za-z가-�R.,-]*"; - if (name.length() > 60 || !paramChk(regex, name)) { - errMessage = "성명 비정상"; - return returnPage(model, errMessage, kmcVO); - } - - regex = "[A-Z]*"; - if (result.length() != 1 || !paramChk(regex, result)) { - errMessage = "결과값 비정상"; - return returnPage(model, errMessage, kmcVO); - } - - regex = "[\\sA-Za-z가-?.,-]*"; - if (M_name.length() != 0) { - if (M_name.length() > 60 || !paramChk(regex, M_name)) { - errMessage = "미성년자 성명 비정상"; - return returnPage(model, errMessage, kmcVO); - } - } - - regex = "[0-9]*"; - if (M_birthDay.length() != 0) { - if (M_birthDay.length() != 8 || !paramChk(regex, M_birthDay)) { - errMessage = "미성년자 생년월일 비정상"; - return returnPage(model, errMessage, kmcVO); - } - } - - regex = "[0-9]*"; - if (M_Gender.length() != 0) { - if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) { - errMessage = "미성년자 성별 비정상"; - return returnPage(model, errMessage, kmcVO); - } - } - - regex = "[0-9]*"; - if (M_nation.length() != 0) { - if (M_nation.length() != 1 || !paramChk(regex, M_nation)) { - errMessage = "미성년자 내/외국인 비정상"; - return returnPage(model, errMessage, kmcVO); - } - } - - // KMC 본인인증 로그 - AuthCertVO certVO = new AuthCertVO(); - - certVO.setMberId(kmcVO.getPlusInfo()); - certVO.setCertNum(kmcVO.getCertNum()); - certVO.setCertDate(kmcVO.getDate()); - certVO.setCertDi(kmcVO.getDI()); - certVO.setCertPhone(kmcVO.getPhoneNo()); - certVO.setCertNation(kmcVO.getNation()); - certVO.setCertName(kmcVO.getName()); - certVO.setCertResult(kmcVO.getResult()); - certVO.setCertType("KMC_주소록내보내기"); - certVO.setCertIpaddr(kmcVO.getIp()); - certVO.setBirthDay(kmcVO.getBirthDay()); - certVO.setSexdstnCode(kmcVO.getGender()); - - // 디비 테이블에 저장하기 - mberManageService.insertCertInfoLog(certVO); - - model.addAttribute("kmcVO", kmcVO); - return "web/addr/AddrSubmitKmcReqPage"; - } - - - - - // 파라미터 유효성 검증 -------------------------------------------- - public Boolean paramChk(String patn, String param) { - Pattern pattern = Pattern.compile(patn); - Matcher matcher = pattern.matcher(param); - boolean b = matcher.matches(); - return b; - } - - // 파라미터 유효성 검증 -------------------------------------------- - public String returnPage(ModelMap model, String errMessage, KmcVO kmcVO) { - kmcVO.setErrMessage(errMessage); - model.addAttribute("kmcVO", kmcVO); - return "web/cop/nicepay/payRequestAjax"; - } - - } diff --git a/src/main/java/itn/let/mjo/addr/web/AddrRestController.java b/src/main/java/itn/let/mjo/addr/web/AddrRestController.java deleted file mode 100644 index 9c1c0b4..0000000 --- a/src/main/java/itn/let/mjo/addr/web/AddrRestController.java +++ /dev/null @@ -1,103 +0,0 @@ -package itn.let.mjo.addr.web; - -import java.nio.charset.Charset; -import java.time.LocalDateTime; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import javax.annotation.Resource; - -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.mail.service.StatusResponse; -import itn.let.mjo.addr.service.AddrGroupService; -import itn.let.mjo.addr.service.AddrGroupVO; -import itn.let.mjo.addr.service.AddrService; -import itn.let.mjo.addr.service.AddrVO; - -/** - * 주소록 관한 controller 클래스를 정의한다. - * @author ITN - * @since 2021.04.08 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2021.04.08  ITN          최초 생성
- *
- * 
- */ -@RestController -public class AddrRestController { - - - @Resource (name = "AddrService") - private AddrService addrService; - - @Resource (name = "AddrGroupService") - private AddrGroupService addrGroupService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - - - /** - * 주소록 대량등록 저장 - * @param searchVO - * @param model - * @return "/web/mjon/addr/addrMassInsertByTempAjax_advc.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addr/addrMassInsertByTempAjax_advc.do"}) - public ResponseEntity addrMassInsertByTempAjax_advc(@RequestBody List addrListVO - ,ModelMap model) throws Exception{ - - try { - - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - return ResponseEntity.ok( - new StatusResponse(HttpStatus.UNAUTHORIZED - , "로그인을 하셔야 이용 가능합니다." - , LocalDateTime.now() - ) - ); - } - - return ResponseEntity.ok().body(addrService.addrMassInsertByTempAjax_advc(addrListVO, userId)); - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - return ResponseEntity.ok().body(new StatusResponse( - HttpStatus.BAD_REQUEST - , "오류가 발생하였습니다." - , "" - )); - } -// return ResponseEntity.ok().body(addrService.addrMassInsertByTempAjax_advc(addrListVO, userId)); - } - - // - - -} \ No newline at end of file diff --git a/src/main/java/itn/let/mjo/addr/web/AddrTransHistController.java b/src/main/java/itn/let/mjo/addr/web/AddrTransHistController.java deleted file mode 100644 index f9dc42c..0000000 --- a/src/main/java/itn/let/mjo/addr/web/AddrTransHistController.java +++ /dev/null @@ -1,265 +0,0 @@ -package itn.let.mjo.addr.web; - -import java.io.OutputStream; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.LoginVO; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.mjo.addr.service.AddrTransHistService; -import itn.let.mjo.addr.service.AddrTransHistVO; - -@Controller -public class AddrTransHistController { - - @Resource (name = "AddrTransHistService") - private AddrTransHistService addrTransHistService; - - - /** - * 주소록 리스트 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/addr/selectAddrTransHistListAjax.do") - public String selectAddrTransHistListAjax(@ModelAttribute("searchVO") AddrTransHistVO addrTransHistVO - ,ModelMap model) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrTransHistVO.setSendMberId(userId); - } - - addrTransHistVO.setPageUnit(5); - - /** paging */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(addrTransHistVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(addrTransHistVO.getPageUnit()); - paginationInfo.setPageSize(addrTransHistVO.getPageSize()); - - addrTransHistVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - addrTransHistVO.setLastIndex(paginationInfo.getLastRecordIndex()); - addrTransHistVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - addrTransHistVO.setSearchSortCnd("sendDate"); - addrTransHistVO.setSearchSortOrd("desc"); - - - List addrTransHistList = addrTransHistService.selectAddrTransHistList(addrTransHistVO); - - int totCnt = 0; - if(addrTransHistList.size() > 0) { - totCnt = addrTransHistList.get(0).getTotcnt(); - } - - paginationInfo.setTotalRecordCount(totCnt); - model.addAttribute("addrTransHistList", addrTransHistList); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totCnt", totCnt); - - return "/web/addr/AddrTransHistListAjax"; - } - - - - - - /** - * 주소록 리스트 인쇄페이지 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/web/mjon/addr/selectAddrTransHistPrint.do") - public String selectAddrTransHistPrint(@ModelAttribute("searchVO") AddrTransHistVO addrTransHistVO - ,ModelMap model) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrTransHistVO.setSendMberId(userId); - } - addrTransHistVO.setRecordCountPerPage(100000); - addrTransHistVO.setFirstIndex(0); - - List addrTransHistList = addrTransHistService.selectAddrTransHistList(addrTransHistVO); - - model.addAttribute("addrTransHistList", addrTransHistList); - - return "/web/addr/AddrTransHistPrint"; - } - - - - - - - - //주소록 엑셀 다운로드 - @RequestMapping("/web/addr/addrTransHistExcelDownload.do") - public void addrTransHistExcelDownload(AddrTransHistVO addrTransHistVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - addrTransHistVO.setRecordCountPerPage(100000); - addrTransHistVO.setFirstIndex(0); - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - Cell cell = null; - Row row = null; - - String fileName ="주소록 내보내기 관리"; - - String sheetTitle = ""; - try{ - if("".equals(addrTransHistVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrTransHistVO.setSearchSortOrd("desc"); - } - addrTransHistVO.setSendMberId(loginVO.getId()); - List addrTransHistList = addrTransHistService.selectAddrTransHistList(addrTransHistVO); - - { - // row, cell 개수 순서대로 증가용 필드 - int rowNumber = 0; - int celNumber = 0; - //화면 리스트 - sheetTitle = "주소록" ; //제목 - Sheet sheet = wb.createSheet(sheetTitle); - row = sheet.createRow(rowNumber++); - - cell = row.createCell(celNumber++); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(celNumber++); - cell.setCellValue("보낸주소록(그룹)명"); - cell.setCellStyle(style); - - cell = row.createCell(celNumber++); - cell.setCellValue("보낸날짜"); - cell.setCellStyle(style); - - cell = row.createCell(celNumber++); - cell.setCellValue("수신날짜"); - cell.setCellStyle(style); - - cell = row.createCell(celNumber++); - cell.setCellValue("수신인ID"); - cell.setCellStyle(style); - - cell = row.createCell(celNumber++); - cell.setCellValue("수신상태"); - cell.setCellStyle(style); - - - for(int i=0; i < addrTransHistList.size(); i++){ - row = sheet.createRow(rowNumber++); //줄추가 - celNumber = 0; - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - cell.setCellValue(i+1); //번호 - - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - cell.setCellValue(((AddrTransHistVO)addrTransHistList.get(i)).getAddrGrpNm()); // 보낸주소록 그룹명 - - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - cell.setCellValue(((AddrTransHistVO)addrTransHistList.get(i)).getSendDate()); // 보낸주소록 그룹명 - - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - cell.setCellValue(((AddrTransHistVO)addrTransHistList.get(i)).getRecvDate()); // 수신날짜 - - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - cell.setCellValue(((AddrTransHistVO)addrTransHistList.get(i)).getRecvMberId()); // 수신인 - - cell = row.createCell(celNumber++); - cell.setCellStyle(style); - String recvStatus = ""; - if("Y".equals(((AddrTransHistVO)addrTransHistList.get(i)).getRecvStatus())) { - recvStatus = "수신완료"; - } else if("W".equals(((AddrTransHistVO)addrTransHistList.get(i)).getRecvStatus())) { - recvStatus = "수신대기"; - } else if("N".equals(((AddrTransHistVO)addrTransHistList.get(i)).getRecvStatus())) { - recvStatus = "수신거부"; - } else { - recvStatus = "-"; - } - cell.setCellValue(recvStatus); // 수신상태 - - } - - } - - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - -} diff --git a/src/main/java/itn/let/mjo/addragency/web/AddrAgencyController.java b/src/main/java/itn/let/mjo/addragency/web/AddrAgencyController.java index 5dfc064..4229cb5 100644 --- a/src/main/java/itn/let/mjo/addragency/web/AddrAgencyController.java +++ b/src/main/java/itn/let/mjo/addragency/web/AddrAgencyController.java @@ -30,8 +30,6 @@ import itn.com.cmm.util.RedirectUrlMaker; import itn.let.cop.bbs.service.Board; import itn.let.cop.bbs.service.BoardMasterVO; import itn.let.cop.bbs.service.EgovBBSAttributeManageService; -import itn.let.mjo.addr.service.AddrGroupService; -import itn.let.mjo.addr.service.AddrService; import itn.let.mjo.addragency.service.AddrAgencyService; import itn.let.mjo.addragency.service.AddrAgencyVO; import itn.let.mjo.mjocommon.MjonCommon; @@ -46,15 +44,6 @@ import itn.let.utl.user.service.MjonNoticeSendUtil; @Controller public class AddrAgencyController { -/* - @Resource(name = "MjonMsgSentService") - private MjonMsgSentService mjonMsgSentService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - */ - @Resource(name="addrAgencyService") private AddrAgencyService addrAgencyService; @@ -78,12 +67,6 @@ public class AddrAgencyController { @Resource(name="EgovFileMngService") private EgovFileMngService fileMngService; - - @Resource(name="AddrService") - private AddrService addrService; - - @Resource(name="AddrGroupService") - private AddrGroupService addrGroupService; /** 알림전송 Util */ @Resource(name = "mjonNoticeSendUtil") @@ -98,105 +81,6 @@ public class AddrAgencyController { private static final Logger logger = LoggerFactory.getLogger(AddrAgencyController.class); - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // USER - // - // - - /** - * 주소록 입력 대행(무료) 등록 및 리스트 화면 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - - @RequestMapping(value= {"/web/mjon/addragency/selectAddrAgencyList.do"}) - public String selectAddrAgencyListUser( - HttpServletRequest request - , @ModelAttribute("searchVO") AddrAgencyVO addrAgencyVO - , ModelMap model - , RedirectAttributes redirectAttributes - ) throws Exception { - - - logger.debug("AddrAgencyController-selectAddrAgencyListUser"); - - - //사용자 로그인 여부 체크 - String isLogin = checkLoginUtil.isUserLogin4PageMove(redirectAttributes); - if (!"Y".equals(isLogin)) return isLogin; - - - //login 정보 전달 - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - model.addAttribute("loginVO", loginVO); - - - //ajax를 위한 현재 URL 정보 전달 - addrAgencyVO.setUrl(request.getRequestURI()); - - - return "/web/addragency/AddrAgencyList"; - - } - - /** - * 주소록 입력 대행(무료) 등록 리스트 ajax 부분 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - - @RequestMapping(value= {"/web/mjon/addragency/selectAddrAgencyListAjax.do"}) - public String selectAddrAgencyListAjax( - HttpServletRequest request - , @ModelAttribute("searchVO") AddrAgencyVO addrAgencyVO - , ModelMap model - , RedirectAttributes redirectAttributes - ) throws Exception { - - logger.debug("AddrAgencyController-selectAddrAgencyListAjax"); - - //사용자 로그인 여부 체크 - String isLogin = checkLoginUtil.isLoginCheck4JsonPage(redirectAttributes); - if (!"Y".equals(isLogin)) return "/web/mjon/addragency/selectAddrAgencyList"; //호출하는 base 페이지로 return 해야 한다. - - - - //로그인 정보 획득 - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - - // pageing step1 - PaginationInfo paginationInfo = this.setPagingStep1(addrAgencyVO); - - - // pageing step2 - addrAgencyVO = this.setPagingStep2(addrAgencyVO, paginationInfo); - - - //대상 리스트 가져오기 - addrAgencyVO.setSiteNm(loginVO.getId()); - List addrList = addrAgencyService.selectList(addrAgencyVO); - - - // pageing step3 - paginationInfo = this.setPagingStep3(addrList, paginationInfo); - - - //대상 리스트, 페이징 정보 전달 - model.addAttribute("resultList", addrList); - model.addAttribute("paginationInfo", paginationInfo); - - - return "/web/addragency/AddrAgencyListAjax"; - - } - /** * (사용자)게시물을 등록한다. * @@ -206,12 +90,7 @@ public class AddrAgencyController { * @return * @throws Exception */ - @RequestMapping(value= - { - "/web/mjon/addragency/insertAddrAgencyAjax.do" - , "/uss/ion/addragency/insertAddrAgencyAjax.do" - } - ) + @RequestMapping(value={"/uss/ion/addragency/insertAddrAgencyAjax.do"}) public ModelAndView insertAddrAgencyAjax( HttpServletRequest request , @ModelAttribute("insertAgency") AddrAgencyVO addrAgencyVO @@ -484,165 +363,6 @@ public class AddrAgencyController { if ("N".equals(isLogin)) return modelAndView; try { - /* - //1. 주소록 그룹 등록하기 - AddrGroupVO addrGroupVO = new AddrGroupVO(); - addrGroupVO.setMberId(addrAgencyVO.getRegisterId()); - addrGroupVO.setAddrGrpNm(addrAgencyVO.getAddrGrpNm()); - - String addrNewGrpId = addrGroupService.insertAddrGroup(addrGroupVO); - - AddrVO addrVO = new AddrVO(); - //주소록 대행 신청자 아이디 SET - addrVO.setMberId(addrAgencyVO.getRegisterId()); - addrVO.setFrstRegisterId(loginVO.getUniqId()); - //새로 생성한 그룹 아이디 SET - addrVO.setAddrGrpId(addrNewGrpId); - - //2. 엑셀 업로드하기 - //final Map files = multiRequest.getFileMap(); - List files = (List) multiRequest.getFiles("file0"); - String errMessage = ""; - String cellValue = ""; - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[234567]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - int errPhoneCnt = 0; - - if(!files.isEmpty()) { - if (files.get(0).getSize() > 0 - && (files.get(0).getContentType().indexOf("spreadsheetml") > -1) - || files.get(0).getContentType().indexOf("ms-excel") > -1 - || files.get(0).getOriginalFilename().split("[.]")[1].indexOf("xlsx") > -1 - || files.get(0).getOriginalFilename().split("[.]")[1].indexOf("xls") > -1) { - - String Ext = files.get(0).getOriginalFilename().split("[.]")[1]; - - //엑셀 확장자에 따른 처리 로직 분리 - if(Ext.equals("xls")) { - - HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); - HSSFSheet sheet = workbook.getSheetAt(0); - - if(sheet.getLastRowNum() > 100000) { // - errMessage = "100000줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - modelAndView.addObject("errMessage", errMessage); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - HSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(핸드폰부터 받아오기) - HSSFCell cell = null; - for(int j=0 ; j<2; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //핸드폰/이름/info1/info2/info3/info4/메모 - // 핸드폰, 이름만 공백체크 - if(j <= 1 && (cell == null || !StringUtils.isNotBlank(cell.toString().trim()))) { //셀에 값이 없으면 - //System.out.println("Cell 데이터가 없습니다."); - errMessage = "Cell 데이터가 없습니다."; - - modelAndView.addObject("errMessage", errMessage); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //전화번호 - if(cellValue.matches(phoneRegExp)) { - addrVO.setAddrPhoneNo(cellValue); - }else { - errPhoneCnt++; - } - } - if(j == 1) addrVO.setAddrNm(cellValue); //이름 - - } - addrService.insertAddr(addrVO); - } - modelAndView.addObject("result", "success"); - - if(errPhoneCnt > 0) { - modelAndView.addObject("errPhoneCnt", errPhoneCnt); - } - }else { //확장자가 xlsx - - OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - opcPackage.close(); - - if(sheet.getLastRowNum() > 100000) { // - errMessage = "100000줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - modelAndView.addObject("errMessage", errMessage); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - for(int i=2; i 0) { - modelAndView.addObject("errPhoneCnt", errPhoneCnt); - } - } //xlsx 처리 끝 - } - } - */ - - //3. 주소록 무료대행 처리상태 변경 addrAgencyVO.setProcessStatus("E"); addrAgencyService.update(addrAgencyVO); diff --git a/src/main/java/itn/let/mjo/api/sms/web/ApiSmsTestMsgController.java b/src/main/java/itn/let/mjo/api/sms/web/ApiSmsTestMsgController.java index 8b133e6..b388a09 100644 --- a/src/main/java/itn/let/mjo/api/sms/web/ApiSmsTestMsgController.java +++ b/src/main/java/itn/let/mjo/api/sms/web/ApiSmsTestMsgController.java @@ -1,37 +1,13 @@ package itn.let.mjo.api.sms.web; -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; 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.servlet.HandlerMapping; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.util.RedirectUrlMaker; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.mjo.apikey.service.ApiCallInfoMngService; -import itn.let.mjo.apikey.service.ApiKeyMngService; import itn.let.mjo.apikey.service.ApiKeyVO; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.msg.service.MjonMsgService; -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.utl.user.service.MjonNoticeSendUtil; -import itn.let.utl.user.service.SecuKeyUtil; /** * diff --git a/src/main/java/itn/let/mjo/apikey/web/ApiKeyMngController.java b/src/main/java/itn/let/mjo/apikey/web/ApiKeyMngController.java index a23ac6a..c681b41 100644 --- a/src/main/java/itn/let/mjo/apikey/web/ApiKeyMngController.java +++ b/src/main/java/itn/let/mjo/apikey/web/ApiKeyMngController.java @@ -26,10 +26,8 @@ import itn.let.mjo.apikey.service.ApiCallInfoMngService; import itn.let.mjo.apikey.service.ApiKeyMngService; import itn.let.mjo.apikey.service.ApiKeyVO; import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.msg.service.MjonMsgService; import itn.let.sym.site.service.EgovSiteManagerService; import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovUserManageService; import itn.let.utl.user.service.MjonNoticeSendUtil; import itn.let.utl.user.service.SecuKeyUtil; @@ -50,9 +48,6 @@ import itn.let.utl.user.service.SecuKeyUtil; @Controller public class ApiKeyMngController { - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - //api key 정보 @Resource(name = "apiKeyMngService") private ApiKeyMngService apiKeyMngService; @@ -65,10 +60,6 @@ public class ApiKeyMngController { @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - /** 사이트 설정 */ @Resource(name = "egovSiteManagerService") EgovSiteManagerService egovSiteManagerService; @@ -80,54 +71,6 @@ public class ApiKeyMngController { @Resource(name="MjonCommon") private MjonCommon mjonCommon; - /* - //문자발송테스트 - @Resource(name = "mjonMsgSentTestService") - private MjonMsgSentTestService mjonMsgSentTestService; - - //문자수신테스트 - @Resource(name = "mjonMsgRecvTestService") - private MjonMsgRecvTestService mjonMsgRecvTestService; - - /** EgovMessageSource */ - /* - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - @Resource(name = "certService") - private CertService certService; - - //문자발송 서비스 - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "MjonReservMsgService") - private MjonReservMsgService mjonReservMsgService; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - /** mberManageService */ - /* - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - /** 첨부파일 저장경로 */ - /* - @Value("#{globalSettings['Globals.file.saveDir']}") - private String fileSaveDir; - - /** userManageService */ - /* - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - /** * 신규회원 문자전송 리스트 * @param searchVO @@ -163,15 +106,6 @@ public class ApiKeyMngController { model.addAttribute("resultList", resultList); - /* - //문자발송 실패 결과 코드정보 리스트 불러오기 - MjonMsgResultCodeVO mjonMsgResultCodeVO = new MjonMsgResultCodeVO(); - apiKeyMngService.selectMberList(userSearchVO); - */ - - //List resultMsgCodeList = mjonMsgService.selectMsgResultCodeAllList(mjonMsgResultCodeVO); - - //model.addAttribute("resultMsgCodeList", resultMsgCodeList); paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((ApiKeyVO)resultList.get(0)).getTotCnt() : 0); model.addAttribute("paginationInfo", paginationInfo); diff --git a/src/main/java/itn/let/mjo/block/web/AddrBlockController.java b/src/main/java/itn/let/mjo/block/web/AddrBlockController.java deleted file mode 100644 index e20b778..0000000 --- a/src/main/java/itn/let/mjo/block/web/AddrBlockController.java +++ /dev/null @@ -1,1014 +0,0 @@ -package itn.let.mjo.block.web; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -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.HttpServletResponse; - -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.springframework.stereotype.Controller; -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.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.HandlerMapping; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.JsonResult; -import itn.com.cmm.LoginVO; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.mjo.block.service.MjonBlockService; -import itn.let.mjo.block.service.MjonBlockVO; -import itn.let.mjo.msg.service.MjonMsgService; -import itn.let.mjo.msg.service.MjonMsgVO; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.msgdata.service.PhoneVO; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.MberManageVO; - -/** - * 주소록 수신거부 관한 controller 클래스를 정의한다. - * @author ITN - * @since 2022.03.17 - * @version 1.0 - * @see - * - *
- * << 개정이력(Modification Information) >>
- *
- *   수정일      수정자           수정내용
- *  -------    --------    ---------------------------
- *   2022.03.17  ITN          최초 생성
- *
- * 
- */ -@Controller -public class AddrBlockController { - - @Resource(name = "mjonBlockService") - private MjonBlockService mjonBlockService; - - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} - private String[][] sendBlockExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "형태" , "직접등록" , ""}, - {"2", "거부번호" , "01012345678", ""}, - {"3", "수신자" , "홍길동", ""}, - {"4", "등록일시" , "2021-06-08 11:05:38", ""}, - {"5", "메모" , "테스트", ""} - } ; - - /** - * 주소록 수신거부 관리 이동 - * - * @param addrVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addrBlock/selectBlockList.do" , - "/web/mjon/addrBlock/selectBlockAllAjax.do", - "/web/mjon/addrBlock/selectBlock080Ajax.do", - "/web/mjon/addrBlock/selectBlockSelfAjax.do" - }) - public String selectBlockList(@ModelAttribute("searchVO") MjonBlockVO blockVO - , HttpServletRequest request - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception { - - String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userName = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - if(userId == "") { - redirectAttributes.addFlashAttribute("message", "수신거부 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - - // 현재 날짜 구하기 - LocalDate now = LocalDate.now(); - // 포맷 정의 - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy.MM.dd"); - // 포맷 적용 - String formatedNow = now.format(formatter); - - model.addAttribute("userName", userName); - model.addAttribute("nowDate", formatedNow); - - if(userId != "") { - blockVO.setUserId(userId); - } - - if(blockVO.getPageUnit() != 10) { - blockVO.setPageUnit(blockVO.getPageUnit()); - } - - if(pattern.equals("/web/mjon/addrBlock/selectBlockAllAjax.do") - || pattern.equals("/web/mjon/addrBlock/selectBlock080Ajax.do") - || pattern.equals("/web/mjon/addrBlock/selectBlockSelfAjax.do") - ) { //전체 , 080, 자체 - - /** paging */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(blockVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(blockVO.getPageUnit()); - paginationInfo.setPageSize(blockVO.getPageSize()); - - blockVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - blockVO.setLastIndex(paginationInfo.getLastRecordIndex()); - blockVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(blockVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - blockVO.setSearchSortCnd("blockId"); - blockVO.setSearchSortOrd("desc"); - } - - // 수신거부형태 (1: 080 자동수신거부, 2: 직접등록) - if(pattern.equals("/web/mjon/addrBlock/selectBlock080Ajax.do")) { - blockVO.setBlockType(1); - } - else if(pattern.equals("/web/mjon/addrBlock/selectBlockSelfAjax.do")) { - blockVO.setBlockType(2); - } - - List blockList = mjonBlockService.selectBlockList(blockVO); - int totCnt = 0; - - if(blockList.size() > 0) { - totCnt = blockList.get(0).getTotCnt(); - } - - model.addAttribute("resultList", blockList); - paginationInfo.setTotalRecordCount(totCnt); - model.addAttribute("paginationInfo", paginationInfo); - - if(pattern.equals("/web/mjon/addrBlock/selectBlock080Ajax.do")) { - return "/web/addrBlock/AddrBlock080Ajax"; - } - else if(pattern.equals("/web/mjon/addrBlock/selectBlockSelfAjax.do")) { - return "/web/addrBlock/AddrBlockSelfAjax"; - } - else { - return "/web/addrBlock/AddrBlockAllAjax"; - } - } - - - return "/web/addrBlock/AddrBlockList"; - } - - /** - * 수신거부 저장 - * @param searchVO - * @param model - * @return "/web/mjon/addrBlock/addrBlockInsertAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addrBlock/addrBlockInsertAjax.do"}) - public ModelAndView addrBlockInsertAjax(@ModelAttribute("searchVO") MjonBlockVO mjonBlockVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - isSuccess = false; - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", "로그인 후 이용이 가능합니다."); - return modelAndView; - } - else { - mjonBlockVO.setUserId(userId); - } - - - //치환문자 체크 처리 - //String[] phoneList = mjonBlockVO.getPhoneList(); - //String[] nameList = mjonBlockVO.getNameList(); - //String[] memoList = mjonBlockVO.getMemoList(); - - mjonBlockVO.setBlockType(2); // 직접등록 - mjonBlockService.insertBlockList(mjonBlockVO); - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - /** - * 수신거부 삭제 - * @param searchVO - * @param model - * @return "/web/mjon/addrBlock/addrBlockDeleteAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addrBlock/addrBlockDeleteAjax.do"}) - public ModelAndView addrBlockDeleteAjax(@ModelAttribute("searchVO") MjonBlockVO mjonBlockVO, - RedirectAttributes redirectAttributes, - @RequestParam String[] blockCheckList, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - isSuccess = false; - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", "로그인 후 이용이 가능합니다."); - return modelAndView; - } - else { - mjonBlockVO.setUserId(userId); - } - - for(String id:blockCheckList) { - mjonBlockVO.setBlockId(id); - mjonBlockService.deleteBlock(mjonBlockVO); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - /** - * 주소록 삭제 - * @param searchVO - * @param model - * @return "/web/mjon/addrBlock/addrBlockAddrDeleteAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addrBlock/addrBlockAddrDeleteAjax.do"}) - public ModelAndView addrBlockAddrDeleteAjax(@ModelAttribute("searchVO") MjonBlockVO mjonBlockVO, - RedirectAttributes redirectAttributes, - @RequestParam(value="blockCheck", defaultValue="0") String[] blockCheck, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - isSuccess = false; - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", "로그인 후 이용이 가능합니다."); - return modelAndView; - } - else { - mjonBlockVO.setUserId(userId); - } - - for(String id:blockCheck) { - mjonBlockVO.setBlockId(id); - mjonBlockService.deleteBlockAddr(mjonBlockVO); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - - /** - * 수신거부 메모 업데이트 - * @param searchVO - * @param model - * @return "/web/mjon/addrBlock/addrBlockUpdateMemoAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addrBlock/addrBlockUpdateMemoAjax.do"}) - public ModelAndView addrBlockUpdateMemoAjax(@ModelAttribute("searchVO") MjonBlockVO mjonBlockVO, - RedirectAttributes redirectAttributes, - @RequestParam(value="blockCheck", defaultValue="0") String[] blockCheck, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - isSuccess = false; - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", "로그인 후 이용이 가능합니다."); - return modelAndView; - } - else { - mjonBlockVO.setUserId(userId); - } - - // 메모 수정 - mjonBlockService.updateBlockMemo(mjonBlockVO); - - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - - /** - * 수신거부 결과전송 업데이트 - * @param searchVO - * @param model - * @return "/web/mjon/addrBlock/addrBlockUpdateResultAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/addrBlock/addrBlockUpdateResultAjax.do"}) - public ModelAndView addrBlockUpdateResultAjax(@ModelAttribute("searchVO") MjonBlockVO mjonBlockVO, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - try { - String blockId = request.getParameter("blockId"); - mjonBlockVO.setBlockId(blockId); - mjonBlockVO = mjonBlockService.selectAddrBlockDetail(mjonBlockVO); - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userName = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - String mobile = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getMoblphonNo()); - - if(userId.equals("")) { - isSuccess = false; - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", "로그인 후 이용이 가능합니다."); - return modelAndView; - } - else { - mjonBlockVO.setUserId(userId); - } - - // Step1. 문자발송 - String[] phones = {mjonBlockVO.getPhone()}; - Map mapInfo = new HashMap(); - mapInfo = sendMsgData(userId, userName, mobile, phones); - isSuccess = Boolean.parseBoolean((mapInfo.get("IsSuccess").toString())); - msg = mapInfo.get("Msg").toString(); - - System.out.println("isSuccess : " + isSuccess); - - if (isSuccess == true) { - // Step2. 수신거부 결과전송 업데이트 - mjonBlockService.updateBlockResult(mjonBlockVO); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - // 문자발송 - public Map sendMsgData(String userId, String userName, String mobile, String[] phones) throws Exception{ - boolean isSuccess = true; - String msg = "문자 전송이 완료되었습니다."; - - Date nowDate = new Date(); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd"); - SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); - - String smsTxt = "문자온" + System.lineSeparator() + " 전송자 : " + userName + System.lineSeparator() + "수신거부일자 : " + simpleDateFormat.format(nowDate) + System.lineSeparator() + "처리결과 : 수신거부 완료"; - - MjonMsgVO mjonMsgVO = new MjonMsgVO(); - //개별문자 가격 및 총 금액 셋팅해주기 - 시스템 기본 단가기준으로 입력해줌 - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - - float shortPrice = 0; - if(!userId.equals("")) { - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - shortPrice = mberManageVO.getShortPrice(); - } - - if(shortPrice < 1) { - shortPrice = sysJoinSetVO.getShortPrice(); - } - - mjonMsgVO.setTotPrice(Float.toString(shortPrice)); - mjonMsgVO.setEachPrice(Float.toString(shortPrice)); - mjonMsgVO.setFileCnt("0"); - mjonMsgVO.setCurState("3"); - mjonMsgVO.setReserveYn("N"); // 즉시 전송 - mjonMsgVO.setMsgGroupCnt("0"); - mjonMsgVO.setUserId(userId); - mjonMsgVO.setMsgType("4"); // 단문전송 - mjonMsgVO.setMsgKind("N"); // 일반 - mjonMsgVO.setMsgPayCode("SMS"); - mjonMsgVO.setCallToList(phones); - mjonMsgVO.setCallFrom(mobile); - mjonMsgVO.setReqDate(simpleDateFormat2.format(nowDate)); - mjonMsgVO.setSmsTxt(smsTxt); - - try { - // 전송사 전송 배분 - MjonMsgVO pramVO = new MjonMsgVO(); - List sendRateList = mjonMsgService.selectTodayAgentSendCntList(pramVO); // 전송사 전송 배분률 및 현재 전송건수 조회 - for (MjonMsgVO tmpVO : sendRateList) { - float cnt = Float.parseFloat(tmpVO.getMsgGroupCnt()); - float totCnt = tmpVO.getTotCnt(); - tmpVO.setSendRateInfo(Float.parseFloat(tmpVO.getSendRate()) - (cnt / totCnt * 100)); // 배분률 - 현재전송 비율 - } - - String sendAgent = sendRateList.get(0).getAgentCode(); - float maxRate = sendRateList.get(0).getSendRateInfo(); - for (MjonMsgVO tmpVO : sendRateList) { // 배분률 대비 현재전송 비율이 가장 적은거 찾기 - if (maxRate < tmpVO.getSendRateInfo()) { - maxRate = tmpVO.getSendRateInfo(); - sendAgent = tmpVO.getAgentCode(); - } - } - - //전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오 - //mjonMsgVO.setAgentCode("01"); - - //sendAgent = "02"; - mjonMsgVO.setAgentCode(sendAgent); - - if(mjonMsgVO.getAgentCode().equals("03")) { //아이엠오 전송사 문자 타입 설정해 주기 - - // 단순 장문 문자는 neoType : 2, 그림 포함 : 4 - if(mjonMsgVO.getFileCnt().equals("0")) { // 단순 장문 문자 - - mjonMsgVO.setNeoType("2"); - - }else{ // 그림포함 문자인경우 - - mjonMsgVO.setNeoType("4"); - - } - - } - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - String totPrice = mjonMsgVO.getTotPrice(); - - BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN); - - //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - //BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) == 1) { // -1 : befCash > totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash < totMsgPrice, - //문자 발송 처리 - mjonMsgDataService.insertMsgDataByBlockInfo(mjonMsgVO); - } - else { - isSuccess = false; - msg = "문자 발송에 필요한 보유 잔액이 부족 합니다."; - } - } - catch(Exception e) { - isSuccess = false; - msg = "기타 시스템 오류 : " + e.getMessage(); - } - - Map mapInfo = new HashMap(); - mapInfo.put("IsSuccess", isSuccess); - mapInfo.put("Msg", msg); - - return mapInfo; - } - - - - /** - * 주소록 수신거부 - 엑셀파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/addrBlock/sendExelFilePhoneNumAjax.do") - @ResponseBody - public Object sendExelFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); - - //final Map files = multiRequest.getFileMap(); - List files = (List) multiRequest.getFiles("file0"); - - // 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx - int fileNameSplitCnt = 0; - - if(!files.isEmpty()) { - fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length; - - if (files.get(0).getSize() > 0 - && (files.get(0).getContentType().indexOf("spreadsheetml") > -1) - || files.get(0).getContentType().indexOf("ms-excel") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) { - - // 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("엑셀 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - String Ext = files.get(0).getOriginalFilename().split("[.]")[1]; - String errMessage = ""; - String cellValue = ""; - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - int errPhoneCnt = 0; - - //엑셀 확장자에 따른 처리 로직 분리 - if(Ext.equals("xls")) { - - HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); - HSSFSheet sheet = workbook.getSheetAt(0); - - if(sheet.getLastRowNum() > 20000) { // - errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - HSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(핸드폰부터 받아오기) - HSSFCell cell = null; - for(int j = 0 ; j < 3; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //핸드폰/이름/메모 - - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - jm.put("name", cellValue); - } - if(j == 1) { - //전화번호 - if(cellValue.matches(phoneRegExp)) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - } - } - if(j == 2) { - //메모 - jm.put("memo", cellValue); - } - - } - if(null != jm.get("phone")) { - json.add(jm); - } - - } - - jr.setData(json); - jr.setSuccess(true); - if(errPhoneCnt > 0) { - jr.setMessage("올바르지 않은 휴대폰 번호가 "+ errPhoneCnt +" 건 있습니다."); - }else { - jr.setMessage(""); - } - - }else { //확장자가 xlsx - - OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - opcPackage.close(); - - if(sheet.getLastRowNum() > 20000) { // - errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - XSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(핸드폰부터 받아오기) - XSSFCell cell = null; - for(int j = 0 ; j < 3; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //핸드폰/이름/메모 - // 핸드폰만 공백체크 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - jm.put("name", cellValue); - } - if(j == 1) { - //전화번호 - if(cellValue.matches(phoneRegExp)) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - } - } - if(j == 2) { - //메모 - jm.put("memo", cellValue); - } - - } - if(null != jm.get("phone")) { - json.add(jm); - } - - } - - jr.setData(json); - jr.setSuccess(true); - if(errPhoneCnt > 0) { - jr.setMessage("올바르지 않은 휴대폰 번호가 "+ errPhoneCnt +" 건 있습니다."); - }else { - jr.setMessage(""); - } - } //xlsx 처리 끝 - - } - - } - - return jr; - } - - - /** - * 주소록 수신거부 - TXT파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/addrBlock/sendTxtFilePhoneNumAjax.do") - @ResponseBody - public Object sendTxtFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("TXT 파일만 업로드할 수 있습니다."); - - List files = (List) multiRequest.getFiles("file0"); - - if(!files.isEmpty()) { - - if (files.get(0).getSize() > 0 - || files.get(0).getOriginalFilename().split("[.]")[1].indexOf("txt") > -1) { - - // txt 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("txt 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(multiRequest.getFile("file0").getInputStream())); - - String line = null; - String[] splitedStr = null; - String[] tempStr = null; - int errPhoneCnt = 0; - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - List> json = new ArrayList>(); - - //파일 읽어서 탭으로 구분해주기 - while ((line = reader.readLine()) != null) { - - HashMap jm = new HashMap<>(); - splitedStr = null; - tempStr = null; - - //txt 파일의 데이터가 탭 혹은 콤마로 구분되어 있는지 구분처리 - tempStr = line.split("\\,"); - if(tempStr.length > 1) { - splitedStr = line.split("\\,"); - }else { - splitedStr = line.split("\t");; - } - - for (int i = 0; i < splitedStr.length; i++) { - splitedStr[i] = splitedStr[i].trim(); - if(i == 0) { - //이름 - jm.put("name", splitedStr[i]); - } - if(i == 1) { - if(splitedStr[i].matches(phoneRegExp)) { - //휴대폰 번호 - jm.put("phone", splitedStr[i]); - }else { - errPhoneCnt++; - } - } - if(i == 2) { - //메모 - jm.put("memo", splitedStr[i]); - } - - } - - if(jm.get("phone") != null) { - json.add(jm); - } - - } // end while - jr.setData(json); - jr.setSuccess(true); - if(errPhoneCnt > 0) { - jr.setMessage("올바르지 않은 휴대폰 번호가 "+ errPhoneCnt +" 건 있습니다."); - }else { - - jr.setMessage(""); - - } - } - - } - - return jr; - } - - //수신거부 엑셀 다운로드 - @RequestMapping(value= {"/web/mjon/addrBlock/BlockExcelDownload.do"}) - public void BlockExcelDownload( MjonBlockVO blockVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - blockVO.setRecordCountPerPage(100000); - blockVO.setFirstIndex(0); - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - //로그인 권한정보 불러오기 - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId != "") { - blockVO.setUserId(userId); - } - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - Cell cell = null; - Row row = null; - - String fileName ="수신거부 엑셀 리스트"; - - String sheetTitle = ""; - try { - if("".equals(blockVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - blockVO.setSearchSortCnd("blockId"); - blockVO.setSearchSortOrd("desc"); - } - - // 수신거부형태 (1: 080 자동수신거부, 2: 직접등록) - List resultList = mjonBlockService.selectBlockList(blockVO); - - { //화면 리스트 - sheetTitle = "수신거부내역" ; //제목 - Sheet sheet = wb.createSheet(sheetTitle); - row = sheet.createRow(0); - for(int i=0 ; i < sendBlockExcelValue.length ; i++) { - cell = row.createCell(i); - cell.setCellStyle(style); - cell.setCellValue(sendBlockExcelValue[i][1]); - } - - for(int i=0; i < resultList.size(); i++){ - row = sheet.createRow(i+1); - for(int j=0 ; j < sendBlockExcelValue.length ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(((MjonBlockVO)resultList.get(i)).getBlockTypeName()); //형태 - if(j==2) cell.setCellValue(((MjonBlockVO)resultList.get(i)).getPhone()); //거부번호 - if(j==3) cell.setCellValue(((MjonBlockVO)resultList.get(i)).getName()); //수신자 - if(j==4) cell.setCellValue(((MjonBlockVO)resultList.get(i)).getRegDate()); //등록일시 - if(j==5) cell.setCellValue(((MjonBlockVO)resultList.get(i)).getMemo()); //메모 - } - } - } - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - -} diff --git a/src/main/java/itn/let/mjo/cert/web/CertController.java b/src/main/java/itn/let/mjo/cert/web/CertController.java index 9e245e6..d724793 100644 --- a/src/main/java/itn/let/mjo/cert/web/CertController.java +++ b/src/main/java/itn/let/mjo/cert/web/CertController.java @@ -143,8 +143,90 @@ public class CertController { return "uss/ion/cert/CertEtcList"; } - - public void execute(String cmd) { + /** + * 기타서류관리 등록/수정 + * @param searchVO + * @param model + * @return "/uss/ion/cert/CertSentModify.do" + * @throws Exception + */ + @RequestMapping(value = {"/uss/ion/cert/CertSentModify.do" , "/uss/ion/cert/CertEtcModify.do"}) + public String CashModify( + @ModelAttribute("searchVO") CertVO searchVO, + HttpServletRequest request , + Model model) throws Exception { + + String pattern = (String) request.getAttribute( + HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; + + List certFileList = new ArrayList(); + + if(pattern.equals("/uss/ion/cert/CertSentModify.do")){ //발신인증서류 + searchVO.setCertEtcType("01"); + } + if(pattern.equals("/uss/ion/cert/CertEtcModify.do")){ //기타인증서류 + searchVO.setCertEtcType("09"); + } + + if(null != searchVO.getCertId() && !"".equals(searchVO.getCertId())) { //수정 + certFileList = certService.selectCertFileList(searchVO); + } + model.addAttribute("certFileList", certFileList); //CertFile파일정보 + List fileList = new ArrayList<>(); + //첨부파일정보 + if(certFileList !=null){ + if(1==certFileList.size() && ((CertVO)certFileList.get(0)).getOrignlFileNm() == null) { + + }else { + fileList.addAll(certFileList); + } + } + model.addAttribute("fileList", fileList); + model.addAttribute("searchVO", searchVO); + if(pattern.equals("/uss/ion/cert/CertSentModify.do")){ //발신번호 인증 + searchVO.setCertEtcType("01"); + return "/uss/ion/cert/CertSentModify"; + } + return "/uss/ion/cert/CertEtcModify"; + } + + /*기타서류 삭제 */ + @RequestMapping({"/uss/ion/cert/CertEtcDelete.do" , "/uss/ion/cert/CertSentDelete.do"}) + public String deleteCertEtc(@RequestParam("del") String[] del, + RedirectAttributes redirectAttributes , + HttpServletRequest request , + Model model) throws Exception { + CertVO tempCertVO = new CertVO(); + boolean delete = false; + List certFileList = new ArrayList<>(); + String whFile = ""; + for(String id:del) { + tempCertVO.setCertId(id); + List fileDelList = new ArrayList<>(); //파일테이블 삭제 조회 + fileDelList = certService.selectCertDetailFileList(tempCertVO); + for(FileVO delCertFileVo : fileDelList){ + whFile = delCertFileVo.getWhFile() ; + if(whFile !=null){ + File delFile = new File(whFile); + delete = delFile.delete(); + } + } + fileService.deleteFileInfs(fileDelList); + certService.deleteCertEtc(tempCertVO); + } + redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); + String pattern = (String) request.getAttribute( + HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; + if(pattern.equals("/uss/ion/cert/CertSentDelete.do")){ //발신번호 인증 + RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cert/CertSentList.do"); + return redirectUrlMaker.getRedirectUrl(); + } + + RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cert/CertEtcList.do"); + return redirectUrlMaker.getRedirectUrl(); + } + + public void execute(String cmd) { Process process = null; Runtime runtime = Runtime.getRuntime(); StringBuffer successOutput = new StringBuffer(); // 성공 스트링 버퍼 @@ -231,88 +313,5 @@ public class CertController { System.out.println(line); } } - - /** - * 기타서류관리 등록/수정 - * @param searchVO - * @param model - * @return "/uss/ion/cert/CertSentModify.do" - * @throws Exception - */ - @RequestMapping(value = {"/uss/ion/cert/CertSentModify.do" , "/uss/ion/cert/CertEtcModify.do"}) - public String CashModify( - @ModelAttribute("searchVO") CertVO searchVO, - HttpServletRequest request , - Model model) throws Exception { - - String pattern = (String) request.getAttribute( - HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - - List certFileList = new ArrayList(); - - if(pattern.equals("/uss/ion/cert/CertSentModify.do")){ //발신인증서류 - searchVO.setCertEtcType("01"); - } - if(pattern.equals("/uss/ion/cert/CertEtcModify.do")){ //기타인증서류 - searchVO.setCertEtcType("09"); - } - - if(null != searchVO.getCertId() && !"".equals(searchVO.getCertId())) { //수정 - certFileList = certService.selectCertFileList(searchVO); - } - model.addAttribute("certFileList", certFileList); //CertFile파일정보 - List fileList = new ArrayList<>(); - //첨부파일정보 - if(certFileList !=null){ - if(1==certFileList.size() && ((CertVO)certFileList.get(0)).getOrignlFileNm() == null) { - - }else { - fileList.addAll(certFileList); - } - } - model.addAttribute("fileList", fileList); - model.addAttribute("searchVO", searchVO); - if(pattern.equals("/uss/ion/cert/CertSentModify.do")){ //발신번호 인증 - searchVO.setCertEtcType("01"); - return "/uss/ion/cert/CertSentModify"; - } - return "/uss/ion/cert/CertEtcModify"; - } - - /*기타서류 삭제 */ - @RequestMapping({"/uss/ion/cert/CertEtcDelete.do" , "/uss/ion/cert/CertSentDelete.do"}) - public String deleteCertEtc(@RequestParam("del") String[] del, - RedirectAttributes redirectAttributes , - HttpServletRequest request , - Model model) throws Exception { - CertVO tempCertVO = new CertVO(); - boolean delete = false; - List certFileList = new ArrayList<>(); - String whFile = ""; - for(String id:del) { - tempCertVO.setCertId(id); - List fileDelList = new ArrayList<>(); //파일테이블 삭제 조회 - fileDelList = certService.selectCertDetailFileList(tempCertVO); - for(FileVO delCertFileVo : fileDelList){ - whFile = delCertFileVo.getWhFile() ; - if(whFile !=null){ - File delFile = new File(whFile); - delete = delFile.delete(); - } - } - fileService.deleteFileInfs(fileDelList); - certService.deleteCertEtc(tempCertVO); - } - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.delete")); - String pattern = (String) request.getAttribute( - HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - if(pattern.equals("/uss/ion/cert/CertSentDelete.do")){ //발신번호 인증 - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cert/CertSentList.do"); - return redirectUrlMaker.getRedirectUrl(); - } - - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/uss/ion/cert/CertEtcList.do"); - return redirectUrlMaker.getRedirectUrl(); - } } diff --git a/src/main/java/itn/let/mjo/conf/web/MjonConfController.java b/src/main/java/itn/let/mjo/conf/web/MjonConfController.java index 8f49e3e..9d1ec56 100644 --- a/src/main/java/itn/let/mjo/conf/web/MjonConfController.java +++ b/src/main/java/itn/let/mjo/conf/web/MjonConfController.java @@ -14,50 +14,13 @@ import itn.com.cmm.util.StringUtil; import itn.com.utl.fcc.service.EgovStringUtil; import itn.let.mjo.conf.service.MjonConfService; import itn.let.mjo.conf.service.MjonConfVO; -import itn.let.mjo.msgagent.service.MjonMsgAgentStsService; -import itn.let.mjo.msgagent.service.MjonMsgAgentStsVO; @Controller public class MjonConfController { @Resource(name = "mjonConfService") private MjonConfService mjonConfService; - - @Resource(name = "mjonMsgAgentStsService") - private MjonMsgAgentStsService mjonMsgAgentStsService; - - /** - * @Method Name : updateMjonConfAjax - * @작성일 : 2023. 2. 22. - * @작성자 : anjooyoung - * @Method 설명 : 문자온 설정 수정 Ajax - */ - @RequestMapping(value = "/web/mjon/conf/selectMjonMsgUseConfAjax.do") - public ModelAndView selectMjonMsgUseConfAjax(@ModelAttribute MjonConfVO confVO, Model model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - - MjonConfVO vo = mjonConfService.selectConfDetail("CONF01"); //문자발송 사용여부 - - if(vo == null || "".equals(vo.getConfCode()) || !"Y".equals(vo.getConfCode())) { - modelAndView.addObject("message", "문자 발송 불가"); - modelAndView.addObject("result", "fail"); - } else { - modelAndView.addObject("message", "문자 발송 가능"); - modelAndView.addObject("result", "success"); - } - }catch (Exception e) { - modelAndView.addObject("message", "오류가 발생하였습니다."); - modelAndView.addObject("result", "fail"); - } - - return modelAndView; - } - /** * @Method Name : updateMjonConfAjax * @작성일 : 2023. 2. 22. @@ -98,39 +61,4 @@ public class MjonConfController { return modelAndView; } - - @RequestMapping(value = "/web/mjon/conf/selectBlineSendCheckAjax.do") - public ModelAndView selectBlineSendCheckAjax( - @ModelAttribute MjonMsgAgentStsVO mjonMsgAgentStsVO - , Model model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - - System.out.println(mjonMsgAgentStsVO.getAgentCode()); - if(mjonMsgAgentStsVO.getAgentCode().equals("b1")||mjonMsgAgentStsVO.getAgentCode().equals("B1")) { - mjonMsgAgentStsVO.setAgentCode("08"); - }else if(mjonMsgAgentStsVO.getAgentCode().equals("b2")||mjonMsgAgentStsVO.getAgentCode().equals("B2")) { - mjonMsgAgentStsVO.setAgentCode("09"); - } - - MjonMsgAgentStsVO vo = mjonMsgAgentStsService.selectMsgAgentBlineYnInfo(mjonMsgAgentStsVO); - - if(vo == null || "".equals(vo.getUseYn()) || !"Y".equals(vo.getUseYn())) { - modelAndView.addObject("message", "문자 발송 불가"); - modelAndView.addObject("result", "fail"); - } else { - modelAndView.addObject("message", "문자 발송 가능"); - modelAndView.addObject("result", "success"); - } - - }catch (Exception e) { - modelAndView.addObject("message", "오류가 발생하였습니다."); - modelAndView.addObject("result", "fail"); - } - - return modelAndView; - } } diff --git a/src/main/java/itn/let/mjo/dwn/web/MjonTotalDownloadController.java b/src/main/java/itn/let/mjo/dwn/web/MjonTotalDownloadController.java deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/itn/let/mjo/event/web/MjonEventController.java b/src/main/java/itn/let/mjo/event/web/MjonEventController.java deleted file mode 100644 index 53fa43e..0000000 --- a/src/main/java/itn/let/mjo/event/web/MjonEventController.java +++ /dev/null @@ -1,444 +0,0 @@ -package itn.let.mjo.event.web; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.HandlerMapping; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.LoginVO; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.cop.bbs.service.BoardVO; -import itn.let.mjo.event.service.MjonEventService; -import itn.let.mjo.event.service.MjonEventVO; -import itn.let.mjo.msgcampain.service.MjonCandidateService; -import itn.let.mjo.msgcampain.service.MjonCandidateVO; -import itn.let.mjo.pay.service.MjonPayService; -import itn.let.mjo.pay.service.MjonPayVO; -import itn.let.mjo.pay.service.MjonVaMsgLogVO; -import itn.let.mjo.payva.service.VacsVactService; -import itn.let.mjo.payva.service.VacsVactVO; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.MberManageVO; - -@Controller -public class MjonEventController { - - @Resource(name = "MjonEventService") - private MjonEventService mjonEventService; - - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource(name = "mjonCandidateService") - private MjonCandidateService mjonCandidateService; - - //전용계좌 서비스 - @Resource(name = "vacsVactService") - private VacsVactService vacsVactService; - - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - - @RequestMapping("/web/event/selectEventPopAjax.do") - public String selectEventPopAjas(MjonEventVO mjonEventVO, ModelMap model ) throws Exception{ - - try { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - model.addAttribute("loginVO", loginVO); - - if(loginVO != null) { - - System.out.println("+++++++++++++++++++++++ mberId ::: "+loginVO.getId()); - - } - - String nttSj = "[첫결제 이벤트] 첫 결제 시, 누구나 조건 없이 인생 최저가!"; - BoardVO boardVO = new BoardVO(); - boardVO.setBbsId("BBSMSTR_000000000731"); - boardVO.setNttSj(nttSj); - BoardVO resultEvent = mjonEventService.selectEventInfoByNttSj(boardVO); - - model.addAttribute("resultEvent", resultEvent); - - } catch (Exception e) { - throw new Exception(e); - } - - return "web/event/eventMsgFrstPop"; - - } - - /** - * 이벤트 회원 정보 테이블에 기본 정보 입력해 주기. - * 회원아이디, 회원이름, 이벤트 게시판 번호, 이벤트 게시글 번호, 회원 단가 정보, 이벤트 수신동의, 이벤트 유효 상태값(미진행 : N 으로 셋팅) - * - * */ - @RequestMapping("/web/event/insertEventDefaultMberInfoAjax.do") - public ModelAndView insertEventDefaultMberInfoAjax(MjonEventVO mjonEventVO) throws Exception{ - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - if(loginVO == null) { - - modelAndView.addObject("resultSts", "loginFail"); - return modelAndView; - - }else { - - /** - * 이벤트 컨텐츠 정보 불러오기 - * 이벤트 게시글 제목 및 카테고리로 검색해서 불러온다. - * - * */ - float nttId = 0; - String bbsId = "BBSMSTR_000000000731"; //이벤트 게시판 번호 - String nttSj = "[첫결제 이벤트] 첫 결제 시, 누구나 조건 없이 인생 최저가!"; - BoardVO resultEvent = selectEventBoardInfo(bbsId, nttSj); - - if(resultEvent != null) {//이벤트 게시판의 이벤트 게시글 번호 셋팅 - - mjonEventVO.setEventNttId(Float.toString(resultEvent.getNttId())); - - }else {//이벤트 게시글 정보가 없으면 0으로 셋팅. - - modelAndView.addObject("resultSts", "eventEnded"); - return modelAndView; - - } - - // Step 0. B선 전송사 이용고객 => 이벤트대상 제외처리 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setMberId(loginVO.getId()); - String blineCode = mberManageService.selectBlineCodeByMberId(mberManageVO); - if (blineCode != null && blineCode.equals("N")) { - - //이벤트 회원 정보 조회 - MjonEventVO eventMberInfo = selectEventMsgMberDefaultInfo(mjonEventVO, resultEvent.getNttId(), bbsId, loginVO.getId(), loginVO.getName()); - - int resultCnt = 0; - - if(eventMberInfo == null) {//등록된 회원정보가 없으면 정보 입력 - mjonEventVO.setEventStatus("N"); - resultCnt = mjonEventService.insertEventMsgMberDefaultInfo(mjonEventVO); - }else {//등록된 회원정보가 있으면 화면 이동 및 메세지 처리 - - String status = eventMberInfo.getEventStatus(); - - if(status.equals("Y")) {//이벤트가 진행중인 경우 - - modelAndView.addObject("resultSts", "eventJoined"); - - }else if(status.equals("E")) {//이벤트가 종료된 경우 - - modelAndView.addObject("resultSts", "eventEnded"); - - }else {//이벤트 미진행인 경우 성공으로 결제페이지로 이동되도록 한다. - - modelAndView.addObject("resultSts", "success"); - - } - - return modelAndView; - } - } - else { - modelAndView.addObject("resultSts", "eventBline"); - - return modelAndView; - } - - modelAndView.addObject("resultSts", "success"); - } - - return modelAndView; - } - - /** - * 이벤트 회원 정보 테이블에 기본 정보 입력해 주기. - * 회원아이디, 회원이름, 이벤트 게시판 번호, 이벤트 게시글 번호, 회원 단가 정보, 이벤트 수신동의, 이벤트 유효 상태값(미진행 : N 으로 셋팅) - * - * */ - @RequestMapping("/web/event/updateEventPolicyMberInfoAjax.do") - public ModelAndView updateEventPolicyMberInfoAjax(MjonEventVO mjonEventVO) throws Exception{ - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - if(loginVO == null) { - - modelAndView.addObject("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - modelAndView.addObject("resultSts", "loginFail"); - return modelAndView; - - }else { - - //결제내역 카운트 조회 - int payCnt = mjonPayService.selectMemerPayCount(loginVO.getId()); - - //System.out.println("첫 결제 회원만 이벤트 신청이 가능합니다."); - //System.out.println(payCnt); - //System.out.println(payCnt); - //System.out.println(payCnt); - - if (payCnt > 0) { - modelAndView.addObject("message", "첫 결제 회원만 이벤트 신청이 가능합니다."); - modelAndView.addObject("resultSts", "statusAlreadyPayedFail"); - return modelAndView; - } - - mjonEventVO.setMberId(loginVO.getId()); - mjonEventVO.setMberNm(loginVO.getName()); - - //이벤트 회원정보 존재여부 확인 및 회원 정보 불러오기 - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - int resultCnt = 0; - - if(eventMberInfo == null) {//등록된 회원정보가 없으면 오류 발생 - //mjonEventVO.setEventStatus("N"); - //resultCnt = mjonEventService.insertEventMsgMberDefaultInfo(mjonEventVO); - modelAndView.addObject("message", "이벤트 회원 정보가 없습니다."); - modelAndView.addObject("resultSts", "emptyMber"); - return modelAndView; - - }else if(!eventMberInfo.getEventStatus().equals("N")){//이벤트가 진행중이거나, 종료된 회원인 경우 - - modelAndView.addObject("message", "현재 이벤트를 진행 중이시거나 완료하신 회원입니다."); - modelAndView.addObject("resultSts", "statusFail"); - return modelAndView; - - }else {//등록된 회원정보가 있으면 유의사항 및 문자 수신 동의 정보 업데이트 처리 - - resultCnt = mjonEventService.updateEventPolicyMberInfo(mjonEventVO); - - if(resultCnt > 0) {//수정이 정상적으로 된 경우 - - modelAndView.addObject("resultSts", "success"); - - }else {//이벤트 미진행인 경우 성공으로 결제페이지로 이동되도록 한다. - - modelAndView.addObject("resultSts", "updateFail"); - - } - - return modelAndView; - - } - - } - - } - - /** - * 이벤트 결제하기 화면 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/event/member/pay/PayView_OLD.do"}) - public String PayView(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, - HttpServletRequest request, RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - String pattern = (String) request.getAttribute( - HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - - //로그인 정보 획득 -// LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(loginVO == null) { - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - - //기존 결제 내역이 있는 회원인지 확인 - int payCnt = 0; - if(StringUtil.isNotEmpty(userId)) { - //결제내역 카운트 조회 - payCnt = mjonPayService.selectMemerPayCount(userId); - - if(payCnt > 0) { - - redirectAttributes.addFlashAttribute("message", "고객님께서는 첫결제 이벤트 대상이 아닙니다."); - return "redirect:/web/main/mainPage.do"; - - }else { - - String bbsId = "BBSMSTR_000000000731"; //이벤트 게시판 번호 - String nttSj = "[첫결제 이벤트] 첫 결제 시, 누구나 조건 없이 인생 최저가!"; - BoardVO resultEvent = selectEventBoardInfo(bbsId, nttSj); - - - if(resultEvent != null) {//진행중 이벤트 이면 이벤트 게시글 번호 셋팅 - - // Step 0. B선 전송사 이용고객 => 이벤트대상 제외처리 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setMberId(userId); - String blineCode = mberManageService.selectBlineCodeByMberId(mberManageVO); - if (blineCode != null && blineCode.equals("N")) { - - //이벤트 회원 정보 조회 - MjonEventVO mjonEventVO = new MjonEventVO(); - MjonEventVO eventMberInfo = selectEventMsgMberDefaultInfo(mjonEventVO, resultEvent.getNttId(), bbsId, loginVO.getId(), loginVO.getName()); - - int resultCnt = 0; - - if(eventMberInfo == null) {//등록된 회원정보가 없으면 정보 입력 - mjonEventVO.setEventStatus("N"); - resultCnt = mjonEventService.insertEventMsgMberDefaultInfo(mjonEventVO); - }else {//등록된 회원정보가 있으면 화면 이동 및 메세지 처리 - - String status = eventMberInfo.getEventStatus(); - - if(status.equals("Y")) {//이벤트가 진행중인 경우 - - redirectAttributes.addFlashAttribute("message", "현재 첫 결제 이벤트를 진행중입니다."); - return "redirect:/web/main/mainPage.do"; - - }else if(status.equals("E")) {//이벤트가 종료된 경우 - - redirectAttributes.addFlashAttribute("message", "현재 첫 결제 이벤트를 완료 하였습니다."); - return "redirect:/web/main/mainPage.do"; - - } - - } - } - else { - redirectAttributes.addFlashAttribute("message", "이벤트 대상자가 아닙니다."); - return "redirect:/web/main/mainPage.do"; - } - - }else {//이벤트 게시글 정보가 없으면 0으로 셋팅. - - redirectAttributes.addFlashAttribute("message", "첫 결제 이벤트는 종료 되었습니다."); - return "redirect:/web/main/mainPage.do"; - - } - - } - - } - - MberManageVO mberManageVO = mberManageService.selectMber(loginVO.getId()); - model.addAttribute("mberManageVO", mberManageVO); - - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - if(userId != "") { - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - model.addAttribute("mjonCandidateVO",mjonCandidateVO); - } - - mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "nicepay/payResultAjax.do") ; - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonPayVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonPayVO.getPageUnit()); - paginationInfo.setPageSize(mjonPayVO.getPageSize()); - - mjonPayVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonPayVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonPayVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonPayVO.setSearchSortCnd("moid"); - mjonPayVO.setSearchSortOrd("desc"); - } - mjonPayVO.setUserId(loginVO.getId()); - - /*List resultList = mjonPayService.selectPayList(mjonPayVO);*/ - - /*model.addAttribute("resultList", resultList); - paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonPayVO)resultList.get(0)).getTotCnt() : 0);*/ - /*model.addAttribute("paginationInfo", paginationInfo);*/ - - //대상 리스트 가져오기 - VacsVactVO vacsVactVO = new VacsVactVO(); - vacsVactVO.setMberId(loginVO.getId()); - //List bankList = vacsVactService.selectBankAcctList(tempVO); //할당 가능한 계좌 수량 리스트 받아오기 - List bankList = vacsVactService.selectBankAcctAllList(vacsVactVO); //할당 가능한 계좌 수량 리스트 받아오기 - List myBankList = vacsVactService.selectMyBankAcctList(vacsVactVO); //내가 할당받은 전용계좌 리스트 받아오기 - - MjonVaMsgLogVO vaMsgLogVO = new MjonVaMsgLogVO(); - vaMsgLogVO.setMberId(loginVO.getId()); - - Date now = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - String date = sdf.format(now); - vaMsgLogVO.setSendDate(date); - - MjonVaMsgLogVO resultMsgInfo = mjonPayService.selectMyAcctSendCnt(vaMsgLogVO); - - //대상 리스트, 페이징 정보 전달 - model.addAttribute("resultList", bankList); - model.addAttribute("resultMyList", myBankList); - model.addAttribute("resultMsgInfo", resultMsgInfo); - model.addAttribute("mjonPayVO", mjonPayVO); - - // 탭이동 - String tabType = "1"; - if(request.getParameter("tabType") != null) { - tabType = request.getParameter("tabType"); - } - model.addAttribute("tabType", tabType); - - return "/web/event/pay/EventPayView_OLD"; - } - - - //이벤트 게시글 정보 불러오기 함수 - public BoardVO selectEventBoardInfo(String bbsId, String nttSj) throws Exception{ - - BoardVO boardVO = new BoardVO(); - boardVO.setBbsId(bbsId); - boardVO.setNttSj(nttSj); - BoardVO resultEvent = mjonEventService.selectEventInfoByNttSj(boardVO); - - return resultEvent; - } - - //이벤트 회원 정보 불러오기 함수 - public MjonEventVO selectEventMsgMberDefaultInfo(MjonEventVO mjonEventVO, float nttId, String bbsId, String mberId, String mberNm) throws Exception{ - - mjonEventVO.setEventNttId(Float.toString(nttId)); - mjonEventVO.setEventBbsId(bbsId); - mjonEventVO.setMberId(mberId); - mjonEventVO.setMberNm(mberNm); - mjonEventVO.setEventShortPrice("7.5"); - mjonEventVO.setEventLongPrice("32"); - mjonEventVO.setEventPicturePrice("59"); - mjonEventVO.setEventPicture2Price("67"); - mjonEventVO.setEventPicture3Price("70"); - - //이벤트 회원정보 존재여부 확인 및 회원 정보 불러오기 - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - return eventMberInfo; - } - -} diff --git a/src/main/java/itn/let/mjo/event/web/MjonEventPayV2Controller.java b/src/main/java/itn/let/mjo/event/web/MjonEventPayV2Controller.java deleted file mode 100644 index d748237..0000000 --- a/src/main/java/itn/let/mjo/event/web/MjonEventPayV2Controller.java +++ /dev/null @@ -1,253 +0,0 @@ -package itn.let.mjo.event.web; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.HandlerMapping; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.LoginVO; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.cop.bbs.service.BoardVO; -import itn.let.mjo.event.service.MjonEventService; -import itn.let.mjo.event.service.MjonEventVO; -import itn.let.mjo.msgcampain.service.MjonCandidateService; -import itn.let.mjo.msgcampain.service.MjonCandidateVO; -import itn.let.mjo.pay.service.MjonPayService; -import itn.let.mjo.pay.service.MjonPayVO; -import itn.let.mjo.pay.service.MjonVaMsgLogVO; -import itn.let.mjo.payva.service.VacsVactService; -import itn.let.mjo.payva.service.VacsVactVO; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.MberManageVO; - -@Controller -public class MjonEventPayV2Controller { - @Resource(name = "MjonEventService") - private MjonEventService mjonEventService; - - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource(name = "mjonCandidateService") - private MjonCandidateService mjonCandidateService; - - //전용계좌 서비스 - @Resource(name = "vacsVactService") - private VacsVactService vacsVactService; - - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - - /** - * 이벤트 결제하기 화면 - * @param searchVO - * @param model - * @return "/web/event/member/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/event/member/pay/PayView.do"}) - public String PayViewV2(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, - HttpServletRequest request, RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - String pattern = (String) request.getAttribute( - HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - - //로그인 정보 획득 -// LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(loginVO == null) { - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - - // 하드코딩 - //if(!userId.equals("nobledeco")) { - // if(!userId.equals("nobledeco2")) { - // if(!userId.equals("nopay")) { - // return "redirect:/web/main/mainPage.do"; - // } - // } - //} - - //기존 결제 내역이 있는 회원인지 확인 - int payCnt = 0; - if(StringUtil.isNotEmpty(userId)) { - //결제내역 카운트 조회 - payCnt = mjonPayService.selectMemerPayCount(userId); - - if(payCnt > 0) { - - redirectAttributes.addFlashAttribute("message", "고객님께서는 첫결제 이벤트 대상이 아닙니다."); - return "redirect:/web/main/mainPage.do"; - - }else { - - String bbsId = "BBSMSTR_000000000731"; //이벤트 게시판 번호 - String nttSj = "[첫결제 이벤트] 첫 결제 시, 누구나 조건 없이 인생 최저가!"; - BoardVO resultEvent = selectEventBoardInfo(bbsId, nttSj); - - - if(resultEvent != null) {//진행중 이벤트 이면 이벤트 게시글 번호 셋팅 - - // Step 0. B선 전송사 이용고객 => 이벤트대상 제외처리 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setMberId(userId); - String blineCode = mberManageService.selectBlineCodeByMberId(mberManageVO); - if (blineCode != null && blineCode.equals("N")) { - //이벤트 회원 정보 조회 - MjonEventVO mjonEventVO = new MjonEventVO(); - MjonEventVO eventMberInfo = selectEventMsgMberDefaultInfo(mjonEventVO, resultEvent.getNttId(), bbsId, loginVO.getId(), loginVO.getName()); - - int resultCnt = 0; - - if(eventMberInfo == null) {//등록된 회원정보가 없으면 정보 입력 - mjonEventVO.setEventStatus("N"); - resultCnt = mjonEventService.insertEventMsgMberDefaultInfo(mjonEventVO); - }else {//등록된 회원정보가 있으면 화면 이동 및 메세지 처리 - - String status = eventMberInfo.getEventStatus(); - - if(status.equals("Y")) {//이벤트가 진행중인 경우 - - redirectAttributes.addFlashAttribute("message", "현재 첫 결제 이벤트를 진행중입니다."); - return "redirect:/web/main/mainPage.do"; - - }else if(status.equals("E")) {//이벤트가 종료된 경우 - - redirectAttributes.addFlashAttribute("message", "현재 첫 결제 이벤트를 완료 하였습니다."); - return "redirect:/web/main/mainPage.do"; - - } - - } - } - else { - redirectAttributes.addFlashAttribute("message", "이벤트 대상자가 아닙니다."); - return "redirect:/web/main/mainPage.do"; - } - - }else {//이벤트 게시글 정보가 없으면 0으로 셋팅. - - redirectAttributes.addFlashAttribute("message", "첫 결제 이벤트는 종료 되었습니다."); - return "redirect:/web/main/mainPage.do"; - - } - - } - - } - - MberManageVO mberManageVO = mberManageService.selectMber(loginVO.getId()); - model.addAttribute("mberManageVO", mberManageVO); - - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - if(userId != "") { - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - model.addAttribute("mjonCandidateVO",mjonCandidateVO); - } - - mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "nicepay/payResultAjax.do") ; - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonPayVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonPayVO.getPageUnit()); - paginationInfo.setPageSize(mjonPayVO.getPageSize()); - - mjonPayVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonPayVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonPayVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonPayVO.setSearchSortCnd("moid"); - mjonPayVO.setSearchSortOrd("desc"); - } - mjonPayVO.setUserId(loginVO.getId()); - - /*List resultList = mjonPayService.selectPayList(mjonPayVO);*/ - - /*model.addAttribute("resultList", resultList); - paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonPayVO)resultList.get(0)).getTotCnt() : 0);*/ - /*model.addAttribute("paginationInfo", paginationInfo);*/ - - //대상 리스트 가져오기 - VacsVactVO vacsVactVO = new VacsVactVO(); - vacsVactVO.setMberId(loginVO.getId()); - //List bankList = vacsVactService.selectBankAcctList(tempVO); //할당 가능한 계좌 수량 리스트 받아오기 - List bankList = vacsVactService.selectBankAcctAllList(vacsVactVO); //할당 가능한 계좌 수량 리스트 받아오기 - List myBankList = vacsVactService.selectMyBankAcctList(vacsVactVO); //내가 할당받은 전용계좌 리스트 받아오기 - - MjonVaMsgLogVO vaMsgLogVO = new MjonVaMsgLogVO(); - vaMsgLogVO.setMberId(loginVO.getId()); - - Date now = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - String date = sdf.format(now); - vaMsgLogVO.setSendDate(date); - - MjonVaMsgLogVO resultMsgInfo = mjonPayService.selectMyAcctSendCnt(vaMsgLogVO); - - //대상 리스트, 페이징 정보 전달 - model.addAttribute("resultList", bankList); - model.addAttribute("resultMyList", myBankList); - model.addAttribute("resultMsgInfo", resultMsgInfo); - model.addAttribute("mjonPayVO", mjonPayVO); - - // 탭이동 - String tabType = "1"; - if(request.getParameter("tabType") != null) { - tabType = request.getParameter("tabType"); - } - model.addAttribute("tabType", tabType); - - return "/web/event/pay/EventPayView"; - } - - - //이벤트 게시글 정보 불러오기 함수 - public BoardVO selectEventBoardInfo(String bbsId, String nttSj) throws Exception{ - - BoardVO boardVO = new BoardVO(); - boardVO.setBbsId(bbsId); - boardVO.setNttSj(nttSj); - BoardVO resultEvent = mjonEventService.selectEventInfoByNttSj(boardVO); - - return resultEvent; - } - - //이벤트 회원 정보 불러오기 함수 - public MjonEventVO selectEventMsgMberDefaultInfo(MjonEventVO mjonEventVO, float nttId, String bbsId, String mberId, String mberNm) throws Exception{ - - mjonEventVO.setEventNttId(Float.toString(nttId)); - mjonEventVO.setEventBbsId(bbsId); - mjonEventVO.setMberId(mberId); - mjonEventVO.setMberNm(mberNm); - mjonEventVO.setEventShortPrice("7.5"); - mjonEventVO.setEventLongPrice("32"); - mjonEventVO.setEventPicturePrice("59"); - mjonEventVO.setEventPicture2Price("67"); - mjonEventVO.setEventPicture3Price("70"); - - //이벤트 회원정보 존재여부 확인 및 회원 정보 불러오기 - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - return eventMberInfo; - } - -} diff --git a/src/main/java/itn/let/mjo/human/web/MjonHumanPageController.java b/src/main/java/itn/let/mjo/human/web/MjonHumanPageController.java deleted file mode 100644 index 5883e44..0000000 --- a/src/main/java/itn/let/mjo/human/web/MjonHumanPageController.java +++ /dev/null @@ -1,98 +0,0 @@ -package itn.let.mjo.human.web; - -import java.util.List; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import itn.let.mjo.msgdata.web.MjonMsgDataController; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.uss.umt.service.UserManageVO; - -@Controller -public class MjonHumanPageController { - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - /** mberManageService */ - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class); - - @RequestMapping(value="/web/user/humanPage.do") - public String humanPageIndex() throws Exception { - - return "web/login/humanPage"; - } - - @RequestMapping(value="/web/user/humanPageAuthenticatedPage.do") - public String humanPageAuthenticatedUser() throws Exception { - - return "web/login/humanPageAuthenticatedPage"; - } - - @RequestMapping(value="/web/user/humanCertifiedAjax.do") - public ModelAndView humanCertifiedAjax( - HttpServletRequest request, HttpServletResponse response, ModelMap model, - @ModelAttribute("userManageVO") UserManageVO userManageVO) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - - UserManageVO userInfoVO = new UserManageVO(); - userInfoVO.setEmplyrNm(userManageVO.getEmplyrNm()); // 이름 - userInfoVO.setMblDn(userManageVO.getMblDn()); // Dn - - List usedNmList = userManageService.selectUserIdAjax(userInfoVO); - - boolean TorF = usedNmList.size() > 0 ? true : false; - - if (!TorF) { - System.out.println(TorF); - System.out.println(TorF); - - modelAndView.addObject("message", "입력하신 아이디/이름 정보에 맞는 회원이 없습니다."); - modelAndView.addObject("result", "fail-check"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - } - - MberManageVO mberManageVO = new MberManageVO(); - // 회원 휴면회원에서 일반회원으로 업데이트 - mberManageVO.setMberId(usedNmList.get(0).getEmplyrId()); //탈퇴사유 중 직접입력으로 타입 지정 - mberManageVO.setDormantYn("N"); - - int updateCount = mberManageService.updateUserDormant(mberManageVO); - - if(updateCount != 0) { - modelAndView.addObject("result", "success"); - }else { - modelAndView.addObject("result", "fail"); - } - }catch (Exception e) { - logger.error(e.getMessage(), e); - - } - - - return modelAndView; - } -} diff --git a/src/main/java/itn/let/mjo/kisa/web/KisaController.java b/src/main/java/itn/let/mjo/kisa/web/KisaController.java index 611d423..78f57c3 100644 --- a/src/main/java/itn/let/mjo/kisa/web/KisaController.java +++ b/src/main/java/itn/let/mjo/kisa/web/KisaController.java @@ -62,9 +62,6 @@ public class KisaController { @Resource(name="EgovFileMngUtil") private EgovFileMngUtil fileUtil; - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - @Resource(name = "EgovFileMngService") private EgovFileMngService fileService; @@ -250,7 +247,7 @@ public class KisaController { final Map files = multiRequest.getFileMap(); if (!files.isEmpty()) { List result = fileUtil.parseFileInf(files, "KISA_", 0, "", "", ""); - atchFileId = fileMngService.insertFileInfs(result); + atchFileId = fileService.insertFileInfs(result); kisaVO.setAtchFileId(atchFileId); } @@ -284,15 +281,15 @@ public class KisaController { if ("".equals(atchFileId)) { List result = fileUtil.parseFileInf(files, "KISA_", 0, atchFileId, "", ""); - atchFileId = fileMngService.insertFileInfs(result); + atchFileId = fileService.insertFileInfs(result); kisaVO.setAtchFileId(atchFileId); } else { FileVO fvo = new FileVO(); fvo.setAtchFileId(atchFileId); - int cnt = fileMngService.getMaxFileSN(fvo); + int cnt = fileService.getMaxFileSN(fvo); List result = fileUtil.parseFileInf(files, "KISA_", cnt, atchFileId, "", ""); - fileMngService.updateFileInfs(result); + fileService.updateFileInfs(result); } } diff --git a/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java b/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java index d121783..8f4875d 100644 --- a/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java +++ b/src/main/java/itn/let/mjo/mjocommon/MjonCommon.java @@ -349,71 +349,6 @@ public class MjonCommon { return mjonMsgVO; } - /* - @SuppressWarnings("unchecked") - public void getAdminKakaoAtSandSlack(KakaoVO kakaoVO) { - - HttpClient client = new HttpClient(); - PostMethod post = new PostMethod(SLACK_URL); - JSONObject json = new JSONObject(); - try { - - String reserveYn = kakaoVO.getReserveYn(); - String atDelayYn = kakaoVO.getAtDelayYn(); - String smsTxt = kakaoVO.getTemplateContent(); - String reservSmsTxt = ""; - String smisingSmsTxt = ""; - //예약문자를 발송하는 경우 문자 내용 앞에 "[예약]" 표시되도록 처리 - if(reserveYn.equals("Y")) { - - if(atDelayYn.equals("Y")) {//예약문자 중 스미싱의심 일 경우 - reservSmsTxt = "[스미싱의심][예약]" + smsTxt; - }else { - reservSmsTxt = "[예약]" + smsTxt; - } - smsTxt = reservSmsTxt; - }else if(atDelayYn.equals("Y")) { - - smisingSmsTxt = "[스미싱의심]" + smsTxt; - smsTxt = smisingSmsTxt; - } - - String sandName = kakaoVO.getCallFrom(); - String userId = kakaoVO.getUserId(); - String msgType = ""; - - if(kakaoVO.getMsgType().equals("8")) { - msgType = "[알림톡]"; - }else if(kakaoVO.getMsgType().equals("9")){ - msgType = "[친구톡]"; - } - sandName = "[" + userId + "]" + "[" + sandName + "]" + msgType; - - json.put("channel", SLACK_CHANNEL); - json.put("text", smsTxt); - json.put("username", sandName); - - - post.addParameter("payload", json.toString()); - // 처음에 utf-8로 content-type안넣어주니까 한글은 깨져서 content-type넣어줌 - post.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); - int responseCode = client.executeMethod(post); - String response = post.getResponseBodyAsString(); - if (responseCode != HttpStatus.SC_OK) { - System.out.println("Response: " + response); - } - } catch (IllegalArgumentException e) { - System.out.println("IllegalArgumentException posting to Slack " + e); - } catch (IOException e) { - System.out.println("IOException posting to Slack " + e); - } catch (Exception e) { - System.out.println("Exception posting to Slack " + e); - } finally { - post.releaseConnection(); - } - - } - */ public String getCreateMsgUserIdgen(String subUserId, String lastId) throws Exception{ @@ -449,42 +384,36 @@ public class MjonCommon { } - - -private String formatSandName(MjonMsgVO mjonMsgVO) { - String userId = mjonMsgVO.getUserId(); - String callFrom = mjonMsgVO.getCallFrom(); - String msgType = getMessageTypeLabel(mjonMsgVO); - - return String.format("[%s][%s]%s", userId, callFrom, msgType); -} - -private String getMessageTypeLabel(MjonMsgVO mjonMsgVO) { - String msgType = mjonMsgVO.getMsgType(); - int fileCount = parseIntOrDefault(mjonMsgVO.getFileCnt(), 0); - - switch (msgType) { - case "4": - return "[단문]"; - case "6": - return fileCount == 0 ? "[장문]" : "[그림]"; - default: - return ""; - } -} - - -private int parseIntOrDefault(String value, int defaultValue) { - try { - return Integer.parseInt(value); - } catch (NumberFormatException e) { - return defaultValue; - } -} - - + private String formatSandName(MjonMsgVO mjonMsgVO) { + String userId = mjonMsgVO.getUserId(); + String callFrom = mjonMsgVO.getCallFrom(); + String msgType = getMessageTypeLabel(mjonMsgVO); + + return String.format("[%s][%s]%s", userId, callFrom, msgType); + } + + private String getMessageTypeLabel(MjonMsgVO mjonMsgVO) { + String msgType = mjonMsgVO.getMsgType(); + int fileCount = parseIntOrDefault(mjonMsgVO.getFileCnt(), 0); + + switch (msgType) { + case "4": + return "[단문]"; + case "6": + return fileCount == 0 ? "[장문]" : "[그림]"; + default: + return ""; + } + } + private int parseIntOrDefault(String value, int defaultValue) { + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + return defaultValue; + } + } /** * @methodName : processUserAndCheckSms @@ -549,10 +478,6 @@ private int parseIntOrDefault(String value, int defaultValue) { // 사용자 정보 조회 및 기본값 처리 public UserManageVO getUserManageInfo(String userId) throws Exception { -// UserManageVO userManageVO = new UserManageVO(); -// userManageVO.setAdminSmsNoticeYn("Y"); // 기본값 -// userManageVO.setSmishingYn("N"); // 기본값 -// return userManageService.selectAdminSmsNoticeYn(new UserManageVO(userId)); } @@ -744,8 +669,4 @@ private int parseIntOrDefault(String value, int defaultValue) { return result; } - - - - } diff --git a/src/main/java/itn/let/mjo/msg/web/MjonMsgController.java b/src/main/java/itn/let/mjo/msg/web/MjonMsgController.java index 9cc4028..74fcac9 100644 --- a/src/main/java/itn/let/mjo/msg/web/MjonMsgController.java +++ b/src/main/java/itn/let/mjo/msg/web/MjonMsgController.java @@ -124,9 +124,6 @@ public class MjonMsgController { @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - @Resource(name = "certService") private CertService certService; @@ -161,57 +158,11 @@ public class MjonMsgController { @Resource(name = "egovMberCmpHstService") private EgovMberCmpHstService egovMberCmpHstService; - @Resource(name = "EgovFileMngService") - private EgovFileMngService fileService; - //전용계좌 서비스 @Resource(name = "vacsVactService") private VacsVactService vacsVactService; - //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} - private String[][] sendMsgExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "아이디" , "itn" , ""}, - {"2", "발신번호" , "01012345678", ""}, - {"3", "발송건수" , "3", ""}, - {"4", "요청시간" , "2021-06-01 19:05:12", ""}, - {"5", "내용" , "문자메시지 내용", ""}, - {"6", "메시지타입" , "SMS전송", ""}, - {"7", "접속기기" , "", ""}, - {"8", "메시지타입" , "NPRO(아이하트)", ""} - }; - //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} - private String[][] sendMsgDtlExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "아이디" , "itn" , ""}, - {"2", "발신번호" , "01012345678", ""}, - {"3", "수신번호" , "01012345678", ""}, - {"4", "전송시간" , "2021-06-01 19:19:57", ""}, - {"5", "내용" , "문자메시지 내용", ""}, - {"6", "현재상태" , "결과수신", ""}, - {"7", "처리결과" , "410/i", ""}, - {"8", "메시지타입" , "SMS전송", ""}, - {"9", "접속기기" , "", ""}, - {"10", "메시지타입" , "NPRO(아이하트)", ""}, - {"11", "통신사" , "ETC", ""} , - {"12", "삭제여부" , "미삭제", ""} - } ; - - //회원정보 팝업 최근 발송 문자 리스트 엑셀 다운로드 - private String[][] sendMsgUsrExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "아이디" , "itn" , ""}, - {"2", "발신번호" , "01012345678", ""}, - {"3", "요청시간" , "2021-06-01 19:05:12", ""}, - {"4", "내용" , "문자메시지 내용", ""}, - {"5", "문자종류" , "SMS전송", ""}, - {"6", "건수" , "", ""}, - {"7", "금액" , "", ""}, - {"8", "발송결과" , "", ""}, - {"9", "전송사" , "", ""} - }; - /** * 문자전송 리스트 @@ -1762,7 +1713,7 @@ public class MjonMsgController { * @return "/uss/ion/msg/SendNumberList" * @throws Exception */ - @RequestMapping(value= {"/uss/ion/msg/SendNumberList.do" , "/web/msg/SendNumberList.do","/uss/ion/msg/BlockNumberList.do" , "/web/msg/SendNumberList.do"}) + @RequestMapping(value= {"/uss/ion/msg/SendNumberList.do"}) public String MjonNumberList(@ModelAttribute("searchVO") MjPhoneMemberVO searchVO, HttpServletRequest request, ModelMap model) throws Exception{ @@ -1812,14 +1763,6 @@ public class MjonMsgController { searchVO.setPhmType("01"); //발신조회 } - /* - if(pattern.equals("/uss/ion/msg/SendNumberList.do") || pattern.equals("/web/msg/SendNumberList.do")) { - searchVO.setPhmType("01"); //발신조회 - }else { - searchVO.setPhmType("03"); //거부조회 - } - */ - if(pattern.equals("/uss/ion/msg/SendNumberList.do") || pattern.equals("/web/msg/SendNumberList.do")) { // searchVO.setPhmType("01"); //발신조회 }else { @@ -2713,237 +2656,6 @@ public class MjonMsgController { return "/uss/ion/msg/ReceiveNumberList"; } - - - /** - * 전화인증 - * @param searchVO - * @param model - * @return "/uss/ion/msg/LankSendNumber" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/ArsAuthAjax.do"}) - public ModelAndView ArsAuthAjax(@ModelAttribute("searchVO") MjPhoneMemberVO searchVO, - HttpServletRequest request, - HttpSession session, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - String result =""; - String userid = "itn0202"; //ARS 관리자 가입 Id - String type = "0"; //0=음성인증 : 인증번호를 듣고 화면에 입력, 1=SMS 문자인증 : 기존 문자인증과 동일한 기능, 2=음성인증(단순확인):음성안내 후 폰에 1자리 번호 입력, 3=음성인증(인증번호):인증번호를 화면 또는 전화 음성 확인 후 폰에 인증번호 입력 - String callee = searchVO.getPhoneNumber(); //고객 전화번호 - String code = ""; //4~6자리 인증번호(음성 ARS 에서 인증하라고 하는 번호: ITN에서 임의로 생성) - String svcnumber = "221"; //개통 후 별도 안내 ( hjhauth.jar JDK 1.8 사용조건) - String command = "API_101000"; //요청코드 고정값 - boolean is1MinutePass = true; - - // Start - SendLogVO sendLogVO2 = new SendLogVO(); - sendLogVO2.setReceive(callee); - sendLogVO2 = mjonMsgDataService.selectSysMsgLog(sendLogVO2); - if (sendLogVO2 == null) { - // Pass : 1분 경과 - } else { - // 시간 비교 - Date nowDate = new Date(); - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date compareDate = format.parse(sendLogVO2.getFrstSendPnttm()); - - Calendar cal = Calendar.getInstance(); - cal.setTime(compareDate); - // 1분 추가 - cal.add(Calendar.MINUTE, +1); - - compareDate = cal.getTime(); - - if (compareDate.compareTo(nowDate) < 0) { - // Pass : 1분 경과 - } else if (compareDate.compareTo(nowDate) > 0) { - // 제한 : 1분 미만 - is1MinutePass = false; - } - } - - // 1분 경과 - if (is1MinutePass == true) { - //인증번호 랜덤 생성 - long seed = System.currentTimeMillis(); - Random random = new Random(seed); - //code = Integer.toString(random.nextInt(4)); - StringBuffer randomCode = new StringBuffer(); - for(int i=0; i<6; i++) { - code = randomCode.append(Integer.toString(random.nextInt(10))).toString(); - } - - try{ - Authentication auth = new Authentication(); - auth.setUserid(userid); - auth.setType("0"); - auth.setCallee(callee); - auth.setCode(code); - auth.setSvcnumber(svcnumber); //jdk 1.8 버전부터 적용 - //boolean bool_rtn = auth.send_Auth_Seed(); - - //전달 받은 전화번호로 전화를 걸어준다. - boolean bool_rtn = auth.send_Auth_Stan(); - - result = auth.getResult(); - - //접속 아이피 정보를 받아온다. - ClientIP clientIp = new ClientIP(); - String ip = clientIp.getClientIP(request); - - //세션에 인증 정보를 저장해 준다. - AuthCertVO certVO = new AuthCertVO(); - certVO.setCertPhone(callee); - certVO.setCertCode(code); - certVO.setCertIpaddr(ip); - certVO.setCertType("ARS전화인증"); - certVO.setCertResult(result); - - Date now = new Date(); - - SimpleDateFormat transFormat = new SimpleDateFormat("yyyyMMddHHmmss"); - - //현재 날짜 저장하기 - certVO.setCertDate(transFormat.format(now)); - request.getSession().setAttribute("AuthARSCertVO", certVO); - - // 본인인증 확인용 - /*session = request.getSession(); - - AuthCertVO certArsVO = (AuthCertVO) session.getAttribute("AuthARSCertVO"); - System.out.println("++++++++++++++++ code ::: "+certArsVO.getCertCode()); - System.out.println("++++++++++++++++ phone ::: "+certArsVO.getCertPhone()); - System.out.println("++++++++++++++++ ip ::: "+certArsVO.getCertIpaddr());*/ - - model.addAttribute("result", result); - model.addAttribute("certCode", code); - - // Step1. 문자발송 - Map mapInfo = new HashMap(); - mapInfo = sendMsgData("system", code, "15518011", callee); - isSuccess = Boolean.parseBoolean((mapInfo.get("IsSuccess").toString())); - msg = mapInfo.get("Msg").toString(); - }catch(Exception e) { - //throw new AppException(new ErrorHandler("AuthVoice",e.getMessage()).getMessage()); - System.out.print(e); - } - } - else { - isSuccess = false; - msg = "1분후 인증번호 발송해주세요."; - } - - model.addAttribute("result", result); - model.addAttribute("certCode", code); - model.addAttribute("isSuccess", isSuccess); - model.addAttribute("msg", msg); - - return modelAndView; - } - - // 문자발송 - public Map sendMsgData(String userId, String code, String fromMobile, String toMobile) throws Exception{ - boolean isSuccess = true; - String msg = "인증번호 문자 전송이 완료되었습니다."; - String resultSts = "0"; - String resultBlockSts = "0"; - boolean is1MinutePass = true; - - String smsTxt = "[문자온] 인증번호 : " + code; - - try { - Date nowDate = new Date(); - SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); - - MjonMsgVO mjonMsgVO = new MjonMsgVO(); - mjonMsgVO.setUserId("system"); - - String msgType = "4"; - - // 전송사 전송 배분 - MjonMsgVO pramVO = new MjonMsgVO(); - List sendRateList = mjonMsgService.selectTodayAgentSendCntList(pramVO); // 전송사 전송 배분률 및 현재 전송건수 - // 조회 - for (MjonMsgVO tmpVO : sendRateList) { - float cnt = Float.parseFloat(tmpVO.getMsgGroupCnt()); - float totCnt = tmpVO.getTotCnt(); - tmpVO.setSendRateInfo(Float.parseFloat(tmpVO.getSendRate()) - (cnt / totCnt * 100)); // 배분률 - 현재전송 비율 - } - - String sendAgent = sendRateList.get(0).getAgentCode(); - float maxRate = sendRateList.get(0).getSendRateInfo(); - for (MjonMsgVO tmpVO : sendRateList) { // 배분률 대비 현재전송 비율이 가장 적은거 찾기 - if (maxRate < tmpVO.getSendRateInfo()) { - maxRate = tmpVO.getSendRateInfo(); - sendAgent = tmpVO.getAgentCode(); - } - } - - mjonMsgVO.setMsgDiv("S"); // 단문 - - // 문자타입별 대표전송사 정보 - MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); - mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO); - // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 - mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 - // 전송금액 - mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 - mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 - - mjonMsgVO.setMsgType("4"); - mjonMsgVO.setSmsTxt(smsTxt); - mjonMsgVO.setCallFrom(fromMobile); - mjonMsgVO.setCallTo(toMobile); - mjonMsgVO.setReserveYn("N"); // 즉시 전송 - mjonMsgVO.setMsgGroupCnt("0"); - mjonMsgVO.setUserId(userId); - mjonMsgVO.setMsgPayCode("SMS"); - mjonMsgVO.setReqDate(simpleDateFormat2.format(nowDate)); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = returnVO.getSendMsgCnt(); - resultBlockSts = returnVO.getSendMsgBlockCnt(); - - // 시스템 발송 로그 - SendLogVO sendLogVO = new SendLogVO(); - // SendType 1:문자로 발송 2:이메일로 발송 - sendLogVO.setSendId(returnVO.getMsgGroupId()); - sendLogVO.setSendType("1"); - sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom()); - sendLogVO.setReceive(mjonMsgVO.getCallTo()); - sendLogVO.setCheckNo(code); - sendLogVO.setContents(smsTxt); - - mjonMsgDataService.insertSysMsgLog(sendLogVO); - - if (!resultSts.equals("0")) { - isSuccess = true; - msg = "문자 전송이 완료되었습니다."; - } else { - isSuccess = false; - msg = "문자 전송에 오류가 발생하였습니다."; - } - - } catch (Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - - Map mapInfo = new HashMap(); - mapInfo.put("IsSuccess", isSuccess); - mapInfo.put("Msg", msg); - - return mapInfo; - } - /** * 전송사 발송 결과 코드 리스트 * @param MjonMsgResultCodeVO @@ -4281,54 +3993,6 @@ public class MjonMsgController { return modelAndView; } - public boolean getCompareReqDateList(String[] arrMsgGroupId, String userId) throws Exception { - - boolean compareStatus = true; - - try { - - MjonResvMsgVO mjonResvMsgVO = new MjonResvMsgVO(); - mjonResvMsgVO.setUserId(userId);//회원 아이디 - - int resultSts = 0; - - //문자 그룹 정보 체크하기 - List groupIdList = new ArrayList(); - for(String msgGId : arrMsgGroupId) { - - groupIdList.add(msgGId); - - } - - mjonResvMsgVO.setMsgGroupIdList(groupIdList); - - List resultMsgReqDateList = mjonMsgService.selectMsgGroupDataReqDateList(mjonResvMsgVO); - String compareDate = ""; - - for(int i=0; i < resultMsgReqDateList.size(); i++) { - - System.out.println(resultMsgReqDateList.get(i).getStrReqDate()); - - String toDate = resultMsgReqDateList.get(i).getStrReqDate(); - - compareDate = MJUtil.getCompareDateToSeconds(toDate); - - if(compareDate.equals("after")) {//발송 예정 일자가 현재시간 이전이면 false를 리턴함. - - compareStatus = false; - return compareStatus; - } - - } - - } catch (Exception e) { - System.out.println("+++++++++++++++++++++++++++++++++++ getCompareReqDateList Controller Error !!!! "+e); - return compareStatus; - } - - - return compareStatus; - } /** * 관리자 이메일 발송 처리 @@ -5426,7 +5090,7 @@ public class MjonMsgController { fileVO.setAtchFileId(workAtchFileId); } - FileVO fvo = fileService.selectFileInf(fileVO); + FileVO fvo = fileMngService.selectFileInf(fileVO); String path = ""; String fileType = ""; String[] imgExtArray = {"bmp", "gif", "jpeg", "jpg", "png", "tif", "tiff", "psd", "rle"}; @@ -5484,7 +5148,7 @@ public class MjonMsgController { , ModelMap model , HttpServletRequest request) throws Exception { - FileVO fvo = fileService.selectFileInf(fileVO); + FileVO fvo = fileMngService.selectFileInf(fileVO); String path = ""; String fileType = ""; String[] imgExtArray = {"bmp", "gif", "jpeg", "jpg", "png", "tif", "tiff", "psd", "rle"}; @@ -5507,7 +5171,7 @@ public class MjonMsgController { // 첨부파일 목록 - List fileList = fileService.selectFileInfs(fileVO); + List fileList = fileMngService.selectFileInfs(fileVO); model.addAttribute("fileList", fileList); // 파라미터 @@ -5634,4 +5298,194 @@ public class MjonMsgController { return "/uss/ion/msg/pdfViewPhone"; } + // 문자발송 + public Map sendMsgData(String userId, String code, String fromMobile, String toMobile) throws Exception{ + boolean isSuccess = true; + String msg = "인증번호 문자 전송이 완료되었습니다."; + String resultSts = "0"; + String resultBlockSts = "0"; + boolean is1MinutePass = true; + + String smsTxt = "[문자온] 인증번호 : " + code; + + try { + Date nowDate = new Date(); + SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + + MjonMsgVO mjonMsgVO = new MjonMsgVO(); + mjonMsgVO.setUserId("system"); + + String msgType = "4"; + + // 전송사 전송 배분 + MjonMsgVO pramVO = new MjonMsgVO(); + List sendRateList = mjonMsgService.selectTodayAgentSendCntList(pramVO); // 전송사 전송 배분률 및 현재 전송건수 + // 조회 + for (MjonMsgVO tmpVO : sendRateList) { + float cnt = Float.parseFloat(tmpVO.getMsgGroupCnt()); + float totCnt = tmpVO.getTotCnt(); + tmpVO.setSendRateInfo(Float.parseFloat(tmpVO.getSendRate()) - (cnt / totCnt * 100)); // 배분률 - 현재전송 비율 + } + + String sendAgent = sendRateList.get(0).getAgentCode(); + float maxRate = sendRateList.get(0).getSendRateInfo(); + for (MjonMsgVO tmpVO : sendRateList) { // 배분률 대비 현재전송 비율이 가장 적은거 찾기 + if (maxRate < tmpVO.getSendRateInfo()) { + maxRate = tmpVO.getSendRateInfo(); + sendAgent = tmpVO.getAgentCode(); + } + } + + mjonMsgVO.setMsgDiv("S"); // 단문 + + // 문자타입별 대표전송사 정보 + MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); + mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO); + // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 + mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 + // 전송금액 + mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 + mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 + + mjonMsgVO.setMsgType("4"); + mjonMsgVO.setSmsTxt(smsTxt); + mjonMsgVO.setCallFrom(fromMobile); + mjonMsgVO.setCallTo(toMobile); + mjonMsgVO.setReserveYn("N"); // 즉시 전송 + mjonMsgVO.setMsgGroupCnt("0"); + mjonMsgVO.setUserId(userId); + mjonMsgVO.setMsgPayCode("SMS"); + mjonMsgVO.setReqDate(simpleDateFormat2.format(nowDate)); + MjonMsgReturnVO returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO); + mjonMsgVO.setAgentCode(returnVO.getAgentCode()); + resultSts = returnVO.getSendMsgCnt(); + resultBlockSts = returnVO.getSendMsgBlockCnt(); + + // 시스템 발송 로그 + SendLogVO sendLogVO = new SendLogVO(); + // SendType 1:문자로 발송 2:이메일로 발송 + sendLogVO.setSendId(returnVO.getMsgGroupId()); + sendLogVO.setSendType("1"); + sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom()); + sendLogVO.setReceive(mjonMsgVO.getCallTo()); + sendLogVO.setCheckNo(code); + sendLogVO.setContents(smsTxt); + + mjonMsgDataService.insertSysMsgLog(sendLogVO); + + if (!resultSts.equals("0")) { + isSuccess = true; + msg = "문자 전송이 완료되었습니다."; + } else { + isSuccess = false; + msg = "문자 전송에 오류가 발생하였습니다."; + } + + } catch (Exception e) { + isSuccess = false; + msg = e.getMessage(); + } + + + Map mapInfo = new HashMap(); + mapInfo.put("IsSuccess", isSuccess); + mapInfo.put("Msg", msg); + + return mapInfo; + } + + public boolean getCompareReqDateList(String[] arrMsgGroupId, String userId) throws Exception { + + boolean compareStatus = true; + + try { + + MjonResvMsgVO mjonResvMsgVO = new MjonResvMsgVO(); + mjonResvMsgVO.setUserId(userId);//회원 아이디 + + int resultSts = 0; + + //문자 그룹 정보 체크하기 + List groupIdList = new ArrayList(); + for(String msgGId : arrMsgGroupId) { + + groupIdList.add(msgGId); + + } + + mjonResvMsgVO.setMsgGroupIdList(groupIdList); + + List resultMsgReqDateList = mjonMsgService.selectMsgGroupDataReqDateList(mjonResvMsgVO); + String compareDate = ""; + + for(int i=0; i < resultMsgReqDateList.size(); i++) { + + System.out.println(resultMsgReqDateList.get(i).getStrReqDate()); + + String toDate = resultMsgReqDateList.get(i).getStrReqDate(); + + compareDate = MJUtil.getCompareDateToSeconds(toDate); + + if(compareDate.equals("after")) {//발송 예정 일자가 현재시간 이전이면 false를 리턴함. + + compareStatus = false; + return compareStatus; + } + + } + + } catch (Exception e) { + System.out.println("+++++++++++++++++++++++++++++++++++ getCompareReqDateList Controller Error !!!! "+e); + return compareStatus; + } + + + return compareStatus; + } + + //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} + private String[][] sendMsgExcelValue ={ + {"0" ,"번호" , "1" , "" }, + {"1", "아이디" , "itn" , ""}, + {"2", "발신번호" , "01012345678", ""}, + {"3", "발송건수" , "3", ""}, + {"4", "요청시간" , "2021-06-01 19:05:12", ""}, + {"5", "내용" , "문자메시지 내용", ""}, + {"6", "메시지타입" , "SMS전송", ""}, + {"7", "접속기기" , "", ""}, + {"8", "메시지타입" , "NPRO(아이하트)", ""} + }; + + //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} + private String[][] sendMsgDtlExcelValue ={ + {"0" ,"번호" , "1" , "" }, + {"1", "아이디" , "itn" , ""}, + {"2", "발신번호" , "01012345678", ""}, + {"3", "수신번호" , "01012345678", ""}, + {"4", "전송시간" , "2021-06-01 19:19:57", ""}, + {"5", "내용" , "문자메시지 내용", ""}, + {"6", "현재상태" , "결과수신", ""}, + {"7", "처리결과" , "410/i", ""}, + {"8", "메시지타입" , "SMS전송", ""}, + {"9", "접속기기" , "", ""}, + {"10", "메시지타입" , "NPRO(아이하트)", ""}, + {"11", "통신사" , "ETC", ""} , + {"12", "삭제여부" , "미삭제", ""} + } ; + + //회원정보 팝업 최근 발송 문자 리스트 엑셀 다운로드 + private String[][] sendMsgUsrExcelValue ={ + {"0" ,"번호" , "1" , "" }, + {"1", "아이디" , "itn" , ""}, + {"2", "발신번호" , "01012345678", ""}, + {"3", "요청시간" , "2021-06-01 19:05:12", ""}, + {"4", "내용" , "문자메시지 내용", ""}, + {"5", "문자종류" , "SMS전송", ""}, + {"6", "건수" , "", ""}, + {"7", "금액" , "", ""}, + {"8", "발송결과" , "", ""}, + {"9", "전송사" , "", ""} + }; + + } \ No newline at end of file diff --git a/src/main/java/itn/let/mjo/msgCustom/web/MjonMsgCustomController.java b/src/main/java/itn/let/mjo/msgCustom/web/MjonMsgCustomController.java index 69073a4..380b6e8 100644 --- a/src/main/java/itn/let/mjo/msgCustom/web/MjonMsgCustomController.java +++ b/src/main/java/itn/let/mjo/msgCustom/web/MjonMsgCustomController.java @@ -49,9 +49,6 @@ public class MjonMsgCustomController { @Resource(name = "EgovCmmUseService") private EgovCmmUseService cmmUseService; - @Resource(name = "EgovFileMngService") - private EgovFileMngService fileService; - @Resource(name = "mjonPayService") private MjonPayService mjonPayService; @@ -145,7 +142,7 @@ public class MjonMsgCustomController { if("05".equals(mjonMsgCustomInfo.getCustomPaymentYn())) { FileVO fileVO = new FileVO(); fileVO.setAtchFileId(mjonMsgCustomInfo.getCustomResultImg()); - List fileList = fileService.selectFileInfs(fileVO); + List fileList = fileMngService.selectFileInfs(fileVO); model.addAttribute("fileList", fileList); } return "/uss/ion/custom/MsgCustomInfo"; @@ -176,7 +173,7 @@ public class MjonMsgCustomController { fileVO.setAtchFileId(sampleId[i]); fileVO.setFileSn(sampleFileSn[i]); // fileVO.setFileSn(fileSn); - List result = fileService.selectImageFileList(fileVO); + List result = fileMngService.selectImageFileList(fileVO); imgList.addAll(result); } @@ -200,7 +197,7 @@ public class MjonMsgCustomController { String customPaymentYn = (String) commandMap.get("customPaymentYn"); fileVO.setAtchFileId(atchFileId); - List result = fileService.selectFileInfs(fileVO); + List result = fileMngService.selectFileInfs(fileVO); model.addAttribute("fileList", result); model.addAttribute("updateFlag", "N"); model.addAttribute("fileListCnt", result.size()); diff --git a/src/main/java/itn/let/mjo/msgCustom/web/MjonMsgCustomWebController.java b/src/main/java/itn/let/mjo/msgCustom/web/MjonMsgCustomWebController.java deleted file mode 100644 index 739b92e..0000000 --- a/src/main/java/itn/let/mjo/msgCustom/web/MjonMsgCustomWebController.java +++ /dev/null @@ -1,573 +0,0 @@ -package itn.let.mjo.msgCustom.web; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -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.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import com.ibm.icu.text.DecimalFormat; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.psl.dataaccess.util.EgovMap; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.ComDefaultCodeVO; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.service.FileVO; -import itn.com.cmm.util.DateUtils; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.lett.service.HashConfVO; -import itn.let.lett.service.LetterService; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.msg.service.MjonMsgVO; -import itn.let.mjo.msgCustom.service.MjonMsgCustomService; -import itn.let.mjo.msgCustom.service.MjonMsgCustomVO; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.sym.ccm.cde.service.CateCode; -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.utl.user.service.MjonNoticeSendUtil; - -@Controller -public class MjonMsgCustomWebController { - - @Resource(name = "mjonMsgCustomService") - private MjonMsgCustomService mjonMsgCustomService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "LetterService") - private LetterService letterService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - @Resource(name = "EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name = "EgovFileMngService") - private EgovFileMngService fileMngService; - - /** 첨부파일 저장경로 */ - @Value("#{globalSettings['Globals.file.saveDir']}") - private String fileSaveDir; - - /** 알림전송 Util */ - @Resource(name = "mjonNoticeSendUtil") - private MjonNoticeSendUtil mjonNoticeSendUtil; - - @Resource(name="MjonCommon") - private MjonCommon mjonCommon; - - /** 사이트 설정 */ - @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; - - /** 사용자 맞춤제작 화면*/ - @RequestMapping(value= {"/web/mjon/custom/selectMsgCustomView.do"}) - public String selectMsgCustomView(@ModelAttribute("searchVO") MjonMsgCustomVO mjonMsgCustomVO - , HttpServletRequest request - , ModelMap model) throws Exception{ - - String url = request.getHeader("REFERER"); - if(url != null) { - if(url.contains("web/mjon/msgcampain/selectMsgDataView.do")) { - model.addAttribute("msgcampain", request.getParameter("pageType")); - } - } - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - // 맞춤문자 설정 - mjonMsgCustomVO.setLetterType("C"); - String categoryType = "C"; - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - // 문자 해쉬태그 리스트 불러오기 - String msgType = "C"; - List hashTagList = letterService.selectHashTagWithList(msgType); - model.addAttribute("hashTagList", hashTagList); - model.addAttribute("mjonMsgCustomVO", mjonMsgCustomVO); - model.addAttribute("loginVO", loginVO); - - for(int i=0 ; i < cateConfList.size(); i++) { - if("선거".equals(cateConfList.get(i).getCateNm())) { - mjonMsgCustomVO.setCategoryCode(cateConfList.get(i).getCateCode()); - } - } - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - String customSamplePrice = "0"; // 문자온 샘플 수정(글자, 색상, 폰트 등) - String customEditPrice = "0"; // 이미지 편집(첨부이미지 1장) - String customEdit3Price = "0"; // 이미지 편집(첨부이미지 3장이하) - String customTextPrice = "0"; // 텍스트 단순수정 - - DecimalFormat df = new DecimalFormat("###,###"); - customSamplePrice = df.format(sysJoinSetVO.getCustomSamplePrice()); - customEditPrice = df.format(sysJoinSetVO.getCustomEditPrice()); - customEdit3Price = df.format(sysJoinSetVO.getCustomEdit3Price()); - customTextPrice = df.format(sysJoinSetVO.getCustomTextPrice()); - - model.addAttribute("customSamplePrice", customSamplePrice); - model.addAttribute("customEditPrice", customEditPrice); - model.addAttribute("customEdit3Price", customEdit3Price); - model.addAttribute("customTextPrice", customTextPrice); - - - // 내 보관함 - 기본 날짜 검색 셋팅 - // 오늘 날짜에서 365일 날짜 가져와서 - // 검색날짜에 입력 - model.addAttribute("myStartDate", DateUtils.getDateMonthsAgo(12)); - model.addAttribute("myEndDate", DateUtils.getCurrentDate()); - - - - return "/web/custom/MsgCustomView"; - } - - /** 사용자 맞춤제작 샘플 이미지 리스트*/ - @RequestMapping(value= {"/web/mjon/custom/selectMsgCustomSampleListAjax.do"}) - public String selectMsgCustomSampleListAjax(@ModelAttribute("searchVO") MjonMsgCustomVO mjonMsgCustomVO - , ModelMap model) throws Exception{ - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(mjonMsgCustomVO.getPageUnit() != 10) { - mjonMsgCustomVO.setPageUnit(mjonMsgCustomVO.getPageUnit()); - } - - if ("best".equals(mjonMsgCustomVO.getCategoryCode())) { - mjonMsgCustomVO.setBestCategory("Y"); - mjonMsgCustomVO.setCategoryCode(""); - - } - - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgCustomVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgCustomVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgCustomVO.getPageSize()); - - mjonMsgCustomVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgCustomVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgCustomVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - mjonMsgCustomVO.setLetterType("C"); - - // 그림 문자 리스트 - List resultCustomList = mjonMsgDataService.selectPhotoLetterList(mjonMsgCustomVO); - model.addAttribute("resultCustomList", resultCustomList); - paginationInfo.setTotalRecordCount( resultCustomList.size()> 0 ? ((Long)((EgovMap)resultCustomList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("mjonMsgCustomVO", mjonMsgCustomVO); - - return "/web/custom/MsgCustomListAjax"; - } - - /** 사용자 맞춤제작 내보관함 리스트*/ - @RequestMapping(value= {"/web/mjon/custom/selectMsgMyCustomListAjax.do"}) - public String selectMsgMyCustomListAjax(@ModelAttribute("searchVO") MjonMsgCustomVO mjonMsgCustomVO - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - redirectAttributes.addFlashAttribute("message", "맞춤제작 내보관함 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - - if(mjonMsgCustomVO.getPageUnit() != 10) { - mjonMsgCustomVO.setPageUnit(mjonMsgCustomVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgCustomVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgCustomVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgCustomVO.getPageSize()); - - mjonMsgCustomVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgCustomVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgCustomVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - mjonMsgCustomVO.setLetterType("C"); - - - // 검색 데이터가 없거나 - // 시작일자가 종료일자보다 이후이거나 - // 총 기간이 365일이 넘으면 현재일부터 365일 전 날짜를 넣어서 검색 - if(!DateUtils.dateChkAndValueChk(mjonMsgCustomVO.getSearchStartDate(),mjonMsgCustomVO.getSearchEndDate(), 12 )) { - - mjonMsgCustomVO.setSearchStartDate(DateUtils.getDateMonthsAgo(12)); - mjonMsgCustomVO.setSearchEndDate(DateUtils.getCurrentDate()); - - }; - - - - // 내 보관함 이미지 목록 조회 - mjonMsgCustomVO.setUserId(userId); - List resultCustomImgList = mjonMsgCustomService.selectMjonMsgMyCustomImgList(mjonMsgCustomVO); - - model.addAttribute("resultCustomList", resultCustomImgList); - paginationInfo.setTotalRecordCount( resultCustomImgList.size()> 0 ? resultCustomImgList.get(0).getTotCnt() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("mjonMsgCustomVO", mjonMsgCustomVO); - - return "/web/custom/MsgMyCustomListAjax"; - } - - - /** 사용자 맞춤제작 내보관함 삭제 - LETTNFILEDETAIL 테이블 FILE_DELETE_YN 컬럼 업데이트*/ - @RequestMapping(value= {"/web/mjon/custom/deleteMsgMyCustomAjax.do"}) - public ModelAndView deleteMsgMyCustomAjax(@RequestParam("chk") String[] chk, @ModelAttribute("searchVO") MjonMsgCustomVO mjonMsgCustomVO - , ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //최종수정 ID - 로그인 ID - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - mjonMsgCustomVO.setLastUpdusrId(user.getId()); - - try { - for(String target : chk) { - mjonMsgCustomVO.setAttachFileId(target.split("\\|")[0]); - mjonMsgCustomVO.setFileSn(target.split("\\|")[1]); - mjonMsgCustomService.deleteMsgMyCustomAjax(mjonMsgCustomVO); - } - modelAndView.addObject("result", "success"); - }catch (Exception e) { - modelAndView.addObject("message", "다시 시도 부탁드립니다."); - modelAndView.addObject("result", "fail"); - } - - return modelAndView; - } - - /** 사용자 맞춤제작 팝업*/ - @RequestMapping(value= {"/web/mjon/custom/selectMsgCustomPopupAjax.do"}) - public String selectMsgCustomPopupAjax(@ModelAttribute("searchVO") MjonMsgCustomVO mjonMsgCustomVO - , ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - double money = mberManageVO.getUserMoney(); - BigDecimal userMoney = new BigDecimal(money).setScale(0, RoundingMode.HALF_DOWN); - model.addAttribute("userMoney", userMoney); - } - - String categoryType = "C"; - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateConfList", cateConfList); - - ComDefaultCodeVO comDefaultCodeVO = new ComDefaultCodeVO(); - //제작형태 코드 조회 - comDefaultCodeVO.setCodeId("ITN030"); - List codeResult = cmmUseService.selectCmmCodeDetail(comDefaultCodeVO); - model.addAttribute("codeResult", codeResult); - - return "/web/custom/MsgCustomPopupAjax"; - } - - /** 사용자 맞춤제작 팝업 이미지 리스트*/ - @RequestMapping(value= {"/web/mjon/custom/selectCustomPopupImgListAjax.do"}) - public ModelAndView selectgCustomPopupImgListAjax(@ModelAttribute("searchVO") MjonMsgCustomVO mjonMsgCustomVO - , ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - if ("best".equals(mjonMsgCustomVO.getCategoryCode())) { - mjonMsgCustomVO.setBestCategory("Y"); - mjonMsgCustomVO.setCategoryCode(""); - - } - - // 샘플그림 리스트 조회 - List resultCustomList = mjonMsgDataService.selectCustomPopupImgList(mjonMsgCustomVO); - model.addAttribute("resultCustomList", resultCustomList); - modelAndView.addObject("status", "success"); - - return modelAndView; - } - - /** 첨부파일 포함하여 맞춤제작요청 등록*/ - @RequestMapping(value = {"/web/mjon/custom/insertCustomImgInfoAjax.do"}) - public ModelAndView insertCustomImgInfoAjax(final MultipartHttpServletRequest multiRequest - , MjonMsgCustomVO mjonMsgCustomVO - , HttpServletRequest request) throws Exception { - - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - MjonMsgVO mjonMsgVO = new MjonMsgVO(); - mjonMsgVO.setUserId(userId); // 조회 아이디 등록 - - - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); // 현재 보유금액 조회 - BigDecimal befCash = new BigDecimal(userMoney).setScale(0, RoundingMode.HALF_EVEN); // 현재 보유금액 변환 - BigDecimal totMsgPrice = new BigDecimal(mjonMsgCustomVO.getCustomAmount()).setScale(0, RoundingMode.HALF_EVEN); // 맞춤문자 결제 예상 금액 - - // befCash(현재 보유금액) 값이 totMsgPrice(맞춤문자전송 금액) 보다 많으면 문자 전송 - //if(befCash.compareTo(totMsgPrice) < 0 || befCash.compareTo(totMsgPrice) == 0) { - if(befCash.compareTo(totMsgPrice) < 0) { - modelAndView.addObject("result", "notMoney"); - return modelAndView; - } - - // 맞춤문자 첨부 이미지 업로드 - String customSampleImg = ""; - String customSampleImgFileSn = ""; - /*if(!mjonMsgCustomVO.getTempImg1().equals("")) { - customSampleImg = mjonMsgCustomVO.getTempImg1(); - customSampleImgFileSn= mjonMsgCustomVO.getTempImg1FileSn(); - } - if(!mjonMsgCustomVO.getTempImg2().equals("")) { - - if(customSampleImg != "" ) { - customSampleImg += "/"+mjonMsgCustomVO.getTempImg2(); - customSampleImgFileSn += "/"+mjonMsgCustomVO.getTempImg2FileSn(); - }else { - customSampleImg += mjonMsgCustomVO.getTempImg2(); - customSampleImgFileSn += "/"+mjonMsgCustomVO.getTempImg2FileSn(); - } - } - if(!mjonMsgCustomVO.getTempImg3().equals("")) { - - if(customSampleImg != "" ) { - customSampleImg += "/"+mjonMsgCustomVO.getTempImg3(); - customSampleImgFileSn += "/"+mjonMsgCustomVO.getTempImg3FileSn(); - }else { - customSampleImg += mjonMsgCustomVO.getTempImg3(); - customSampleImgFileSn += "/"+mjonMsgCustomVO.getTempImg3FileSn(); - } - }*/ - - // 첨부파일 ID 생성 및 구분자 등록 - String atchFileId = ""; - final Map files = multiRequest.getFileMap(); - if (!files.isEmpty()) { - - String imagePath = ""; - Date now = new Date(); - SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMdd"); - String fdlDate = formatDate.format(now); - - //로컬 과 개발서버의 이미지 저장 경로 분기처리 - if(request.getServerName().equals("localhost")) { - imagePath = fileSaveDir+"src/main/webapp/MMS/" + fdlDate; - }else{ - /*imagePath = "/usr/local/tomcat_mjon/webapps/mjon/MMS/" + fdlDate;*/ - imagePath = fileSaveDir+"/file/MMS/" + fdlDate; - } - - List result = fileUtil.parseImageFileInf(files, "CUSTOM_", 0, "", imagePath, ""); - atchFileId = fileMngService.insertFileInfs(result); - - for(int i=0; i < result.size(); i++) { - if(customSampleImgFileSn != "" ) { -// customSampleImg += "/"+atchFileId; - customSampleImgFileSn += "/"+i; - }else { -// customSampleImg += atchFileId; - customSampleImgFileSn += i; - } - } - } - - mjonMsgCustomVO.setCustomUploadImg(atchFileId); - mjonMsgCustomVO.setCustomUploadImgFileSn(customSampleImgFileSn); - mjonMsgCustomVO.setUserId(userId); - mjonMsgCustomVO.setFrstRegisterId(userId); - mjonMsgCustomVO.setLastUpdusrId(userId); - - - // 요청사항 길이 체크 - mjonMsgCustomVO.setCustomRequest( - StringUtil.getLengthChkAndSubString(mjonMsgCustomVO.getCustomRequest(), 2000) - ); - - - - - mjonMsgCustomService.insertMjonMsgCustomInfo(mjonMsgCustomVO); - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // 이메일 체크 - if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { - String emailTitle = "문자관리 > 문자맞춤제작 요청"; - // CS관리자 이메일 알림전송 - mjonNoticeSendUtil.csAdminEmailNoticeSend(loginVO.getName(), loginVO.getId(), emailTitle); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] 문자맞춤제작 요청 - " + loginVO.getName() +"("+ loginVO.getId() + ")"; - mjonCommon.sendSimpleSlackMsg(msg); - } - - modelAndView.addObject("result", "success"); - return modelAndView; - } - - /** 첨부파일 없이 맞춤제작요청 등록*/ - @RequestMapping(value = {"/web/mjon/custom/insertCustomImgInfoNoFileAjax.do"}) - public ModelAndView insertCustomImgInfoNoFileAjax( MjonMsgCustomVO mjonMsgCustomVO - , HttpServletRequest request) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - MjonMsgVO mjonMsgVO = new MjonMsgVO(); - mjonMsgVO.setUserId(userId); // 조회 아이디 등록 - - - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); // 현재 보유금액 조회 - BigDecimal befCash = new BigDecimal(userMoney).setScale(0, RoundingMode.HALF_EVEN); // 현재 보유금액 변환 - BigDecimal totMsgPrice = new BigDecimal(mjonMsgCustomVO.getCustomAmount()).setScale(0, RoundingMode.HALF_EVEN); // 맞춤문자 결제 예상 금액 - - // befCash(현재 보유금액) 값이 totMsgPrice(맞춤문자전송 금액) 보다 많으면 문자 전송 - //if(befCash.compareTo(totMsgPrice) < 0 || befCash.compareTo(totMsgPrice) == 0) { - if(befCash.compareTo(totMsgPrice) < 0) { - modelAndView.addObject("result", "notMoney"); - return modelAndView; - } - - mjonMsgCustomVO.setUserId(userId); - mjonMsgCustomVO.setFrstRegisterId(userId); - mjonMsgCustomVO.setLastUpdusrId(userId); - mjonMsgCustomService.insertMjonMsgCustomInfo(mjonMsgCustomVO); - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // 이메일 체크 - if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { - String emailTitle = "문자관리 > 문자맞춤제작 요청"; - // CS관리자 이메일 알림전송 - mjonNoticeSendUtil.csAdminEmailNoticeSend(loginVO.getName(), loginVO.getId(), emailTitle); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] 문자맞춤제작 요청 - " + loginVO.getName() +"("+ loginVO.getId() + ")"; - mjonCommon.sendSimpleSlackMsg(msg); - } - - modelAndView.addObject("result", "success"); - return modelAndView; - } - - /** 사용자 맞춤제작 팝업*/ - @RequestMapping(value= {"/web/mjon/custom/MsgCustomVeiwPopupAjax.do"}) - public String selectMsgCustomPopupDetailAjax(@ModelAttribute("searchVO") MjonMsgCustomVO mjonMsgCustomVO - , ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - return "/web/custom/MsgCustomVeiwPopupAjax"; - } - - /** 맞춤제작 상세보기 팝업 리스트 조회*/ - @RequestMapping(value= {"/web/mjon/custom/selectMyCustomImgRequestListAjax.do"}) - public ModelAndView selectMyCustomImgRequestListAjax(@ModelAttribute("searchVO") MjonMsgCustomVO mjonMsgCustomVO - , ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - try { - - List customList = mjonMsgCustomService.selectMyCustomImgRequestList(mjonMsgCustomVO); - - for(int i=0; i < customList.size(); i++) { - if("Y".equals(customList.get(i).getCustomUploadYn())) { - - String sampleFileSn[] = customList.get(i).getCustomUploadImgFileSn().split("/"); - - FileVO fileVO = new FileVO(); - String fileName = ""; - for(int j=0; j< sampleFileSn.length; j++) { - fileVO.setAtchFileId(customList.get(i).getCustomUploadImg()); - fileVO.setFileSn(sampleFileSn[j]); - FileVO result = fileMngService.selectFileInf(fileVO); - - // JSPark 2023.03.07 => 널 체크 추가 - if (result != null) { - if(j != 0 ) { - fileName = fileName +", "; - } - fileName = fileName + result.getOrignlFileNm(); - } - } - - customList.get(i).setTempImg1(fileName); - } - } - - modelAndView.addObject("customList", customList); - modelAndView.addObject("result", "success"); - }catch (Exception e) { - modelAndView.addObject("message", "다시 시도 부탁드립니다."); - modelAndView.addObject("result", "fail"); - } - - return modelAndView; - } -} diff --git a/src/main/java/itn/let/mjo/msgagent/web/MjonMsgAgentStsController.java b/src/main/java/itn/let/mjo/msgagent/web/MjonMsgAgentStsController.java index d722d10..7fa4f06 100644 --- a/src/main/java/itn/let/mjo/msgagent/web/MjonMsgAgentStsController.java +++ b/src/main/java/itn/let/mjo/msgagent/web/MjonMsgAgentStsController.java @@ -226,65 +226,4 @@ public class MjonMsgAgentStsController { return "agent/MjonMsgAgentStsMultiUpdate"; } - - /** - * @Method Name : updateMultiMjonMsgAgentStsData - * @작성일 : 2023.05.19 - * @작성자 : Hans - * @Method 설명 : 전송사별 전송 비율 수정 - */ - /* - @RequestMapping(value={"/let/mjo/msgagent/updateMultiMjonMsgAgentStsDataAjax.do"}) - public ModelAndView updateMultiMjonMsgAgentStsDataAjax(@ModelAttribute("mjonMsgAgentStsVO") MjonMsgAgentStsVO mjonMsgAgentStsVO) throws Exception { - //public ModelAndView updateMultiMjonMsgAgentStsData(@ModelAttribute MjonMsgAgentStsVO mjonMsgAgentStsVO, Model model) throws Exception { - - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - // 로그인VO에서 사용자 정보 가져오기 - //LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - // String frstRegisterId = loginVO == null ? "" : loginVO.getId(); - mjonMsgAgentStsVO.setLastUpdtPnttm("ss"); // 최초등록자ID - System.out.print("\n updateMultiMjonMsgAgentStsData 1==== \n"); - System.out.print("updateMultiMjonMsgAgentStsData 2==== getSelectAgentCode: " + mjonMsgAgentStsVO.getSelectAgentCode() + ":===end=== \n"); - System.out.print("mjonMsgAgentStsVO.getUseYns().size() 3==== : " + mjonMsgAgentStsVO.getUseYns().size() + ":===end===\n"); - System.out.print("mjonMsgAgentStsVO.getMsgTypes().get(0) 4==== :" + mjonMsgAgentStsVO.getMsgTypes().get(0)+ ":===end===\n"); - System.out.print("mjonMsgAgentStsVO.getSelectAgentCode() 5==== : " + mjonMsgAgentStsVO.getSelectAgentCode() + ":===end===\n"); - System.out.print("mjonMsgAgentStsVO.getAgentCodes().size() 6 ==== : " +mjonMsgAgentStsVO.getAgentCodes().get(0) + ":===end===\n"); - - try{ - - - for(int i = 0; i < mjonMsgAgentStsVO.getAgentCodes().size(); i++){ - System.out.println("getAgentCodes: " + mjonMsgAgentStsVO.getAgentCodes().get(i)); - // System.out.println("getMsgTypes: " + mjonMsgAgentStsVO.getMsgTypes().get(i)) ; - } - // 제목, 해쉬태그 일괄변경 - System.out.print("==== updateMultiMjonMsgAgentStsDataAjax controller ==== \n"); - mjonMsgAgentStsService.updateMjonMsgAgentStsDataList(mjonMsgAgentStsVO); - // letterService.updateHashTagList(mjonMsgAgentStsVO); - System.out.print("==== updateMultiMjonMsgAgentStsDataAjax controller try - catch ==== \n"); - - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - modelAndView.addObject("result", "success"); - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - System.out.println("modelAndView.getViewName(): " + modelAndView.getViewName()) ; - - return modelAndView; - } - - */ - - - - } diff --git a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainDataController.java b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainDataController.java deleted file mode 100644 index 5da7092..0000000 --- a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainDataController.java +++ /dev/null @@ -1,4407 +0,0 @@ -package itn.let.mjo.msgcampain.web; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.ui.ModelMap; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestBody; -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.support.SessionStatus; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.psl.dataaccess.util.EgovMap; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.ComDefaultCodeVO; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.JsonResult; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.service.FileVO; -import itn.com.cmm.util.MJUtil; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.lett.service.HashConfVO; -import itn.let.lett.service.LetterService; -import itn.let.lett.service.LetterVO; -import itn.let.mail.service.StatusResponse; -import itn.let.mjo.addr.service.AddrDTO; -import itn.let.mjo.addr.service.AddrGroupService; -import itn.let.mjo.addr.service.AddrGroupVO; -import itn.let.mjo.addr.service.AddrService; -import itn.let.mjo.addr.service.AddrVO; -import itn.let.mjo.event.service.MjonEventService; -import itn.let.mjo.event.service.MjonEventVO; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.mjocommon.MjonHolidayApi; -import itn.let.mjo.msg.service.MjonMsgService; -import itn.let.mjo.msg.service.MjonMsgVO; -import itn.let.mjo.msgcampain.service.MjonCandidateService; -import itn.let.mjo.msgcampain.service.MjonCandidateVO; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.msgdata.service.MjonMsgDataVO; -import itn.let.mjo.msgdata.service.MjonMsgReturnVO; -import itn.let.mjo.msgdata.service.PhoneVO; -import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; -import itn.let.mjo.msgholiday.service.MsgHolidayService; -import itn.let.mjo.msgholiday.service.MsgHolidayVO; -import itn.let.mjo.pay.service.MjonPayService; -import itn.let.mjo.pay.service.MjonPayVO; -import itn.let.mjo.spammsg.service.MjonSpamMsgService; -import itn.let.mjo.symbol.service.MjonSymbolService; -import itn.let.mjo.symbol.service.MjonSymbolVO; -import itn.let.sym.ccm.cde.service.CateCode; -import itn.let.sym.ccm.cde.service.EgovCcmCmmnDetailCodeManageService; - -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.uss.umt.service.UserManageVO; -import itn.let.utl.fcc.service.EgovCryptoUtil; - -@Controller -public class MjonMsgCampainDataController { - - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "LetterService") - private LetterService letterService; - - @Resource(name = "mjonSymbolService") - private MjonSymbolService mjonSymbolService; - - /** mberManageService */ - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource (name = "AddrService") - private AddrService addrService; - - @Resource (name = "AddrGroupService") - private AddrGroupService addrGroupService; - - @Resource(name = "mjonCandidateService") - private MjonCandidateService mjonCandidateService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - /* 암복호화 */ - @Resource(name = "egovCryptoUtil") - EgovCryptoUtil egovCryptoUtil; - - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; - - @Resource(name = "egovMjonCashIdGnrService") - private EgovIdGnrService idgenMjonCashId; - - @Resource(name = "CmmnDetailCodeManageService") - private EgovCcmCmmnDetailCodeManageService cmmnDetailCodeManageService; - - /** 첨부파일 저장경로 */ - @Value("#{globalSettings['Globals.file.saveDir']}") - private String fileSaveDir; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - @Resource(name = "MjonEventService") - private MjonEventService mjonEventService; - - @Resource(name = "mjonSpamMsgService") - private MjonSpamMsgService mjonSpamMsgService; - - /** 사이트 설정 */ - @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; - - - - - - @Resource(name = "MsgHolidayService") - private MsgHolidayService msgHolidayService; - - @Autowired - private MjonCommon mjonCommon; - - private static final Logger logger = LoggerFactory.getLogger(MjonMsgCampainDataController.class); - - /** - * 선거 문자 발송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/selectMsgDataView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectMsgDataView.do"}) - public String selectMsgDataView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO - , CateCode cateCode - , HttpServletRequest request - , ModelMap model) throws Exception{ - - - - // 요청의 호스트명을 가져오기 - String hostName = request.getServerName(); - - // 외부에서 선거발송 페이지로 들어오는걸 막음 - // 20250102 이호영 - if (!"localhost".equals(hostName) && !"119.193.215.98".equals(hostName)) { - return "redirect:/web/mjon/msgdata/selectMsgDataView.do"; - } - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - // 문자 해쉬태그 리스트 불러오기 - String msgType = "M"; - List hashTagList = letterService.selectHashTagWithList(msgType); - model.addAttribute("hashTagList", hashTagList); - - // 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - model.addAttribute("loginVO", loginVO); - - for(int i=0 ; i < cateConfList.size(); i++) { - if("선거".equals(cateConfList.get(i).getCateNm())) { - letterVO.setCategoryCode(cateConfList.get(i).getCateCode()); - } - } - - //주소록에서 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMoveAddrFlag())) { - model.addAttribute("addrVO", searchVO); - } - - //주소록에서 전체전송 넘어오는 파라미터 - if("Y".equals(searchVO.getMoveAddrAllFlag())) { - AddrVO addrVO = new AddrVO(); - - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId != "") { - addrVO.setMberId(userId); - } - addrVO.setRecordCountPerPage(100000); - addrVO.setFirstIndex(0); - addrVO.setSearchAddrGrpId(request.getParameter("searchAddrGrpId")); - addrVO.setSearchCondition(request.getParameter("searchCondition")); - addrVO.setSearchKeyword(request.getParameter("searchKeyword")); - addrVO.setStartKeyword(request.getParameter("startKeyword")); - List addrList = addrService.selectAddrList(addrVO); - - List addrIdList = new ArrayList(); - for(AddrVO item : addrList) { - addrIdList.add(item.getAddrId()); - } - - searchVO.setAddrIdList(addrIdList); - searchVO.setMoveAddrFlag("Y"); - - model.addAttribute("addrVO", searchVO); - } - - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - //발송결과 문자 재전송에서 넘어오는 경우 파마리터 전달 - List temp = searchVO.getMsgSeqList(); - - if(temp != null) { - - model.addAttribute("reSendMsgVO", searchVO); - - } - model.addAttribute("letterVO", letterVO); - - // 문자 재전송 New - model.addAttribute("msgResendAllFlag", searchVO.getMsgResendAllFlag()); - model.addAttribute("msgResendAllGroupId", searchVO.getMsgResendAllGroupId()); - model.addAttribute("msgResendAllAdvertiseYn", searchVO.getMsgResendAllAdvertiseYn()); - model.addAttribute("msgResendAllReplaceYn", searchVO.getMsgResendAllReplaceYn()); - - return "web/msgcampain/MsgDataView"; - } - - - /** - * 선거 문자 발송 단문/장문/그림문자 전송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/selectMsgDataSMLViewAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectMsgDataSMLViewAjax.do"}) - public String selectMsgDataSMLView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - //문자 전송 개인 단가 불러오기 - - //0.이벤트 진행중이 회원 정보 불러오기. - //이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다. - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - - long eventDiffDate = 0; - float eventRemainCash = 0; - boolean compareEndDate = false; - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - /** - * MJUtil.getCompareDate() - * 현재 날짜와 파라미터 전달 날짜를 비교 - * 전달날짜를 지난경우 False를 리턴함. - * 현재날짜 이전 혹은 같은 날짜면 True를 리턴함. - * - * */ - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴 - //이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴 - if(!compareEndDate || eventRemainCash < 7.5) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("이벤트 발송 최소 금액(7.5) 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - }else {//이벤트 진행중이면 남은 날짜 계산해서 전달. - - /** - * MJUtil.getDiffDateDay() - * 현재 날짜와 파라미터 날짜 사이의 날짜 수를 계산해줌. - * - * */ - eventDiffDate = MJUtil.getDiffDateDay(eventEndDate); - - } - } - - } - - //남은 날짜값을 절대값으로 변경(음수로 나오기 때문) - model.addAttribute("eventDiffDate", Math.abs(eventDiffDate)); - model.addAttribute("compareEndDate", compareEndDate); - model.addAttribute("eventRemainCash", eventRemainCash); - model.addAttribute("eventMberInfo", eventMberInfo); - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - searchVO.setUserId(userId); - - } - - model.addAttribute("exceptSpamYn", mberManageVO.getExceptSpamYn()); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - - //일반 단가정보 저장 변수 셋팅 - 이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - Float norShortPrice = mberManageVO.getShortPrice(); - Float norLongPrice = mberManageVO.getLongPrice(); - Float norPicturePrice = mberManageVO.getPicturePrice(); - Float norPicture2Price = mberManageVO.getPicture2Price(); - Float norPicture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - /*int shortPrice = (int) mberManageVO.getShortPrice(); - int longPrice = (int) mberManageVO.getLongPrice(); - int picturePrice = (int) mberManageVO.getPicturePrice(); - int picture2Price = (int) mberManageVO.getPicture2Price(); - int picture3Price = (int) mberManageVO.getPicture3Price(); - int userMoney = (int) mberManageVO.getUserMoney();*/ - - String userPoint = mberManageVO.getUserPoint(); - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//이벤트 단가 적용시 일반단가도 필요하여 셋팅 해줌. - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) { - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("shortPrice", shortPrice); - model.addAttribute("longPrice", longPrice); - model.addAttribute("picturePrice", picturePrice); - model.addAttribute("picture2Price", picture2Price); - model.addAttribute("picture3Price", picture3Price); - model.addAttribute("userMoney", userMoney); - model.addAttribute("userPoint", userPoint); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(norShortPrice < 1 || norLongPrice < 1 || norPicturePrice < 1) {//협의 단가가 없는 경우 일반단가에 시스템 단가로 셋팅해줌 - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("norShortPrice", norShortPrice); - model.addAttribute("norLongPrice", norLongPrice); - model.addAttribute("norPicturePrice", norPicturePrice); - model.addAttribute("norPicture2Price", norPicture2Price); - model.addAttribute("norPicture3Price", norPicture3Price); - - //선거 후보자 정보 불러오기 - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - - if(userId != ""){ - - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - - //String cryptText = egovCryptoUtil.encrypt(plainText); - - if(mjonCandidateVO != null) { - - // 주민번호 복호화 하기 - String regidentNo1 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()); - String regidentNo2 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()); - - mjonCandidateVO.setRegidentNo1(regidentNo1); - mjonCandidateVO.setRegidentNo2(regidentNo2); - - } - - } - - model.addAttribute("mjonCandidateVO", mjonCandidateVO); - - // 이메일 코드조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("ITN031"); - model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - if(!userId.equals("")) {//로그인 했을때만 발신번호 리스트 불러오기 - - //아이디 발신번호 리스트 불러오기. - List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); - List resultPhonList = new ArrayList(); - MJUtil mjUtil = new MJUtil(); - - for(String phone : resultSendPhonList) { - - resultPhonList.add(mjUtil.addDash(phone)); - - } - model.addAttribute("resultPhonList", resultPhonList); - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - //그림 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - MjonSymbolVO symbolVO = new MjonSymbolVO(); - // 특수문자 리스트 불러오기 - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - //최근 전송 내역 - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - cal.setTime(now); - cal.add(Calendar.DATE, -3); - - String chkDate = format.format(cal.getTime()); - - searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 - List resultLatestMsgList = mjonMsgDataService.selectLatestMsgList(searchVO); - model.addAttribute("resultLatestMsgList", resultLatestMsgList); - - //자주보내는 번호 - List resultBookMarkMsgList = mjonMsgDataService.selectBookMarkMsgList(searchVO); - model.addAttribute("resultBookMarkMsgList", resultBookMarkMsgList); - - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("mberManageVO", mberManageVO); - - return "web/msgcampain/MsgDataSMLView"; - } - - - - /** - * 선거 문자 후보자 등록 처리 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/insertCandidateDataInfoAjax.do"}) - public ModelAndView insertCandidateDataInfoAjax( - MjonCandidateVO mjonCandidateVO, - HttpServletRequest req, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - try { - - if(userId.equals("")) { - - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - }else { - - mjonCandidateVO.setMberId(userId); - - } - - MjonVOParamXssValues XssParam = new MjonVOParamXssValues(); - - int XssCnt = XssParam.buildUri(mjonCandidateVO); - - if(XssCnt > 0) { - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "후보자 등록 정보에 잘못된 문자열이 있습니다."); - return modelAndView; - - } - - int resultCnt = 0; - String dataType = mjonCandidateVO.getDataType(); - - //주민번호 앞, 뒷 자리 암호화 처리하기 - String regidentNo1 = egovCryptoUtil.encrypt(mjonCandidateVO.getRegidentNo1()); - String regidentNo2 = egovCryptoUtil.encrypt(mjonCandidateVO.getRegidentNo2()); - - mjonCandidateVO.setRegidentNo1(regidentNo1); - mjonCandidateVO.setRegidentNo2(regidentNo2); - - if(dataType.equals("Upt")) { - - resultCnt = mjonCandidateService.updateCandidateDataInfo(mjonCandidateVO); - - }else { - - resultCnt = mjonCandidateService.insertCandidateDataInfo(mjonCandidateVO); - - } - - /* - * 20231122 우영두 수정 - * 후보자 등록/수정시 후보자 정보에 대한 세금계산서 정보가 등록되어야 함. - * 선거문자를 이용하는 개인 회원은 세금계산서를 후보자에 대한 것을 신청하기 때문에 회원정보의 세금계산서 정보를 업데이트 하도록 함. - * - * */ - if(resultCnt > 0) { - - //후보자 담당자 이메일 주소 합쳐주기 - mjonCandidateVO.setEmailFullStr(mjonCandidateVO.getEmail() + "@" + mjonCandidateVO.getEmailDomain()); - - // 주민번호 복호화 하기 - regidentNo1 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()); - regidentNo2 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()); - - mjonCandidateVO.setRegidentNoFullStr(regidentNo1+regidentNo2); - - mjonCandidateService.updateTaxBillMemberInfo(mjonCandidateVO); - - } - - if(resultCnt > 0 && dataType.equals("Upt")) { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("message", "후보자 정보의 수정이 완료되었습니다."); - - }else if(resultCnt > 0 && dataType.equals("Reg")) { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("message", "후보자 등록이 완료되었습니다."); - - }else { - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "후보자 등록에 오류가 발생하였습니다."); - - } - - } catch (Exception e) { - System.out.println("insertCandidateDataInfoAjax Controller Error!!! " + e); - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "후보자 등록에 오류가 발생하였습니다."); - - return modelAndView; - - } - - return modelAndView; - } - - - /** - * 선거 문자 후보자 삭제 처리 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/deleteCandidateDataInfoAjax.do"}) - public ModelAndView deleteCandidateDataInfoAjax( - MjonCandidateVO mjonCandidateVO, - HttpServletRequest req, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - try { - - if(userId.equals("")) { - - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - }else { - - mjonCandidateVO.setMberId(userId); - - } - - MjonVOParamXssValues XssParam = new MjonVOParamXssValues(); - - int XssCnt = XssParam.buildUri(mjonCandidateVO); - - int resultCnt = 0; - - resultCnt = mjonCandidateService.deleteCandidateDataInfo(mjonCandidateVO); - - if(resultCnt > 0 ) { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("message", "후보자 정보의 삭제 완료되었습니다."); - - - }else { - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "후보자 삭제에 오류가 발생하였습니다."); - - } - - } catch (Exception e) { - System.out.println("deleteCandidateDataInfoAjax Controller Error!!! " + e); - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "후보자 삭제에 오류가 발생하였습니다."); - return modelAndView; - - } - - return modelAndView; - } - - - /** - * 선거 문자재전송 내용 처리 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectReSendMsgDataListAjax.do"}) - public ModelAndView selectReSendMsgDataListAjax( - MjonMsgDataVO mjonMsgDataVO, - HttpServletRequest req, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("status", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - }else { - - mjonMsgDataVO.setUserId(userId); - - } - - List msgSeqList = mjonMsgDataVO.getMsgSeqList(); - List tempList = new ArrayList(); - - for(String seqStr : msgSeqList) { - - String seqId = seqStr.replace("[", ""); - seqId = seqId.replace("]", ""); - - tempList.add(seqId); - } - - mjonMsgDataVO.setMsgSeqList(tempList); - - List resultList = mjonMsgDataService.selectReSendMsgDataList(mjonMsgDataVO); - - int fileCnt = Integer.parseInt(resultList.get(0).getFileCnt()); - MjonMsgDataVO resultMsgPhotoInfo = new MjonMsgDataVO(); - - if(fileCnt > 0) { - - MjonMsgVO resultMsgInfo = new MjonMsgVO(); - //재발송 리스트의 첫번째 이미지 정보만 받아온다.(여러 발송문자를 선택 할 경우 첫번째 리스트의 정보를 사용함) - resultMsgInfo.setFileType1(resultList.get(0).getFileType1()); - resultMsgInfo.setFileType2(resultList.get(0).getFileType2()); - resultMsgInfo.setFileType3(resultList.get(0).getFileType3()); - - //문자함 리스트의 첨부이미지 정보 불러오기 - resultMsgPhotoInfo = mjonMsgDataService.selectMsgReSendPhotoInfo(resultMsgInfo); - - } - - if(resultList == null) { - - modelAndView.addObject("status", "emptyList"); - modelAndView.addObject("message", "재전송 문자 내용이 없습니다."); - - }else { - - modelAndView.addObject("status", "success"); - modelAndView.addObject("resultList", resultList); - modelAndView.addObject("resultListCnt", resultList.size()); - modelAndView.addObject("resultMsgPhotoInfo", resultMsgPhotoInfo); - - } - - return modelAndView; - } - - - /** - * 선거문자 대량 문자 발송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/excel/selectMsgExcelDataView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/excel/selectMsgExcelDataView.do"}) - public String selectMsgExcelDataView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - model.addAttribute("loginVO", loginVO); - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - // 문자 해쉬태그 리스트 불러오기 - String msgType = "M"; - List hashTagList = letterService.selectHashTagWithList(msgType); - model.addAttribute("hashTagList", hashTagList); - - // 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - for(int i=0 ; i < cateConfList.size(); i++) { - if("선거".equals(cateConfList.get(i).getCateNm())) { - letterVO.setCategoryCode(cateConfList.get(i).getCateCode()); - } - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - model.addAttribute("letterVO", letterVO); - - return "web/msgcampain/excel/MsgExcelDataView"; - } - - /** - * 선거 문자 발송 엑셀문자(대량전송) 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/excel/selectMsgExcelDataViewAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/excel/selectMsgExcelDataViewAjax.do"}) - public String selectMsgDataExcelViewAjax(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - //문자 전송 개인 단가 불러오기 - - //0.이벤트 진행중이 회원 정보 불러오기. - //이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다. - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - - long eventDiffDate = 0; - float eventRemainCash = 0; - boolean compareEndDate = false; - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - /** - * MJUtil.getCompareDate() - * 현재 날짜와 파라미터 전달 날짜를 비교 - * 전달날짜를 지난경우 False를 리턴함. - * 현재날짜 이전 혹은 같은 날짜면 True를 리턴함. - * - * */ - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴 - //이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴 - if(!compareEndDate || eventRemainCash < 7.5) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("이벤트 발송 최소 금액(7.5) 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - }else {//이벤트 진행중이면 남은 날짜 계산해서 전달. - - /** - * MJUtil.getDiffDateDay() - * 현재 날짜와 파라미터 날짜 사이의 날짜 수를 계산해줌. - * - * */ - eventDiffDate = MJUtil.getDiffDateDay(eventEndDate); - - } - } - - } - - //남은 날짜값을 절대값으로 변경(음수로 나오기 때문) - model.addAttribute("eventDiffDate", Math.abs(eventDiffDate)); - model.addAttribute("compareEndDate", compareEndDate); - model.addAttribute("eventRemainCash", eventRemainCash); - model.addAttribute("eventMberInfo", eventMberInfo); - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - } - - model.addAttribute("exceptSpamYn", mberManageVO.getExceptSpamYn()); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - - //일반 단가정보 저장 변수 셋팅 - 이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - Float norShortPrice = mberManageVO.getShortPrice(); - Float norLongPrice = mberManageVO.getLongPrice(); - Float norPicturePrice = mberManageVO.getPicturePrice(); - Float norPicture2Price = mberManageVO.getPicture2Price(); - Float norPicture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - /*int shortPrice = (int) mberManageVO.getShortPrice(); - int longPrice = (int) mberManageVO.getLongPrice(); - int picturePrice = (int) mberManageVO.getPicturePrice(); - int picture2Price = (int) mberManageVO.getPicture2Price(); - int picture3Price = (int) mberManageVO.getPicture3Price(); - int userMoney = (int) mberManageVO.getUserMoney();*/ - - String userPoint = mberManageVO.getUserPoint(); - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//이벤트 단가 적용시 일반단가도 필요하여 셋팅 해줌. - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) { - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("shortPrice", shortPrice); - model.addAttribute("longPrice", longPrice); - model.addAttribute("picturePrice", picturePrice); - model.addAttribute("picture2Price", picture2Price); - model.addAttribute("picture3Price", picture3Price); - model.addAttribute("userMoney", userMoney); - model.addAttribute("userPoint", userPoint); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(norShortPrice < 1 || norLongPrice < 1 || norPicturePrice < 1) {//협의 단가가 없는 경우 일반단가에 시스템 단가로 셋팅해줌 - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("norShortPrice", norShortPrice); - model.addAttribute("norLongPrice", norLongPrice); - model.addAttribute("norPicturePrice", norPicturePrice); - model.addAttribute("norPicture2Price", norPicture2Price); - model.addAttribute("norPicture3Price", norPicture3Price); - - //선거 후보자 정보 불러오기 - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - - if(userId != ""){ - - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - - //String cryptText = egovCryptoUtil.encrypt(plainText); - - if(mjonCandidateVO != null) { - - // 주민번호 복호화 하기 - String regidentNo1 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()); - String regidentNo2 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()); - - mjonCandidateVO.setRegidentNo1(regidentNo1); - mjonCandidateVO.setRegidentNo2(regidentNo2); - - } - - } - - model.addAttribute("mjonCandidateVO", mjonCandidateVO); - - // 이메일 코드조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("ITN031"); - model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - if(!userId.equals("")) {//로그인 했을때만 발신번호 리스트 불러오기 - - //아이디 발신번호 리스트 불러오기. - List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); - List resultPhonList = new ArrayList(); - MJUtil mjUtil = new MJUtil(); - - for(String phone : resultSendPhonList) { - - resultPhonList.add(mjUtil.addDash(phone)); - - } - model.addAttribute("resultPhonList", resultPhonList); - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - //그림 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - MjonSymbolVO symbolVO = new MjonSymbolVO(); - // 특수문자 리스트 불러오기 - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - /*String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - //그림 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - }*/ - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - return "web/msgcampain/excel/MsgExcelDataSMLView"; - } - - /** - * 선거문자 하위 카테고리 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectCateConfThrDptListAjax.do"}) - public String selectCateConfThreeDepthListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - - CateCode cateCode = new CateCode(); - cateCode.setCateNo(letterVO.getCategoryCode()); - - //하위카테고리에서 전체 클릭 시 상위카테고리로 하위카테고리 조회 - if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) { - cateCode.setCateNo(letterVO.getUpperCateNo()); - } - - CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회 - if(cateCodeInfoVO != null) { //전체 카테고리가 아닌 경우 - if(cateCodeInfoVO.getCateDepth().equals("2")) { //선택한 카테고리가 2뎁스(중분류)일 시 중분류의 코드로 하위분류 조회 - cateCode.setUpperCateNo(cateCodeInfoVO.getId()); - }else if(cateCodeInfoVO.getCateDepth().equals("3")) { //선택한 카테고리가 3뎁스(하위분류)일 시 해당 부모코드로 형제카테고리 조회 - cateCode.setUpperCateNo(cateCodeInfoVO.getParent()); - } - } - - cateCode.setCateType("N"); //일반 o 맞춤제작 x - - String thrDptCateNo = ""; //클릭한 카테고리가 2뎁스(하위분류)일 시 하위 카테고리는 '전체' selected효과 - if(cateCodeInfoVO != null && cateCodeInfoVO.getCateDepth().equals("3")) { //클릭한 카테고리가 3뎁스(하위분류)일 시 해당 카테고리 selected 효과 - thrDptCateNo= letterVO.getCategoryCode(); - } - - //3뎁스(하위분류) 카테고리 조회 - List cateThreeConfList = letterService.selectCateConfThreeDepthWithList(cateCode); - model.addAttribute("resultCateThreeConfList", cateThreeConfList); - model.addAttribute("thrDptCateNo", thrDptCateNo); - - return "web/msgcampain/CateThrDptListAjax"; - } - /** - * 선거 문자샘플 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectLetterDataListAjax.do"}) - public String selectLetterDataListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - - //검색 키워드 체크 기능 추가 - String keyword = letterVO.getSearchKeyword(); - boolean searchKeyType = StringUtil.getSearchKeywordValidation(keyword); - - if(!searchKeyType) {//검색 결과 Null로 리턴함. - - List exceptionLetterList = new ArrayList<>(); - - model.addAttribute("resultLetterList", exceptionLetterList); - return "web/msgcampain/LetterListAjax"; - } - - CateCode cateCode = new CateCode(); - cateCode.setCateNo(letterVO.getCategoryCode()); - CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회 - - //1번. 문자 샘플 탭 or 단문문자 탭 or 상위카테고리에서 ALL 클릭 시 - 카테고리 관련 조건 없이 select - //2번. 상위 카테고리 BEST 클릭 시 - bestCategory = Y 조건 추가 - //3번. 상위 카테고리(All or BEST가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 2으로 넘겨주고 해당 카테고리 번호와 해당 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //4번. 하위 카테고리 전체 클릭 시 - cateDepth를 2으로 넘겨주고 상위 카테고리와 상위 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //5번. 하위 카테고리(전체가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 3으로 넘겨주고 해당 카테고리를 조건절에 추가 - - if(cateCodeInfoVO != null) { //3번. 상위 카테고리 클릭 시 - letterVO.setCateDepth(cateCodeInfoVO.getCateDepth()); - } - - if ("best".equals(letterVO.getCategoryCode())) { //2번. BEST 클릭 시 경우 - letterVO.setBestCategory("Y"); - letterVO.setCategoryCode(""); - }else if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) { //하위분류에서 전체 클릭 시 중분류의 코드로 문자샘플 조회 - letterVO.setCateDepth("2"); - letterVO.setCategoryCode(letterVO.getUpperCateNo()); - } - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - if(letterType == null || letterType.equals("")) { - - letterVO.setLetterType("S"); - - } - - // 장/단문 문자 리스트 - List resultLetterList = mjonMsgDataService.selectLetterList(letterVO); - model.addAttribute("resultLetterList", resultLetterList); - paginationInfo.setTotalRecordCount( resultLetterList.size()> 0 ? ((Long)((EgovMap)resultLetterList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - return "web/msgcampain/LetterListAjax"; - } - - /** - * 선거문자 문자샘플 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectMainLetterDataListAjax.do"}) - public String selectMainLetterDataListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - - String subStr = letterVO.getCategoryCode(); - if(!subStr.equals("")) { - - subStr = subStr.substring(0, 3); - letterVO.setCategoryCode(subStr); - - }else { - letterVO.setCategoryCode("131"); - } - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - if(letterType == null || letterType.equals("")) { - - letterVO.setLetterType("S"); - - } - - // 장/단문 문자 리스트 - List resultLetterList = mjonMsgDataService.selectLetterList(letterVO); - model.addAttribute("resultLetterList", resultLetterList); - paginationInfo.setTotalRecordCount( resultLetterList.size()> 0 ? ((Long)((EgovMap)resultLetterList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - return "web/msgcampain/MainLetterListAjax"; - } - - /** - * 선거문자 그림 문자샘플 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectPhotoDataListAjax.do"}) - public String selectPhotoDataListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - - //검색 키워드 체크 기능 추가 - String keyword = letterVO.getSearchKeyword(); - boolean searchKeyType = StringUtil.getSearchKeywordValidation(keyword); - - if(!searchKeyType) {//검색 결과 Null로 리턴함. - - List exceptionPhoList = new ArrayList<>(); - - model.addAttribute("resultPhoList", exceptionPhoList); - return "web/msgcampain/PhotoListAjax"; - } - - CateCode cateCode = new CateCode(); - cateCode.setCateNo(letterVO.getCategoryCode()); - CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회 - - //1번. 문자 샘플 탭 or 단문문자 탭 or 상위카테고리에서 ALL 클릭 시 - 카테고리 관련 조건 없이 select - //2번. 상위 카테고리 BEST 클릭 시 - bestCategory = Y 조건 추가 - //3번. 상위 카테고리(All or BEST가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 2으로 넘겨주고 해당 카테고리 번호와 해당 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //4번. 하위 카테고리 전체 클릭 시 - cateDepth를 2으로 넘겨주고 상위 카테고리와 상위 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //5번. 하위 카테고리(전체가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 3으로 넘겨주고 해당 카테고리를 조건절에 추가 - - if(cateCodeInfoVO != null) { //3번. 상위 카테고리 클릭 시 - letterVO.setCateDepth(cateCodeInfoVO.getCateDepth()); - } - - if ("best".equals(letterVO.getCategoryCode())) { //2번. BEST 클릭 시 경우 - letterVO.setBestCategory("Y"); - letterVO.setCategoryCode(""); - }else if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) { //하위분류에서 전체 클릭 시 중분류의 코드로 문자샘플 조회 - letterVO.setCateDepth("2"); - letterVO.setCategoryCode(letterVO.getUpperCateNo()); - } - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 그림문자로 셋팅 - if(letterType == null || letterType.equals("")) { - - letterVO.setLetterType("P"); //그림문자 셋팅 - letterVO.setMemberType("P"); //개인 카테고리 셋팅 - - } - - // 그림 문자 리스트 - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - return "web/msgcampain/PhotoListAjax"; - } - - - - /** - * 선거문자 그림 문자샘플 리스트 화면 불러오기 2 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectPhotoDataList2Ajax.do"}) - public ModelAndView selectPhotoDataList2Ajax( - @ModelAttribute("searchVO") LetterVO letterVO, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - String subStr = letterVO.getCategoryCode(); - if(!subStr.equals("")) { - - subStr = subStr.substring(0, 3); - letterVO.setCategoryCode(subStr); - - } - - //그림 문자 리스트 불러오기 - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - if(letterType == null || letterType.equals("")) { - letterVO.setLetterType("P"); - } - - try { - // 그림 문자 리스트 - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - modelAndView.addObject("status", "success"); - } catch (Exception e) { - modelAndView.addObject("status", "fail"); - } - - return modelAndView; - } - - /** - * 선거문자 그림 문자샘플 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectMainPhotoDataListAjax.do"}) - public String selectMainPhotoDataListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - - String subStr = letterVO.getCategoryCode(); - if(!subStr.equals("")) { - - subStr = subStr.substring(0, 3); - letterVO.setCategoryCode(subStr); - - }else if("C".equals(letterVO.getLetterType())) { - letterVO.setCategoryCode("111600"); - }else { - letterVO.setCategoryCode("131"); - } - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - if(letterType == null || letterType.equals("")) { - - letterVO.setLetterType("P"); - - } - - // 그림 문자 리스트 - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - return "web/msgcampain/MainPhotoListAjax"; - } - - /** - * 선거문자 내문자함 리스트 화면 불러오기 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectMyMsgDataListAjax.do"}) - public String selectMyMsgDataListAjax( - @ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgDataVO.setUserId(userId); - - - //검색 키워드 체크 기능 추가 - String keyword = mjonMsgDataVO.getSearchKeyword(); - boolean searchKeyType = StringUtil.getSearchKeywordValidation(keyword); - - if(!searchKeyType) {//검색 결과 Null로 리턴함. - - List exceptionMyMsgList = new ArrayList<>(); - - model.addAttribute("resultMyMsgList", exceptionMyMsgList); - return "web/msgcampain/MyMsgListAjax"; - } - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(mjonMsgDataVO.getPageUnit() != 10) { - mjonMsgDataVO.setPageUnit(mjonMsgDataVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgDataVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgDataVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgDataVO.getPageSize()); - - mjonMsgDataVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgDataVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgDataVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - // 내 문자함 문자 리스트 - List resultMyMsgList = mjonMsgDataService.selectMyMsgDataListAjax(mjonMsgDataVO); - model.addAttribute("resultMyMsgList", resultMyMsgList); - paginationInfo.setTotalRecordCount( resultMyMsgList.size()> 0 ? ((Long)((EgovMap)resultMyMsgList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("mjonMsgDataVO", mjonMsgDataVO); - - //문자함 리스트의 첨부이미지 정보 불러오기 - List resultMyMsgPhotoList = mjonMsgDataService.selectMyMsgPhotoListInfo(resultMyMsgList); - - model.addAttribute("resultMyMsgPhotoList", resultMyMsgPhotoList); - return "web/msgcampain/MyMsgListAjax"; - - } - - - /** - * 선거문자 추천인 아이디 확인 - * - * @param String - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectRecommIdCheckAjax.do"}) - public ModelAndView selectRecommIdCheckAjax( - MjonMsgVO mjonMsgVO, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - List checkId = new ArrayList(); - checkId = mberManageService.selectIdCheck(mjonMsgVO.getRecommId()); - - int checkIdCnt = checkId.size(); - String resultSts = "fail"; - - if(checkIdCnt > 0) { - - resultSts = "success"; - - } - - modelAndView.addObject("status", resultSts); - - return modelAndView; - } - - /** - * 선거문자 주소록 그룹 리스트 화면 불러오기 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectAddrGroupListAjax.do" , "/web/mjon/msgcampain/huge/selectAddrGroupListAjax.do" - }) - public String selectAddrGroupListAjax( - @ModelAttribute("searchVO") AddrGroupVO addrGroupVO, - AddrVO addrVO, - ModelMap model, - HttpServletRequest request, - RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(loginVO == null) { - return "redirect:/web/main/mainPage.do"; - } - - if(userId != "") { - addrGroupVO.setMberId(userId); - addrVO.setMberId(userId); - } - - if(addrGroupVO.getPageUnit() != 10) { - addrGroupVO.setPageUnit(addrGroupVO.getPageUnit()); - } - - if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrGroupVO.setSearchSortCnd("addrGrpId"); - addrGroupVO.setSearchSortOrd("desc"); - } - - addrGroupVO.setSiteId("web"); - List addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO); - - /* - * JSPark 2023.08.30 => Ajax 로 변경 - //회원별 주소록 전체 갯수 조회 - int addrTotalCount = addrService.selectAddrTotalCount(addrVO); - - addrVO.setType("bookmark"); - List addrBookmarkList = addrService.selectAddrBasicGrpList(addrVO); - - addrVO.setType("noGrp"); - List addrNoGrpList = addrService.selectAddrBasicGrpList(addrVO); - - model.addAttribute("addrTotalCount", addrTotalCount); - model.addAttribute("addrBookmarkList", addrBookmarkList); - model.addAttribute("addrNoGrpList", addrNoGrpList); - */ - - model.addAttribute("addrGroupList", addrGroupList); - - String jspUrl = "web/msgcampain/addr/MsgAddrGroupListAjax"; - - if("/web/mjon/msgcampain/huge/selectAddrGroupListAjax.do".equals(request.getRequestURI())) { - - jspUrl = "web/msgcampain/addr/huge/MsgHGAddrGroupListAjax"; - } - - return jspUrl; - } - - /** - * 선거문자 주소록 그룹 선택시 우측 주소록 리스트 화면 불러오기 - * - * @param AddrGroupVO - * @param AddrVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectMsgAddrListAjax.do"}) - public ModelAndView selectMsgAddrListAjax( - @ModelAttribute("searchVO") AddrVO addrVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - }else { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - return modelAndView; - - } - - long startTime = System.currentTimeMillis(); // 시작 시간 측정 - - List resultAddrList = mjonMsgDataService.selectMsgAddrListAjax(addrVO); - - long endTime = System.currentTimeMillis(); // 종료 시간 측정 - - long elapsedTime = endTime - startTime; // 소요 시간 계산 - System.out.println("소요 시간: " + elapsedTime + " 밀리초"); - - - modelAndView.addObject("resultAddrList", resultAddrList); - modelAndView.addObject("result", "success"); - - return modelAndView; - } - - /** - * 선거문자 주소록 그룹 선택시 우측 주소록 리스트 화면 불러오기 - * - * @param AddrGroupVO - * @param AddrVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectMsgAddrListAjaxQ.do"}) - public ResponseEntity selectMsgAddrListAjax_advc(@ModelAttribute("searchVO") AddrVO addrVO) { - - Map response = new HashMap<>(); - - try { - // 로그인 권한 정보 확인 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() : null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); - - addrVO.setMberId(userId); - - // OFFSET 계산 - int offset = (addrVO.getPage()) * addrVO.getSize(); - addrVO.setOffset(offset); - // 데이터 조회 - List resultAddrList = mjonMsgDataService.selectMsgAddrListAjax_advc(addrVO); - - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "",resultAddrList)); - } catch (Exception e) { - e.printStackTrace(); - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "조회 요청 중 오류가 발생하였습니다.", LocalDateTime.now())); - } - } - - /** - * 선거문자 최근 전송내역 리스트 화면 불러오기 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectLatestMsgListAjax.do"}) - public String selectLatestMsgListAjax( - @ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - cal.setTime(now); - cal.add(Calendar.DATE, -3); - - String chkDate = format.format(cal.getTime()); - - mjonMsgDataVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 - mjonMsgDataVO.setUserId(userId); - - List resultLatestMsgList = mjonMsgDataService.selectLatestMsgList(mjonMsgDataVO); - - model.addAttribute("resultLatestMsgList", resultLatestMsgList); - - return "web/msgcampain/MsgLatestListAjax"; - } - - /** - * 선거문자 자주 보내는 번호 리스트 화면 불러오기 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectBookMarkMsgListAjax.do"}) - public String selectBookMarkMsgListAjax( - @ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - - List resultBookMarkMsgList = mjonMsgDataService.selectBookMarkMsgList(mjonMsgDataVO); - - model.addAttribute("resultBookMarkMsgList", resultBookMarkMsgList); - - return "web/msgcampain/MsgBookMarkListAjax"; - } - - - /** - * 선거문자 내문자함 리스트 삭제 처리 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/deleteMyMsgDataListAjax.do"}) - public String deleteMyMsgDataListAjax( - @ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgDataVO.setUserId(userId); - - //내문자함 문자 삭제 처리하기 - mjonMsgDataService.deleteMyMsgDataListAjax(mjonMsgDataVO); - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(mjonMsgDataVO.getPageUnit() != 10) { - mjonMsgDataVO.setPageUnit(mjonMsgDataVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgDataVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgDataVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgDataVO.getPageSize()); - - mjonMsgDataVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgDataVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgDataVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - // 내 문자함 문자 리스트 - List resultMyMsgList = mjonMsgDataService.selectMyMsgDataListAjax(mjonMsgDataVO); - model.addAttribute("resultMyMsgList", resultMyMsgList); - paginationInfo.setTotalRecordCount( resultMyMsgList.size()> 0 ? ((Long)((EgovMap)resultMyMsgList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("mjonMsgDataVO", mjonMsgDataVO); - - //문자함 리스트의 첨부이미지 정보 불러오기 - List resultMyMsgPhotoList = mjonMsgDataService.selectMyMsgPhotoListInfo(resultMyMsgList); - - model.addAttribute("resultMyMsgPhotoList", resultMyMsgPhotoList); - - return "web/msgcampain/MyMsgListAjax"; - } - - - - /** - * 선거문자 문자 발송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/sendMsgDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/sendMsgDataAjax.do"}) - public ModelAndView sendMsgData(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //String resultSts = "0"; - //String resultBlockSts = "0"; - - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 - String userId = ""; - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("resultSts", resultSts); - return modelAndView; - - }else { - - mjonMsgVO.setUserId(userId); - - //발신번호가 등록된 유효한 번호인지 확인 - int sendCallFromCnt = mjonMsgService.selectCallFromNumberChk(mjonMsgVO); - - if(sendCallFromCnt < 1) { - - modelAndView.addObject("message", "등록된 발신번호를 찾을 수 없습니다."); - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("resultSts", resultSts); - return modelAndView; - - } - - /** - * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 - * 현재 로그인 세션도 만료 처리함 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - - modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); - modelAndView.addObject("result", "statusFail"); - modelAndView.addObject("resultSts", resultSts); - - request.getSession().invalidate(); - - return modelAndView; - - } - - } - - //회원정보에서 스미싱 회원 여부 정보 조회 - UserManageVO userManageVO = new UserManageVO(); - - userManageVO.setMberId(userId); - UserManageVO resultUserVO = userManageService.selectSmishingYnUserInfo(userManageVO); - String smishingYn = resultUserVO.getSmishingYn(); - mjonMsgVO.setSmishingYn(smishingYn); - - String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 - String smsCont = mjonMsgVO.getSmsTxt().replace("\r\n", "\n"); - - int FrBytes = smsCont.getBytes(charset).length; - - if(FrBytes > 2000) { - - modelAndView.addObject("message", "문자 내용은 2000Byte를 넘을 수 없습니다."); - modelAndView.addObject("result", "smsLengFail"); - return modelAndView; - - } - - System.out.println("mjonMsgVO.getMsgType1() ::: "+mjonMsgVO.getMsgType()); - - String msgType = mjonMsgVO.getMsgType(); - - //내문자저장함에 저장후 문자를 발송하는경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함- 20220520 우영두 - if(msgType.equals("P") || msgType.equals("L")) { - msgType = "6"; - }else if(msgType.equals("S")) { - - msgType = "4"; - } - - //메세지 타입이 단문이면 진짜 단문인지 한번더 확인해 준다. - if(msgType.equals("4")) { - - //메세지 길이가 90Byte를초과 하거나, 그림 이미지가 있는경우 메세지 타입을 6으로 변경해준다. - if(FrBytes > 90 || mjonMsgVO.getImgFilePath().length > 0) { - - msgType = "6"; - - } - - } - - mjonMsgVO.setMsgType(msgType); - - //장문 메세지일 경우 - int fileCount = 0; - if(msgType.equals("6")) { - - //그림 이미지가 첨부된 경우 - if(mjonMsgVO.getImgFilePath() != null || mjonMsgVO.getImgFilePath().length > 0) { - - String[] path = mjonMsgVO.getImgFilePath(); - String[] fileId = mjonMsgVO.getImgFileId(); - String[] templateYn = mjonMsgVO.getTemplateYn(); - - for(int i=0; i 0) { - - if(mjonMsgVO.getFileName1() == null && mjonMsgVO.getFileName2() == null && mjonMsgVO.getFileName3() == null) { - - modelAndView.addObject("message", "문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다."); - modelAndView.addObject("result", "imgSourceFail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - } - - /* - * 화면에서 넘어오는 단가 금액 및 총 결제 캐시 금액 체크 해주기 - * 검증을 위해서 시스템 단가, 회원 협의 단가, 이벤트 단가 정보 조회 - * 조회 단가를 이용하여 총 결제 캐시 금액 계산 - * 파라미터로 넘어온 개별단가(eachPrice), 총 결제캐시(totPrice)를 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌. - */ - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - boolean compareEndDate = false; - float eventRemainCash = 0; - float paramEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 금액 및 기간 체크 - if(!compareEndDate || eventRemainCash < paramEachPrice) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("발송 최소 금액("+ paramEachPrice +") 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - } - } - } - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//협의 단가가 없는 경우 시스템 단가 적용해 주기 - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - // 토탈금액 "," 리플레이스 처리 - mjonMsgVO.setTotPrice(mjonMsgVO.getTotPrice().replaceAll(",", "")); - - float tmpOrgEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - float tmpOrgTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - - System.out.println("mjonMsgVO.getMsgType2() ::: "+mjonMsgVO.getMsgType()); - - // MSG_TYPE 다시계산 - if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setMsgType("6"); - }else { - if(FrBytes < 2000) { - if(FrBytes > 90) {// 90Byte 초과시 장문 - mjonMsgVO.setMsgType("6"); - }else {// 그외 단문 - mjonMsgVO.setMsgType("4"); - } - } - } - - System.out.println("mjonMsgVO.getMsgType3() ::: "+mjonMsgVO.getMsgType()); - - //각 문자 종류별 단가 셋팅해주기 - float tmpEachPrice = 0; - if(mjonMsgVO.getMsgType().equals("4")) { - mjonMsgVO.setEachPrice(shortPrice.toString()); - tmpEachPrice = shortPrice; - }else if(mjonMsgVO.getMsgType().equals("6")) { - - if(mjonMsgVO.getFileName3() != null) { - mjonMsgVO.setEachPrice(picture3Price.toString()); - tmpEachPrice = picture3Price; - }else if(mjonMsgVO.getFileName2() != null) { - mjonMsgVO.setEachPrice(picture2Price.toString()); - tmpEachPrice = picture2Price; - }else if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setEachPrice(picturePrice.toString()); - tmpEachPrice = picturePrice; - }else { - mjonMsgVO.setEachPrice(longPrice.toString()); - tmpEachPrice = longPrice; - } - - } - - //수신자 총 수 * 단가 를 통해 총 결제 금액 계산 - int tmpTotCallCnt = mjonMsgVO.getCallToList().length; - float tmpTotPrice = tmpTotCallCnt * tmpEachPrice; - - - //화면에서 넘어온 파라미터 개별 단가와 컨트롤러에서 계산한 단가를 비교하여 맞지 않으면 컨트롤러 계산 단가 입력 - if(tmpOrgEachPrice != tmpEachPrice) { - mjonMsgVO.setEachPrice(Float.toString(tmpEachPrice)); - - System.out.println("화면 : tmpOrgEachPrice ::: "+tmpOrgEachPrice); - System.out.println("컨트롤러 : tmpEachPrice ::: "+tmpEachPrice); - }else { - System.out.println("tmpOrgEachPrice ::: "+tmpOrgEachPrice); - } - - if(tmpOrgTotPrice != tmpTotPrice ) { - mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice)); - - System.out.println("화면 : tmpOrgTotPrice ::: "+tmpOrgTotPrice); - System.out.println("컨트롤러 : tmpTotPrice ::: "+tmpTotPrice); - }else { - System.out.println("tmpOrgTotPrice ::: "+tmpOrgTotPrice); - } - - /* - * 개별단가 및 총결제 캐시 금액 체크 로직 종료 - * - * */ - - //치환문자 체크 처리 - String txtReplYn = mjonMsgVO.getTxtReplYn(); - if(txtReplYn.equals("Y")) { - - int totListCnt = mjonMsgVO.getCallToList().length; - String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] phone = mjonMsgVO.getCallToList(); //수신자 휴대폰 번호 - String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //이름, 휴대폰, 치환문자 데이터가 없으면 취소 처리 - if((nameList.length == 0 || nameList == null) - && (rep1.length == 0 || rep1 == null) - && (rep2.length == 0 || rep2 == null) - && (rep3.length == 0 || rep3 == null) - && (rep4.length == 0 || rep4 == null)) { - - modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - - } - - // 치환문자 전체 필수체크 Start - boolean isRepCountOk = true; - if (mjonMsgVO.getSmsTxt().indexOf("[*이름*]") > -1) { - if(nameList.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*1*]") > -1) { - if(rep1.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*2*]") > -1) { - if(rep2.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*3*]") > -1) { - if(rep3.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*4*]") > -1) { - if(rep4.length != phone.length) { - isRepCountOk = false; - } - } - - if (isRepCountOk == false) { - modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다"); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - // End - - //--------------------------------------------------------------------------------------------------------------- - - - int msgLeng = 90; //단문 문자열 길이 - - if(msgType.equals("6")) { - - msgLeng = 2000; //장문 문자열 길이 - - } - - for(int i=0; i < totListCnt; i ++) { - - String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 - - /** - * 본문 내용 - 치환 처리 후 문자 길이 초과 여부만 체크 - * 치환 리스트 중 데이터가 없는 경우 데이터 밀림방지를 위하여 공백 하나를 추가해줌 - * 공백처리를 안하는 경우 데이터가 밀려서 치환되는 오류가 있어서 처리해줌 - * - * */ - - - int repCnt = 0; - smsTxt = smsTxt.replaceAll(String.valueOf((char)13), ""); - if (smsTxt.indexOf("[*이름*]") > -1) { - if(nameList.length > i && StringUtil.isNotEmpty(nameList[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", ""); - nameList[i] = " "; - } - repCnt++; - } - if (smsTxt.indexOf("[*1*]") > -1) { - if(rep1.length > i && StringUtil.isNotEmpty(rep1[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", ""); - rep1[i] = " "; - } - repCnt++; - } - if (smsTxt.indexOf("[*2*]") > -1) { - if(rep2.length > i && StringUtil.isNotEmpty(rep2[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", ""); - rep2[i] = " "; - } - repCnt++; - } - if (smsTxt.indexOf("[*3*]") > -1) { - if(rep3.length > i && StringUtil.isNotEmpty(rep3[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", ""); - rep3[i] = " "; - } - repCnt++; - } - if (smsTxt.indexOf("[*4*]") > -1) { - if(rep4.length > i && StringUtil.isNotEmpty(rep4[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", ""); - rep4[i] = " "; - } - repCnt++; - } - - //문자열 바이트 수 구하기(한글 2Byte로 계산) - // 한글 3Byte로 하기 위해서는 StandardCharsets.UTF_8 로 변경하면 된다. - int bytes = smsTxt.getBytes(charset).length; - if(repCnt > 0) { - if(bytes > msgLeng) { //전송 문자 길이를 초과한 경우 전송 취소 - 단문 작성 후 치환했을 때 장문으로 길이가 초과되는 경우 체크 - modelAndView.addObject("message", "문자 치환 후 전송 문자 길이를 초과하였습니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - return modelAndView; - } - } - } - - mjonMsgVO.setNameList(nameList); - mjonMsgVO.setRep1List(rep1); - mjonMsgVO.setRep2List(rep2); - mjonMsgVO.setRep3List(rep3); - mjonMsgVO.setRep4List(rep4); - - } - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - String totPrice = mjonMsgVO.getTotPrice(); - String eachPrice = mjonMsgVO.getEachPrice(); - - if(msgType.equals("6")) {//문자 mms, lms 단가 설정하기 - - if(fileCount > 2) {//그림 이미지가 3개 - - eachPrice = mjonMsgVO.getP3Price(); - - }else if(fileCount > 1) {//그림 이미지가 2개 - - eachPrice = mjonMsgVO.getP2Price(); - - }else if(fileCount == 1) {//그림 이미지가 1개 - eachPrice = mjonMsgVO.getPPrice(); - - }else {//장문 문자인 경우 - - eachPrice = mjonMsgVO.getMPrice(); - } - - } - - BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN); - - - //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - //BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice, - - mjonMsgVO.setBefCash(befCash.toString()); - - //문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열 - String[] tempNameList = new String[200]; //임시 이름 리스트 저장용 배열 - String[] tempRep1List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep2List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep3List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep4List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - - String[] phoneList = mjonMsgVO.getCallToList(); - String[] nameList = mjonMsgVO.getNameList(); - String[] rep1List = mjonMsgVO.getRep1List(); - String[] rep2List = mjonMsgVO.getRep2List(); - String[] rep3List = mjonMsgVO.getRep3List(); - String[] rep4List = mjonMsgVO.getRep4List(); - - int callToListCnt = mjonMsgVO.getCallToList().length; - mjonMsgVO.setTotalCallCnt(callToListCnt); - - /** - * 예약 문자인 경우 시간 및 분할 시간 셋팅 해주기 - * - * - * */ - - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - int turmMin = 0; - int totalCallCnt = 0; - int divideCnt = 0; - int count = 1; //분할 카운트 - - - if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - - } - - //분할 예약 시간 저장 리스트 생성 - List dividDayList = new ArrayList(); - - //서비스 단으로 특정 문자 건수 이상으로 한번에 보내지 않기 위해서 처리함 - //200건이 넘으면 200개씩 서비스로 넘기고 - if(callToListCnt > 200) { - - int sendCnt = 0; - for(int i=0; i< callToListCnt; i++) { - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - if((i < callToListCnt -1) && sendCnt == 199) { - - //sendCnt 200번째 값을 추가해준다. - tempPhoneList[sendCnt] = phoneList[i]; - - if(nameList.length > 0) { - tempNameList[sendCnt] = nameList[i]; - } - - if(rep1List.length > 0) { - tempRep1List[sendCnt] = rep1List[i]; - } - - if(rep2List.length > 0) { - tempRep2List[sendCnt] = rep2List[i]; - } - - if(rep3List.length > 0) { - tempRep3List[sendCnt] = rep3List[i]; - } - - if(rep4List.length > 0) { - tempRep4List[sendCnt] = rep4List[i]; - } - - List arrPhoneList = new ArrayList(); - List arrNameList = new ArrayList(); - List arrRep1List = new ArrayList(); - List arrRep2List = new ArrayList(); - List arrRep3List = new ArrayList(); - List arrRep4List = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList.add(temp); - - } - - } - - if(tempNameList.length > 0) { - for(String tmpName : tempNameList) { - - if(tmpName != null) { - - arrNameList.add(tmpName); - - } - - } - - } - - if(tempRep1List.length > 0) { - for(String tmpRep1 : tempRep1List) { - - if(tmpRep1 != null) { - - arrRep1List.add(tmpRep1); - - } - - } - - } - - if(tempRep2List.length > 0) { - for(String tmpRep2 : tempRep2List) { - - if(tmpRep2 != null) { - - arrRep2List.add(tmpRep2); - - } - - } - - } - - if(tempRep3List.length > 0) { - for(String tmpRep3 : tempRep3List) { - - if(tmpRep3 != null) { - - arrRep3List.add(tmpRep3); - - } - - } - - } - - if(tempRep4List.length > 0) { - for(String tmpRep4 : tempRep4List) { - - if(tmpRep4 != null) { - - arrRep4List.add(tmpRep4); - - } - - } - - } - - //리스트에 추가된 내용 만큼 임시 수신목록 배열에 넣어준다. - String[] sendPhoneList = new String[arrPhoneList.size()]; - String[] sendNameList = new String[arrNameList.size()]; - String[] sendRep1List = new String[arrRep1List.size()]; - String[] sendRep2List = new String[arrRep2List.size()]; - String[] sendRep3List = new String[arrRep3List.size()]; - String[] sendRep4List = new String[arrRep4List.size()]; - - for(int j=0; j< arrPhoneList.size(); j++) { - - sendPhoneList[j] = arrPhoneList.get(j); - - } - - for(int k=0; k< arrNameList.size(); k++) { - - sendNameList[k] = arrNameList.get(k); - - } - - for(int k=0; k< arrRep1List.size(); k++) { - - sendRep1List[k] = arrRep1List.get(k); - - } - - for(int k=0; k< arrRep2List.size(); k++) { - - sendRep2List[k] = arrRep2List.get(k); - - } - - for(int k=0; k< arrRep3List.size(); k++) { - - sendRep3List[k] = arrRep3List.get(k); - - } - - for(int k=0; k< arrRep4List.size(); k++) { - - sendRep4List[k] = arrRep4List.get(k); - - } - - mjonMsgVO.setCallToList(sendPhoneList); - - if(sendNameList.length > 0) { - mjonMsgVO.setNameList(sendNameList); - } - - if(sendRep1List.length > 0) { - mjonMsgVO.setRep1List(sendRep1List); - } - - if(sendRep2List.length > 0) { - mjonMsgVO.setRep2List(sendRep2List); - } - - if(sendRep3List.length > 0) { - mjonMsgVO.setRep3List(sendRep3List); - } - - if(sendRep4List.length > 0) { - mjonMsgVO.setRep4List(sendRep4List); - } - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - //발송 처리후 배열 초기화 - Arrays.fill(tempPhoneList, null); - dividDayList.clear(); - - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 199 resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 199 resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - }else if((i == callToListCnt -1) && sendCnt < 200){//수신목록 마지막이면서 200개 미만으로 남은 경우 발송 처리해준다. - - //마지막 리스트의 수신번호를 추가해 준다. - tempPhoneList[sendCnt] = phoneList[i]; - if(nameList.length > 0) { - tempNameList[sendCnt] = nameList[i]; - } - - if(rep1List.length > 0) { - tempRep1List[sendCnt] = rep1List[i]; - } - - if(rep2List.length > 0) { - tempRep2List[sendCnt] = rep2List[i]; - } - - if(rep3List.length > 0) { - tempRep3List[sendCnt] = rep3List[i]; - } - - if(rep4List.length > 0) { - tempRep4List[sendCnt] = rep4List[i]; - } - - List arrPhoneList2 = new ArrayList(); - List arrNameList2 = new ArrayList(); - List arrRep1List2 = new ArrayList(); - List arrRep2List2 = new ArrayList(); - List arrRep3List2 = new ArrayList(); - List arrRep4List2 = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList2.add(temp); - - } - - } - - if(tempNameList.length > 0) { - for(String tmpName : tempNameList) { - - if(tmpName != null) { - - arrNameList2.add(tmpName); - - } - - } - - } - - if(tempRep1List.length > 0) { - for(String tmpRep1 : tempRep1List) { - - if(tmpRep1 != null) { - - arrRep1List2.add(tmpRep1); - - } - - } - - } - - - if(tempRep2List.length > 0) { - for(String tmpRep2 : tempRep2List) { - - if(tmpRep2 != null) { - - arrRep2List2.add(tmpRep2); - - } - - } - - } - - if(tempRep3List.length > 0) { - for(String tmpRep3 : tempRep3List) { - - if(tmpRep3 != null) { - - arrRep3List2.add(tmpRep3); - - } - - } - - } - - if(tempRep4List.length > 0) { - for(String tmpRep4 : tempRep4List) { - - if(tmpRep4 != null) { - - arrRep4List2.add(tmpRep4); - - } - - } - - } - - String[] sendPhoneList2 = new String[arrPhoneList2.size()]; - String[] sendNameList2 = new String[arrNameList2.size()]; - String[] sendRep1List2 = new String[arrRep1List2.size()]; - String[] sendRep2List2 = new String[arrRep2List2.size()]; - String[] sendRep3List2 = new String[arrRep3List2.size()]; - String[] sendRep4List2 = new String[arrRep4List2.size()]; - - for(int j=0; j< arrPhoneList2.size(); j++) { - - sendPhoneList2[j] = arrPhoneList2.get(j); - - } - - for(int j=0; j< arrNameList2.size(); j++) { - - sendNameList2[j] = arrNameList2.get(j); - - } - - for(int k=0; k< arrRep1List2.size(); k++) { - - sendRep1List2[k] = arrRep1List2.get(k); - - } - - for(int k=0; k< arrRep2List2.size(); k++) { - - sendRep2List2[k] = arrRep2List2.get(k); - - } - - for(int k=0; k< arrRep3List2.size(); k++) { - - sendRep3List2[k] = arrRep3List2.get(k); - - } - - for(int k=0; k< arrRep4List2.size(); k++) { - - sendRep4List2[k] = arrRep4List2.get(k); - - } - - mjonMsgVO.setCallToList(sendPhoneList2); - - if(sendNameList2.length > 0) { - mjonMsgVO.setNameList(sendNameList2); - } - - if(sendRep1List2.length > 0) { - mjonMsgVO.setRep1List(sendRep1List2); - } - - if(sendRep2List2.length > 0) { - mjonMsgVO.setRep2List(sendRep2List2); - } - - if(sendRep3List2.length > 0) { - mjonMsgVO.setRep3List(sendRep3List2); - } - - if(sendRep4List2.length > 0) { - mjonMsgVO.setRep4List(sendRep4List2); - } - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 200 resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 200 resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - }else { - - tempPhoneList[sendCnt] = phoneList[i]; - - if(nameList.length > 0) {//이름 치환문자가 있는 경우 - tempNameList[sendCnt] = nameList[i]; - } - - if(rep1List.length > 0) {//치환1 문자가 있는 경우 - tempRep1List[sendCnt] = rep1List[i]; - } - - if(rep2List.length > 0) {//치환2 문자가 있는 경우 - tempRep2List[sendCnt] = rep2List[i]; - } - - if(rep3List.length > 0) {//치환3 문자가 있는 경우 - tempRep3List[sendCnt] = rep3List[i]; - } - - if(rep4List.length > 0) {//치환4 문자가 있는 경우 - tempRep4List[sendCnt] = rep4List[i]; - } - - sendCnt++; - - } - - } - - }else {//200건 미만일 경우 한번에 발송 처리 - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - for(int i=0; i< callToListCnt; i++) { - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - } - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++200건 미만 건수 선거문자 ==> resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++200건 미만 건수 선거문자 ==> resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - } - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++최종 건수 선거문자 ==> resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++최종 건수 선거문자 ==> resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - try { - - //문자 발송 캐시 차감 해주기 - /*MjonPayVO mjonPayVO = new MjonPayVO(); - - if(resultSts > 0 && resultBlockSts > 0) { - - Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * resultBlockSts; - Float resultTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - Float endPrice = resultTotPrice - blockPrice; - - mjonMsgVO.setTotPrice(Float.toString(endPrice)); - - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. - int groupCnt = resultSts; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - - //mjonMsgDAO.updateGroupMsgData(mjonMsgVO); - - } - - //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. - if(resultSts > 0) { - mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); - mjonPayVO.setUserId(mjonMsgVO.getUserId()); - mjonPayVO.setCash(-Float.parseFloat(mjonMsgVO.getTotPrice())); - mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); - mjonPayVO.setMemo("SMS 문자 " + resultSts + "건 발송"); - mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - - mjonPayService.insertCash(mjonPayVO); //캐시차감 - mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 - } - - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - if(resultSts > 0) { - - // 문자 전송 그룹 테이블에 정보 입력 - int groupCnt = resultSts; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - mjonMsgService.insertGroupMsgData(mjonMsgVO); - - //이벤트 회원 남은 캐시 업데이트 - fnUpdateEventRemainCash(mjonPayVO); - - }*/ - - //스팸문구 포함된 문자 발송의 경우 스팸 문구 내용도 별도 저장함. - String spamStatus = mjonMsgVO.getSpamStatus(); - - if(spamStatus == null) { - - spamStatus = "N"; - mjonMsgVO.setSpamStatus("N"); - - } - - if(spamStatus.equals("Y")) { - - int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO); - - System.out.println("+++++++++++++스팸문구 발송 내용 등록 +++++++++++++++++++++ "+resultCnt); - - } - - } catch (Exception e) { - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ 선거문자 ==> MJ_MSG_GROUP && CASH INSER ERROR !!! : " + e.getMessage()); - System.out.println("========================================================================="); - } - - - /*//문자 발송 처리 - //resultSts = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - - resultSts = returnVO.getSendMsgCnt(); - resultBlockSts = returnVO.getSendMsgBlockCnt();*/ - - }else { - - modelAndView.addObject("message", "문자 발송에 필요한 보유 잔액이 부족 합니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - //문자 발송 후 남은 보유 캐시 정보 불러오기 - String afterCash = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - modelAndView.addObject("afterCash", afterCash); - - }catch(Exception e) { - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ 선거문자 ==> 기타 시스템 오류 !!! : " + e.getMessage()); - System.out.println("========================================================================="); - - logger.error(e.getMessage(), e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - } - - //if(!resultSts.equals("0")) { - - modelAndView.addObject("message", "문자 전송이 완료되었습니다."); - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultSts", resultSts); - modelAndView.addObject("resultBlockSts", resultBlockSts); - - /*}else { - - modelAndView.addObject("message", "문자 전송에 오류가 발생하였습니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - }*/ - - /** - * 사용자가 보낸 문자를 문자온 법인폰으로도 하나 전송하는 기능 시작 - * - * */ - - try { - - if(resultSts > 0) {//전송 결과가 한건 이상인 경우 - - String adminSmsNoticeYn = "Y"; - String smishingYn = "N"; - String spamStatus = mjonMsgVO.getSpamStatus(); //스미싱 의심으로 체크된 문자 정보 - - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setMberId(userId); - if(!userId.equals("")) { - userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO); - adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); - smishingYn = userManageVO.getSmishingYn(); - } - - //법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송 - if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y") || smishingYn.equals("Y")) { - - if(spamStatus.equals("Y")) { - - mjonMsgVO.setDelayYn("Y"); - - }else if(smishingYn.equals("Y")) { - - mjonMsgVO.setSmishingYn("Y"); - } - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - - String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); - - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - getAdminPhoneSendMsgData(mjonMsgVO); - } - - //야간 스미싱의심 알림이 활성화 되어있는 경우 - if(holiSmishingNoti.equals("Y")) { - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); - - List resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO); - - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); - - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - - List resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO); - - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); - - if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송 - - /* - MjonCommon comm = new MjonCommon(); - comm.getAdminMsgSandSlack(mjonMsgVO); - */ - mjonCommon.getAdminMsgSandSlack(mjonMsgVO); - } - - } - } - - } - - } - - } catch (Exception e) { - throw new Exception("++++++++++++++++++++++ 선거문자 메뉴 getAdminPhoneSendMsgData Error !!! " + e); - } - - return modelAndView; - } - - /** - * 관리자로 문자 발송해주기 - * 사용자가 보낸 문자를 문자온 법인폰으로 발송해주는 기능 함수. - * 일반문자 와 대량 문자 모두 적용하고 있음 - * 2022.09.19 우영두 추가 - * - * */ - public boolean getAdminPhoneSendMsgData(MjonMsgVO mjonMsgVO) throws Exception{ - - try { - - mjonMsgVO.setUserId("system");//시스템 발송 문자로 처리 - - //전송사 선택 - String msgType = mjonMsgVO.getMsgType(); - int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt());//그림 이미지 갯수 - - //예약문자를 발송하는 경우 문자 내용 앞에 "[예약]" 표시되도록 처리 - 법인폰으로 발송되는 문자내용 수정함.20221123 추가 - //스팸/스미싱 대상자 문자를 발송하는 경우 문자 내용 앞에 "[발송지연문자]" 표시되도록 처리 - 법인폰으로 발송되는 문자내용 수정함.20221202 추가 - String reserveYn = mjonMsgVO.getReserveYn(); - String delayYn = mjonMsgVO.getDelayYn(); - String smishingYn = mjonMsgVO.getSmishingYn(); - - String smsTxt = mjonMsgVO.getSmsTxt(); - String transSmsTxt = smsTxt; - - if(reserveYn.equals("Y")) { - - if(smishingYn.equals("Y") || delayYn.equals("Y")) { - - transSmsTxt = "[스미싱의심][예약]" + smsTxt; - - }else { - transSmsTxt = "[예약]" + smsTxt; - } - - - }else if(delayYn.equals("Y")) { - - transSmsTxt = "[스미싱의심]" + smsTxt; - - } - - //[예약], [발송지연문자] 문구 추가시 문자열 길이 및 문자 종류 재계산 하기 - String charset = "euc-kr"; - int bytes = transSmsTxt.getBytes(charset).length; //발송 문자 길이 - - if(bytes > 2000) {//문자열 길이가 2000을 넘어가면 [예약], [발송지연문자] 문구를 제외한 원래 문구를 넣어준다. 안그러면 문자전송이 실패하게 됨. - - mjonMsgVO.setSmsTxt(smsTxt); - - }else { - - //[예약], [발송지연문자] 문구를 추가한 내용으로 메세지 내용을 셋팅해 준다. - mjonMsgVO.setSmsTxt(transSmsTxt); - if(bytes > 90) {//장문일 경우 문자타입을 변경해준다. - - msgType = "6"; - mjonMsgVO.setMsgType(msgType); - - } - - } - - // 문자타입 구분 - if (msgType.equals("4")) { - mjonMsgVO.setMsgDiv("S"); // 단문 - } - else if (msgType.equals("6")) { - if (fileCount > 0) { - mjonMsgVO.setMsgDiv("P"); // 그림 - mjonMsgVO.setNeoType("4"); - } - else { - mjonMsgVO.setMsgDiv("L"); // 장문 - } - } - - // 문자타입별 대표전송사 정보 - MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); - mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO); - // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 - mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 - // 전송금액 - mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 - mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 - - - //수신번호가 배열로 되어있어서 배열에 담아준다. - String[] phone = new String[1]; - String callTo = "15518011"; - phone[0] = callTo; - mjonMsgVO.setCallToList(phone);//수신번호 리스트 - - //시스템 로그용 수신 정보 - mjonMsgVO.setCallTo("help@iten.co.kr"); - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - //String userMoney = "0.0"; - String userPoint = "0.0"; - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - mjonMsgVO.setBefCash("0.0"); //관리자가 발송하는 것이라서 0원으로 입력 - mjonMsgVO.setMsgGroupCnt("1"); - - //문자종류 관리자가 발송하는 것은 msgKind : S 로 셋팅 - mjonMsgVO.setMsgKind("S"); - - Date now = new Date(); - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - mjonMsgVO.setReqDate(sdFormat.format(now)); - - //문자 발송 처리 - mjonMsgDataService.insertAdmToMberMsgDataInfo(mjonMsgVO); - - } catch (Exception e) { - throw new Exception("+++++++++++++++++++++++++++++ getAdminPhoneSendMsgData Function Error !!!" + e); - } - - return true; - } - - //이벤트 회원 캐시 변경 함수 - public void fnUpdateEventRemainCash(MjonPayVO mjonPayVO) throws Exception{ - - //이벤트 회원인 경우 이벤트 캐시도 함께 차감. - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(mjonPayVO.getUserId()); - mjonEventVO.setEventStatus("Y"); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - if(eventMberInfo != null) { - - float evntRemainCash = (float) eventMberInfo.getEventRemainCash(); - float totPrice = (float) Math.abs(mjonPayVO.getCash()); - - float totRemainCash = evntRemainCash - totPrice; - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - - if(totRemainCash <= 0.0) {//차감액이 남아있지 않으면 이벤트를 종료 - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventRemainCash(0.0); - mjonEventService.updateEventEndStatus(mjonEventVO); - - }else {//이벤트 회원 캐시 차감시킴 - - mjonEventVO.setEventRemainCash(totRemainCash); - mjonEventService.updateEventRemainCash(mjonEventVO); - - } - - } - - - } - - - /** - * 선거문자 내 문자함 저장 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/insertMyMsgDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/insertMyMsgDataAjax.do"}) - public ModelAndView insertMyMsgDataAjax(MjonMsgDataVO mjonMsgDataVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - if(user != null) { - - mjonMsgDataVO.setUserId(user.getId()); - - }else { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "fail"); - - return modelAndView; - - } - - //문자에 첨부된 이미지 파일 아이디를 셋팅해준다. - int i = 0; - for(String fileId : mjonMsgDataVO.getImgFileId()) { - - if(i == 0) { - - mjonMsgDataVO.setAtchFileId1(fileId); - - }else if(i == 1) { - - mjonMsgDataVO.setAtchFileId2(fileId); - - }else if(i == 2) { - - mjonMsgDataVO.setAtchFileId3(fileId); - - } - - i++; - - } - - // 디비에 문자 내용을 저장해 준다. - int resultSts = mjonMsgDataService.insertMyMsgDataAjax(mjonMsgDataVO); - - if(resultSts > 0) { - - modelAndView.addObject("message", "문자가 저장되었습니다."); - modelAndView.addObject("result", "success"); - - }else { - - modelAndView.addObject("message", "문자가 저장이 실패 되었습니다."); - modelAndView.addObject("result", "fail"); - - } - - return modelAndView; - - } - - - - /** - * 선거문자 이미지에디터 팝업 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/openImageEditorPopup.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/openImageEditorPopup.do"}) - public String openImageEditorPopup(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - // 그림문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList("N"); - model.addAttribute("cateCodeList", cateConfList); - - //그림 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** paging */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - return "web/msgdata/imageEditorPopup"; - } - - - /** - * 선거문자 에디터에서 수정한 이미지 등록 Ajax - * @param mjonMsgDataVO - * @param model - * @return modelAndView - * @throws Exception - */ - @RequestMapping(value = {"/web/mjon/msgcampain/insertEditImageAjax.do"}) - public ModelAndView insertEditImageAjax(final MultipartHttpServletRequest multiRequest - , MjonMsgDataVO mjonMsgDataVO - , RedirectAttributes redirectAttributes - , HttpServletRequest request) throws Exception { - - //LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - String atchFileId = ""; - String isThumbFile = ""; - String imagePath = ""; - final Map files = multiRequest.getFileMap(); - String KeyStr = "CANVASIMG_"; - - - Date now = new Date(); - SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMdd"); - String fdlDate = formatDate.format(now); - - - //로컬 과 개발서버의 이미지 저장 경로 분기처리 - if(request.getServerName().equals("localhost")) { - - imagePath = fileSaveDir+"src/main/webapp" + "/MMS/" + fdlDate; - - }else { - - /*imagePath = "C:/eGovFrameDev-3.9.0-64bit_ncms/workspace/mjon/src/main/webapp/MMS/" + fdlDate;*/ - /*imagePath = "/usr/local/tomcat_mjon/webapps/mjon/MMS/" + fdlDate;*/ - imagePath = fileSaveDir+"/file/MMS/" + fdlDate; - - } - - - if (!files.isEmpty()) { - List result = fileUtil.parseImageFileInf(files, KeyStr, 0, atchFileId, imagePath, isThumbFile); - atchFileId = fileMngService.insertFileInfs(result); - - FileVO tmpVO = new FileVO(); - tmpVO.setAtchFileId(atchFileId); //insert 한 파일의 정보를 가지고 옴 - - - FileVO fileVO = new FileVO(); - fileVO = fileMngService.selectFileInf(tmpVO); - - //저장한 파일의 경로 + 파일명 - String filefullPath = fileVO.getFileStreCours() +"/"+ fileVO.getStreFileNm() + "." + fileVO.getFileExtsn(); - - modelAndView.addObject("atchFileId", atchFileId); - modelAndView.addObject("filefullPath", filefullPath); - modelAndView.addObject("result", "success"); - //modelAndView.addObject("message", "이미지 업로드가 완료되었습니다."); - } - - }catch(Exception e) { - logger.error(e.getMessage(), e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - } - - return modelAndView; - } - - - /** - * 선거문자 내문자함 문자내용 선택시 정보 불러오기 - * @param String msgId, String pageType - * @param model - * @return modelAndView - * @throws Exception - */ - @RequestMapping(value = {"/web/mjon/msgcampain/selectMsgAddInfoAjax.do"}) - public ModelAndView selectMsgAddInfoAjax(@RequestParam Map commandMap - , MjonMsgDataVO mjonMsgDataVO - , HttpServletRequest request) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - /*LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());*/ - - try { - - //MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); - - //mjonMsgDataVO.setMsgId(commandMap.get("msgId").toString()); - //mjonMsgDataVO.setPageType(commandMap.get("pageType").toString()); - - //내 문자함 내용 및 첨부파일 정보 불러오기 - MjonMsgDataVO resultMsgInfo = mjonMsgDataService.selectMsgAddInfoAjax(mjonMsgDataVO); - - //문자함 리스트의 첨부이미지 정보 불러오기 - List resultMsgAddPhotoInfo = mjonMsgDataService.selectMsgAddPhotoInfo(resultMsgInfo); - - modelAndView.addObject("resultMsgInfo", resultMsgInfo); - modelAndView.addObject("resultMsgAddPhotoInfo", resultMsgAddPhotoInfo); - modelAndView.addObject("result", "success"); - //modelAndView.addObject("message", "이미지 업로드가 완료되었습니다."); - - }catch(Exception e) { - logger.error(e.getMessage(), e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - } - - return modelAndView; - } - - /** - * 선거문자 발송 - 엑셀파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/msgcampain/sendExelFilePhoneNumAjax.do") - @ResponseBody - public Object sendExelFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); - - //final Map files = multiRequest.getFileMap(); - List files = (List) multiRequest.getFiles("file0"); - - // 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx - int fileNameSplitCnt = 0; - - if(!files.isEmpty()) { - fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length; - - if (files.get(0).getSize() > 0 - && (files.get(0).getContentType().indexOf("spreadsheetml") > -1) - || files.get(0).getContentType().indexOf("ms-excel") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) { - - // 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("엑셀 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - String Ext = files.get(0).getOriginalFilename().split("[.]")[1]; - String errMessage = ""; - String cellValue = ""; - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - int errPhoneCnt = 0; - int errNameCnt = 0; - int errRep1Cnt = 0; - int errRep2Cnt = 0; - int errRep3Cnt = 0; - int errRep4Cnt = 0; - - //엑셀 확장자에 따른 처리 로직 분리 - if(Ext.equals("xls")) { - - HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); - HSSFSheet sheet = workbook.getSheetAt(0); - - if(sheet.getLastRowNum() > 20000) { // - errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - HSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - HSSFCell cell = null; - boolean errSts = true; //셀 값에 오류 여부 체크 - - for(int j = 0 ; j < 6; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - //System.out.println("Cell 데이터가 없습니다."); - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - boolean nmChk = getNameRepLenChk("name", cellValue); - - if(nmChk && errSts) { - jm.put("name", cellValue); - }else { - errNameCnt++; - errSts = false; - break; - } - - } - if(j == 1) { - //전화번호 - if(cellValue.matches(phoneRegExp) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errSts = false; - break; - } - } - if(j == 2) { - //치환1 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace1", cellValue); - }else { - errRep1Cnt++; - errSts = false; - break; - } - - } - if(j == 3) { - //치환2 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace2", cellValue); - }else { - errRep2Cnt++; - errSts = false; - break; - } - - } - if(j == 4) { - //치환3 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace3", cellValue); - }else { - errRep3Cnt++; - errSts = false; - break; - } - - } - if(j == 5) { - //치환4 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace4", cellValue); - }else { - errRep4Cnt++; - errSts = false; - break; - } - - } - - } - if(null != jm.get("phone") && errSts) { - json.add(jm); - } - - } - - int resultErrCnt = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt; - int resultErrCntExceptPhone = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건,\n이름 : 20byte, [*1*] [*2*] : 40byte 제한글자수 초과 "+ resultErrCntExceptPhone +"건 있습니다.\n해당 건을 제외하고 문자 발송됩니다."); - }else { - jr.setMessage(""); - } - - }else { //확장자가 xlsx - - OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - opcPackage.close(); - - if(sheet.getLastRowNum() > 20000) { // - errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - XSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - XSSFCell cell = null; - boolean errSts = true; - - for(int j = 0 ; j < 6; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - //System.out.println("Cell 데이터가 없습니다."); - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - boolean nmChk = getNameRepLenChk("name", cellValue); - - if(nmChk && errSts) { - jm.put("name", cellValue); - }else { - errNameCnt++; - errSts = false; - break; - } - - } - if(j == 1) { - //전화번호 - if(cellValue.matches(phoneRegExp) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errSts = false; - break; - } - } - if(j == 2) { - //치환1 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace1", cellValue); - }else { - errRep1Cnt++; - errSts = false; - break; - } - - } - if(j == 3) { - //치환2 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace2", cellValue); - }else { - errRep2Cnt++; - errSts = false; - break; - } - - } - if(j == 4) { - //치환3 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace3", cellValue); - }else { - errRep3Cnt++; - errSts = false; - break; - } - - } - if(j == 5) { - //치환4 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace4", cellValue); - }else { - errRep4Cnt++; - errSts = false; - break; - } - - } - - } - - if(null != jm.get("phone") && errSts) { - json.add(jm); - } - - } - - int resultErrCnt = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt; - int resultErrCntExceptPhone = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건,\n이름 : 20byte, [*1*] [*2*] : 40byte 제한글자수 초과 "+ resultErrCntExceptPhone +"건 있습니다.\n해당 건을 제외하고 문자 발송됩니다."); - }else { - jr.setMessage(""); - } - - } //xlsx 처리 끝 - - } - - } - - return jr; - } - - - /** - *선거문자 발송 - TXT파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/msgcampain/sendTxtFilePhoneNumAjax.do") - @ResponseBody - public Object sendTxtFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("TXT 파일만 업로드할 수 있습니다."); - - List files = (List) multiRequest.getFiles("file0"); - - if(!files.isEmpty()) { - - if (files.get(0).getSize() > 0 - || files.get(0).getOriginalFilename().split("[.]")[1].indexOf("txt") > -1) { - - // txt 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("txt 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(multiRequest.getFile("file0").getInputStream())); - - String line = null; - String[] splitedStr = null; - String[] tempStr = null; - int errPhoneCnt = 0; - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - List> json = new ArrayList>(); - - - //파일 읽어서 탭으로 구분해주기 - while ((line = reader.readLine()) != null) { - - HashMap jm = new HashMap<>(); - splitedStr = null; - tempStr = null; - - //txt 파일의 데이터가 탭 혹은 콤마로 구분되어 있는지 구분처리 - tempStr = line.split("\t"); - if(tempStr.length > 0) { - - splitedStr = tempStr; - - }else { - - splitedStr = line.split(","); - - } - - for (int i = 0; i < splitedStr.length; i++) { - - splitedStr[i] = splitedStr[i].trim(); - - if(i == 0) { - - //이름 - jm.put("name", splitedStr[i]); - } - - if(i == 1) { - - if(splitedStr[i].matches(phoneRegExp)) { - //휴대폰 번호 - jm.put("phone", splitedStr[i]); - }else { - errPhoneCnt++; - } - - } - - if(i == 2) { - //치환1 - jm.put("replace1", splitedStr[i]); - } - if(i == 3) { - //치환2 - jm.put("replace2", splitedStr[i]); - } - if(i == 4) { - //치환3 - jm.put("replace3", splitedStr[i]); - } - if(i == 5) { - //치환4 - jm.put("replace4", splitedStr[i]); - } - - } - - if(jm.get("phone") != null) { - - json.add(jm); - - } - - } // end while - jr.setData(json); - jr.setSuccess(true); - if(errPhoneCnt > 0) { - - jr.setMessage("올바르지 않은 휴대폰 번호가 "+ errPhoneCnt +" 건 있습니다."); - - }else { - - jr.setMessage(""); - - } - } - - } - - return jr; - } - - - /** - * 선거문자 엑셀 불러오기 레이어 팝업 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/excelCallAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/excelCallAjax.do"}) - public String excelCallAjax(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - - return "web/msgcampain/ExcelCallAjax"; - - } - - /** - * 선거문자 발송 - 엑셀파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/msgcampain/excelCallProc.do") - @ResponseBody - public Object excelProc(@RequestBody(required = false) String body, - List uploadFile, - BindingResult result, Model model, - MultipartHttpServletRequest request) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); - - //String sReturn = super.checkReferer(model, request, "", "", "/sms/mms.do", "/sms/sms.do"); - String sReturn = ""; - if (!StringUtil.isEmpty(sReturn)) { - jr.setMessage("올바르지 않은 요청입니다."); - return jr; - } - - //mime : application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - // application/vnd.ms-excel - if (uploadFile.get(0).getSize() > 0 - && (uploadFile.get(0).getContentType().indexOf("spreadsheetml") > -1) - || uploadFile.get(0).getContentType().indexOf("ms-excel") > -1 - || uploadFile.get(0).getOriginalFilename().split("[.]")[1].indexOf("xlsx") > -1 - || uploadFile.get(0).getOriginalFilename().split("[.]")[1].indexOf("xls") > -1) { - String col = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; - String[] cols = col.split(","); - //List> excel = ExcelUploadUtil.readExcel(request, super.getConfig().getUploadPathTemp(), cols, 2); - - //List> excel = null; - String UploadPathTemp = "/temp"; - //List> excel = ExcelUploadUtil.readExcel(request, super.getConfig().getUploadPathTemp(), cols, 2); - - //List> excel = ExcelUploadUtil.readExcel(request, UploadPathTemp, cols, 2); - - - OPCPackage opcPackage = OPCPackage.open(uploadFile.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - - String errMessage = ""; - String cellValue = ""; - if(sheet.getLastRowNum() > 5000) { // - errMessage = "5000줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setMessage(errMessage); - return jr; - } - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=1; i< sheet.getLastRowNum() + 1; i++){ //먼저 밸리데이션 체크(1줄은 생략) - XSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - jm.put("group", ""); //그룹 빈칸세팅 - // 행의 두번째 열(이름부터 받아오기) - XSSFCell cell = null; - for(int j = 0 ; j < 6; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/집사무실/메모1/메모2/메모3 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - jm.put("name", cellValue); - } - if(j == 1) { - //전화번호 - if(cellValue.matches(phoneRegExp)) { - jm.put("receive", cellValue); - } - } - if(j == 2) { - //집사무실 - jm.put("item2", cellValue); - } - if(j == 3) { - //메모1 - jm.put("item3", cellValue); - } - if(j == 4) { - //메모2 - jm.put("item4", cellValue); - } - if(j == 5) { - //메모3 - jm.put("item5", cellValue); - } - } - if(null != jm.get("receive")) { - json.add(jm); - } - - } - - //json 형식에 맞게 변환 - //[{phone: '전화번호', name: '주소록이름', group: '주소록 그룹 이름', item2: '집/사무실', item3: '메모1', item4: '메모2', item5: '메모3'}, {...}] - /*List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO();*/ - - //TODO : 데이터 유효성 판단? - /*for (HashMap map : excel) { - HashMap jm = new HashMap<>(); - //핸드폰 - pVO.setNo(StringUtil.getString(map.get(cols[1])).trim()); - if (StringUtil.isEmpty(pVO.getNo())) - continue; - jm.put("receive", pVO.getNo()); - - //이름 - jm.put("name", StringUtil.getString(map.get(cols[0])).trim()); - //그룹 - jm.put("group", ""); - - //항목2(집/사무실) - 주의 : 옵션 항목이므로 전화번호가 없어도 스킵하면 안됨 - pVO.setNo(StringUtil.getString(map.get(cols[2])).trim()); - jm.put("item2", pVO.getNo()); - //항목3 - jm.put("item3", StringUtil.getString(map.get(cols[3])).trim()); - //항목4 - jm.put("item4", StringUtil.getString(map.get(cols[4])).trim()); - //항목5 - jm.put("item5", StringUtil.getString(map.get(cols[5])).trim()); - - json.add(jm); - }*/ - - jr.setData(json); - jr.setSuccess(true); - jr.setMessage(""); - } - return jr; - } - - - public boolean getNameRepLenChk(String type, String value) { - - boolean rtnValue = true; - - if(type.equals("name")) { - - String tmpNm = value; - int nmLen = tmpNm.length(); - - if(nmLen > 12) { - - rtnValue = false; - - } - - }else if(type.equals("rep")) { - - String tmpRep = value; - int repLen = tmpRep.length(); - - if(repLen > 20) { - - rtnValue = false; - - } - - } - - return rtnValue; - } - - -} diff --git a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java deleted file mode 100644 index 67d4a16..0000000 --- a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java +++ /dev/null @@ -1,1167 +0,0 @@ -package itn.let.mjo.msgcampain.web; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.psl.dataaccess.util.EgovMap; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.ComDefaultCodeVO; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.util.MJUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.lett.service.HashConfVO; -import itn.let.lett.service.LetterService; -import itn.let.lett.service.LetterVO; -import itn.let.mjo.addr.service.AddrGroupService; -import itn.let.mjo.addr.service.AddrService; -import itn.let.mjo.addr.service.AddrVO; -import itn.let.mjo.event.service.MjonEventService; -import itn.let.mjo.event.service.MjonEventVO; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.mjocommon.MjonHolidayApi; -import itn.let.mjo.msg.service.MjonMsgService; -import itn.let.mjo.msg.service.MjonMsgVO; -import itn.let.mjo.msgcampain.service.MjonCandidateService; -import itn.let.mjo.msgcampain.service.MjonCandidateVO; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.msgdata.service.MjonMsgDataVO; -import itn.let.mjo.msgdata.service.MjonMsgReturnVO; -import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; -import itn.let.mjo.msgholiday.service.MsgHolidayService; -import itn.let.mjo.msgholiday.service.MsgHolidayVO; -import itn.let.mjo.pay.service.MjonPayService; -import itn.let.mjo.spammsg.service.MjonSpamMsgService; -import itn.let.mjo.symbol.service.MjonSymbolService; -import itn.let.mjo.symbol.service.MjonSymbolVO; -import itn.let.sym.ccm.cde.service.CateCode; -import itn.let.sym.ccm.cde.service.EgovCcmCmmnDetailCodeManageService; - -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.uss.umt.service.UserManageVO; -import itn.let.utl.fcc.service.EgovCryptoUtil; - -@Controller -public class MjonMsgCampainHGDataController { - - - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "LetterService") - private LetterService letterService; - - @Resource(name = "mjonSymbolService") - private MjonSymbolService mjonSymbolService; - - /** mberManageService */ - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource (name = "AddrService") - private AddrService addrService; - - @Resource (name = "AddrGroupService") - private AddrGroupService addrGroupService; - - @Resource(name = "mjonCandidateService") - private MjonCandidateService mjonCandidateService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - /* 암복호화 */ - @Resource(name = "egovCryptoUtil") - EgovCryptoUtil egovCryptoUtil; - - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; - - @Resource(name = "egovMjonCashIdGnrService") - private EgovIdGnrService idgenMjonCashId; - - @Resource(name = "CmmnDetailCodeManageService") - private EgovCcmCmmnDetailCodeManageService cmmnDetailCodeManageService; - - /** 첨부파일 저장경로 */ - @Value("#{globalSettings['Globals.file.saveDir']}") - private String fileSaveDir; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - @Resource(name = "MjonEventService") - private MjonEventService mjonEventService; - - @Resource(name = "mjonSpamMsgService") - private MjonSpamMsgService mjonSpamMsgService; - - /** 사이트 설정 */ - @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; - - - - - - @Resource(name = "MsgHolidayService") - private MsgHolidayService msgHolidayService; - - @Autowired - private MjonCommon mjonCommon; - - /** - * 선거 문자 대량 발송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/huge/selectMsgHGDataView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/huge/selectMsgHGDataView.do"}) - public String selectMsgHGDataView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO - , CateCode cateCode - , HttpServletRequest request - , ModelMap model) throws Exception{ - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - // 문자 해쉬태그 리스트 불러오기 - String msgType = "M"; - List hashTagList = letterService.selectHashTagWithList(msgType); - model.addAttribute("hashTagList", hashTagList); - - // 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - model.addAttribute("loginVO", loginVO); - - for(int i=0 ; i < cateConfList.size(); i++) { - if("선거".equals(cateConfList.get(i).getCateNm())) { - letterVO.setCategoryCode(cateConfList.get(i).getCateCode()); - } - } - - //주소록에서 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMoveAddrFlag())) { - model.addAttribute("addrVO", searchVO); - } - - //주소록에서 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMoveAddrAllFlag())) { - AddrVO addrVO = new AddrVO(); - - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId != "") { - addrVO.setMberId(userId); - } - addrVO.setRecordCountPerPage(100000); - addrVO.setFirstIndex(0); - addrVO.setSearchAddrGrpId(request.getParameter("searchAddrGrpId")); - addrVO.setSearchCondition(request.getParameter("searchCondition")); - addrVO.setSearchKeyword(request.getParameter("searchKeyword")); - addrVO.setStartKeyword(request.getParameter("startKeyword")); - List addrList = addrService.selectAddrList(addrVO); - - List addrIdList = new ArrayList(); - for(AddrVO item : addrList) { - addrIdList.add(item.getAddrId()); - } - - searchVO.setAddrIdList(addrIdList); - searchVO.setMoveAddrFlag("Y"); - - model.addAttribute("addrVO", searchVO); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - //발송결과 문자 재전송에서 넘어오는 경우 파마리터 전달 - List temp = searchVO.getMsgSeqList(); - - if(temp != null) { - - model.addAttribute("reSendMsgVO", searchVO); - - } - model.addAttribute("letterVO", letterVO); - - // 문자 재전송 New - model.addAttribute("msgResendAllFlag", searchVO.getMsgResendAllFlag()); - model.addAttribute("msgResendAllGroupId", searchVO.getMsgResendAllGroupId()); - model.addAttribute("msgResendAllAdvertiseYn", searchVO.getMsgResendAllAdvertiseYn()); - model.addAttribute("msgResendAllReplaceYn", searchVO.getMsgResendAllReplaceYn()); - - return "web/msgcampain/huge/MsgHGDataView"; - } - - /** - * 선거 문자 대량 발송 단문/장문/그림문자 전송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/huge/selectMsgHGDataSMLViewAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/huge/selectMsgHGDataSMLViewAjax.do"}) - public String selectMsgHGDataSMLView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - //문자 전송 개인 단가 불러오기 - - //0.이벤트 진행중이 회원 정보 불러오기. - //이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다. - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - - long eventDiffDate = 0; - float eventRemainCash = 0; - boolean compareEndDate = false; - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - /** - * MJUtil.getCompareDate() - * 현재 날짜와 파라미터 전달 날짜를 비교 - * 전달날짜를 지난경우 False를 리턴함. - * 현재날짜 이전 혹은 같은 날짜면 True를 리턴함. - * - * */ - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴 - //이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴 - if(!compareEndDate || eventRemainCash < 7.5) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("이벤트 발송 최소 금액(7.5) 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - }else {//이벤트 진행중이면 남은 날짜 계산해서 전달. - - /** - * MJUtil.getDiffDateDay() - * 현재 날짜와 파라미터 날짜 사이의 날짜 수를 계산해줌. - * - * */ - eventDiffDate = MJUtil.getDiffDateDay(eventEndDate); - - } - } - - } - - //남은 날짜값을 절대값으로 변경(음수로 나오기 때문) - model.addAttribute("eventDiffDate", Math.abs(eventDiffDate)); - model.addAttribute("compareEndDate", compareEndDate); - model.addAttribute("eventRemainCash", eventRemainCash); - model.addAttribute("eventMberInfo", eventMberInfo); - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - searchVO.setUserId(userId); - - } - - model.addAttribute("exceptSpamYn", mberManageVO.getExceptSpamYn()); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - - //일반 단가정보 저장 변수 셋팅 - 이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - Float norShortPrice = mberManageVO.getShortPrice(); - Float norLongPrice = mberManageVO.getLongPrice(); - Float norPicturePrice = mberManageVO.getPicturePrice(); - Float norPicture2Price = mberManageVO.getPicture2Price(); - Float norPicture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - /*int shortPrice = (int) mberManageVO.getShortPrice(); - int longPrice = (int) mberManageVO.getLongPrice(); - int picturePrice = (int) mberManageVO.getPicturePrice(); - int picture2Price = (int) mberManageVO.getPicture2Price(); - int picture3Price = (int) mberManageVO.getPicture3Price(); - int userMoney = (int) mberManageVO.getUserMoney();*/ - - String userPoint = mberManageVO.getUserPoint(); - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//이벤트 단가 적용시 일반단가도 필요하여 셋팅 해줌. - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) { - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("shortPrice", shortPrice); - model.addAttribute("longPrice", longPrice); - model.addAttribute("picturePrice", picturePrice); - model.addAttribute("picture2Price", picture2Price); - model.addAttribute("picture3Price", picture3Price); - model.addAttribute("userMoney", userMoney); - model.addAttribute("userPoint", userPoint); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(norShortPrice < 1 || norLongPrice < 1 || norPicturePrice < 1) {//협의 단가가 없는 경우 일반단가에 시스템 단가로 셋팅해줌 - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("norShortPrice", norShortPrice); - model.addAttribute("norLongPrice", norLongPrice); - model.addAttribute("norPicturePrice", norPicturePrice); - model.addAttribute("norPicture2Price", norPicture2Price); - model.addAttribute("norPicture3Price", norPicture3Price); - - //선거 후보자 정보 불러오기 - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - - if(userId != ""){ - - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - - //String cryptText = egovCryptoUtil.encrypt(plainText); - - if(mjonCandidateVO != null) { - - // 주민번호 복호화 하기 - String regidentNo1 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()); - String regidentNo2 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()); - - mjonCandidateVO.setRegidentNo1(regidentNo1); - mjonCandidateVO.setRegidentNo2(regidentNo2); - - } - - } - - model.addAttribute("mjonCandidateVO", mjonCandidateVO); - - // 이메일 코드조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("ITN031"); - model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - if(!userId.equals("")) {//로그인 했을때만 발신번호 리스트 불러오기 - - //아이디 발신번호 리스트 불러오기. - List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); - List resultPhonList = new ArrayList(); - MJUtil mjUtil = new MJUtil(); - - for(String phone : resultSendPhonList) { - - resultPhonList.add(mjUtil.addDash(phone)); - - } - model.addAttribute("resultPhonList", resultPhonList); - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - //그림 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - MjonSymbolVO symbolVO = new MjonSymbolVO(); - // 특수문자 리스트 불러오기 - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - //최근 전송 내역 - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - cal.setTime(now); - cal.add(Calendar.DATE, -3); - - String chkDate = format.format(cal.getTime()); - - searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 - List resultLatestMsgList = mjonMsgDataService.selectLatestMsgList(searchVO); - model.addAttribute("resultLatestMsgList", resultLatestMsgList); - - //자주보내는 번호 - List resultBookMarkMsgList = mjonMsgDataService.selectBookMarkMsgList(searchVO); - model.addAttribute("resultBookMarkMsgList", resultBookMarkMsgList); - - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("mberManageVO", mberManageVO); - - return "web/msgcampain/huge/MsgHGDataSMLView"; - } - - - /** - * 선거문자 10만건 이상 대량 문자 발송 처리 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/huge/sendMsgHGDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/huge/sendMsgHGDataAjax.do"}) - public ModelAndView sendMsgHGDataAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - }else { - - mjonMsgVO.setUserId(userId); - - //발신번호가 등록된 유효한 번호인지 확인 - int sendCallFromCnt = mjonMsgService.selectCallFromNumberChk(mjonMsgVO); - - if(sendCallFromCnt < 1) { - - modelAndView.addObject("message", "등록된 발신번호를 찾을 수 없습니다."); - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("resultSts", resultSts); - return modelAndView; - - } - - /** - * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 - * 현재 로그인 세션도 만료 처리함 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - - modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); - modelAndView.addObject("result", "statusFail"); - modelAndView.addObject("resultSts", resultSts); - - request.getSession().invalidate(); - - return modelAndView; - - } - - } - - try { - -/*+++++++++화면에서 사용하지 않는 값 디폴트 셋팅++++++++++++++*/ - mjonMsgVO.setDivideTime("1"); - mjonMsgVO.setDivideCnt("20"); - -/*++++++스미싱 의심 및 문자 길이 초과 여부 체크++++++++++++++++ */ - //회원정보에서 스미싱 회원 여부 정보 조회 - UserManageVO userManageVO = new UserManageVO(); - - userManageVO.setMberId(userId); - UserManageVO resultUserVO = userManageService.selectSmishingYnUserInfo(userManageVO); - String smishingYn = resultUserVO.getSmishingYn(); - mjonMsgVO.setSmishingYn(smishingYn); - - String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 - String smsCont = mjonMsgVO.getSmsTxt().replace("\r\n", "\n"); - - int FrBytes = smsCont.getBytes(charset).length; - - if(FrBytes > 2000) { - - modelAndView.addObject("message", "문자 내용은 2000Byte를 넘을 수 없습니다."); - modelAndView.addObject("result", "smsLengFail"); - return modelAndView; - - } - - -/*++++++문자 종류(단/장/그림) 체크++++++++++++++++ */ - String msgType = mjonMsgVO.getMsgType(); - - //내문자저장함에 저장후 문자를 발송하는경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함- 20220520 우영두 - if(msgType.equals("P") || msgType.equals("L")) { - msgType = "6"; - }else if(msgType.equals("S")) { - - msgType = "4"; - } - - //메세지 타입이 단문이면 진짜 단문인지 한번더 확인해 준다. - if(msgType.equals("4")) { - - //메세지 길이가 90Byte를초과 하거나, 그림 이미지가 있는경우 메세지 타입을 6으로 변경해준다. - if(FrBytes > 90 || mjonMsgVO.getImgFilePath().length > 0) { - - msgType = "6"; - - } - - } - - mjonMsgVO.setMsgType(msgType); - - //장문 메세지일 경우 - int fileCount = 0; - if(msgType.equals("6")) { - - //그림 이미지가 첨부된 경우 - if(mjonMsgVO.getImgFilePath() != null || mjonMsgVO.getImgFilePath().length > 0) { - - String[] path = mjonMsgVO.getImgFilePath(); - String[] fileId = mjonMsgVO.getImgFileId(); - String[] templateYn = mjonMsgVO.getTemplateYn(); - - for(int i=0; i 0) { - - if(mjonMsgVO.getFileName1() == null && mjonMsgVO.getFileName2() == null && mjonMsgVO.getFileName3() == null) { - - modelAndView.addObject("message", "문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다."); - modelAndView.addObject("result", "imgSourceFail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - } - - System.out.println("++++++++++++ msgType ::: "+mjonMsgVO.getMsgType()); - - - /* - * 화면에서 넘어오는 단가 금액 및 총 결제 캐시 금액 체크 해주기 - * 검증을 위해서 시스템 단가, 회원 협의 단가, 이벤트 단가 정보 조회 - * 조회 단가를 이용하여 총 결제 캐시 금액 계산 - * 파라미터로 넘어온 개별단가(eachPrice), 총 결제캐시(totPrice)를 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌. - */ - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - boolean compareEndDate = false; - float eventRemainCash = 0; - float paramEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 금액 및 기간 체크 - if(!compareEndDate || eventRemainCash < paramEachPrice) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("발송 최소 금액("+ paramEachPrice +") 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - } - } - } - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//협의 단가가 없는 경우 시스템 단가 적용해 주기 - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - // 토탈금액 "," 리플레이스 처리 - mjonMsgVO.setTotPrice(mjonMsgVO.getTotPrice().replaceAll(",", "")); - - float tmpOrgEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - float tmpOrgTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - - System.out.println("+++ tmpOrgEachPrice ::: "+tmpOrgEachPrice); - System.out.println("+++ tmpOrgTotPrice ::: "+tmpOrgTotPrice); - - // MSG_TYPE 다시계산 - if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setMsgType("6"); - }else { - if(FrBytes < 2000) { - if(FrBytes > 90) {// 90Byte 초과시 장문 - mjonMsgVO.setMsgType("6"); - }else {// 그외 단문 - mjonMsgVO.setMsgType("4"); - } - } - } - - System.out.println("mjonMsgVO.getMsgType3() ::: "+mjonMsgVO.getMsgType()); -/* - * 간혹 화면에서 넘어오는 단가와 실제 문자 타입별 단가가 다르게 처리되는 부분이 있어서 - * 다시 한번 문자 종류 및 단가 체크해서 타입별 문자 단가로 조정 처리 - * */ - - //각 문자 종류별 단가 셋팅해주기 - float tmpEachPrice = 0; - if(mjonMsgVO.getMsgType().equals("4")) { - mjonMsgVO.setEachPrice(shortPrice.toString()); - tmpEachPrice = shortPrice; - }else if(mjonMsgVO.getMsgType().equals("6")) { - - if(mjonMsgVO.getFileName3() != null) { - mjonMsgVO.setEachPrice(picture3Price.toString()); - tmpEachPrice = picture3Price; - }else if(mjonMsgVO.getFileName2() != null) { - mjonMsgVO.setEachPrice(picture2Price.toString()); - tmpEachPrice = picture2Price; - }else if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setEachPrice(picturePrice.toString()); - tmpEachPrice = picturePrice; - }else { - mjonMsgVO.setEachPrice(longPrice.toString()); - tmpEachPrice = longPrice; - } - - } - - -/* - * 주소록 그룹에서 조회한 주소 갯수 카운팅 - * 중복 제거한 데이터 갯수 적용해주기 - * - * */ - List resultAddrList = mjonCandidateService.selectAddrGrpHGList(mjonMsgVO); - - if(resultAddrList == null) { - - modelAndView.addObject("message", "주소록 정보를 불러올 수 없습니다."); - modelAndView.addObject("result", "statusFail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - } - - int addrListLen = resultAddrList.size(); - int addrDupListLen = 0; - - //주소록 그룹 전체 주소정보 중복 제거 - resultAddrList = resultAddrList.stream().distinct().collect(Collectors.toList()); - - //제거 중복 건수 계산 - addrDupListLen = resultAddrList.size(); - - System.out.println("++++++++++++++ 중복제거 후 리스트 갯수 ::: "+addrDupListLen); - - mjonMsgVO.setTotalCallCnt(addrDupListLen); - - //수신자 총 수 * 단가 를 통해 총 결제 금액 계산 - int tmpTotCallCnt = addrDupListLen; //mjonMsgVO.getCallToList().length; - float tmpTotPrice = tmpTotCallCnt * tmpEachPrice; - - //중복 제거한 주소록 총 건수 와 개별 단가를 이용하여 총 발송 금액 계산하기 - mjonMsgVO.setEachPrice(Float.toString(tmpEachPrice)); - mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice)); - - - //화면에서 넘어온 파라미터 개별 단가와 컨트롤러에서 계산한 단가를 비교하여 맞지 않으면 컨트롤러 계산 단가 입력 - /*if(tmpOrgEachPrice != tmpEachPrice) { - mjonMsgVO.setEachPrice(Float.toString(tmpEachPrice)); - - System.out.println("화면 : tmpOrgEachPrice ::: "+tmpOrgEachPrice); - System.out.println("컨트롤러 : tmpEachPrice ::: "+tmpEachPrice); - }else { - System.out.println("tmpOrgEachPrice ::: "+tmpOrgEachPrice); - } - - if(tmpOrgTotPrice != tmpTotPrice ) { - mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice)); - - System.out.println("화면 : tmpOrgTotPrice ::: "+tmpOrgTotPrice); - System.out.println("컨트롤러 : tmpTotPrice ::: "+tmpTotPrice); - }else { - System.out.println("tmpOrgTotPrice ::: "+tmpOrgTotPrice); - }*/ - -/* - * 개별단가 및 총결제 캐시 금액 체크 로직 종료 - * - * */ - - -/* - * 치환문자는 사용 안하므로 스킵 - * */ - - - -/* - * 사용자 현재 보유금액 및 포인트 조회 - * */ - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - String totPrice = mjonMsgVO.getTotPrice(); - String eachPrice = mjonMsgVO.getEachPrice(); - - if(msgType.equals("6")) {//문자 mms, lms 단가 설정하기 - - if(fileCount > 2) {//그림 이미지가 3개 - - eachPrice = mjonMsgVO.getP3Price(); - - }else if(fileCount > 1) {//그림 이미지가 2개 - - eachPrice = mjonMsgVO.getP2Price(); - - }else if(fileCount == 1) {//그림 이미지가 1개 - eachPrice = mjonMsgVO.getPPrice(); - - }else {//장문 문자인 경우 - - eachPrice = mjonMsgVO.getMPrice(); - } - - } - - BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN); - - - System.out.println("++++ befCash ::: "+befCash); - System.out.println("++++ totMsgPrice ::: "+totMsgPrice); - - -/*+++++++++++주소록 그룹의 모든 주소록 정보 조회해오기++++++++++++++++++++++++*/ - - - //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - //BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice, - - mjonMsgVO.setBefCash(befCash.toString()); - - //문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - int maxRow = 0; - int rowCnt = 0; - int i = 0; - List arrAddrList = new ArrayList(); - - System.out.println("++++++++++++++++++ 데이터베이스 입력 시작 ::: "+new Date()); - - for(String callTo : resultAddrList) { - - arrAddrList.add(callTo); - if(maxRow == 4999) { - - rowCnt = rowCnt + maxRow; - maxRow = 0; - String[] arrPhoneList = arrAddrList.toArray(new String[arrAddrList.size()]); - System.out.println("arrPhoneList len ::: "+arrPhoneList.length); - mjonMsgVO.setCallToList(arrPhoneList); - - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfoBatch(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - arrAddrList.clear();//리스트 초기화 해주기 - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 대량전송 ==> 5000 resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 대량전송 ==> 5000 resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - }else { - - maxRow++; - - } - - i++; - } - - rowCnt = rowCnt + maxRow; - -/* - * loop를 돌고 남은 잔여 건수 디비 입력 처리해주기 - * */ - String[] arrLastPhoneList = arrAddrList.toArray(new String[arrAddrList.size()]); - - mjonMsgVO.setCallToList(arrLastPhoneList); - - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfoBatch(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 대량전송 마지막 잔여건수 처리 ==> resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 대량전송 마지막 잔여건수 처리 ==> resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - System.out.println("Last arrLastPhoneList ::: "+arrLastPhoneList.length); - System.out.println("req Date ::: "+ mjonMsgVO.getReqDate()); - System.out.println("addrDupListLen ::: "+addrDupListLen); - - } - - System.out.println("++++++++++++++++++ 데이터베이스 입력 종료 ::: "+new Date()); - - } catch (Exception e) { - System.out.println("========================================================================="); - System.out.println("++++++++sendMsgHGDataAjax Controller Error!!!+++++++++++++++++++++ 선거문자 ==> 기타 시스템 오류 !!! : " + e); - System.out.println("========================================================================="); - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 "); - } - - modelAndView.addObject("message", "문자 전송이 완료되었습니다."); - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultSts", resultSts); - modelAndView.addObject("resultBlockSts", resultBlockSts); - - - /** - * 사용자가 보낸 문자를 문자온 법인폰으로도 하나 전송하는 기능 시작 - * - * */ - - try { - - if(resultSts > 0) {//전송 결과가 한건 이상인 경우 - - String adminSmsNoticeYn = "Y"; - String smishingYn = "N"; - String spamStatus = mjonMsgVO.getSpamStatus(); //스미싱 의심으로 체크된 문자 정보 - - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setMberId(userId); - if(!userId.equals("")) { - userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO); - adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); - smishingYn = userManageVO.getSmishingYn(); - } - - //법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송 - if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y") || smishingYn.equals("Y")) { - - if(spamStatus.equals("Y")) { - - mjonMsgVO.setDelayYn("Y"); - - }else if(smishingYn.equals("Y")) { - - mjonMsgVO.setSmishingYn("Y"); - } - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - - String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); - - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - MjonMsgCampainDataController mcdController = new MjonMsgCampainDataController(); - mcdController.getAdminPhoneSendMsgData(mjonMsgVO); - } - - //야간 스미싱의심 알림이 활성화 되어있는 경우만 슬랙 알림 전송처리 - if(holiSmishingNoti.equals("Y")) { - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); - - List resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO); - - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); - - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - - List resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO); - - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); - - if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송 - /* - MjonCommon comm = new MjonCommon(); - comm.getAdminMsgSandSlack(mjonMsgVO); - */ - mjonCommon.getAdminMsgSandSlack(mjonMsgVO); - } - - } - } - - } - - } - - } catch (Exception e) { - throw new Exception("++++++++++++++++++++++ 선거문자 메뉴 getAdminPhoneSendMsgData Error !!! " + e); - } - - - return modelAndView; - } - -} diff --git a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java deleted file mode 100644 index f7277ae..0000000 --- a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java +++ /dev/null @@ -1,2644 +0,0 @@ -package itn.let.mjo.msgcampain.web; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.stream.Collectors; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -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.ResponseBody; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.psl.dataaccess.util.EgovMap; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.ComDefaultCodeVO; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.JsonResult; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.util.MJUtil; -import itn.com.cmm.util.RedirectUrlMaker; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.lett.service.HashConfVO; -import itn.let.lett.service.LetterService; -import itn.let.lett.service.LetterVO; -import itn.let.mjo.addr.service.AddrGroupService; -import itn.let.mjo.addr.service.AddrService; -import itn.let.mjo.addr.service.AddrVO; -import itn.let.mjo.event.service.MjonEventService; -import itn.let.mjo.event.service.MjonEventVO; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.mjocommon.MjonHolidayApi; -import itn.let.mjo.msg.service.MjonMsgService; -import itn.let.mjo.msg.service.MjonMsgVO; -import itn.let.mjo.msgcampain.service.MjonCandidateService; -import itn.let.mjo.msgcampain.service.MjonCandidateTWVO; -import itn.let.mjo.msgcampain.service.MjonCandidateVO; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.msgdata.service.MjonMsgDataVO; -import itn.let.mjo.msgdata.service.MjonMsgReturnVO; -import itn.let.mjo.msgdata.service.PhoneVO; -import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; -import itn.let.mjo.msgholiday.service.MsgHolidayService; -import itn.let.mjo.msgholiday.service.MsgHolidayVO; -import itn.let.mjo.pay.service.MjonPayService; -import itn.let.mjo.spammsg.service.MjonSpamMsgService; -import itn.let.mjo.symbol.service.MjonSymbolService; -import itn.let.mjo.symbol.service.MjonSymbolVO; -import itn.let.sym.ccm.cde.service.CateCode; -import itn.let.sym.ccm.cde.service.EgovCcmCmmnDetailCodeManageService; - -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.uss.umt.service.UserManageVO; -import itn.let.utl.fcc.service.EgovCryptoUtil; - -@Controller -public class MjonMsgCampainTWDataController { - - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "LetterService") - private LetterService letterService; - - @Resource(name = "mjonSymbolService") - private MjonSymbolService mjonSymbolService; - - /** mberManageService */ - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource (name = "AddrService") - private AddrService addrService; - - @Resource (name = "AddrGroupService") - private AddrGroupService addrGroupService; - - @Resource(name = "mjonCandidateService") - private MjonCandidateService mjonCandidateService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - /* 암복호화 */ - @Resource(name = "egovCryptoUtil") - EgovCryptoUtil egovCryptoUtil; - - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; - - @Resource(name = "egovMjonCashIdGnrService") - private EgovIdGnrService idgenMjonCashId; - - @Resource(name = "CmmnDetailCodeManageService") - private EgovCcmCmmnDetailCodeManageService cmmnDetailCodeManageService; - - /** 첨부파일 저장경로 */ - @Value("#{globalSettings['Globals.file.saveDir']}") - private String fileSaveDir; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - @Resource(name = "MjonEventService") - private MjonEventService mjonEventService; - - @Resource(name = "mjonSpamMsgService") - private MjonSpamMsgService mjonSpamMsgService; - - /** 사이트 설정 */ - @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; - - - - - - @Resource(name = "MsgHolidayService") - private MsgHolidayService msgHolidayService; - - @Autowired - private MjonCommon mjonCommon; - - private static final Logger logger = LoggerFactory.getLogger(MjonMsgCampainTWDataController.class); - - /** - * 선거 문자 20건씩 발송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/selectMsgTWDataView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectMsgTWDataView.do"}) - public String selectMsgTWDataView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO - , CateCode cateCode - , HttpServletRequest request - , ModelMap model) throws Exception{ - - - - // 요청의 호스트명을 가져오기 - String hostName = request.getServerName(); - - // 외부에서 선거발송 페이지로 들어오는걸 막음 - // 20250102 이호영 - if (!"localhost".equals(hostName)) { - return "redirect:/web/mjon/msgdata/selectMsgDataView.do"; - } - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - // 문자 해쉬태그 리스트 불러오기 - String msgType = "M"; - List hashTagList = letterService.selectHashTagWithList(msgType); - model.addAttribute("hashTagList", hashTagList); - - // 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - model.addAttribute("loginVO", loginVO); - - for(int i=0 ; i < cateConfList.size(); i++) { - if("선거".equals(cateConfList.get(i).getCateNm())) { - letterVO.setCategoryCode(cateConfList.get(i).getCateCode()); - } - } - - //주소록에서 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMoveAddrFlag())) { - model.addAttribute("addrVO", searchVO); - } - - //주소록에서 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMoveAddrAllFlag())) { - AddrVO addrVO = new AddrVO(); - - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId != "") { - addrVO.setMberId(userId); - } - addrVO.setRecordCountPerPage(100000); - addrVO.setFirstIndex(0); - addrVO.setSearchAddrGrpId(request.getParameter("searchAddrGrpId")); - addrVO.setSearchCondition(request.getParameter("searchCondition")); - addrVO.setSearchKeyword(request.getParameter("searchKeyword")); - addrVO.setStartKeyword(request.getParameter("startKeyword")); - List addrList = addrService.selectAddrList(addrVO); - - List addrIdList = new ArrayList(); - for(AddrVO item : addrList) { - addrIdList.add(item.getAddrId()); - } - - searchVO.setAddrIdList(addrIdList); - searchVO.setMoveAddrFlag("Y"); - - model.addAttribute("addrVO", searchVO); - } - - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - //발송결과 문자 재전송에서 넘어오는 경우 파마리터 전달 - List temp = searchVO.getMsgSeqList(); - - if(temp != null) { - - model.addAttribute("reSendMsgVO", searchVO); - - } - model.addAttribute("letterVO", letterVO); - - // 문자 재전송 New - model.addAttribute("msgResendAllFlag", searchVO.getMsgResendAllFlag()); - model.addAttribute("msgResendAllGroupId", searchVO.getMsgResendAllGroupId()); - model.addAttribute("msgResendAllAdvertiseYn", searchVO.getMsgResendAllAdvertiseYn()); - model.addAttribute("msgResendAllReplaceYn", searchVO.getMsgResendAllReplaceYn()); - - return "web/msgcampain/tw/MsgTWDataView"; - } - - /** - * 선거 문자 20건씩 발송 단문/장문/그림문자 전송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/selectMsgTWDataSMLViewAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/selectMsgTWDataSMLViewAjax.do"}) - public String selectMsgTWDataSMLView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - //문자 전송 개인 단가 불러오기 - - //0.이벤트 진행중이 회원 정보 불러오기. - //이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다. - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - - long eventDiffDate = 0; - float eventRemainCash = 0; - boolean compareEndDate = false; - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - /** - * MJUtil.getCompareDate() - * 현재 날짜와 파라미터 전달 날짜를 비교 - * 전달날짜를 지난경우 False를 리턴함. - * 현재날짜 이전 혹은 같은 날짜면 True를 리턴함. - * - * */ - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴 - //이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴 - if(!compareEndDate || eventRemainCash < 7.5) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("이벤트 발송 최소 금액(7.5) 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - }else {//이벤트 진행중이면 남은 날짜 계산해서 전달. - - /** - * MJUtil.getDiffDateDay() - * 현재 날짜와 파라미터 날짜 사이의 날짜 수를 계산해줌. - * - * */ - eventDiffDate = MJUtil.getDiffDateDay(eventEndDate); - - } - } - - } - - //남은 날짜값을 절대값으로 변경(음수로 나오기 때문) - model.addAttribute("eventDiffDate", Math.abs(eventDiffDate)); - model.addAttribute("compareEndDate", compareEndDate); - model.addAttribute("eventRemainCash", eventRemainCash); - model.addAttribute("eventMberInfo", eventMberInfo); - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - searchVO.setUserId(userId); - - } - - model.addAttribute("exceptSpamYn", mberManageVO.getExceptSpamYn()); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - - //일반 단가정보 저장 변수 셋팅 - 이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - Float norShortPrice = mberManageVO.getShortPrice(); - Float norLongPrice = mberManageVO.getLongPrice(); - Float norPicturePrice = mberManageVO.getPicturePrice(); - Float norPicture2Price = mberManageVO.getPicture2Price(); - Float norPicture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - /*int shortPrice = (int) mberManageVO.getShortPrice(); - int longPrice = (int) mberManageVO.getLongPrice(); - int picturePrice = (int) mberManageVO.getPicturePrice(); - int picture2Price = (int) mberManageVO.getPicture2Price(); - int picture3Price = (int) mberManageVO.getPicture3Price(); - int userMoney = (int) mberManageVO.getUserMoney();*/ - - String userPoint = mberManageVO.getUserPoint(); - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//이벤트 단가 적용시 일반단가도 필요하여 셋팅 해줌. - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) { - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("shortPrice", shortPrice); - model.addAttribute("longPrice", longPrice); - model.addAttribute("picturePrice", picturePrice); - model.addAttribute("picture2Price", picture2Price); - model.addAttribute("picture3Price", picture3Price); - model.addAttribute("userMoney", userMoney); - model.addAttribute("userPoint", userPoint); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(norShortPrice < 1 || norLongPrice < 1 || norPicturePrice < 1) {//협의 단가가 없는 경우 일반단가에 시스템 단가로 셋팅해줌 - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("norShortPrice", norShortPrice); - model.addAttribute("norLongPrice", norLongPrice); - model.addAttribute("norPicturePrice", norPicturePrice); - model.addAttribute("norPicture2Price", norPicture2Price); - model.addAttribute("norPicture3Price", norPicture3Price); - - //선거 후보자 정보 불러오기 - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - - if(userId != ""){ - - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - - //String cryptText = egovCryptoUtil.encrypt(plainText); - - if(mjonCandidateVO != null) { - - // 주민번호 복호화 하기 - String regidentNo1 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()); - String regidentNo2 = egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()); - - mjonCandidateVO.setRegidentNo1(regidentNo1); - mjonCandidateVO.setRegidentNo2(regidentNo2); - - } - - } - - model.addAttribute("mjonCandidateVO", mjonCandidateVO); - - // 이메일 코드조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("ITN031"); - model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - if(!userId.equals("")) {//로그인 했을때만 발신번호 리스트 불러오기 - - //아이디 발신번호 리스트 불러오기. - List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); - List resultPhonList = new ArrayList(); - MJUtil mjUtil = new MJUtil(); - - for(String phone : resultSendPhonList) { - - resultPhonList.add(mjUtil.addDash(phone)); - - } - model.addAttribute("resultPhonList", resultPhonList); - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - //그림 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - MjonSymbolVO symbolVO = new MjonSymbolVO(); - // 특수문자 리스트 불러오기 - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - //최근 전송 내역 - /*Calendar cal = Calendar.getInstance(); - Date now = new Date(); - - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - cal.setTime(now); - cal.add(Calendar.DATE, -3); - - String chkDate = format.format(cal.getTime()); - - searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 - List resultLatestMsgList = mjonMsgDataService.selectLatestMsgList(searchVO); - model.addAttribute("resultLatestMsgList", resultLatestMsgList);*/ - - //자주보내는 번호 - /*List resultBookMarkMsgList = mjonMsgDataService.selectBookMarkMsgList(searchVO); - model.addAttribute("resultBookMarkMsgList", resultBookMarkMsgList);*/ - - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("mberManageVO", mberManageVO); - - //기존 작업하던 수신목록 정보가 있는지 확인 - int callSeq = mjonCandidateService.selectMsgCallToSeqNum(userId); - model.addAttribute("callSeq", callSeq); - - return "web/msgcampain/tw/MsgTWDataSMLView"; - } - - //선거문자 20건 받는사람 목록 불러오기 - @RequestMapping(value="/web/mjon/msgcampain/selectMsgTWCallToListAjax.do") - public String selectMsgTWCallToListAjax(MjonCandidateTWVO mjonCandidateTWVO, ModelMap model, RedirectAttributes redirectAttributes) throws Exception{ - - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - redirectAttributes.addFlashAttribute("message", "로그인이 필요합니다."); - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/user/login/login.do"); - return redirectUrlMaker.getRedirectUrl(); - - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonCandidateTWVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(20); - paginationInfo.setPageSize(5); - - mjonCandidateTWVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonCandidateTWVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonCandidateTWVO.setRecordCountPerPage(20); - - mjonCandidateTWVO.setMberId(userId); - List resultCallToList = mjonCandidateService.selectCampainTWCalltoList(mjonCandidateTWVO); - - model.addAttribute("resultCallToList", resultCallToList); - paginationInfo.setTotalRecordCount( resultCallToList.size()> 0 ? ((Long)((EgovMap)resultCallToList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("mjonCandidateTWVO", mjonCandidateTWVO); - - //전체 남은 리스트 수 및 전송완료 등 건수 정보 조회 - MjonCandidateTWVO resultTotCallToInfo = mjonCandidateService.selectMsgTWCallToTotCount(mjonCandidateTWVO); - - model.addAttribute("resultTotCallToInfo", resultTotCallToInfo); - - return "web/msgcampain/tw/MsgTWDataCallToListView"; - } - - - @RequestMapping(value="/web/mjon/msgcampain/insertMyAddrTWCallToAjax.do") - public ModelAndView insertMyAddrTWCallToAjax(MjonCandidateTWVO mjonCandidateTWVO) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - } - try { - - /* - * 2024.01.25 우영두 성능 개선 - * 데이터수가 10만건이 넘는 상황일 경우 중복제거 및 데이터 처리 Loop 문 최소화 - * - * */ - List callToList = new ArrayList(); - int totRowDataCnt = mjonCandidateTWVO.getCallToArr().length; - - /*for(String callTo : mjonCandidateTWVO.getCallToArr()) { - - callToList.add(callTo); - totRowDataCnt++; - - }*/ - - //전달받은 수신목록 중복 제거 - callToList = Arrays.asList(mjonCandidateTWVO.getCallToArr()); - callToList = callToList.stream().distinct().collect(Collectors.toList()); - - //수신자 목록 중복 체크 및 디비화 처리 - //List dupCallToList = MJUtil.getDuplicateList(callToList); - - String dupCallCnt = Integer.toString(totRowDataCnt - callToList.size()); - //System.out.println("++++++++++++++++++ dupCallCnt ::: "+dupCallCnt); - //입력되어있는 데이터의 마지막 순번(call_seq)을 조회해 온다. - int maxCallSeq = mjonCandidateService.selectCandidateTWMaxCallSeq(userId); - maxCallSeq += 1;//마지막 순번에 1을 더해서 다음 순번을 지정해준다. - - List mjonCandidateTwVO = new ArrayList(); - - for(String callTo : callToList) { - - MjonCandidateTWVO tmpCandidateTwVO = new MjonCandidateTWVO(); - - tmpCandidateTwVO.setMberId(userId); - tmpCandidateTwVO.setCallTo(callTo); - tmpCandidateTwVO.setFrstRegisterId(userId); - tmpCandidateTwVO.setLastUpdusrId(userId); - tmpCandidateTwVO.setCallSeq(maxCallSeq); - - mjonCandidateTwVO.add(tmpCandidateTwVO); - - } - - int resultCnt = mjonCandidateService.insertCandidateTWCallToData(mjonCandidateTwVO); - - if(resultCnt > 0) { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("dupCallCnt", dupCallCnt); - modelAndView.addObject("maxCallSeq", maxCallSeq); - - }else { - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "주소록을 불러오는 중 오류가 발생하였습니다. 잠시 후 다시 시도해 주세요."); - - } - - - } catch (Exception e) { - System.out.println("insertMyAddrTWCallToAjax Controller Error!!! " + e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "주소록을 불러오는 중 오류가 발생하였습니다. 잠시 후 다시 시도해 주세요."); - return modelAndView; - } - - return modelAndView; - } - - /* - * 받는사람 목록 데이터 전체 초기화 처리 - * 데이터베이스에 저장된 해당 회원의 발신목록 정보를 모두 초기화 처리 - * */ - @RequestMapping(value="/web/mjon/msgcampain/updateMsgTWCallToListResetAjax.do") - public ModelAndView updateMsgTWCallToListResetAjax(MjonCandidateTWVO mjonCandidateTWVO) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - } - - try { - - mjonCandidateTWVO.setMberId(userId); - - //수신목록 테이블에 있는 회원의 데이터를 모두 취소 처리해준다. - int resultCnt = mjonCandidateService.updateCandidateTWCallToDataCancel(userId); - - if(resultCnt > 0) { - - modelAndView.addObject("result", "success"); - - }else { - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "받는사람 초기화 중 오류가 발생하였습니다. 잠시 후 다시 시도해 주세요."); - - } - - } catch (Exception e) { - System.out.println("updateMsgTWCallToListResetAjax Controller Error!!! " + e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "받는사람 초기화 중 오류가 발생하였습니다. 잠시 후 다시 시도해 주세요."); - return modelAndView; - } - - return modelAndView; - } - - /* - * 받는사람 목록 선택 삭제 데이터 취소 처리 - * - * */ - @RequestMapping(value="/web/mjon/msgcampain/updateMsgTWCallToListChkDelAjax.do") - public ModelAndView updateMsgTWCallToListChkDelAjax(MjonCandidateTWVO mjonCandidateTWVO) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - } - - try { - - mjonCandidateTWVO.setMberId(userId); - - int resultCnt = mjonCandidateService.updateMsgTWCallToListChkDel(mjonCandidateTWVO); - - if(resultCnt > 0) { - - modelAndView.addObject("result", "success"); - - }else { - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "받는사람 삭제 중 오류가 발생하였습니다. 잠시 후 다시 시도해 주세요."); - - } - - } catch (Exception e) { - System.out.println("updateMsgTWCallToListResetAjax Controller Error!!! " + e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "받는사람 초기화 중 오류가 발생하였습니다. 잠시 후 다시 시도해 주세요."); - return modelAndView; - } - - return modelAndView; - } - - @RequestMapping(value="/web/mjon/msgcampain/insertMsgTWCallToOneNumberAddAjax.do") - public ModelAndView insertMsgTWCallToOneNumberAdd(MjonCandidateTWVO mjonCandidateTWVO) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - } - - try { - - - System.out.println("================ callSeq ::: "+mjonCandidateTWVO.getCallSeq()); - String callToNum = ""; - for(String callTo : mjonCandidateTWVO.getCallToArr()) { - - System.out.println("++++++++++++++++ callToArr ::: "+callTo); - callToNum = callTo; - - } - - int callSeq = mjonCandidateTWVO.getCallSeq(); - - //처음 등록되는 연락처 번호이면 기존 회원 CallSeq 마지막 번호 다음으로 신규 추가 - if(callSeq == 0) { - - int maxCallSeq = mjonCandidateService.selectCandidateTWMaxCallSeq(userId); - maxCallSeq += 1;//마지막 순번에 1을 더해서 다음 순번을 지정해준다. - - mjonCandidateTWVO.setCallSeq(maxCallSeq); - - } - - //연락처 추가 관련 입력정보 셋팅해주기 - mjonCandidateTWVO.setMberId(userId); - mjonCandidateTWVO.setCallTo(callToNum.replaceAll("-", "")); - mjonCandidateTWVO.setFrstRegisterId(userId); - mjonCandidateTWVO.setLastUpdusrId(userId); - - //중복 연락처 체크 해주기 - int dupCallNum = mjonCandidateService.selectCandidateTWCallToDupleCnt(mjonCandidateTWVO); - - if(dupCallNum > 0) { - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "이미 등록된 연락처 입니다. 연락처를 다시 확인해 주세요."); - return modelAndView; - } - - int resultCnt = mjonCandidateService.insertCandidateTWCallToDataOnlyAdd(mjonCandidateTWVO); - - if(resultCnt > 0) { - modelAndView.addObject("result", "success"); - modelAndView.addObject("callSeq", mjonCandidateTWVO.getCallSeq()); - }else { - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "연락처 추가 중 오류가 발생하였습니다. 잠시 후 다시 시도해 주세요."); - } - - - } catch (Exception e) { - System.out.println("insertMsgTWCallToOneNumberAdd Controller Error!!! " + e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "연락처 추가 중 오류가 발생하였습니다. 잠시 후 다시 시도해 주세요."); - return modelAndView; - } - - return modelAndView; - - } - - - - /* - * 선거문자 20건 발송 처리 - * - * */ - - /** - * 선거문자 20건 문자 발송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgcampain/sendMsgTWDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgcampain/sendMsgTWDataAjax.do"}) - public ModelAndView sendMsgTWData(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //String resultSts = "0"; - //String resultBlockSts = "0"; - - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 - String userId = ""; - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("resultSts", resultSts); - return modelAndView; - - }else { - - mjonMsgVO.setUserId(userId); - - //발신번호가 등록된 유효한 번호인지 확인 - int sendCallFromCnt = mjonMsgService.selectCallFromNumberChk(mjonMsgVO); - - if(sendCallFromCnt < 1) { - - modelAndView.addObject("message", "등록된 발신번호를 찾을 수 없습니다."); - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("resultSts", resultSts); - return modelAndView; - - } - - /** - * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 - * 현재 로그인 세션도 만료 처리함 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - - modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); - modelAndView.addObject("result", "statusFail"); - modelAndView.addObject("resultSts", resultSts); - - request.getSession().invalidate(); - - return modelAndView; - - } - - } - - //회원정보에서 스미싱 회원 여부 정보 조회 - UserManageVO userManageVO = new UserManageVO(); - - userManageVO.setMberId(userId); - UserManageVO resultUserVO = userManageService.selectSmishingYnUserInfo(userManageVO); - String smishingYn = resultUserVO.getSmishingYn(); - mjonMsgVO.setSmishingYn(smishingYn); - - String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 - String smsCont = mjonMsgVO.getSmsTxt().replace("\r\n", "\n"); - - int FrBytes = smsCont.getBytes(charset).length; - - if(FrBytes > 2000) { - - modelAndView.addObject("message", "문자 내용은 2000Byte를 넘을 수 없습니다."); - modelAndView.addObject("result", "smsLengFail"); - return modelAndView; - - } - - System.out.println("mjonMsgVO.getMsgType1() ::: "+mjonMsgVO.getMsgType()); - - String msgType = mjonMsgVO.getMsgType(); - - //내문자저장함에 저장후 문자를 발송하는경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함- 20220520 우영두 - if(msgType.equals("P") || msgType.equals("L")) { - msgType = "6"; - }else if(msgType.equals("S")) { - - msgType = "4"; - } - - //메세지 타입이 단문이면 진짜 단문인지 한번더 확인해 준다. - if(msgType.equals("4")) { - - //메세지 길이가 90Byte를초과 하거나, 그림 이미지가 있는경우 메세지 타입을 6으로 변경해준다. - if(FrBytes > 90 || mjonMsgVO.getImgFilePath().length > 0) { - - msgType = "6"; - - } - - } - - mjonMsgVO.setMsgType(msgType); - - //장문 메세지일 경우 - int fileCount = 0; - if(msgType.equals("6")) { - - //그림 이미지가 첨부된 경우 - if(mjonMsgVO.getImgFilePath() != null || mjonMsgVO.getImgFilePath().length > 0) { - - String[] path = mjonMsgVO.getImgFilePath(); - String[] fileId = mjonMsgVO.getImgFileId(); - String[] templateYn = mjonMsgVO.getTemplateYn(); - - for(int i=0; i 0) { - - if(mjonMsgVO.getFileName1() == null && mjonMsgVO.getFileName2() == null && mjonMsgVO.getFileName3() == null) { - - modelAndView.addObject("message", "문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다."); - modelAndView.addObject("result", "imgSourceFail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - } - - /* - * 화면에서 넘어오는 단가 금액 및 총 결제 캐시 금액 체크 해주기 - * 검증을 위해서 시스템 단가, 회원 협의 단가, 이벤트 단가 정보 조회 - * 조회 단가를 이용하여 총 결제 캐시 금액 계산 - * 파라미터로 넘어온 개별단가(eachPrice), 총 결제캐시(totPrice)를 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌. - */ - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - boolean compareEndDate = false; - float eventRemainCash = 0; - float paramEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 금액 및 기간 체크 - if(!compareEndDate || eventRemainCash < paramEachPrice) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("발송 최소 금액("+ paramEachPrice +") 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - } - } - } - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//협의 단가가 없는 경우 시스템 단가 적용해 주기 - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - // 토탈금액 "," 리플레이스 처리 - mjonMsgVO.setTotPrice(mjonMsgVO.getTotPrice().replaceAll(",", "")); - - float tmpOrgEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - float tmpOrgTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - - System.out.println("mjonMsgVO.getMsgType2() ::: "+mjonMsgVO.getMsgType()); - - // MSG_TYPE 다시계산 - if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setMsgType("6"); - }else { - if(FrBytes < 2000) { - if(FrBytes > 90) {// 90Byte 초과시 장문 - mjonMsgVO.setMsgType("6"); - }else {// 그외 단문 - mjonMsgVO.setMsgType("4"); - } - } - } - - System.out.println("mjonMsgVO.getMsgType3() ::: "+mjonMsgVO.getMsgType()); - - //각 문자 종류별 단가 셋팅해주기 - float tmpEachPrice = 0; - if(mjonMsgVO.getMsgType().equals("4")) { - mjonMsgVO.setEachPrice(shortPrice.toString()); - tmpEachPrice = shortPrice; - }else if(mjonMsgVO.getMsgType().equals("6")) { - - if(mjonMsgVO.getFileName3() != null) { - mjonMsgVO.setEachPrice(picture3Price.toString()); - tmpEachPrice = picture3Price; - }else if(mjonMsgVO.getFileName2() != null) { - mjonMsgVO.setEachPrice(picture2Price.toString()); - tmpEachPrice = picture2Price; - }else if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setEachPrice(picturePrice.toString()); - tmpEachPrice = picturePrice; - }else { - mjonMsgVO.setEachPrice(longPrice.toString()); - tmpEachPrice = longPrice; - } - - } - - //수신자 총 수 * 단가 를 통해 총 결제 금액 계산 - int tmpTotCallCnt = mjonMsgVO.getCallToList().length; - float tmpTotPrice = tmpTotCallCnt * tmpEachPrice; - - - //화면에서 넘어온 파라미터 개별 단가와 컨트롤러에서 계산한 단가를 비교하여 맞지 않으면 컨트롤러 계산 단가 입력 - if(tmpOrgEachPrice != tmpEachPrice) { - mjonMsgVO.setEachPrice(Float.toString(tmpEachPrice)); - - System.out.println("화면 : tmpOrgEachPrice ::: "+tmpOrgEachPrice); - System.out.println("컨트롤러 : tmpEachPrice ::: "+tmpEachPrice); - }else { - System.out.println("tmpOrgEachPrice ::: "+tmpOrgEachPrice); - } - - if(tmpOrgTotPrice != tmpTotPrice ) { - mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice)); - - System.out.println("화면 : tmpOrgTotPrice ::: "+tmpOrgTotPrice); - System.out.println("컨트롤러 : tmpTotPrice ::: "+tmpTotPrice); - }else { - System.out.println("tmpOrgTotPrice ::: "+tmpOrgTotPrice); - } - - /* - * 개별단가 및 총결제 캐시 금액 체크 로직 종료 - * - * */ - - //치환문자 체크 처리 - String txtReplYn = mjonMsgVO.getTxtReplYn(); - if(txtReplYn.equals("Y")) { - - int totListCnt = mjonMsgVO.getCallToList().length; - String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] phone = mjonMsgVO.getCallToList(); //수신자 휴대폰 번호 - String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //이름, 휴대폰, 치환문자 데이터가 없으면 취소 처리 - if((nameList.length == 0 || nameList == null) - && (rep1.length == 0 || rep1 == null) - && (rep2.length == 0 || rep2 == null) - && (rep3.length == 0 || rep3 == null) - && (rep4.length == 0 || rep4 == null)) { - - modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - - } - - // 치환문자 전체 필수체크 Start - boolean isRepCountOk = true; - if (mjonMsgVO.getSmsTxt().indexOf("[*이름*]") > -1) { - if(nameList.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*1*]") > -1) { - if(rep1.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*2*]") > -1) { - if(rep2.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*3*]") > -1) { - if(rep3.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*4*]") > -1) { - if(rep4.length != phone.length) { - isRepCountOk = false; - } - } - - if (isRepCountOk == false) { - modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다"); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - // End - - //--------------------------------------------------------------------------------------------------------------- - - - int msgLeng = 90; //단문 문자열 길이 - - if(msgType.equals("6")) { - - msgLeng = 2000; //장문 문자열 길이 - - } - - for(int i=0; i < totListCnt; i ++) { - - String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 - - /** - * 본문 내용 - 치환 처리 후 문자 길이 초과 여부만 체크 - * 치환 리스트 중 데이터가 없는 경우 데이터 밀림방지를 위하여 공백 하나를 추가해줌 - * 공백처리를 안하는 경우 데이터가 밀려서 치환되는 오류가 있어서 처리해줌 - * - * */ - - - int repCnt = 0; - smsTxt = smsTxt.replaceAll(String.valueOf((char)13), ""); - if (smsTxt.indexOf("[*이름*]") > -1) { - if(nameList.length > i && StringUtil.isNotEmpty(nameList[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", ""); - nameList[i] = " "; - } - repCnt++; - } - if (smsTxt.indexOf("[*1*]") > -1) { - if(rep1.length > i && StringUtil.isNotEmpty(rep1[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", ""); - rep1[i] = " "; - } - repCnt++; - } - if (smsTxt.indexOf("[*2*]") > -1) { - if(rep2.length > i && StringUtil.isNotEmpty(rep2[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", ""); - rep2[i] = " "; - } - repCnt++; - } - if (smsTxt.indexOf("[*3*]") > -1) { - if(rep3.length > i && StringUtil.isNotEmpty(rep3[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", ""); - rep3[i] = " "; - } - repCnt++; - } - if (smsTxt.indexOf("[*4*]") > -1) { - if(rep4.length > i && StringUtil.isNotEmpty(rep4[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", ""); - rep4[i] = " "; - } - repCnt++; - } - - //문자열 바이트 수 구하기(한글 2Byte로 계산) - // 한글 3Byte로 하기 위해서는 StandardCharsets.UTF_8 로 변경하면 된다. - int bytes = smsTxt.getBytes(charset).length; - if(repCnt > 0) { - if(bytes > msgLeng) { //전송 문자 길이를 초과한 경우 전송 취소 - 단문 작성 후 치환했을 때 장문으로 길이가 초과되는 경우 체크 - modelAndView.addObject("message", "문자 치환 후 전송 문자 길이를 초과하였습니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - return modelAndView; - } - } - } - - mjonMsgVO.setNameList(nameList); - mjonMsgVO.setRep1List(rep1); - mjonMsgVO.setRep2List(rep2); - mjonMsgVO.setRep3List(rep3); - mjonMsgVO.setRep4List(rep4); - - } - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - String totPrice = mjonMsgVO.getTotPrice(); - String eachPrice = mjonMsgVO.getEachPrice(); - - if(msgType.equals("6")) {//문자 mms, lms 단가 설정하기 - - if(fileCount > 2) {//그림 이미지가 3개 - - eachPrice = mjonMsgVO.getP3Price(); - - }else if(fileCount > 1) {//그림 이미지가 2개 - - eachPrice = mjonMsgVO.getP2Price(); - - }else if(fileCount == 1) {//그림 이미지가 1개 - eachPrice = mjonMsgVO.getPPrice(); - - }else {//장문 문자인 경우 - - eachPrice = mjonMsgVO.getMPrice(); - } - - } - - BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN); - - - //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - //BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice, - - mjonMsgVO.setBefCash(befCash.toString()); - - //문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열 - String[] tempNameList = new String[200]; //임시 이름 리스트 저장용 배열 - String[] tempRep1List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep2List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep3List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep4List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - - String[] phoneList = mjonMsgVO.getCallToList(); - String[] nameList = mjonMsgVO.getNameList(); - String[] rep1List = mjonMsgVO.getRep1List(); - String[] rep2List = mjonMsgVO.getRep2List(); - String[] rep3List = mjonMsgVO.getRep3List(); - String[] rep4List = mjonMsgVO.getRep4List(); - - int callToListCnt = mjonMsgVO.getCallToList().length; - mjonMsgVO.setTotalCallCnt(callToListCnt); - - /** - * 예약 문자인 경우 시간 및 분할 시간 셋팅 해주기 - * - * - * */ - - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - int turmMin = 0; - int totalCallCnt = 0; - int divideCnt = 0; - int count = 1; //분할 카운트 - - - if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - - } - - //분할 예약 시간 저장 리스트 생성 - List dividDayList = new ArrayList(); - - //서비스 단으로 특정 문자 건수 이상으로 한번에 보내지 않기 위해서 처리함 - //200건이 넘으면 200개씩 서비스로 넘기고 - if(callToListCnt > 200) { - - int sendCnt = 0; - for(int i=0; i< callToListCnt; i++) { - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - if((i < callToListCnt -1) && sendCnt == 199) { - - //sendCnt 200번째 값을 추가해준다. - tempPhoneList[sendCnt] = phoneList[i]; - - if(nameList.length > 0) { - tempNameList[sendCnt] = nameList[i]; - } - - if(rep1List.length > 0) { - tempRep1List[sendCnt] = rep1List[i]; - } - - if(rep2List.length > 0) { - tempRep2List[sendCnt] = rep2List[i]; - } - - if(rep3List.length > 0) { - tempRep3List[sendCnt] = rep3List[i]; - } - - if(rep4List.length > 0) { - tempRep4List[sendCnt] = rep4List[i]; - } - - List arrPhoneList = new ArrayList(); - List arrNameList = new ArrayList(); - List arrRep1List = new ArrayList(); - List arrRep2List = new ArrayList(); - List arrRep3List = new ArrayList(); - List arrRep4List = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList.add(temp); - - } - - } - - if(tempNameList.length > 0) { - for(String tmpName : tempNameList) { - - if(tmpName != null) { - - arrNameList.add(tmpName); - - } - - } - - } - - if(tempRep1List.length > 0) { - for(String tmpRep1 : tempRep1List) { - - if(tmpRep1 != null) { - - arrRep1List.add(tmpRep1); - - } - - } - - } - - if(tempRep2List.length > 0) { - for(String tmpRep2 : tempRep2List) { - - if(tmpRep2 != null) { - - arrRep2List.add(tmpRep2); - - } - - } - - } - - if(tempRep3List.length > 0) { - for(String tmpRep3 : tempRep3List) { - - if(tmpRep3 != null) { - - arrRep3List.add(tmpRep3); - - } - - } - - } - - if(tempRep4List.length > 0) { - for(String tmpRep4 : tempRep4List) { - - if(tmpRep4 != null) { - - arrRep4List.add(tmpRep4); - - } - - } - - } - - //리스트에 추가된 내용 만큼 임시 수신목록 배열에 넣어준다. - String[] sendPhoneList = new String[arrPhoneList.size()]; - String[] sendNameList = new String[arrNameList.size()]; - String[] sendRep1List = new String[arrRep1List.size()]; - String[] sendRep2List = new String[arrRep2List.size()]; - String[] sendRep3List = new String[arrRep3List.size()]; - String[] sendRep4List = new String[arrRep4List.size()]; - - for(int j=0; j< arrPhoneList.size(); j++) { - - sendPhoneList[j] = arrPhoneList.get(j); - - } - - for(int k=0; k< arrNameList.size(); k++) { - - sendNameList[k] = arrNameList.get(k); - - } - - for(int k=0; k< arrRep1List.size(); k++) { - - sendRep1List[k] = arrRep1List.get(k); - - } - - for(int k=0; k< arrRep2List.size(); k++) { - - sendRep2List[k] = arrRep2List.get(k); - - } - - for(int k=0; k< arrRep3List.size(); k++) { - - sendRep3List[k] = arrRep3List.get(k); - - } - - for(int k=0; k< arrRep4List.size(); k++) { - - sendRep4List[k] = arrRep4List.get(k); - - } - - mjonMsgVO.setCallToList(sendPhoneList); - - if(sendNameList.length > 0) { - mjonMsgVO.setNameList(sendNameList); - } - - if(sendRep1List.length > 0) { - mjonMsgVO.setRep1List(sendRep1List); - } - - if(sendRep2List.length > 0) { - mjonMsgVO.setRep2List(sendRep2List); - } - - if(sendRep3List.length > 0) { - mjonMsgVO.setRep3List(sendRep3List); - } - - if(sendRep4List.length > 0) { - mjonMsgVO.setRep4List(sendRep4List); - } - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - //발송 처리후 배열 초기화 - Arrays.fill(tempPhoneList, null); - dividDayList.clear(); - - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 199 resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 199 resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - }else if((i == callToListCnt -1) && sendCnt < 200){//수신목록 마지막이면서 200개 미만으로 남은 경우 발송 처리해준다. - - //마지막 리스트의 수신번호를 추가해 준다. - tempPhoneList[sendCnt] = phoneList[i]; - if(nameList.length > 0) { - tempNameList[sendCnt] = nameList[i]; - } - - if(rep1List.length > 0) { - tempRep1List[sendCnt] = rep1List[i]; - } - - if(rep2List.length > 0) { - tempRep2List[sendCnt] = rep2List[i]; - } - - if(rep3List.length > 0) { - tempRep3List[sendCnt] = rep3List[i]; - } - - if(rep4List.length > 0) { - tempRep4List[sendCnt] = rep4List[i]; - } - - List arrPhoneList2 = new ArrayList(); - List arrNameList2 = new ArrayList(); - List arrRep1List2 = new ArrayList(); - List arrRep2List2 = new ArrayList(); - List arrRep3List2 = new ArrayList(); - List arrRep4List2 = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList2.add(temp); - - } - - } - - if(tempNameList.length > 0) { - for(String tmpName : tempNameList) { - - if(tmpName != null) { - - arrNameList2.add(tmpName); - - } - - } - - } - - if(tempRep1List.length > 0) { - for(String tmpRep1 : tempRep1List) { - - if(tmpRep1 != null) { - - arrRep1List2.add(tmpRep1); - - } - - } - - } - - - if(tempRep2List.length > 0) { - for(String tmpRep2 : tempRep2List) { - - if(tmpRep2 != null) { - - arrRep2List2.add(tmpRep2); - - } - - } - - } - - if(tempRep3List.length > 0) { - for(String tmpRep3 : tempRep3List) { - - if(tmpRep3 != null) { - - arrRep3List2.add(tmpRep3); - - } - - } - - } - - if(tempRep4List.length > 0) { - for(String tmpRep4 : tempRep4List) { - - if(tmpRep4 != null) { - - arrRep4List2.add(tmpRep4); - - } - - } - - } - - String[] sendPhoneList2 = new String[arrPhoneList2.size()]; - String[] sendNameList2 = new String[arrNameList2.size()]; - String[] sendRep1List2 = new String[arrRep1List2.size()]; - String[] sendRep2List2 = new String[arrRep2List2.size()]; - String[] sendRep3List2 = new String[arrRep3List2.size()]; - String[] sendRep4List2 = new String[arrRep4List2.size()]; - - for(int j=0; j< arrPhoneList2.size(); j++) { - - sendPhoneList2[j] = arrPhoneList2.get(j); - - } - - for(int j=0; j< arrNameList2.size(); j++) { - - sendNameList2[j] = arrNameList2.get(j); - - } - - for(int k=0; k< arrRep1List2.size(); k++) { - - sendRep1List2[k] = arrRep1List2.get(k); - - } - - for(int k=0; k< arrRep2List2.size(); k++) { - - sendRep2List2[k] = arrRep2List2.get(k); - - } - - for(int k=0; k< arrRep3List2.size(); k++) { - - sendRep3List2[k] = arrRep3List2.get(k); - - } - - for(int k=0; k< arrRep4List2.size(); k++) { - - sendRep4List2[k] = arrRep4List2.get(k); - - } - - mjonMsgVO.setCallToList(sendPhoneList2); - - if(sendNameList2.length > 0) { - mjonMsgVO.setNameList(sendNameList2); - } - - if(sendRep1List2.length > 0) { - mjonMsgVO.setRep1List(sendRep1List2); - } - - if(sendRep2List2.length > 0) { - mjonMsgVO.setRep2List(sendRep2List2); - } - - if(sendRep3List2.length > 0) { - mjonMsgVO.setRep3List(sendRep3List2); - } - - if(sendRep4List2.length > 0) { - mjonMsgVO.setRep4List(sendRep4List2); - } - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 200 resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++선거문자 ==> 200 resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - }else { - - tempPhoneList[sendCnt] = phoneList[i]; - - if(nameList.length > 0) {//이름 치환문자가 있는 경우 - tempNameList[sendCnt] = nameList[i]; - } - - if(rep1List.length > 0) {//치환1 문자가 있는 경우 - tempRep1List[sendCnt] = rep1List[i]; - } - - if(rep2List.length > 0) {//치환2 문자가 있는 경우 - tempRep2List[sendCnt] = rep2List[i]; - } - - if(rep3List.length > 0) {//치환3 문자가 있는 경우 - tempRep3List[sendCnt] = rep3List[i]; - } - - if(rep4List.length > 0) {//치환4 문자가 있는 경우 - tempRep4List[sendCnt] = rep4List[i]; - } - - sendCnt++; - - } - - } - - }else {//200건 미만일 경우 한번에 발송 처리 - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - for(int i=0; i< callToListCnt; i++) { - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - } - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++200건 미만 건수 선거문자 ==> resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++200건 미만 건수 선거문자 ==> resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - } - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++최종 건수 선거문자 ==> resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++최종 건수 선거문자 ==> resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - try { - - //스팸문구 포함된 문자 발송의 경우 스팸 문구 내용도 별도 저장함. - String spamStatus = mjonMsgVO.getSpamStatus(); - - if(spamStatus == null) { - - spamStatus = "N"; - mjonMsgVO.setSpamStatus("N"); - - } - - if(spamStatus.equals("Y")) { - - int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO); - - System.out.println("+++++++++++++스팸문구 발송 내용 등록 +++++++++++++++++++++ "+resultCnt); - - } - - } catch (Exception e) { - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ 선거문자 ==> MJ_MSG_GROUP && CASH INSER ERROR !!! : " + e.getMessage()); - System.out.println("========================================================================="); - } - - - }else { - - modelAndView.addObject("message", "문자 발송에 필요한 보유 잔액이 부족 합니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - //문자 발송 후 남은 보유 캐시 정보 불러오기 - String afterCash = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - modelAndView.addObject("afterCash", afterCash); - - }catch(Exception e) { - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ 선거문자 ==> 기타 시스템 오류 !!! : " + e.getMessage()); - System.out.println("========================================================================="); - - logger.error(e.getMessage(), e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - } - - //if(!resultSts.equals("0")) { - - modelAndView.addObject("message", "문자 전송이 완료되었습니다."); - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultSts", resultSts); - modelAndView.addObject("resultBlockSts", resultBlockSts); - - - /* - * - * 문자전송이 완료되면 전송한 연락처의 발송 상태값을 변경처리 해준다. - * 사용자 화면의 받는사람 리스트에서 다음 페이지의 20건을 불러오고, 발송완료 및 전송대기건의 카운트 계산을 위함이다. - * - * */ - if(resultSts > 0) { - - System.out.println(userId); - - MjonCandidateTWVO mjonCandidateTWVO = new MjonCandidateTWVO(); - - mjonCandidateTWVO.setMberId(userId); - mjonCandidateTWVO.setCallToArr(mjonMsgVO.getCallToList()); - - mjonCandidateService.updateMsgTWCallToListSendFlag(mjonCandidateTWVO); - - } - - /** - * 사용자가 보낸 문자를 문자온 법인폰으로도 하나 전송하는 기능 시작 - * - * */ - - try { - - if(resultSts > 0) {//전송 결과가 한건 이상인 경우 - - String adminSmsNoticeYn = "Y"; - String smishingYn = "N"; - String spamStatus = mjonMsgVO.getSpamStatus(); //스미싱 의심으로 체크된 문자 정보 - - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setMberId(userId); - if(!userId.equals("")) { - userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO); - adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); - smishingYn = userManageVO.getSmishingYn(); - } - - //법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송 - if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y") || smishingYn.equals("Y")) { - - if(spamStatus.equals("Y")) { - - mjonMsgVO.setDelayYn("Y"); - - }else if(smishingYn.equals("Y")) { - - mjonMsgVO.setSmishingYn("Y"); - } - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - - String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); - - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - MjonMsgCampainDataController mjonCampDataController = new MjonMsgCampainDataController(); - mjonCampDataController.getAdminPhoneSendMsgData(mjonMsgVO); - } - - //야간 스미싱의심 알림이 활성화 되어있는 경우만 슬랙 알림 전송처리 - if(holiSmishingNoti.equals("Y")) { - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); - - List resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO); - - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); - - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - - List resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO); - - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); - - if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송 - /* - MjonCommon comm = new MjonCommon(); - comm.getAdminMsgSandSlack(mjonMsgVO); - */ - mjonCommon.getAdminMsgSandSlack(mjonMsgVO); - } - - } - } - - } - - } - - } catch (Exception e) { - throw new Exception("++++++++++++++++++++++ 선거문자 메뉴 getAdminPhoneSendMsgData Error !!! " + e); - } - - return modelAndView; - } - - - /** - * 선거문자 20건씩 문자 발송 - 엑셀파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/msgcampain/insertExelFileTWCallToAjax.do") - @ResponseBody - public Object insertExelFileTWCallToAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - if(userId.equals("") || author.equals("")) { - - jr.setMessage("엑셀파일 업로드는 로그인이 필요합니다."); - return jr; - - } - - try { - - //final Map files = multiRequest.getFileMap(); - List files = (List) multiRequest.getFiles("file0"); - - // 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx - int fileNameSplitCnt = 0; - List> json = new ArrayList>(); - - //전체 엑셀 데이터 갯수 체크 변수 - int totRowDataCnt = 0; - - //수신자 목록을 디비화 하기 위한 변수 셋팅 - List mjonCandidateTwVO = new ArrayList(); - List callToList = new ArrayList(); - - if(!files.isEmpty()) { - fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length; - - if (files.get(0).getSize() > 0 - && (files.get(0).getContentType().indexOf("spreadsheetml") > -1) - || files.get(0).getContentType().indexOf("ms-excel") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) { - - // 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("엑셀 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - String Ext = files.get(0).getOriginalFilename().split("[.]")[1]; - String errMessage = ""; - String cellValue = ""; - - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - int errPhoneCnt = 0; - String errPhoneLine = ""; - String errEtcLine = ""; - - //엑셀 확장자에 따른 처리 로직 분리 - if(Ext.equals("xls")) { - - HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); - HSSFSheet sheet = workbook.getSheetAt(0); - - if(sheet.getLastRowNum() > 20000) { // - errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - //List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - HSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - //전체 엑셀의 Row 갯수 카운트 해주기 - totRowDataCnt++; - - //HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - HSSFCell cell = null; - boolean errSts = true; - for(int j = 0 ; j < 1; j++){ //행읽기 - cellValue = ""; - cell = row.getCell(j); //핸드폰 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - //System.out.println("Cell 데이터가 없습니다."); - if(j == 0) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - } - - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //전화번호 - if(cellValue.matches(phoneRegExp) && errSts) { - //수신자목록을 디비화 하기 위하여 리스트에 저장해줌 - callToList.add(cellValue); - }else { - errPhoneCnt++; - errPhoneLine += (i+1) + "행 "; - errSts = false; - break; - } - } - - } - - } - - int resultErrCnt = errPhoneCnt; - - if(resultErrCnt > 0) { - if (errPhoneCnt <= 10) { - if (StringUtils.isNotEmpty(errPhoneLine.trim())) { - errPhoneLine = "[" + errPhoneLine.trim() + "]"; - } - } - else { - errPhoneLine = ""; - } - jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + " 있습니다.\n해당 건을 제외하고 수신목록에 추가됩니다."); - }else { - jr.setMessage(""); - } - - }else { //확장자가 xlsx - - OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - opcPackage.close(); - - for(int r=2; r 20000) { // - if(totRowDataCnt > 20000) { // - errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - //List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - XSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - //HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - XSSFCell cell = null; - boolean errSts = true; - - for(int j = 0 ; j < 1; j++){ //행읽기 - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - //System.out.println("Cell 데이터가 없습니다."); - if(j == 0) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //전화번호 - if(cellValue.matches(phoneRegExp) && errSts) { - //수신자목록을 디비화 하기 위하여 리스트에 저장해줌 - callToList.add(cellValue); - - }else { - errPhoneCnt++; - errPhoneLine += (i+1) + "행 "; - errSts = false; - break; - } - } - - } - - } - - int resultErrCnt = errPhoneCnt; - - if(resultErrCnt > 0) { - if (errPhoneCnt <= 10) { - if (StringUtils.isNotEmpty(errPhoneLine.trim())) { - errPhoneLine = "[" + errPhoneLine.trim() + "]"; - } - } - else { - errPhoneLine = ""; - } - jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + " 있습니다.\n해당 건을 제외하고 수신목록에 추가됩니다."); - }else { - jr.setMessage(""); - } - } //xlsx 처리 끝 - - } - - //수신자 목록 중복 체크 및 디비화 처리 - List dupCallToList = MJUtil.getDuplicateList(callToList); - - String dupCallCnt = Integer.toString(totRowDataCnt - dupCallToList.size()); - - //입력되어있는 데이터의 마지막 순번(call_seq)을 조회해 온다. - int maxCallSeq = mjonCandidateService.selectCandidateTWMaxCallSeq(userId); - maxCallSeq += 1;//마지막 순번에 1을 더해서 다음 순번을 지정해준다. - HashMap callHm = new HashMap<>(); - for(String callTo : dupCallToList) { - - MjonCandidateTWVO tmpCandidateTwVO = new MjonCandidateTWVO(); - - tmpCandidateTwVO.setMberId(userId); - tmpCandidateTwVO.setCallTo(callTo.replaceAll("-", "")); - tmpCandidateTwVO.setFrstRegisterId(userId); - tmpCandidateTwVO.setLastUpdusrId(userId); - tmpCandidateTwVO.setCallSeq(maxCallSeq); - - mjonCandidateTwVO.add(tmpCandidateTwVO); - - } - - int resultCnt = mjonCandidateService.insertCandidateTWCallToData(mjonCandidateTwVO); - - if(resultCnt > 0) { - - callHm.put("callSeq", Integer.toString(maxCallSeq)); - json.add(callHm); - - jr.setData(json); - jr.setSuccess(true); - - }else { - - jr.setSuccess(false); - jr.setMessage("엑셀 데이터 처리에 오류가 발생하였습니다. 잠시후 다시 시도해 주세요."); - - } - - } - - return jr; - - } catch (Exception e) { - // TODO: handle exception - System.out.println("+++++++++++++++++ insertExelFileTWCallToAjax Controller Error !!! "+e); - jr.setSuccess(false); - jr.setMessage("엑셀 데이터에 오류가 있습니다. 엑셀 데이터를 확인해 주세요."); - return jr; - } - - } - - - /** - * 선거문자 20건씩 문자 발송 - TXT파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/msgcampain/insertTxtFileTWCallToAjax.do") - @ResponseBody - public Object insertTxtFileTWCallToAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("TXT 파일만 업로드할 수 있습니다."); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - if(userId.equals("") || author.equals("")) { - - jr.setMessage("TXT 파일 업로드는 로그인이 필요합니다."); - return jr; - - } - - try { - - List files = (List) multiRequest.getFiles("file0"); - List mjonCandidateTwVO = new ArrayList(); - List callToList = new ArrayList(); - List> json = new ArrayList>(); - //전체 엑셀 데이터 갯수 체크 변수 - int totRowDataCnt = 0; - - if(!files.isEmpty()) { - - if (files.get(0).getSize() > 0 - || files.get(0).getOriginalFilename().split("[.]")[1].indexOf("txt") > -1) { - - // txt 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("txt 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(multiRequest.getFile("file0").getInputStream())); - - String line = null; - String[] splitedStr = null; - String[] tempStr = null; - int errPhoneCnt = 0; - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - //파일 읽어서 탭으로 구분해주기 - while ((line = reader.readLine()) != null) { - - HashMap jm = new HashMap<>(); - splitedStr = null; - tempStr = null; - - //txt 파일의 데이터가 탭 혹은 콤마로 구분되어 있는지 구분처리 - tempStr = line.split("\t"); - if(tempStr.length > 0) { - - splitedStr = tempStr; - - }else { - - splitedStr = line.split(","); - - } - - for (int i = 0; i < splitedStr.length; i++) { - - splitedStr[i] = splitedStr[i].trim(); - - if(i == 0) { - - if(splitedStr[i].matches(phoneRegExp)) { - //휴대폰 번호 - //jm.put("phone", splitedStr[i]); - callToList.add(splitedStr[i]); - totRowDataCnt++; - - }else { - errPhoneCnt++; - } - - } - - } - - } // end while - //jr.setData(json); - //jr.setSuccess(true); - if(errPhoneCnt > 0) { - - jr.setMessage("올바르지 않은 휴대폰 번호가 "+ errPhoneCnt +" 건 있습니다."); - - }else { - - jr.setMessage(""); - - } - } - - - //수신자 목록 중복 체크 및 디비화 처리 - List dupCallToList = MJUtil.getDuplicateList(callToList); - - String dupCallCnt = Integer.toString(totRowDataCnt - dupCallToList.size()); - - //입력되어있는 데이터의 마지막 순번(call_seq)을 조회해 온다. - int maxCallSeq = mjonCandidateService.selectCandidateTWMaxCallSeq(userId); - maxCallSeq += 1;//마지막 순번에 1을 더해서 다음 순번을 지정해준다. - HashMap callHm = new HashMap<>(); - for(String callTo : dupCallToList) { - - MjonCandidateTWVO tmpCandidateTwVO = new MjonCandidateTWVO(); - - tmpCandidateTwVO.setMberId(userId); - tmpCandidateTwVO.setCallTo(callTo.replaceAll("-", "")); - tmpCandidateTwVO.setFrstRegisterId(userId); - tmpCandidateTwVO.setLastUpdusrId(userId); - tmpCandidateTwVO.setCallSeq(maxCallSeq); - - mjonCandidateTwVO.add(tmpCandidateTwVO); - - } - - int resultCnt = mjonCandidateService.insertCandidateTWCallToData(mjonCandidateTwVO); - - if(resultCnt > 0) { - - callHm.put("callSeq", Integer.toString(maxCallSeq)); - json.add(callHm); - - jr.setData(json); - jr.setSuccess(true); - - }else { - - jr.setSuccess(false); - jr.setMessage("엑셀 데이터 처리에 오류가 발생하였습니다. 잠시후 다시 시도해 주세요."); - - } - - - } - - return jr; - - } catch (Exception e) { - // TODO: handle exception - System.out.println("+++++++++++++++++ insertTxtFileTWCallToAjax Controller Error !!! "+e); - jr.setSuccess(false); - jr.setMessage("TXT 데이터에 오류가 있습니다. TXT 데이터를 확인해 주세요."); - return jr; - } - - } - -} diff --git a/src/main/java/itn/let/mjo/msgcampain/web/MjonVOParamXssValues.java b/src/main/java/itn/let/mjo/msgcampain/web/MjonVOParamXssValues.java deleted file mode 100644 index 3285adb..0000000 --- a/src/main/java/itn/let/mjo/msgcampain/web/MjonVOParamXssValues.java +++ /dev/null @@ -1,178 +0,0 @@ -package itn.let.mjo.msgcampain.web; - -import java.lang.reflect.Field; - - -public class MjonVOParamXssValues { - - /** - * Build URI from VO and Host, Path - * - * @param paramObj VO - * @param host Host - * @param path Path - * @return URI - * @throws IllegalAccessException - * @throws IllegalArgumentException - */ - public int buildUri(Object paramObj) { - int XssCnt = buildParamMap(paramObj); - return XssCnt; - } - - - /** - * Build MultiValueMap - VO에 담긴 모든 변수의 값을 확인 - * - * @param paramObj VO - * @return MultiValueMap - * @throws IllegalAccessException - * @throws IllegalArgumentException - */ - private int buildParamMap(Object paramObj) { - - int XssCnt = 0; - for(Field field : paramObj.getClass().getDeclaredFields()) { // 각 변수를 하나씩 불러옴 - - field.setAccessible(true); - Object value; - try { - value = field.get(paramObj); - - if(value != null) { - - String paramValue = value.toString(); //변수 값을 받아옴 - //String paramName = field.getName(); - - int cnt = cleanXSS(paramValue); //XSS 체크해보기 - - XssCnt = XssCnt + cnt; - - } - - - } catch (IllegalArgumentException e) { - throw new IllegalArgumentException("IllegalArgumentException Error ::: " + e); - } catch (IllegalAccessException e) { - throw new IllegalArgumentException("IllegalArgumentException Error ::: " + e); - } - - - - } - - return XssCnt; - } - - /** - * Get values from fields of VO * - * @param field - * @param clazz - * @param obj - * @return - */ -/* private Object getValueFromField(Field field, Class clazz, Object obj) { - for(Method method : clazz.getMethods()) { - String methodName = method.getName(); - if( (methodName.startsWith("get") && methodName.length() == field.getName().length() + 3) - || (methodName.startsWith("is") && methodName.length() == field.getName().length() + 2) ) { - - if(methodName.toLowerCase().endsWith(field.getName().toLowerCase())) { - try { - return method.invoke(obj); - } catch (Exception e) { - e.printStackTrace(); - } - } - - } - } - return null; - }*/ - - - /** - * XSS 문자열이 있는지 체크 - * @param field - * @param clazz - * @param obj - * @return - */ - private int cleanXSS(String test_str) { - - String test_str_low= test_str.toLowerCase(); - int cnt = 0; - - if(test_str_low.contains("union")|| - test_str_low.contains("select") || - test_str_low.contains("insert") || - test_str_low.contains("drop") || - test_str_low.contains("update") || - test_str_low.contains("delete") || - test_str_low.contains("join") || - test_str_low.contains("from") || - test_str_low.contains("where") || - test_str_low.contains("substr") || - test_str_low.contains("user_tables")|| - test_str_low.contains("script")|| - test_str_low.contains("<")|| - test_str_low.contains(">")|| - test_str_low.contains("alert")|| - test_str_low.contains("javascript")|| - test_str_low.contains("=")|| - test_str_low.contains("!")|| - test_str_low.contains("or")|| - test_str_low.contains("user_tables")|| - test_str_low.contains("\\(")|| - test_str_low.contains("\\)")|| - test_str_low.contains("user_tables")|| - test_str_low.contains("<") || - test_str_low.contains("\"") || - test_str_low.contains("%") || - test_str_low.contains("()") || - test_str_low.contains("+") || - test_str_low.contains("%") || - test_str_low.contains(">") - ) - { - - /*try { - context.getRequestDispatcher("/blank.do").forward(request, response); - } catch (ServletException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - }*/ - - /*test_str = test_str_low; - test_str = test_str.replaceAll("union", "q-union"); - test_str = test_str.replaceAll("select", "q-select"); - test_str = test_str.replaceAll("insert", "q-insert"); - test_str = test_str.replaceAll("drop", "q-drop"); - test_str = test_str.replaceAll("update", "q-update"); - test_str = test_str.replaceAll("delete", "q-delete"); - test_str = test_str.replaceAll("and", "q-and"); - test_str = test_str.replaceAll("or", "q-or"); - test_str = test_str.replaceAll("join", "q-join"); - test_str = test_str.replaceAll("substr", "q-substr"); - test_str = test_str.replaceAll("from", "q-from"); - test_str = test_str.replaceAll("where", "q-where"); - test_str = test_str.replaceAll("declare", "q-declare"); - test_str = test_str.replaceAll("openrowset", "q-openrowset"); - test_str = test_str.replaceAll("user_tables","q-user_tables"); - test_str = test_str.replaceAll("user_tab_columns","q-user_tab_columns"); - test_str = test_str.replaceAll("table_name","q-table_name"); - test_str = test_str.replaceAll("column_name","q-column_name"); - test_str = test_str.replaceAll("row_num","q-row_num");*/ - - //xss 문자열이 포함되어 있으면 카운트 함 - - cnt++; - } - return cnt ; - } - - -} diff --git a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java deleted file mode 100644 index 5a8d453..0000000 --- a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java +++ /dev/null @@ -1,6547 +0,0 @@ -package itn.let.mjo.msgdata.web; - -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.net.URLDecoder; -import java.text.SimpleDateFormat; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.hssf.usermodel.HSSFCell; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.openxml4j.opc.OPCPackage; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFCell; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.ui.ModelMap; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestBody; -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.support.SessionStatus; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.psl.dataaccess.util.EgovMap; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.JsonResult; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.service.FileVO; -import itn.com.cmm.util.MJUtil; -import itn.com.cmm.util.RedirectUrlMaker; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.lett.service.HashConfVO; -import itn.let.lett.service.LetterService; -import itn.let.lett.service.LetterVO; -import itn.let.mail.service.StatusResponse; -import itn.let.mjo.addr.service.AddrDTO; -import itn.let.mjo.addr.service.AddrGroupService; -import itn.let.mjo.addr.service.AddrGroupVO; -import itn.let.mjo.addr.service.AddrService; -import itn.let.mjo.addr.service.AddrVO; -import itn.let.mjo.event.service.MjonEventService; -import itn.let.mjo.event.service.MjonEventVO; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.mjocommon.MjonHolidayApi; -import itn.let.mjo.msg.service.MjonMsgService; -import itn.let.mjo.msg.service.MjonMsgVO; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.msgdata.service.MjonMsgDataVO; -import itn.let.mjo.msgdata.service.MjonMsgReturnVO; -import itn.let.mjo.msgdata.service.PhoneVO; -import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; -import itn.let.mjo.msgholiday.service.MsgHolidayService; -import itn.let.mjo.msgholiday.service.MsgHolidayVO; -import itn.let.mjo.msgsent.service.MjonMsgSentService; -import itn.let.mjo.msgsent.service.MjonMsgSentVO; -import itn.let.mjo.pay.service.MjonPayService; -import itn.let.mjo.pay.service.MjonPayVO; -import itn.let.mjo.spammsg.service.MjonSpamMsgService; -import itn.let.mjo.spammsg.web.ComGetSpamStringParser; -import itn.let.mjo.symbol.service.MjonSymbolService; -import itn.let.mjo.symbol.service.MjonSymbolVO; -import itn.let.schdlr.service.SchdlrManageService; -import itn.let.sym.ccm.cde.service.CateCode; -import itn.let.sym.ccm.cde.service.EgovCcmCmmnDetailCodeManageService; - -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.uss.umt.service.UserManageVO; -import itn.let.utl.sim.service.EgovClntInfo; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@Controller -public class MjonMsgDataController { - - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "LetterService") - private LetterService letterService; - - @Resource(name = "mjonSymbolService") - private MjonSymbolService mjonSymbolService; - - /** mberManageService */ - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource (name = "AddrService") - private AddrService addrService; - - @Resource (name = "AddrGroupService") - private AddrGroupService addrGroupService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - @Resource(name = "SchdlrManageService") - private SchdlrManageService schdlrManageService; - - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; - - @Resource(name = "egovMjonCashIdGnrService") - private EgovIdGnrService idgenMjonCashId; - - @Resource(name = "CmmnDetailCodeManageService") - private EgovCcmCmmnDetailCodeManageService cmmnDetailCodeManageService; - - /** 첨부파일 저장경로 */ - @Value("#{globalSettings['Globals.file.saveDir']}") - private String fileSaveDir; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - @Resource(name = "MjonEventService") - private MjonEventService mjonEventService; - - @Resource(name = "mjonSpamMsgService") - private MjonSpamMsgService mjonSpamMsgService; - - /** 사이트 설정 */ - @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; - - - - - - @Resource(name = "MjonMsgSentService") - private MjonMsgSentService mjonMsgSentService; - - @Resource(name = "MsgHolidayService") - private MsgHolidayService msgHolidayService; - - @Autowired - private MjonCommon mjonCommon; - - private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class); - - /** - * 문자 발송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/selectMsgDataView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectMsgDataView.do"}) - public String selectMsgDataView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, - @ModelAttribute("cateCodeVO") CateCode cateCode, - HttpServletRequest request, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception{ - try { - - /* - * 문자 샘플 검색어에 한글,영문,숫자, 공백을 제외한 문자가 포함된 경우 - * 검색이 안되도록 조치함. - * 2023.05.02 우영두 - * - * */ - String keyword = searchVO.getSearchKeyword(); - if(keyword != null) { - - keyword = URLDecoder.decode(keyword, "UTF-8"); - keyword = keyword.replaceAll("[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9 ]", ""); - - if(!keyword.equals("")) { - - System.out.println("==========================잘못된 접근 경로 정보 시작=========================================="); - System.out.println("1. 접근 IP 정보 ::: " + request.getRemoteAddr()); - - System.out.println("전달 파라미터 값 "); - Set keySet = request.getParameterMap().keySet(); - int paramCnt = 2; - for(String key: keySet) { - System.out.println(paramCnt + ". " +key + " : " + request.getParameter(key)); - paramCnt++; - } - - System.out.println("==========================잘못된 접근 경로 정보 종료=========================================="); - - redirectAttributes.addFlashAttribute("message", "잘못된 검색어입니다."); - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/main/mainPage.do"); - return redirectUrlMaker.getRedirectUrl(); - - } - - } - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - model.addAttribute("loginVO", loginVO); - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - // 문자 카테고리 리스트 불러오기 - //List cateConfList = letterService.selectCateConfWithList(categoryType); - //2뎁스 카테고리만 조회하게 수정 - List cateConfList = letterService.selectCateConfTwoDepthWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - // 문자 해쉬태그 리스트 불러오기 - String msgType = "M"; //문자발송, 선거문자에서만 보여질 해시 태그리스트를 불러온다. - List hashTagList = letterService.selectHashTagWithList(msgType); - model.addAttribute("hashTagList", hashTagList); - - // 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - letterVO.setLetterType(searchVO.getMsgType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - - - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - //System.out.println(letterVO.getLetterType()); - - //발송결과 문자 재전송에서 넘어오는 경우 파마리터 전달 - List temp = searchVO.getMsgSeqList(); - - if(temp != null) { - - model.addAttribute("reSendMsgVO", searchVO); - - } - - //주소록에서 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMoveAddrFlag())) { - model.addAttribute("addrVO", searchVO); - } - - //주소록에서 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMoveAddrAllFlag())) { - AddrVO addrVO = new AddrVO(); - - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId != "") { - addrVO.setMberId(userId); - } - addrVO.setRecordCountPerPage(100000); - addrVO.setFirstIndex(0); - addrVO.setSearchAddrGrpId(request.getParameter("searchAddrGrpId")); - addrVO.setSearchCondition(request.getParameter("searchCondition")); - addrVO.setSearchKeyword(request.getParameter("searchKeyword")); - addrVO.setStartKeyword(request.getParameter("startKeyword")); - List addrList = addrService.selectAddrList(addrVO); - - List addrIdList = new ArrayList(); - for(AddrVO item : addrList) { - addrIdList.add(item.getAddrId()); - } - - searchVO.setAddrIdList(addrIdList); - searchVO.setMoveAddrFlag("Y"); - - model.addAttribute("addrVO", searchVO); - } - - - - //맞춤문자에서 이미지 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getCustomImgFlag())) { - - model.addAttribute("customImgVO", searchVO); - - } - - //메인화면에서 이미지 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMainImgFlag())) { - - model.addAttribute("mainImgVO", searchVO); - - } - - //메인화면 인기문자(단/장문) 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMainLetterFlag())) { - - MjonMsgDataVO mainLetterVO = mjonMsgDataService.selectLetterCnById(searchVO); - mainLetterVO.setMainLetterFlag(searchVO.getMainLetterFlag()); - //기존 문자내용에서 줄바꿈 문자를 태그로 변환해줌 - 사용자 화면단의 스크립트에서 오류 발생 방지 - mainLetterVO.setSmsTxt(mainLetterVO.getSmsTxt().replace("\r\n", "
") - .replace("\r", "
") - .replace("\n", "
") - .replace("\n\r", "
") - .replace("\"", "\\\"") - .replace("\'", "\\'")); - model.addAttribute("mainLetterVO", mainLetterVO); - - } - - //메인화면 더많은 샘플 보기 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMainMoreSamFlag())) { - - model.addAttribute("moreSampleYn", searchVO.getMainMoreSamFlag()); - - } - - //헤더 문자검색에서 넘어오는 파라미터 - if("Y".equals(searchVO.getHeaderMsgSearchFlag())){ - - //공인 IP 구하기 - String userIp = EgovClntInfo.getClntIP(request); - //java.util.Scanner s = new java.util.Scanner(new java.net.URL("https://api.ipify.org").openStream(), "UTF-8").useDelimiter("\\A"); - //userIp = s.next(); - - System.out.println(userIp); - System.out.println(searchVO.getSearchKeyword()); - - - - //기존 검색된 단어가 있는지 체크 - int searchWordCnt = mjonMsgDataService.selectMsgSearchWordCnt(searchVO); - - if(searchWordCnt > 0) { - - searchVO.setUserIp(userIp); - //기존 검색어가 있는 경우 검색 카운트만 증가시켜 준다. - mjonMsgDataService.updateMsgSearchWordCnt(searchVO); - - }else { - - searchVO.setUserIp(userIp); - //문자검색어 디비 저장처리 - int resultCnt = mjonMsgDataService.insertMsgSearchWordInfo(searchVO); - - } - - //문자검색 인기검색어 4개 불러오기 - List resultSearchWordList = mjonMsgDataService.selectMsgSearchWordList(searchVO); - - model.addAttribute("resultSearchWordList", resultSearchWordList); - model.addAttribute("headerMsgSearchVO", searchVO); - - } - - // 문자 재전송 New - model.addAttribute("msgResendAllFlag", searchVO.getMsgResendAllFlag()); - model.addAttribute("msgResendAllGroupId", searchVO.getMsgResendAllGroupId()); - model.addAttribute("msgResendAllAdvertiseYn", searchVO.getMsgResendAllAdvertiseYn()); - model.addAttribute("msgResendAllReplaceYn", searchVO.getMsgResendAllReplaceYn()); - - model.addAttribute("tabDision", "tab01"); - - }catch(Exception ex) { - ex.printStackTrace(); - - } - - return "web/msgdata/MsgDataView"; - } - - - /** - * 문자 발송 단문/장문/그림문자 전송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/selectMsgDataSMLViewAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectMsgDataSMLViewAjax.do"}) - public String selectMsgDataSMLView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - - System.out.println(" : selectMsgDataSMLView : "); - long startTime = System.nanoTime(); // 시작 시간 - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - //문자 전송 개인 단가 불러오기 - - //0.이벤트 진행중이 회원 정보 불러오기. - //이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다. - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - - long eventDiffDate = 0; - float eventRemainCash = 0; - boolean compareEndDate = false; - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - /** - * MJUtil.getCompareDate() - * 현재 날짜와 파라미터 전달 날짜를 비교 - * 전달날짜를 지난경우 False를 리턴함. - * 현재날짜 이전 혹은 같은 날짜면 True를 리턴함. - * - * */ - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴 - //이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴 - if(!compareEndDate || eventRemainCash < 7.5) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("이벤트 발송 최소 금액(7.5) 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - }else {//이벤트 진행중이면 남은 날짜 계산해서 전달. - - /** - * MJUtil.getDiffDateDay() - * 현재 날짜와 파라미터 날짜 사이의 날짜 수를 계산해줌. - * - * */ - eventDiffDate = MJUtil.getDiffDateDay(eventEndDate); - - } - } - - } - - //남은 날짜값을 절대값으로 변경(음수로 나오기 때문) - model.addAttribute("eventDiffDate", Math.abs(eventDiffDate)); - model.addAttribute("compareEndDate", compareEndDate); - model.addAttribute("eventRemainCash", eventRemainCash); - model.addAttribute("eventMberInfo", eventMberInfo); - - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - searchVO.setUserId(userId); - - - model.addAttribute("blineCode", mberManageVO.getBlineCode()); - - - } - - model.addAttribute("exceptSpamYn", mberManageVO.getExceptSpamYn()); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - - //일반 단가정보 저장 변수 셋팅 - 이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - Float norShortPrice = mberManageVO.getShortPrice(); - Float norLongPrice = mberManageVO.getLongPrice(); - Float norPicturePrice = mberManageVO.getPicturePrice(); - Float norPicture2Price = mberManageVO.getPicture2Price(); - Float norPicture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - /*int shortPrice = (int) mberManageVO.getShortPrice(); - int longPrice = (int) mberManageVO.getLongPrice(); - int picturePrice = (int) mberManageVO.getPicturePrice(); - int picture2Price = (int) mberManageVO.getPicture2Price(); - int picture3Price = (int) mberManageVO.getPicture3Price(); - int userMoney = (int) mberManageVO.getUserMoney();*/ - - String userPoint = mberManageVO.getUserPoint(); - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//이벤트 단가 적용시 일반단가도 필요하여 셋팅 해줌. - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//협의 단가가 없는 경우 시스템 단가 적용해 주기 - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("shortPrice", shortPrice); - model.addAttribute("longPrice", longPrice); - model.addAttribute("picturePrice", picturePrice); - model.addAttribute("picture2Price", picture2Price); - model.addAttribute("picture3Price", picture3Price); - model.addAttribute("userMoney", userMoney); - model.addAttribute("userPoint", userPoint); - - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(norShortPrice < 1 || norLongPrice < 1 || norPicturePrice < 1) {//협의 단가가 없는 경우 일반단가에 시스템 단가로 셋팅해줌 - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("norShortPrice", norShortPrice); - model.addAttribute("norLongPrice", norLongPrice); - model.addAttribute("norPicturePrice", norPicturePrice); - model.addAttribute("norPicture2Price", norPicture2Price); - model.addAttribute("norPicture3Price", norPicture3Price); - - if(!userId.equals("")) {//로그인 된 사용자만 발신번호를 불러오도록 수정 - - //아이디 발신번호 리스트 불러오기. - List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); - List resultPhonList = new ArrayList(); - MJUtil mjUtil = new MJUtil(); - - for(String phone : resultSendPhonList) { - - resultPhonList.add(mjUtil.addDash(phone)); - - } - model.addAttribute("resultPhonList", resultPhonList); - - } - - //발신번호 차단 리스트 불러오기 - //List resultBlockPhonList = mjonMsgDataService.selectBlockPhonNumList(); - //model.addAttribute("resultBlockPhonList", resultBlockPhonList); - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - //그림 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - MjonSymbolVO symbolVO = new MjonSymbolVO(); - // 특수문자 리스트 불러오기 - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - //최근 전송 내역 - // 20241230 이호영 - // 로딩 시간이 오래걸려 ajax로 따로 분리함 - /* - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - cal.setTime(now); - cal.add(Calendar.DATE, -3); - - String chkDate = format.format(cal.getTime()); - searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 - List resultLatestMsgList = mjonMsgDataService.selectLatestMsgList(searchVO); - model.addAttribute("resultLatestMsgList", resultLatestMsgList); - - */ - - //자주보내는 번호 -// List resultBookMarkMsgList = mjonMsgDataService.selectBookMarkMsgList(searchVO); -// model.addAttribute("resultBookMarkMsgList", resultBookMarkMsgList); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - model.addAttribute("tabDision", searchVO.getTabDision()); - - - long endTime = System.nanoTime(); // 종료 시간 - // 실행 시간 계산 (나노초 단위) - long duration = endTime - startTime; - - System.out.println("Execution time: " + duration + " nanoseconds"); - System.out.println("Execution time: " + (duration / 1_000_000) + " milliseconds"); - return "web/msgdata/MsgDataSMLView"; - } - - @RequestMapping(value= {"/web/mjon/msgdata/resultLatestMsgListAjax.do"}) - public ResponseEntity resultLatestMsgListAjax() throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(StringUtils.isEmpty(userId)) { - - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", "")); - } - - - MjonMsgDataVO searchVO = new MjonMsgDataVO(); - - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - cal.setTime(now); - cal.add(Calendar.DATE, -3); - - String chkDate = format.format(cal.getTime()); - searchVO.setUserId(userId); - searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 - List resultLatestMsgList = mjonMsgDataService.selectLatestMsgList(searchVO); - - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", resultLatestMsgList)); - } - - @RequestMapping(value= {"/web/mjon/msgdata/resultBookMarkMsgList.do"}) - public ResponseEntity resultBookMarkMsgList() throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(StringUtils.isEmpty(userId)) { - - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", "")); - } - - MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); - mjonMsgDataVO.setUserId(userId); - - List resultBookMarkMsgList = mjonMsgDataService.selectBookMarkMsgList(mjonMsgDataVO); - - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", resultBookMarkMsgList)); - } - - - /** - * 문자재전송 내용 처리 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectReSendMsgDataListAjax.do"}) - public ModelAndView selectReSendMsgDataListAjax( - MjonMsgDataVO mjonMsgDataVO, - HttpServletRequest req, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("status", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - }else { - - mjonMsgDataVO.setUserId(userId); - - } - - List msgSeqList = mjonMsgDataVO.getMsgSeqList(); - List tempList = new ArrayList(); - - for(String seqStr : msgSeqList) { - - String seqId = seqStr.replace("[", ""); - seqId = seqId.replace("]", ""); - - tempList.add(seqId); - } - - mjonMsgDataVO.setMsgSeqList(tempList); - - log.info("==================================================="); - List resultList = mjonMsgDataService.selectReSendMsgDataList(mjonMsgDataVO); - - //문자발송 이미지 처리 - 사용하지 않아서 주석처리함. - /*int fileCnt = Integer.parseInt(resultList.get(0).getFileCnt()); - MjonMsgDataVO resultMsgPhotoInfo = new MjonMsgDataVO(); - - if(fileCnt > 0) { - - MjonMsgVO resultMsgInfo = new MjonMsgVO(); - //재발송 리스트의 첫번째 이미지 정보만 받아온다.(여러 발송문자를 선택 할 경우 첫번째 리스트의 정보를 사용함) - resultMsgInfo.setFileType1(resultList.get(0).getFileType1()); - resultMsgInfo.setFileType2(resultList.get(0).getFileType2()); - resultMsgInfo.setFileType3(resultList.get(0).getFileType3()); - - //문자함 리스트의 첨부이미지 정보 불러오기 - resultMsgPhotoInfo = mjonMsgDataService.selectMsgReSendPhotoInfo(resultMsgInfo); - - }*/ - - if(resultList == null) { - - modelAndView.addObject("status", "emptyList"); - modelAndView.addObject("message", "재전송 문자 내용이 없습니다."); - - }else { - - modelAndView.addObject("status", "success"); - modelAndView.addObject("resultList", resultList); - modelAndView.addObject("resultListCnt", resultList.size()); - //modelAndView.addObject("resultMsgPhotoInfo", resultMsgPhotoInfo); - - } - - return modelAndView; - } - - - /** - * 엑셀 문자 발송 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/excel/selectMsgExcelDataView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/excel/selectMsgExcelDataView.do"}) - public String selectMsgExcelDataView(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, - @ModelAttribute("cateCodeVO") CateCode cateCode, - HttpServletRequest request, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception{ - - try { - - /* - * 문자 샘플 검색어에 한글,영문,숫자, 공백을 제외한 문자가 포함된 경우 - * 검색이 안되도록 조치함. - * 2023.05.02 우영두 - * - * */ - String keyword = searchVO.getSearchKeyword(); - if(keyword != null) { - - keyword = URLDecoder.decode(keyword, "UTF-8"); - keyword = keyword.replaceAll("[ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9 ]", ""); - - if(!keyword.equals("")) { - - System.out.println("==========================잘못된 접근 경로 정보 시작=========================================="); - System.out.println("1. 접근 IP 정보 ::: " + request.getRemoteAddr()); - - System.out.println("전달 파라미터 값 "); - Set keySet = request.getParameterMap().keySet(); - int paramCnt = 2; - for(String key: keySet) { - System.out.println(paramCnt + ". " +key + " : " + request.getParameter(key)); - paramCnt++; - } - - System.out.println("==========================잘못된 접근 경로 정보 종료=========================================="); - - redirectAttributes.addFlashAttribute("message", "잘못된 검색어입니다."); - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/main/mainPage.do"); - return redirectUrlMaker.getRedirectUrl(); - - } - - } - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - model.addAttribute("loginVO", loginVO); - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - // 문자 카테고리 리스트 불러오기 - //List cateConfList = letterService.selectCateConfWithList(categoryType); - //2뎁스 카테고리만 조회하게 수정 - List cateConfList = letterService.selectCateConfTwoDepthWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - // 문자 해쉬태그 리스트 불러오기 - String msgType = "M"; //문자발송, 선거문자에서만 보여질 해시 태그리스트를 불러온다. - List hashTagList = letterService.selectHashTagWithList(msgType); - model.addAttribute("hashTagList", hashTagList); - - // 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - letterVO.setLetterType(searchVO.getMsgType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - //System.out.println(letterVO.getLetterType()); - - //발송결과 문자 재전송에서 넘어오는 경우 파마리터 전달 - List temp = searchVO.getMsgSeqList(); - - if(temp != null) { - - model.addAttribute("reSendMsgVO", searchVO); - - } - - //주소록에서 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMoveAddrFlag())) { - model.addAttribute("addrVO", searchVO); - } - - //주소록에서 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMoveAddrAllFlag())) { - AddrVO addrVO = new AddrVO(); - - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId != "") { - addrVO.setMberId(userId); - } - addrVO.setRecordCountPerPage(100000); - addrVO.setFirstIndex(0); - addrVO.setSearchAddrGrpId(request.getParameter("searchAddrGrpId")); - addrVO.setSearchCondition(request.getParameter("searchCondition")); - addrVO.setSearchKeyword(request.getParameter("searchKeyword")); - addrVO.setStartKeyword(request.getParameter("startKeyword")); - List addrList = addrService.selectAddrList(addrVO); - - List addrIdList = new ArrayList(); - for(AddrVO item : addrList) { - addrIdList.add(item.getAddrId()); - } - - searchVO.setAddrIdList(addrIdList); - searchVO.setMoveAddrFlag("Y"); - - model.addAttribute("addrVO", searchVO); - } - - - - //맞춤문자에서 이미지 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getCustomImgFlag())) { - - model.addAttribute("customImgVO", searchVO); - - } - - //메인화면에서 이미지 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMainImgFlag())) { - - model.addAttribute("mainImgVO", searchVO); - - } - - //메인화면 인기문자(단/장문) 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMainLetterFlag())) { - - MjonMsgDataVO mainLetterVO = mjonMsgDataService.selectLetterCnById(searchVO); - mainLetterVO.setMainLetterFlag(searchVO.getMainLetterFlag()); - //기존 문자내용에서 줄바꿈 문자를 태그로 변환해줌 - 사용자 화면단의 스크립트에서 오류 발생 방지 - mainLetterVO.setSmsTxt(mainLetterVO.getSmsTxt().replace("\r\n", "
") - .replace("\r", "
") - .replace("\n", "
") - .replace("\n\r", "
") - .replace("\"", "\\\"") - .replace("\'", "\\'")); - model.addAttribute("mainLetterVO", mainLetterVO); - - } - - //메인화면 더많은 샘플 보기 선택시 넘어오는 파라미터 - if("Y".equals(searchVO.getMainMoreSamFlag())) { - - model.addAttribute("moreSampleYn", searchVO.getMainMoreSamFlag()); - - } - - //헤더 문자검색에서 넘어오는 파라미터 - if("Y".equals(searchVO.getHeaderMsgSearchFlag())){ - - //공인 IP 구하기 - String userIp = EgovClntInfo.getClntIP(request); - //java.util.Scanner s = new java.util.Scanner(new java.net.URL("https://api.ipify.org").openStream(), "UTF-8").useDelimiter("\\A"); - //userIp = s.next(); - - System.out.println(userIp); - System.out.println(searchVO.getSearchKeyword()); - - - - //기존 검색된 단어가 있는지 체크 - int searchWordCnt = mjonMsgDataService.selectMsgSearchWordCnt(searchVO); - - if(searchWordCnt > 0) { - - searchVO.setUserIp(userIp); - //기존 검색어가 있는 경우 검색 카운트만 증가시켜 준다. - mjonMsgDataService.updateMsgSearchWordCnt(searchVO); - - }else { - - searchVO.setUserIp(userIp); - //문자검색어 디비 저장처리 - int resultCnt = mjonMsgDataService.insertMsgSearchWordInfo(searchVO); - - } - - //문자검색 인기검색어 4개 불러오기 - List resultSearchWordList = mjonMsgDataService.selectMsgSearchWordList(searchVO); - - model.addAttribute("resultSearchWordList", resultSearchWordList); - model.addAttribute("headerMsgSearchVO", searchVO); - - } - - // 문자 재전송 New - model.addAttribute("msgResendAllFlag", searchVO.getMsgResendAllFlag()); - model.addAttribute("msgResendAllGroupId", searchVO.getMsgResendAllGroupId()); - model.addAttribute("msgResendAllAdvertiseYn", searchVO.getMsgResendAllAdvertiseYn()); - model.addAttribute("msgResendAllReplaceYn", searchVO.getMsgResendAllReplaceYn()); - - model.addAttribute("tabDision", "tab02"); - - }catch(Exception ex) { - ex.printStackTrace(); - - } - - return "web/msgdata/MsgDataView"; - } - - @RequestMapping(value= {"/web/mjon/msgdata/excel/selectMsgExcelDataView_backup.do"}) - public String selectMsgExcelDataView_backup(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - model.addAttribute("loginVO", loginVO); - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - // 문자 해쉬태그 리스트 불러오기 - String msgType = "M"; - List hashTagList = letterService.selectHashTagWithList(msgType); - model.addAttribute("hashTagList", hashTagList); - - // 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - return "web/msgdata/excel/MsgExcelDataView"; - } - - /** - * 문자 발송 엑셀문자(대량전송) 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/excel/selectMsgExcelDataViewAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/excel/selectMsgExcelDataViewAjax.do"}) - public String selectMsgDataExcelViewAjax(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - //문자 전송 개인 단가 불러오기 - - //0.이벤트 진행중이 회원 정보 불러오기. - //이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다. - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - long eventDiffDate = 0; - float eventRemainCash = 0; - boolean compareEndDate = false; - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - /** - * MJUtil.getCompareDate() - * 현재 날짜와 파라미터 전달 날짜를 비교 - * 전달날짜를 지난경우 False를 리턴함. - * 현재날짜 이전 혹은 같은 날짜면 True를 리턴함. - * - * */ - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 종료 일자가 지난 경우, 이벤트 상태가 종료아 아니면 종료 처리 시킴 - //이벤트 남은 캐시가 단문 발송금액 7.5원 보다 낮으면 이벤트 종료 시킴 - if(!compareEndDate || eventRemainCash < 7.5) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("이벤트 발송 최소 금액(7.5) 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - }else {//이벤트 진행중이면 남은 날짜 계산해서 전달. - - /** - * MJUtil.getDiffDateDay() - * 현재 날짜와 파라미터 날짜 사이의 날짜 수를 계산해줌. - * - * */ - eventDiffDate = MJUtil.getDiffDateDay(eventEndDate); - - } - } - - } - - //남은 날짜값을 절대값으로 변경(음수로 나오기 때문) - model.addAttribute("eventDiffDate", Math.abs(eventDiffDate)); - model.addAttribute("compareEndDate", compareEndDate); - model.addAttribute("eventRemainCash", eventRemainCash); - model.addAttribute("eventMberInfo", eventMberInfo); - - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - model.addAttribute("blineCode", mberManageVO.getBlineCode()); - } - - model.addAttribute("exceptSpamYn", mberManageVO.getExceptSpamYn()); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - - //일반 단가정보 저장 변수 셋팅 - 이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - Float norShortPrice = mberManageVO.getShortPrice(); - Float norLongPrice = mberManageVO.getLongPrice(); - Float norPicturePrice = mberManageVO.getPicturePrice(); - Float norPicture2Price = mberManageVO.getPicture2Price(); - Float norPicture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - /*int shortPrice = (int) mberManageVO.getShortPrice(); - int longPrice = (int) mberManageVO.getLongPrice(); - int picturePrice = (int) mberManageVO.getPicturePrice(); - int picture2Price = (int) mberManageVO.getPicture2Price(); - int picture3Price = (int) mberManageVO.getPicture3Price(); - int userMoney = (int) mberManageVO.getUserMoney();*/ - - String userPoint = mberManageVO.getUserPoint(); - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//이벤트 단가 적용시 일반단가도 필요하여 셋팅 해줌. - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) { - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("shortPrice", shortPrice); - model.addAttribute("longPrice", longPrice); - model.addAttribute("picturePrice", picturePrice); - model.addAttribute("picture2Price", picture2Price); - model.addAttribute("picture3Price", picture3Price); - model.addAttribute("userMoney", userMoney); - model.addAttribute("userPoint", userPoint); - - //이벤트 캐시 부족시 일반단가로 계산하기 위해서임.20230328, 우영두추가 - if(norShortPrice < 1 || norLongPrice < 1 || norPicturePrice < 1) {//협의 단가가 없는 경우 일반단가에 시스템 단가로 셋팅해줌 - - norShortPrice = (float) sysJoinSetVO.getShortPrice(); - norLongPrice = (float) sysJoinSetVO.getLongPrice(); - norPicturePrice = (float) sysJoinSetVO.getPicturePrice(); - norPicture2Price = (float) sysJoinSetVO.getPicture2Price(); - norPicture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - model.addAttribute("norShortPrice", norShortPrice); - model.addAttribute("norLongPrice", norLongPrice); - model.addAttribute("norPicturePrice", norPicturePrice); - model.addAttribute("norPicture2Price", norPicture2Price); - model.addAttribute("norPicture3Price", norPicture3Price); - - - if(!userId.equals("")) {//로그인 된 사용자만 발신번호를 불러오도록 수정 - - //아이디 발신번호 리스트 불러오기. - List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); - List resultPhonList = new ArrayList(); - MJUtil mjUtil = new MJUtil(); - - for(String phone : resultSendPhonList) { - - resultPhonList.add(mjUtil.addDash(phone)); - - } - model.addAttribute("resultPhonList", resultPhonList); - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - //그림 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - MjonSymbolVO symbolVO = new MjonSymbolVO(); - // 특수문자 리스트 불러오기 - List symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO); - model.addAttribute("symbolList", symbolList); - - /*String categoryType = cateCode.getCateType(); - - if(categoryType == null) { - - categoryType = "N"; - - } - - // 문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList(categoryType); - model.addAttribute("cateCodeList", cateConfList); - - //그림 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - }*/ - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - return "web/msgdata/excel/MsgExcelDataSMLView"; - } - - /** - * 하위 카테고리 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectCateConfThrDptListAjax.do"}) - public String selectCateConfThreeDepthListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - - CateCode cateCode = new CateCode(); - cateCode.setCateNo(letterVO.getCategoryCode()); - - //하위카테고리에서 전체 클릭 시 상위카테고리로 하위카테고리 조회 - if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) { - cateCode.setCateNo(letterVO.getUpperCateNo()); - } - - CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회 - if(cateCodeInfoVO != null) { //전체 카테고리가 아닌 경우 - if(cateCodeInfoVO.getCateDepth().equals("2")) { //선택한 카테고리가 2뎁스(중분류)일 시 중분류의 코드로 하위분류 조회 - cateCode.setUpperCateNo(cateCodeInfoVO.getId()); - }else if(cateCodeInfoVO.getCateDepth().equals("3")) { //선택한 카테고리가 3뎁스(하위분류)일 시 해당 부모코드로 형제카테고리 조회 - cateCode.setUpperCateNo(cateCodeInfoVO.getParent()); - } - } - - cateCode.setCateType("N"); //일반 o 맞춤제작 x - - String thrDptCateNo = ""; //클릭한 카테고리가 2뎁스(하위분류)일 시 하위 카테고리는 '전체' selected효과 - if(cateCodeInfoVO != null && cateCodeInfoVO.getCateDepth().equals("3")) { //클릭한 카테고리가 3뎁스(하위분류)일 시 해당 카테고리 selected 효과 - thrDptCateNo= letterVO.getCategoryCode(); - } - - //3뎁스(하위분류) 카테고리 조회 - List cateThreeConfList = letterService.selectCateConfThreeDepthWithList(cateCode); - model.addAttribute("resultCateThreeConfList", cateThreeConfList); - model.addAttribute("thrDptCateNo", thrDptCateNo); - - return "web/msgdata/CateThrDptListAjax"; - } - - /** - * 문자샘플 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectLetterDataListAjax.do"}) - public String selectLetterDataListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - - //검색 키워드 체크 기능 추가 - String keyword = letterVO.getSearchKeyword(); - boolean searchKeyType = StringUtil.getSearchKeywordValidation(keyword); - - if(!searchKeyType) {//검색 결과 Null로 리턴함. - - List exceptionLetterList = new ArrayList<>(); - - model.addAttribute("resultLetterList", exceptionLetterList); - return "web/msgdata/LetterListAjax"; - } - - - CateCode cateCode = new CateCode(); - cateCode.setCateNo(letterVO.getCategoryCode()); - CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회 - - //1번. 문자 샘플 탭 or 단문문자 탭 or 상위카테고리에서 ALL 클릭 시 - 카테고리 관련 조건 없이 select - //2번. 상위 카테고리 BEST 클릭 시 - bestCategory = Y 조건 추가 - //3번. 상위 카테고리(All or BEST가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 2으로 넘겨주고 해당 카테고리 번호와 해당 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //4번. 하위 카테고리 전체 클릭 시 - cateDepth를 2으로 넘겨주고 상위 카테고리와 상위 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //5번. 하위 카테고리(전체가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 3으로 넘겨주고 해당 카테고리를 조건절에 추가 - - if(cateCodeInfoVO != null) { //3번. 상위 카테고리 클릭 시 - letterVO.setCateDepth(cateCodeInfoVO.getCateDepth()); - } - - if ("best".equals(letterVO.getCategoryCode())) { //2번. BEST 클릭 시 경우 - letterVO.setBestCategory("Y"); - letterVO.setCategoryCode(""); - }else if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) { //하위분류에서 전체 클릭 시 중분류의 코드로 문자샘플 조회 - letterVO.setCateDepth("2"); - letterVO.setCategoryCode(letterVO.getUpperCateNo()); - } - - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit((int)letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - if(letterType == null || letterType.equals("")) { - - letterVO.setLetterType("S"); - - } - - // 장/단문 문자 리스트 - List resultLetterList = mjonMsgDataService.selectLetterList(letterVO); - model.addAttribute("resultLetterList", resultLetterList); - paginationInfo.setTotalRecordCount( resultLetterList.size()> 0 ? ((Long)((EgovMap)resultLetterList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - return "web/msgdata/LetterListAjax"; - } - - /** - * (메인화면)문자샘플 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectMainLetterDataListAjax.do"}) - public String selectMainLetterDataListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - - CateCode cateCode = new CateCode(); - cateCode.setCateNo(letterVO.getCategoryCode()); - CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회 - - //1번. 문자 샘플 탭 or 단문문자 탭 or 상위카테고리에서 ALL 클릭 시 - 카테고리 관련 조건 없이 select - //2번. 상위 카테고리 BEST 클릭 시 - bestCategory = Y 조건 추가 - //3번. 상위 카테고리(All or BEST가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 2으로 넘겨주고 해당 카테고리 번호와 해당 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //4번. 하위 카테고리 전체 클릭 시 - cateDepth를 2으로 넘겨주고 상위 카테고리와 상위 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //5번. 하위 카테고리(전체가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 3으로 넘겨주고 해당 카테고리를 조건절에 추가 - - if(cateCodeInfoVO != null) { //3번. 상위 카테고리 클릭 시 - letterVO.setCateDepth(cateCodeInfoVO.getCateDepth()); - } - - if ("best".equals(letterVO.getCategoryCode())) { //2번. BEST 클릭 시 경우 - letterVO.setBestCategory("Y"); - letterVO.setCategoryCode(""); - }else if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) { //하위분류에서 전체 클릭 시 중분류의 코드로 문자샘플 조회 - letterVO.setCateDepth("2"); - letterVO.setCategoryCode(letterVO.getUpperCateNo()); - } - - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - if(letterType == null || letterType.equals("")) { - - letterVO.setLetterType("S"); - - } - - // 장/단문 문자 리스트 - List resultLetterList = mjonMsgDataService.selectLetterList(letterVO); - model.addAttribute("resultLetterList", resultLetterList); - paginationInfo.setTotalRecordCount( resultLetterList.size()> 0 ? ((Long)((EgovMap)resultLetterList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - return "web/msgdata/MainLetterListAjax"; - } - - /** - * 그림 문자샘플 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectPhotoDataListAjax.do"}) - public String selectPhotoDataListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - -/* String subStr = letterVO.getCategoryCode(); - CateCode cateCode = new CateCode(); - cateCode.setCateNo(letterVO.getCategoryCode()); - CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회 - - if ("best".equals(subStr)) { - letterVO.setBestCategory("Y"); - letterVO.setCategoryCode(""); - - } else if(!subStr.equals("") && cateCodeInfoVO.getCateDepth().equals("3")) { //하위분류일 시 substring 없이 해당 카테고리만 조회 - letterVO.setCategoryCode(subStr); - }else if(!subStr.equals("")) { //중분류일 시 substiring을 통해 하위카테고리들 조회 - subStr = subStr.substring(0, 3); - letterVO.setCategoryCode(subStr); - } else if(subStr.equals("") && !letterVO.getUpperCateNo().equals("")) { //하위분류에서 전체 클릭 시 중분류의 코드로 문자샘플 조회 - letterVO.setCategoryCode(letterVO.getUpperCateNo().substring(0, 3)); - }*/ - - //검색 키워드 체크 기능 추가 - String keyword = letterVO.getSearchKeyword(); - boolean searchKeyType = StringUtil.getSearchKeywordValidation(keyword); - - if(!searchKeyType) {//검색 결과 Null로 리턴함. - - List exceptionPhoList = new ArrayList<>(); - - model.addAttribute("resultPhoList", exceptionPhoList); - return "web/msgdata/PhotoListAjax"; - } - - CateCode cateCode = new CateCode(); - cateCode.setCateNo(letterVO.getCategoryCode()); - CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회 - - //1번. 문자 샘플 탭 or 단문문자 탭 or 상위카테고리에서 ALL 클릭 시 - 카테고리 관련 조건 없이 select - //2번. 상위 카테고리 BEST 클릭 시 - bestCategory = Y 조건 추가 - //3번. 상위 카테고리(All or BEST가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 2으로 넘겨주고 해당 카테고리 번호와 해당 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //4번. 하위 카테고리 전체 클릭 시 - cateDepth를 2으로 넘겨주고 상위 카테고리와 상위 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //5번. 하위 카테고리(전체가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 3으로 넘겨주고 해당 카테고리를 조건절에 추가 - - if(cateCodeInfoVO != null) { //3번. 상위 카테고리 클릭 시 - letterVO.setCateDepth(cateCodeInfoVO.getCateDepth()); - } - - if ("best".equals(letterVO.getCategoryCode())) { //2번. BEST 클릭 시 경우 - letterVO.setBestCategory("Y"); - letterVO.setCategoryCode(""); - }else if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) { //하위분류에서 전체 클릭 시 중분류의 코드로 문자샘플 조회 - letterVO.setCateDepth("2"); - letterVO.setCategoryCode(letterVO.getUpperCateNo()); - } - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 그림문자로 셋팅 - if(letterType == null || letterType.equals("")) { - - letterVO.setLetterType("P"); //그림문자 셋팅 - letterVO.setMemberType("P"); //개인 카테고리 셋팅 - - } - - // 그림 문자 리스트 - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - return "web/msgdata/PhotoListAjax"; - } - - - - /** - * 그림 문자샘플 리스트 화면 불러오기 2 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectPhotoDataList2Ajax.do"}) - public ModelAndView selectPhotoDataList2Ajax( - @ModelAttribute("searchVO") LetterVO letterVO, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - String subStr = letterVO.getCategoryCode(); - if(!subStr.equals("")) { - - subStr = subStr.substring(0, 3); - letterVO.setCategoryCode(subStr); - - } - - //그림 문자 리스트 불러오기 - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - if(letterType == null || letterType.equals("")) { - letterVO.setLetterType("P"); - } - - try { - // 그림 문자 리스트 - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - modelAndView.addObject("status", "success"); - } catch (Exception e) { - modelAndView.addObject("status", "fail"); - } - - return modelAndView; - } - - /** - * (메인화면)그림 문자샘플 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectMainPhotoDataListAjax.do"}) - public String selectMainPhotoDataListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - - CateCode cateCode = new CateCode(); - cateCode.setCateNo(letterVO.getCategoryCode()); - CateCode cateCodeInfoVO = cmmnDetailCodeManageService.selectCateCodeInfo(cateCode); //카테고리 상세 조회 - - //1번. 문자 샘플 탭 or 단문문자 탭 or 상위카테고리에서 ALL 클릭 시 - 카테고리 관련 조건 없이 select - //2번. 상위 카테고리 BEST 클릭 시 - bestCategory = Y 조건 추가 - //3번. 상위 카테고리(All or BEST가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 2으로 넘겨주고 해당 카테고리 번호와 해당 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //4번. 하위 카테고리 전체 클릭 시 - cateDepth를 2으로 넘겨주고 상위 카테고리와 상위 카테고리리 번호를 upper 카테고리로 가지고 있는 하위 카테고리들 조회 - //5번. 하위 카테고리(전체가 아닌 관리자가 등록한 카테고리) 클릭 시 - cateDepth를 3으로 넘겨주고 해당 카테고리를 조건절에 추가 - - if(cateCodeInfoVO != null) { //3번. 상위 카테고리 클릭 시 - letterVO.setCateDepth(cateCodeInfoVO.getCateDepth()); - } - - if ("best".equals(letterVO.getCategoryCode())) { //2번. BEST 클릭 시 경우 - letterVO.setBestCategory("Y"); - letterVO.setCategoryCode(""); - }else if(letterVO.getCategoryCode().equals("") && !letterVO.getUpperCateNo().equals("")) { //하위분류에서 전체 클릭 시 중분류의 코드로 문자샘플 조회 - letterVO.setCateDepth("2"); - letterVO.setCategoryCode(letterVO.getUpperCateNo()); - } - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - if(letterType == null || letterType.equals("")) { - - letterVO.setLetterType("P"); - - } - - // 그림 문자 리스트 - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - return "web/msgdata/MainPhotoListAjax"; - } - - /** - * 내문자함 리스트 화면 불러오기 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectMyMsgDataListAjax.do"}) - public String selectMyMsgDataListAjax( - @ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(loginVO == null) { - return "redirect:/web/main/mainPage.do"; - } - - - //검색 키워드 체크 기능 추가 - String keyword = mjonMsgDataVO.getSearchKeyword(); - boolean searchKeyType = StringUtil.getSearchKeywordValidation(keyword); - - if(!searchKeyType) {//검색 결과 Null로 리턴함. - - List exceptionMyMsgList = new ArrayList<>(); - - model.addAttribute("resultPhoList", exceptionMyMsgList); - return "web/msgdata/MyMsgListAjax"; - } - - - mjonMsgDataVO.setUserId(userId); - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(mjonMsgDataVO.getPageUnit() != 10) { - mjonMsgDataVO.setPageUnit(mjonMsgDataVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgDataVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgDataVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgDataVO.getPageSize()); - - mjonMsgDataVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgDataVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgDataVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - // 내 문자함 문자 리스트 - List resultMyMsgList = mjonMsgDataService.selectMyMsgDataListAjax(mjonMsgDataVO); - model.addAttribute("resultMyMsgList", resultMyMsgList); - paginationInfo.setTotalRecordCount( resultMyMsgList.size()> 0 ? ((Long)((EgovMap)resultMyMsgList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("mjonMsgDataVO", mjonMsgDataVO); - - //문자함 리스트의 첨부이미지 정보 불러오기 - List resultMyMsgPhotoList = mjonMsgDataService.selectMyMsgPhotoListInfo(resultMyMsgList); - - model.addAttribute("resultMyMsgPhotoList", resultMyMsgPhotoList); - return "web/msgdata/MyMsgListAjax"; - - } - - - /** - * 추천인 아이디 확인 - * - * @param String - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectRecommIdCheckAjax.do"}) - public ModelAndView selectRecommIdCheckAjax( - MjonMsgVO mjonMsgVO, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - List checkId = new ArrayList(); - checkId = mberManageService.selectIdCheck(mjonMsgVO.getRecommId()); - - int checkIdCnt = checkId.size(); - String resultSts = "fail"; - - if(checkIdCnt > 0) { - - resultSts = "success"; - - } - - modelAndView.addObject("status", resultSts); - - return modelAndView; - } - - /** - * 주소록 그룹 리스트 화면 불러오기 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectAddrGroupListAjax.do"}) - public String selectAddrGroupListAjax( - @ModelAttribute("searchVO") AddrGroupVO addrGroupVO, - AddrVO addrVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(loginVO == null) { - - return "redirect:/web/main/mainPage.do"; - - } - - if(userId != "") { - addrGroupVO.setMberId(userId); - addrVO.setMberId(userId); - } - - if(addrGroupVO.getPageUnit() != 10) { - addrGroupVO.setPageUnit(addrGroupVO.getPageUnit()); - } - - if("".equals(addrGroupVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - addrGroupVO.setSearchSortCnd("addrGrpId"); - addrGroupVO.setSearchSortOrd("desc"); - } - - addrGroupVO.setSiteId("web"); - List addrGroupList = addrGroupService.selectAddrGroupList(addrGroupVO); - - addrVO.setType("bookmark"); - List addrBookmarkList = addrService.selectAddrBasicGrpList(addrVO); - - addrVO.setType("noGrp"); - List addrNoGrpList = addrService.selectAddrBasicGrpList(addrVO); - - int totalGrpCount = addrGroupList.stream() - .mapToInt(group -> { - String grpCountStr = group.getGrpCount(); - if (grpCountStr != null && !grpCountStr.isEmpty()) { - try { - return Integer.parseInt(grpCountStr); - } catch (NumberFormatException e) { - // 파싱에 실패한 경우 0을 반환하거나 예외 처리를 합니다. - return 0; - } - } else { - return 0; - } - }) - .sum(); - - // 결과 출력 - - System.out.println("totalGrpCount :: "+ totalGrpCount); - - int addrTotalCount = (addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0) - + (addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0) - + totalGrpCount - ; - - model.addAttribute("addrTotalCount", addrTotalCount); - model.addAttribute("addrBookmarkCnt", addrBookmarkList.size() >0 ? addrBookmarkList.get(0).getTotcnt() : 0); - model.addAttribute("addrNoGrpCnt", addrNoGrpList.size() >0 ? addrNoGrpList.get(0).getTotcnt() : 0); - - model.addAttribute("addrGroupList", addrGroupList); - - return "web/msgdata/addr/MsgAddrGroupListAjax"; - } - - - /** - * 주소록 그룹 선택시 우측 주소록 리스트 화면 불러오기 - * - * @param AddrGroupVO - * @param AddrVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectMsgAddrListAjax.do"}) - public ModelAndView selectMsgAddrListAjax( - @ModelAttribute("searchVO") AddrVO addrVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId != "") { - addrVO.setMberId(userId); - }else { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - return modelAndView; - - } - - List resultAddrList = mjonMsgDataService.selectMsgAddrListAjax(addrVO); - - - modelAndView.addObject("resultAddrList", resultAddrList); - modelAndView.addObject("result", "success"); - - return modelAndView; - } - - /** - * 주소록 그룹 선택시 우측 주소록 리스트 화면 불러오기 - * - * @param AddrGroupVO - * @param AddrVO - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectMsgAddrListAjax_advc.do"}) - public ResponseEntity selectMsgAddrListAjax_advc(@ModelAttribute("searchVO") AddrVO addrVO) { - - Map response = new HashMap<>(); - - try { - // 로그인 권한 정보 확인 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated() ? (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser() : null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); - - addrVO.setMberId(userId); - - // OFFSET 계산 - int offset = (addrVO.getPage()) * addrVO.getSize(); - addrVO.setOffset(offset); - // 데이터 조회 -// List resultAddrList = mjonMsgDataService.selectMsgAddrListAjax_advc(addrVO); - List resultAddrList = mjonMsgDataService.selectMsgAddrListAjax_advc(addrVO); - System.out.println(" + resultAddrList.size() :: "+ resultAddrList.size()); -// int totalCount = mjonMsgDataService.countByMsgAddrListAjax_advc(addrVO); // 필터에 맞는 총 레코드 수 가져오기 - - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "",resultAddrList)); - - } catch (Exception e) { - e.printStackTrace(); - return ResponseEntity.ok().body( - new StatusResponse(HttpStatus.INTERNAL_SERVER_ERROR, "조회 중 오류 발생", LocalDateTime.now())); - } - } - - /** - * 최근 전송내역 리스트 화면 불러오기 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectLatestMsgListAjax.do"}) - public String selectLatestMsgListAjax( - @ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - cal.setTime(now); - cal.add(Calendar.DATE, -3); - - String chkDate = format.format(cal.getTime()); - - mjonMsgDataVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 - mjonMsgDataVO.setUserId(userId); - - List resultLatestMsgList = mjonMsgDataService.selectLatestMsgList(mjonMsgDataVO); - - model.addAttribute("resultLatestMsgList", resultLatestMsgList); - - return "web/msgdata/MsgLatestListAjax"; - } - - - /** - * 자주 보내는 번호 리스트 화면 불러오기 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectBookMarkMsgListAjax.do"}) - public String selectBookMarkMsgListAjax( - @ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - List resultBookMarkMsgList = mjonMsgDataService.selectBookMarkMsgList(mjonMsgDataVO); - - model.addAttribute("resultBookMarkMsgList", resultBookMarkMsgList); - - return "web/msgdata/MsgBookMarkListAjax"; - } - - - /** - * 내문자함 리스트 삭제 처리 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/deleteMyMsgDataListAjax.do"}) - public String deleteMyMsgDataListAjax( - @ModelAttribute("searchVO") MjonMsgDataVO mjonMsgDataVO, - BindingResult bindingResult, - ModelMap model, - SessionStatus status, - RedirectAttributes redirectAttributes) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgDataVO.setUserId(userId); - - //내문자함 문자 삭제 처리하기 - mjonMsgDataService.deleteMyMsgDataListAjax(mjonMsgDataVO); - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(mjonMsgDataVO.getPageUnit() != 10) { - mjonMsgDataVO.setPageUnit(mjonMsgDataVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgDataVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgDataVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgDataVO.getPageSize()); - - mjonMsgDataVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgDataVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgDataVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - // 내 문자함 문자 리스트 - List resultMyMsgList = mjonMsgDataService.selectMyMsgDataListAjax(mjonMsgDataVO); - model.addAttribute("resultMyMsgList", resultMyMsgList); - paginationInfo.setTotalRecordCount( resultMyMsgList.size()> 0 ? ((Long)((EgovMap)resultMyMsgList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("mjonMsgDataVO", mjonMsgDataVO); - - //문자함 리스트의 첨부이미지 정보 불러오기 - List resultMyMsgPhotoList = mjonMsgDataService.selectMyMsgPhotoListInfo(resultMyMsgList); - - model.addAttribute("resultMyMsgPhotoList", resultMyMsgPhotoList); - - return "web/msgdata/MyMsgListAjax"; - } - - - /* - * 문자발송처리 서비스만 공통으로 분리하였음 - * param : MjonMsgVO - * return : ModelAndView - * - * */ - @RequestMapping(value= {"/web/mjon/msgdata/selectSpamTxtChkAjax.do"}) - public ModelAndView selectSpamTxtChkAjax(MjonMsgVO mjonMsgVO) { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - - List resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); - String spmFilterTxt = ""; - if(resultSpamTxt == null) {//스팸 체크리스트가 없는 경우 - - modelAndView.addObject("result", "listEmpty"); - return modelAndView; - - }else { - - - - String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 - - /* - * 치환문자에 스팸문구가 있을수 있어서 첫번째 치환데이터만 변환 적용 해서 스팸문구가 있는지 체크하도록 함. - * 차후에 전체 치환 데이터에 대한 체크를 할지를 검토하겠음. - * - * */ - - String txtReplYn = mjonMsgVO.getTxtReplYn(); - if(txtReplYn.equals("Y")) { - - String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //이름, 휴대폰, 치환문자 데이터가 없으면 취소 처리 - if((nameList.length == 0 || nameList == null) - && (rep1.length == 0 || rep1 == null) - && (rep2.length == 0 || rep2 == null) - && (rep3.length == 0 || rep3 == null) - && (rep4.length == 0 || rep4 == null)) { - - //modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다."); - //modelAndView.addObject("result", "fail"); - return modelAndView; - - } - - - if (smsTxt.indexOf("[*이름*]") > -1) { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[0].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", ""); - } - - if (smsTxt.indexOf("[*1*]") > -1) { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[0].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", ""); - } - - if (smsTxt.indexOf("[*2*]") > -1) { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[0].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", ""); - } - - if (smsTxt.indexOf("[*3*]") > -1) { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[0].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", ""); - } - - if (smsTxt.indexOf("[*4*]") > -1) { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[0].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", ""); - } - - } - - //입력 문장에 대해서 우회 문장 또는 특수 기호 입력 제거 등 문장 재구성 처리, 한글 자모음 분리 및 재조함도 함께 처리함. - String resultParser = ComGetSpamStringParser.getSpamTextParse(smsTxt).trim(); - //List jasoList = HangulParser.disassemble(resultParser); - //String assembleStr = HangulParser.assemble(jasoList); - - System.out.println("++++++++++++++ spam resultParser ::: "+resultParser); - - /* - //형태소 분석기 처리 - KomoranUtils komoran = new KomoranUtils(); - String resultKomoran = komoran.parseKomoranTextByString(assembleStr);*/ - - //System.out.println(resultKomoran); - - //한글, 영문, 숫자, 띄어쓰기를 제외한 다른 단어들을 삭제함. - //String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9 ]", ""); - - //데이터베이스에 등록된 스팸문구와 일치하는 단어/문구가 있는지 체크함. - int spmCnt = 0; - for(String spmTxt : resultSpamTxt) { - - String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim(); - - System.out.println("spmTxt : "+ spmTxt); - System.out.println("parserStr : "+ parserStr); - if(resultParser.contains(parserStr)) { - //스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌. - spmFilterTxt += spmTxt + ","; - spmCnt++; - - } - - } - - if(spmCnt > 0) {//스팸문자가 포함되어 있으면 문자열 끝 , 단어 삭제 처리 - - if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) { - // 처음부터 idx 만큼 잘라낸 나머지 글자 - spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1); - - } - - System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt); - - modelAndView.addObject("result", "spams"); -// modelAndView.addObject("spmFilterTxt", spmFilterTxt); - return modelAndView; - - } - - } - - - }catch(Exception e) { - - logger.error(e.getMessage(), e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - return modelAndView; - - } - - return modelAndView; - } - - // MsgGroupData Not Exist Check - @RequestMapping(value="/web/mjon/msgdata/selectMsgGroupNotExistInfoAjax.do") - public ModelAndView selectMsgGroupNotExistInfoAjax(@ModelAttribute MjonMsgVO mjonMsgVO - , HttpServletRequest request) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - boolean isError = false; - String msg = ""; - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - try { - mjonMsgVO = mjonMsgDataService.selectMsgGroupNotExistInfo(mjonMsgVO); - if (null == mjonMsgVO) { - isError = true; // 문자발송중 에러발생 데이터 존재 - } - - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("isError", isError); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - /** - * 문자 발송 기능 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/sendMsgDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/sendMsgDataAjax.do"}) - public ModelAndView sendMsgData(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - String resultSts = "0"; - String resultBlockSts = "0"; - String userId = ""; - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("resultSts", resultSts); - return modelAndView; - - }else { - - mjonMsgVO.setUserId(userId); - - //발신번호가 등록된 유효한 번호인지 확인 - int sendCallFromCnt = mjonMsgService.selectCallFromNumberChk(mjonMsgVO); - System.out.println(sendCallFromCnt); - - if(sendCallFromCnt < 1) { - - modelAndView.addObject("message", "등록된 발신번호를 찾을 수 없습니다."); - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("resultSts", resultSts); - return modelAndView; - - } - - - /** - * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 - * 현재 로그인 세션도 만료 처리함 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - - modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); - modelAndView.addObject("result", "statusFail"); - modelAndView.addObject("resultSts", resultSts); - - request.getSession().invalidate(); - - return modelAndView; - - } - - } - - //회원정보에서 스미싱 회원 여부 정보 조회 - UserManageVO userManageVO = new UserManageVO(); - - userManageVO.setMberId(userId); - UserManageVO resultUserVO = userManageService.selectSmishingYnUserInfo(userManageVO); - String smishingYn = resultUserVO.getSmishingYn(); - mjonMsgVO.setSmishingYn(smishingYn); - - //문자열 길이 체크 해주기 - String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 - String smsCont = mjonMsgVO.getSmsTxt().replace("\r\n", "\n"); - int FrBytes = smsCont.getBytes(charset).length; - - if(FrBytes > 2000) { - - modelAndView.addObject("message", "문자 내용은 2000Byte를 넘을 수 없습니다."); - modelAndView.addObject("result", "smsLengFail"); - return modelAndView; - - } - - System.out.println("mjonMsgVO.getMsgType1() ::: "+mjonMsgVO.getMsgType()); - - String msgType = mjonMsgVO.getMsgType(); - - //내문자저장함에 저장후 문자를 발송하는경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함- 20220520 우영두 - if(msgType.equals("P") || msgType.equals("L")) { - msgType = "6"; - }else if(msgType.equals("S")) { - - msgType = "4"; - } - - //메세지 타입이 단문이면 진짜 단문인지 한번더 확인해 준다. - if(msgType.equals("4")) { - //메세지 길이가 90Byte를초과 하거나, 그림 이미지가 있는경우 메세지 타입을 6으로 변경해준다. - if(FrBytes > 90 || mjonMsgVO.getImgFilePath().length > 0) { - msgType = "6"; - } - } - - mjonMsgVO.setMsgType(msgType); - - //장문 메세지일 경우 - int fileCount = 0; - if(msgType.equals("6")) { - - //그림 이미지가 첨부된 경우 - if(mjonMsgVO.getImgFilePath() != null || mjonMsgVO.getImgFilePath().length > 0) { - - String[] path = mjonMsgVO.getImgFilePath(); - String[] fileId = mjonMsgVO.getImgFileId(); - String[] templateYn = mjonMsgVO.getTemplateYn(); - - for(int i=0; i 0) { - - if(mjonMsgVO.getFileName1() == null && mjonMsgVO.getFileName2() == null && mjonMsgVO.getFileName3() == null) { - - modelAndView.addObject("message", "문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다."); - modelAndView.addObject("result", "imgSourceFail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - } - - - /* - * 화면에서 넘어오는 단가 금액 및 총 결제 캐시 금액 체크 해주기 - * 검증을 위해서 시스템 단가, 회원 협의 단가, 이벤트 단가 정보 조회 - * 조회 단가를 이용하여 총 결제 캐시 금액 계산 - * 파라미터로 넘어온 개별단가(eachPrice), 총 결제캐시(totPrice)를 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌. - */ - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - boolean compareEndDate = false; - float eventRemainCash = 0; - float paramEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 금액 및 기간 체크 - if(!compareEndDate || eventRemainCash < paramEachPrice) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("발송 최소 금액("+ paramEachPrice +") 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - } - - } - } - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//협의 단가가 없는 경우 시스템 단가 적용해 주기 - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - // 토탈금액 "," 리플레이스 처리 - mjonMsgVO.setTotPrice(mjonMsgVO.getTotPrice().replaceAll(",", "")); - - float tmpOrgEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - float tmpOrgTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - - System.out.println("mjonMsgVO.getMsgType2() ::: "+mjonMsgVO.getMsgType()); - - // MSG_TYPE 다시계산 - if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setMsgType("6"); - }else { - if(FrBytes < 2000) { - if(FrBytes > 90) {// 90Byte 초과시 장문 - mjonMsgVO.setMsgType("6"); - }else {// 그외 단문 - mjonMsgVO.setMsgType("4"); - } - } - } - - System.out.println("mjonMsgVO.getMsgType3() ::: "+mjonMsgVO.getMsgType()); - - //각 문자 종류별 단가 셋팅해주기 - float tmpEachPrice = 0; - if(mjonMsgVO.getMsgType().equals("4")) { - mjonMsgVO.setEachPrice(shortPrice.toString()); - tmpEachPrice = shortPrice; - }else if(mjonMsgVO.getMsgType().equals("6")) { - - if(mjonMsgVO.getFileName3() != null) { - mjonMsgVO.setEachPrice(picture3Price.toString()); - tmpEachPrice = picture3Price; - }else if(mjonMsgVO.getFileName2() != null) { - mjonMsgVO.setEachPrice(picture2Price.toString()); - tmpEachPrice = picture2Price; - }else if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setEachPrice(picturePrice.toString()); - tmpEachPrice = picturePrice; - }else { - mjonMsgVO.setEachPrice(longPrice.toString()); - tmpEachPrice = longPrice; - } - - } - - //수신자 총 수 * 단가 를 통해 총 결제 금액 계산 - int tmpTotCallCnt = mjonMsgVO.getCallToList().length; - float tmpTotPrice = tmpTotCallCnt * tmpEachPrice; - - - //화면에서 넘어온 파라미터 개별 단가와 컨트롤러에서 계산한 단가를 비교하여 맞지 않으면 컨트롤러 계산 단가 입력 - if(tmpOrgEachPrice != tmpEachPrice) { - mjonMsgVO.setEachPrice(Float.toString(tmpEachPrice)); - - System.out.println("화면 : tmpOrgEachPrice ::: "+tmpOrgEachPrice); - System.out.println("컨트롤러 : tmpEachPrice ::: "+tmpEachPrice); - }else { - System.out.println("tmpOrgEachPrice ::: "+tmpOrgEachPrice); - } - - if(tmpOrgTotPrice != tmpTotPrice ) { - mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice)); - - System.out.println("화면 : tmpOrgTotPrice ::: "+tmpOrgTotPrice); - System.out.println("컨트롤러 : tmpTotPrice ::: "+tmpTotPrice); - }else { - System.out.println("tmpOrgTotPrice ::: "+tmpOrgTotPrice); - } - - /* - * 개별단가 및 총결제 캐시 금액 체크 로직 종료 - * - * */ - - - // 치환문자가 있는경우 - String txtReplYn = mjonMsgVO.getTxtReplYn(); - if(txtReplYn.equals("Y")) { - - //치환문자 체크 처리 - int totListCnt = mjonMsgVO.getCallToList().length; - String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] phone = mjonMsgVO.getCallToList(); //수신자 휴대폰 번호 - String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //이름, 휴대폰, 치환문자 데이터가 없으면 취소 처리 - if((nameList.length == 0 || nameList == null) - && (rep1.length == 0 || rep1 == null) - && (rep2.length == 0 || rep2 == null) - && (rep3.length == 0 || rep3 == null) - && (rep4.length == 0 || rep4 == null)) { - - modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - - } - - // 치환문자 전체 필수체크 Start - boolean isRepCountOk = true; - if (mjonMsgVO.getSmsTxt().indexOf("[*이름*]") > -1) { - if(nameList.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*1*]") > -1) { - if(rep1.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*2*]") > -1) { - if(rep2.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*3*]") > -1) { - if(rep3.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*4*]") > -1) { - if(rep4.length != phone.length) { - isRepCountOk = false; - } - } - - if (isRepCountOk == false) { - modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다"); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - // End - - //--------------------------------------------------------------------------------------------------------------- - - //단문, 장문 분리해서 전달하기 위해서 동일한 VO를 생성해 준다. - MjonMsgVO shortMsgVO = new MjonMsgVO(); - MjonMsgVO longMsgVO = new MjonMsgVO(); - MjonMsgVO imgMsgVO = new MjonMsgVO(); - - shortMsgVO = mjonMsgVO; - longMsgVO = mjonMsgVO; - imgMsgVO = mjonMsgVO; - - int shortMsgCnt = Integer.parseInt(mjonMsgVO.getShortMsgCnt()); - int longMsgCnt = Integer.parseInt(mjonMsgVO.getLongMsgCnt()); - int imgMsgCnt = mjonMsgVO.getCallToList().length; - - int tmpFileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - int tmpPhoMsgCnt = mjonMsgVO.getCallToList().length; - - /*if(tmpFileCnt > 0) { - - shortMsgCnt = tmpPhoMsgCnt; - longMsgCnt = tmpPhoMsgCnt; - - }*/ - - String[] shortNameList = new String[shortMsgCnt]; //단문 치환 이름 리스트 - String[] shortPhone = new String[shortMsgCnt]; //단문 수신자 휴대폰 번호 - String[] shortRep1 = new String[shortMsgCnt]; //단문 치환 문자1 리스트 - String[] shortRep2 = new String[shortMsgCnt]; //단문 치환 문자2 리스트 - String[] shortRep3 = new String[shortMsgCnt]; //단문 치환 문자3 리스트 - String[] shortRep4 = new String[shortMsgCnt]; //단문 치환 문자4 리스트 - - String[] longNameList = new String[longMsgCnt]; //장문 치환 이름 리스트 - String[] longPhone = new String[longMsgCnt]; //장문 수신자 휴대폰 번호 - String[] longRep1 = new String[longMsgCnt]; //장문 치환 문자1 리스트 - String[] longRep2 = new String[longMsgCnt]; //장문 치환 문자2 리스트 - String[] longRep3 = new String[longMsgCnt]; //장문 치환 문자3 리스트 - String[] longRep4 = new String[longMsgCnt]; //장문 치환 문자4 리스트 - - String[] imgNameList = new String[imgMsgCnt]; //이미지 치환 이름 리스트 - String[] imgPhone = new String[imgMsgCnt]; //이미지 수신자 휴대폰 번호 - String[] imgRep1 = new String[imgMsgCnt]; //이미지 치환 문자1 리스트 - String[] imgRep2 = new String[imgMsgCnt]; //이미지 치환 문자2 리스트 - String[] imgRep3 = new String[imgMsgCnt]; //이미지 치환 문자3 리스트 - String[] imgRep4 = new String[imgMsgCnt]; //이미지 치환 문자4 리스트 - - int shortCnt = 0; - int longCnt = 0; - int imgCnt = 0; - - Map returnImgMap = new HashMap(); - Map returnShortMap = new HashMap(); - Map returnLongMap = new HashMap(); - - for(int i=0; i < totListCnt; i ++) { - - String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 - - //본문 내용 - 치환 처리 - - smsTxt = smsTxt.replaceAll(String.valueOf((char)13), ""); - if (smsTxt.indexOf("[*이름*]") > -1) { - if(nameList.length > i && StringUtil.isNotEmpty(nameList[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", ""); - } - } - if (smsTxt.indexOf("[*1*]") > -1) { - if(rep1.length > i && StringUtil.isNotEmpty(rep1[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", ""); - } - } - if (smsTxt.indexOf("[*2*]") > -1) { - if(rep2.length > i && StringUtil.isNotEmpty(rep2[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", ""); - } - } - if (smsTxt.indexOf("[*3*]") > -1) { - if(rep3.length > i && StringUtil.isNotEmpty(rep3[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", ""); - } - } - if (smsTxt.indexOf("[*4*]") > -1) { - if(rep4.length > i && StringUtil.isNotEmpty(rep4[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", ""); - } - } - - //문자열 바이트 수 구하기(한글 2Byte로 계산) - // 한글 3Byte로 하기 위해서는 StandardCharsets.UTF_8 로 변경하면 된다. - int bytes = smsTxt.getBytes(charset).length; - - //단문문자 리스트 만들기 - if(bytes < 2000) { - - if(fileCount > 0) { - - if(nameList.length > i && !"".equals(nameList[i]) && nameList[i] != null) { - imgNameList[imgCnt] = StringUtil.getString(nameList[i].replaceAll("§", ",")); //장문 치환 이름 리스트 - }else { - imgNameList[imgCnt] = " "; - } - - if(phone.length > i && !"".equals(phone[i]) && phone[i] != null) { - imgPhone[imgCnt] = StringUtil.getString(phone[i].replaceAll("§", ",")); //장문 수신자 휴대폰 번호 - } - - if(rep1.length > i && !"".equals(rep1[i]) && rep1[i] != null) { - imgRep1[imgCnt] = StringUtil.getString(rep1[i].replaceAll("§", ",")); //장문 치환 문자1 리스트 - }else { - imgRep1[imgCnt] = " "; - } - - if(rep2.length > i && !"".equals(rep2[i]) && rep2[i] != null) { - imgRep2[imgCnt] = StringUtil.getString(rep2[i].replaceAll("§", ",")); //장문 치환 문자2 리스트 - }else { - imgRep2[imgCnt] = " "; - } - - if(rep3.length > i && !"".equals(rep3[i]) && rep3[i] != null) { - imgRep3[imgCnt] = StringUtil.getString(rep3[i].replaceAll("§", ",")); //장문 치환 문자3 리스트 - }else { - imgRep3[imgCnt] = " "; - } - - if(rep4.length > i && !"".equals(rep4[i]) && rep4[i] != null) { - imgRep4[imgCnt] = StringUtil.getString(rep4[i].replaceAll("§", ",")); //장문 치환 문자4 리스트 - }else { - imgRep4[imgCnt] = " "; - } - - imgCnt++; - - }else if(bytes > 90) {//장문문자 리스트 만들기 - //shortMsgListVO.add(mjonMsgVO.get) - - /** - * - * 치환 리스트 중 데이터가 없는 경우 데이터 밀림방지를 위하여 공백 하나를 추가해줌 - * 공백처리를 안하는 경우 데이터가 밀려서 치환되는 오류가 있어서 처리해줌 - * - * */ - - if(nameList.length > i && !"".equals(nameList[i]) && nameList[i] != null) { - longNameList[longCnt] = StringUtil.getString(nameList[i].replaceAll("§", ",")); //장문 치환 이름 리스트 - }else { - longNameList[longCnt] = " "; - } - - if(phone.length > i && !"".equals(phone[i]) && phone[i] != null) { - longPhone[longCnt] = StringUtil.getString(phone[i].replaceAll("§", ",")); //장문 수신자 휴대폰 번호 - } - - if(rep1.length > i && !"".equals(rep1[i]) && rep1[i] != null) { - longRep1[longCnt] = StringUtil.getString(rep1[i].replaceAll("§", ",")); //장문 치환 문자1 리스트 - }else { - longRep1[longCnt] = " "; - } - - if(rep2.length > i && !"".equals(rep2[i]) && rep2[i] != null) { - longRep2[longCnt] = StringUtil.getString(rep2[i].replaceAll("§", ",")); //장문 치환 문자2 리스트 - }else { - longRep2[longCnt] = " "; - } - - if(rep3.length > i && !"".equals(rep3[i]) && rep3[i] != null) { - longRep3[longCnt] = StringUtil.getString(rep3[i].replaceAll("§", ",")); //장문 치환 문자3 리스트 - }else { - longRep3[longCnt] = " "; - } - - if(rep4.length > i && !"".equals(rep4[i]) && rep4[i] != null) { - longRep4[longCnt] = StringUtil.getString(rep4[i].replaceAll("§", ",")); //장문 치환 문자4 리스트 - }else { - longRep4[longCnt] = " "; - } - - longCnt++; - - } else {//단문문자 리스트 만들기 - - /** - * - * 치환 리스트 중 데이터가 없는 경우 데이터 밀림방지를 위하여 공백 하나를 추가해줌 - * 공백처리를 안하는 경우 데이터가 밀려서 치환되는 오류가 있어서 처리해줌 - * - * */ - - if(nameList.length > i && !"".equals(nameList[i]) && nameList[i] != null) { - shortNameList[shortCnt] = StringUtil.getString(nameList[i].replaceAll("§", ",")); //단문 치환 이름 리스트 - }else { - shortNameList[shortCnt] = " "; - } - - if(phone.length > i && !"".equals(phone[i]) && phone[i] != null) { - shortPhone[shortCnt] = StringUtil.getString(phone[i].replaceAll("§", ",")); //단문 수신자 휴대폰 번호 - } - - if(rep1.length > i && !"".equals(rep1[i]) && rep1[i] != null) { - shortRep1[shortCnt] = StringUtil.getString(rep1[i].replaceAll("§", ",")); //단문 치환 문자1 리스트 - }else { - shortRep1[shortCnt] = " "; - } - - if(rep2.length > i && !"".equals(rep2[i]) && rep2[i] != null) { - shortRep2[shortCnt] = StringUtil.getString(rep2[i].replaceAll("§", ",")); //단문 치환 문자2 리스트 - }else { - shortRep2[shortCnt] = " "; - } - - if(rep3.length > i && !"".equals(rep3[i]) && rep3[i] != null) { - shortRep3[shortCnt] = StringUtil.getString(rep3[i].replaceAll("§", ",")); //단문 치환 문자3 리스트 - }else { - shortRep3[shortCnt] = " "; - } - - if(rep4.length > i && !"".equals(rep4[i]) && rep4[i] != null) { - shortRep4[shortCnt] = StringUtil.getString(rep4[i].replaceAll("§", ",")); //단문 치환 문자4 리스트 - }else { - shortRep4[shortCnt] = " "; - } - - shortCnt++; - - } - - }else { - - modelAndView.addObject("message", "문자 치환 후 전송 문자 길이를 초과하였습니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - } - - - if(imgCnt > 0) {//그림문자 전송 이름, 전화번호, 변환문자 입력해주기 - - imgMsgVO.setNameList(imgNameList); - imgMsgVO.setCallToList(imgPhone); - imgMsgVO.setRep1List(imgRep1); - imgMsgVO.setRep2List(imgRep2); - imgMsgVO.setRep3List(imgRep3); - imgMsgVO.setRep4List(imgRep4); - - //개별단가 계산하기 - String eachPrice = imgMsgVO.getPPrice(); - - //api 서버에서 pPrice 값이 없는 경우가 있어서 오류 방지를위해서 추가 - if(eachPrice == null) { - - eachPrice = imgMsgVO.getEachPrice(); - - } - - /** - * 그림문자에 치환 내용이 포함되어 있는 경우 단가 계산하기. - * 그림문자의 경우 이로직을 타지 않지만 혹시 몰라서 추가해놓음 - * */ - - if(fileCount > 2) {//그림 이미지가 3개 - - eachPrice = mjonMsgVO.getP3Price(); - - }else if(fileCount > 1) {//그림 이미지가 2개 - - eachPrice = mjonMsgVO.getP2Price(); - - }else if(fileCount == 1) {//그림 이미지가 1개 - eachPrice = mjonMsgVO.getPPrice(); - - } - - imgMsgVO.setEachPrice(eachPrice); - - //문자 종류 선택 - imgMsgVO.setMsgType("6"); - - //총금액 계산하기 - Float sTotPrice = Float.parseFloat(imgMsgVO.getEachPrice()) * imgCnt; - imgMsgVO.setTotPrice(sTotPrice.toString()); - - //그림문자 발송 처리 - returnImgMap = fncSendMsgRtnMap(imgMsgVO); - - } - - if(shortCnt > 0) {//단문문자 전송 이름, 전화번호, 변환문자 입력해주기 - - shortMsgVO.setNameList(shortNameList); - shortMsgVO.setCallToList(shortPhone); - shortMsgVO.setRep1List(shortRep1); - shortMsgVO.setRep2List(shortRep2); - shortMsgVO.setRep3List(shortRep3); - shortMsgVO.setRep4List(shortRep4); - - //개별단가 계산하기 - String eachPrice = shortMsgVO.getSPrice(); - - //api 서버에서 sPrice 값이 없는 경우가 있어서 오류 방지를위해서 추가 - if(eachPrice == null) { - - eachPrice = shortMsgVO.getEachPrice(); - - } - - /** - * 그림문자에 치환 내용이 포함되어 있는 경우 단가 계산하기. - * 그림문자의 경우 이로직을 타지 않지만 혹시 몰라서 추가해놓음 - * */ - - if(fileCount > 2) {//그림 이미지가 3개 - - eachPrice = mjonMsgVO.getP3Price(); - - }else if(fileCount > 1) {//그림 이미지가 2개 - - eachPrice = mjonMsgVO.getP2Price(); - - }else if(fileCount == 1) {//그림 이미지가 1개 - eachPrice = mjonMsgVO.getPPrice(); - - } - - shortMsgVO.setEachPrice(eachPrice); - - //문자 종류 선택 - if(fileCount > 0) {//그림문자인 경우 문자타임 지정 - shortMsgVO.setMsgType("6"); - }else { - shortMsgVO.setMsgType("4"); - } - - //총금액 계산하기 - Float sTotPrice = Float.parseFloat(shortMsgVO.getEachPrice()) * shortCnt; - shortMsgVO.setTotPrice(sTotPrice.toString()); - - //단문문자 발송 처리 - returnShortMap = fncSendMsgRtnMap(shortMsgVO); - - } - - if(longCnt > 0) {//장문문자 전송 이름, 전화번호, 변환문자 입력해주기 - - longMsgVO.setNameList(longNameList); - longMsgVO.setCallToList(longPhone); - longMsgVO.setRep1List(longRep1); - longMsgVO.setRep2List(longRep2); - longMsgVO.setRep3List(longRep3); - longMsgVO.setRep4List(longRep4); - - /** - * 그림문자에 치환 내용이 포함되어 있는 경우 단가 계산하기. - * 그림문자의 경우 이로직을 타지 않지만 혹시 몰라서 추가해놓음 - * */ - - String eachPrice = longMsgVO.getMPrice(); - - //api 서버에서 mPrice 값이 없는 경우가 있어서 오류 방지를위해서 추가 - if(eachPrice == null) { - - eachPrice = longMsgVO.getEachPrice(); - - } - - if(fileCount > 2) {//그림 이미지가 3개 - - eachPrice = mjonMsgVO.getP3Price(); - - }else if(fileCount > 1) {//그림 이미지가 2개 - - eachPrice = mjonMsgVO.getP2Price(); - - }else if(fileCount == 1) {//그림 이미지가 1개 - eachPrice = mjonMsgVO.getPPrice(); - - } - - longMsgVO.setEachPrice(eachPrice); - - //문자 종류 선택 - longMsgVO.setMsgType("6"); - - //총금액 계산하기 - Float mTotPrice = Float.parseFloat(longMsgVO.getEachPrice()) * longCnt; - longMsgVO.setTotPrice(mTotPrice.toString()); - - //장문문자 발송 - returnLongMap = fncSendMsgRtnMap(longMsgVO); - } - - //일괄변환에 의한 단문, 장문 별개로 전송을 했기 때문에 각각 전송 결과 건수를 합쳐준 후 결과를 modelAndView로 리턴해준다. - String returnMessage = ""; - String returnStatus = ""; - - //그림 결과 내용 - if(!returnImgMap.isEmpty()) { - - if(!returnImgMap.get("result").contains("fail")) { - - //발송건수 계산 - int sendCnt = Integer.parseInt(resultSts) + Integer.parseInt(returnImgMap.get("resultSts")); - resultSts = Integer.toString(sendCnt); - - //수신거부 건수 계산 - int sendBlockCnt = Integer.parseInt(resultBlockSts) + Integer.parseInt(returnImgMap.get("resultBlockSts")); - resultBlockSts = Integer.toString(sendBlockCnt); - - returnMessage = returnImgMap.get("message"); - returnStatus = returnImgMap.get("result"); - - }else { - returnMessage = returnImgMap.get("message"); - returnStatus = returnImgMap.get("result"); - - modelAndView.addObject("message", returnMessage); - modelAndView.addObject("result", returnStatus); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - } - - } - - //장문발송 결과 내용 - if(!returnLongMap.isEmpty()) { - - if(!returnLongMap.get("result").contains("fail")) { - - //발송건수 계산 - int sendCnt = Integer.parseInt(resultSts) + Integer.parseInt(returnLongMap.get("resultSts")); - resultSts = Integer.toString(sendCnt); - - //수신거부 건수 계산 - int sendBlockCnt = Integer.parseInt(resultBlockSts) + Integer.parseInt(returnLongMap.get("resultBlockSts")); - resultBlockSts = Integer.toString(sendBlockCnt); - - returnMessage = returnLongMap.get("message"); - returnStatus = returnLongMap.get("result"); - - }else { - returnMessage = returnLongMap.get("message"); - returnStatus = returnLongMap.get("result"); - - modelAndView.addObject("message", returnMessage); - modelAndView.addObject("result", returnStatus); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - } - - } - - //단문발송 결과 내용 - if(!returnShortMap.isEmpty()) { - - if(!returnShortMap.get("result").contains("fail")) { - - //발송건수 계산 - int sendCnt = Integer.parseInt(resultSts) + Integer.parseInt(returnShortMap.get("resultSts")); - resultSts = Integer.toString(sendCnt); - - //수신거부 건수 계산 - int sendBlockCnt = Integer.parseInt(resultBlockSts) + Integer.parseInt(returnShortMap.get("resultBlockSts")); - resultBlockSts = Integer.toString(sendBlockCnt); - - returnMessage = returnShortMap.get("message"); - returnStatus = returnShortMap.get("result"); - - }else { - returnMessage = returnShortMap.get("message"); - returnStatus = returnShortMap.get("result"); - - modelAndView.addObject("message", returnMessage); - modelAndView.addObject("result", returnStatus); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - } - - } - - modelAndView.addObject("msgType", mjonMsgVO.getMsgType()); - modelAndView.addObject("msgGroupId", mjonMsgVO.getMsgGroupId()); - modelAndView.addObject("message", returnMessage); - modelAndView.addObject("result", returnStatus); - modelAndView.addObject("resultSts", resultSts); - modelAndView.addObject("resultBlockSts", resultBlockSts); - - }else { - - //문자발송 함수 호출 - 일괄변환이 없거나, 그림문자 일괄변환의 경우 한번에 전송 처리 - modelAndView = fncSendMsg(mjonMsgVO); - - } - - }catch(Exception e) { - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ 일반문자 ==> 기타 시스템 오류 !!! : " + e.getMessage()); - System.out.println("========================================================================="); - - //logger.error(e.getMessage(), e); - e.printStackTrace(); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - return modelAndView; - - } - - - /** - * 사용자가 보낸 문자를 문자온 법인폰으로도 하나 전송하는 기능 시작 - * - * */ - - try { - - - String adminSmsNoticeYn = "Y"; - String smishingYn = "N"; - String spamStatus = mjonMsgVO.getSpamStatus(); //스미싱 의심으로 체크된 문자 정보 - - - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setMberId(userId); - - - if(!userId.equals("")) { - userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO); - adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); - smishingYn = userManageVO.getSmishingYn(); - } - - //법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송 - if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y") || smishingYn.equals("Y")) { - - if(spamStatus.equals("Y")) { - - mjonMsgVO.setDelayYn("Y"); - - }else if(smishingYn.equals("Y")) { - - mjonMsgVO.setSmishingYn("Y"); - } - - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - - String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); - - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - getAdminPhoneSendMsgData(mjonMsgVO); - } - - //야간 스미싱의심 알림이 활성화 되어있는 경우 - if(holiSmishingNoti.equals("Y")) { - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); - - List resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO); - - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); - - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - - List resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO); - - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); - - if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림 예외설정 시간에 포함되지 않는 경우 슬랙 알림 발송 - /* - MjonCommon comm = new MjonCommon(); - comm.getAdminMsgSandSlack(mjonMsgVO); - */ - mjonCommon.getAdminMsgSandSlack(mjonMsgVO); - } - - } - } - - } - - } catch (Exception e) { - throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e); - } - - return modelAndView; - } - - - /** - * 문자 발송 기능 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/sendMsgDataAjax.do" - * @throws Exception - */ - - @RequestMapping(value = "/web/mjon/msgdata/sendMsgDataAjax_advc.do") - public ResponseEntity sendMsgData_advc( - @RequestBody MjonMsgVO mjonMsgVO, - HttpServletRequest request, - ModelMap model) throws Exception { - System.out.println(" :: sendMsgData_advc :: "); - - - // 디버깅 출력 -// System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgSendVOList().toString()); -// System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgSendVOList().size()); - - return ResponseEntity.ok().body(mjonMsgDataService.sendMsgData_advc(mjonMsgVO, request)) ; - - } - - - /** - * 관리자로 문자 발송해주기 - * 사용자가 보낸 문자를 문자온 법인폰으로 발송해주는 기능 함수. - * 일반문자 와 대량 문자 모두 적용하고 있음 - * 2022.09.19 우영두 추가 - * - * */ - public boolean getAdminPhoneSendMsgData(MjonMsgVO mjonMsgVO) throws Exception{ - - try { - - mjonMsgVO.setUserId("system");//시스템 발송 문자로 처리 - - //전송사 선택 - String msgType = mjonMsgVO.getMsgType(); - int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt());//그림 이미지 갯수 - - - //예약문자를 발송하는 경우 문자 내용 앞에 "[예약]" 표시되도록 처리 - 법인폰으로 발송되는 문자내용 수정함.20221123 추가 - //스팸/스미싱 대상자 문자를 발송하는 경우 문자 내용 앞에 "[발송지연문자]" 표시되도록 처리 - 법인폰으로 발송되는 문자내용 수정함.20221202 추가 - String reserveYn = mjonMsgVO.getReserveYn(); - String delayYn = mjonMsgVO.getDelayYn(); - String smishingYn = mjonMsgVO.getSmishingYn(); - - String smsTxt = mjonMsgVO.getSmsTxt(); - String transSmsTxt = smsTxt; - - if(reserveYn.equals("Y")) { - - if(smishingYn.equals("Y") || delayYn.equals("Y")) { - - transSmsTxt = "[스미싱의심][예약]" + smsTxt; - - }else { - transSmsTxt = "[예약]" + smsTxt; - } - - }else if(delayYn.equals("Y")) { - - transSmsTxt = "[스미싱의심]" + smsTxt; - - } - - //[예약], [발송지연문자] 문구 추가시 문자열 길이 및 문자 종류 재계산 하기 - String charset = "euc-kr"; - int bytes = transSmsTxt.getBytes(charset).length; //발송 문자 길이 - - if(bytes > 2000) {//문자열 길이가 2000을 넘어가면 [예약], [발송지연문자] 문구를 제외한 원래 문구를 넣어준다. 안그러면 문자전송이 실패하게 됨. - - mjonMsgVO.setSmsTxt(smsTxt); - - }else { - - //[예약], [발송지연문자] 문구를 추가한 내용으로 메세지 내용을 셋팅해 준다. - mjonMsgVO.setSmsTxt(transSmsTxt); - if(bytes > 90) {//장문일 경우 문자타입을 변경해준다. - - msgType = "6"; - mjonMsgVO.setMsgType(msgType); - - } - - } - - // 문자타입 구분 - if (msgType.equals("4")) { - mjonMsgVO.setMsgDiv("S"); // 단문 - } - else if (msgType.equals("6")) { - if (fileCount > 0) { - mjonMsgVO.setMsgDiv("P"); // 그림 - mjonMsgVO.setNeoType("4"); - } - else { - mjonMsgVO.setMsgDiv("L"); // 장문 - } - } - - // 문자타입별 대표전송사 정보 - MjonMsgVO mjonMsgVO2 = new MjonMsgVO(); - mjonMsgVO2 = mjonMsgService.selectRepMsgAgetnInfo(mjonMsgVO); - // 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술 - mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택 - // 전송금액 - mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString()); //총금액 - mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString()); //한건 금액 - - - //수신번호가 배열로 되어있어서 배열에 담아준다. - String[] phone = new String[1]; - String callTo = "15518011"; - phone[0] = callTo; - mjonMsgVO.setCallToList(phone);//수신번호 리스트 - - //시스템 로그용 수신 정보 - mjonMsgVO.setCallTo("help@iten.co.kr"); - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - //String userMoney = "0.0"; - String userPoint = "0.0"; - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - mjonMsgVO.setBefCash("0.0"); //관리자가 발송하는 것이라서 0원으로 입력 - mjonMsgVO.setMsgGroupCnt("1"); - - //문자종류 관리자가 발송하는 것은 msgKind : S 로 셋팅 - mjonMsgVO.setMsgKind("S"); - - Date now = new Date(); - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - mjonMsgVO.setReqDate(sdFormat.format(now)); - - //문자 발송 처리 - mjonMsgDataService.insertAdmToMberMsgDataInfo(mjonMsgVO); - - } catch (Exception e) { - throw new Exception("+++++++++++++++++++++++++++++ getAdminPhoneSendMsgData Function Error !!!" + e); - } - - return true; - } - - /** - * 문자발송시 치환문자가 있거나 단문, 장문 일경우 타는 로직 - * param : MjonMsgVO - * return : ModelAndView - * - * */ - public Map fncSendMsgRtnMap(MjonMsgVO mjonMsgVO) { - Map returnMap = new HashMap(); - - //String resultSts = "0"; //발송결과 건수 - //String resultBlockSts = "0"; //수신거부 등록번호로 발송을 안한 건수 - - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 - - try { - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - String totPrice = mjonMsgVO.getTotPrice(); - - BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN); - - - //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - //BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice, - - //문자 발송 처리 - //MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - //현재 보유 캐쉬금액 셋팅 - mjonMsgVO.setBefCash(befCash.toString()); - - //문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열 - String[] tempNameList = new String[200]; //임시 이름 리스트 저장용 배열 - String[] tempRep1List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep2List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep3List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep4List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - - String[] phoneList = mjonMsgVO.getCallToList(); - String[] nameList = mjonMsgVO.getNameList(); - String[] rep1List = mjonMsgVO.getRep1List(); - String[] rep2List = mjonMsgVO.getRep2List(); - String[] rep3List = mjonMsgVO.getRep3List(); - String[] rep4List = mjonMsgVO.getRep4List(); - - - int callToListCnt = mjonMsgVO.getCallToList().length; - mjonMsgVO.setTotalCallCnt(callToListCnt); - - /** 예약 문자인 경우 시간 및 분할 시간 셋팅 해주기 */ - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - int turmMin = 0; - int totalCallCnt = 0; // 수신자 전체 갯수 - int divideCnt = 0; - int count = 1; //분할 카운트 - - - if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - - } - - //분할 예약 시간 저장 리스트 생성 - List dividDayList = new ArrayList(); - - //서비스 단으로 특정 문자 건수 이상으로 한번에 보내지 않기 위해서 처리함 - if(callToListCnt > 200) { - - int sendCnt = 0; - for(int i=0; i< callToListCnt; i++) { - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - if((i < callToListCnt -1) && sendCnt == 199) { - - //sendCnt 4번째 값을 추가해준다. - tempPhoneList[sendCnt] = phoneList[i]; - tempNameList[sendCnt] = nameList[i]; - tempRep1List[sendCnt] = rep1List[i]; - tempRep2List[sendCnt] = rep2List[i]; - tempRep3List[sendCnt] = rep3List[i]; - tempRep4List[sendCnt] = rep4List[i]; - - List arrPhoneList = new ArrayList(); - List arrNameList = new ArrayList(); - List arrRep1List = new ArrayList(); - List arrRep2List = new ArrayList(); - List arrRep3List = new ArrayList(); - List arrRep4List = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList.add(temp); - - } - - } - - for(String tmpName : tempNameList) { - - if(tmpName != null) { - - arrNameList.add(tmpName); - - } - - } - - for(String tmpRep1 : tempRep1List) { - - if(tmpRep1 != null) { - - arrRep1List.add(tmpRep1); - - } - - } - - for(String tmpRep2 : tempRep2List) { - - if(tmpRep2 != null) { - - arrRep2List.add(tmpRep2); - - } - - } - - for(String tmpRep3 : tempRep3List) { - - if(tmpRep3 != null) { - - arrRep3List.add(tmpRep3); - - } - - } - - for(String tmpRep4 : tempRep4List) { - - if(tmpRep4 != null) { - - arrRep4List.add(tmpRep4); - - } - - } - - String[] sendPhoneList = new String[arrPhoneList.size()]; - String[] sendNameList = new String[arrNameList.size()]; - String[] sendRep1List = new String[arrRep1List.size()]; - String[] sendRep2List = new String[arrRep2List.size()]; - String[] sendRep3List = new String[arrRep3List.size()]; - String[] sendRep4List = new String[arrRep4List.size()]; - - for(int j=0; j< arrPhoneList.size(); j++) { - - sendPhoneList[j] = arrPhoneList.get(j); - - } - - for(int k=0; k< arrNameList.size(); k++) { - - sendNameList[k] = arrNameList.get(k); - - } - - for(int k=0; k< arrRep1List.size(); k++) { - - sendRep1List[k] = arrRep1List.get(k); - - } - - for(int k=0; k< arrRep2List.size(); k++) { - - sendRep2List[k] = arrRep2List.get(k); - - } - - for(int k=0; k< arrRep3List.size(); k++) { - - sendRep3List[k] = arrRep3List.get(k); - - } - - for(int k=0; k< arrRep4List.size(); k++) { - - sendRep4List[k] = arrRep4List.get(k); - - } - - mjonMsgVO.setCallToList(sendPhoneList); - mjonMsgVO.setNameList(sendNameList); - mjonMsgVO.setRep1List(sendRep1List); - mjonMsgVO.setRep2List(sendRep2List); - mjonMsgVO.setRep3List(sendRep3List); - mjonMsgVO.setRep4List(sendRep4List); - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - //발송 처리후 배열 초기화 - Arrays.fill(tempPhoneList, null); - dividDayList.clear(); - - - }else if((i == callToListCnt -1) && sendCnt < 200){//200개의 마지막일 경우 처리 - - //마지막 리스트의 수신번호를 추가해 준다. - tempPhoneList[sendCnt] = phoneList[i]; - tempNameList[sendCnt] = nameList[i]; - tempRep1List[sendCnt] = rep1List[i]; - tempRep2List[sendCnt] = rep2List[i]; - tempRep3List[sendCnt] = rep3List[i]; - tempRep4List[sendCnt] = rep4List[i]; - - List arrPhoneList2 = new ArrayList(); - List arrNameList2 = new ArrayList(); - List arrRep1List2 = new ArrayList(); - List arrRep2List2 = new ArrayList(); - List arrRep3List2 = new ArrayList(); - List arrRep4List2 = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList2.add(temp); - - } - - } - - for(String tmpName : tempNameList) { - - if(tmpName != null) { - - arrNameList2.add(tmpName); - - } - - } - - for(String tmpRep1 : tempRep1List) { - - if(tmpRep1 != null) { - - arrRep1List2.add(tmpRep1); - - } - - } - - for(String tmpRep2 : tempRep2List) { - - if(tmpRep2 != null) { - - arrRep2List2.add(tmpRep2); - - } - - } - - for(String tmpRep3 : tempRep3List) { - - if(tmpRep3 != null) { - - arrRep3List2.add(tmpRep3); - - } - - } - - for(String tmpRep4 : tempRep4List) { - - if(tmpRep4 != null) { - - arrRep4List2.add(tmpRep4); - - } - - } - - String[] sendPhoneList2 = new String[arrPhoneList2.size()]; - String[] sendNameList2 = new String[arrNameList2.size()]; - String[] sendRep1List2 = new String[arrRep1List2.size()]; - String[] sendRep2List2 = new String[arrRep2List2.size()]; - String[] sendRep3List2 = new String[arrRep3List2.size()]; - String[] sendRep4List2 = new String[arrRep4List2.size()]; - - for(int j=0; j< arrPhoneList2.size(); j++) { - - sendPhoneList2[j] = arrPhoneList2.get(j); - - } - - for(int j=0; j< arrNameList2.size(); j++) { - - sendNameList2[j] = arrNameList2.get(j); - - } - - for(int k=0; k< arrRep1List2.size(); k++) { - - sendRep1List2[k] = arrRep1List2.get(k); - - } - - for(int k=0; k< arrRep2List2.size(); k++) { - - sendRep2List2[k] = arrRep2List2.get(k); - - } - - for(int k=0; k< arrRep3List2.size(); k++) { - - sendRep3List2[k] = arrRep3List2.get(k); - - } - - for(int k=0; k< arrRep4List2.size(); k++) { - - sendRep4List2[k] = arrRep4List2.get(k); - - } - - mjonMsgVO.setCallToList(sendPhoneList2); - mjonMsgVO.setNameList(sendNameList2); - mjonMsgVO.setRep1List(sendRep1List2); - mjonMsgVO.setRep2List(sendRep2List2); - mjonMsgVO.setRep3List(sendRep3List2); - mjonMsgVO.setRep4List(sendRep4List2); - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - }else {//198개가 될때까지 배열에 데이터를 쌓는다 - - tempPhoneList[sendCnt] = phoneList[i]; - - if(nameList.length > 0) {//이름 치환문자가 있는 경우 - tempNameList[sendCnt] = nameList[i]; - } - - if(rep1List.length > 0) {//치환1 문자가 있는 경우 - tempRep1List[sendCnt] = rep1List[i]; - } - - if(rep2List.length > 0) {//치환2 문자가 있는 경우 - tempRep2List[sendCnt] = rep2List[i]; - } - - if(rep3List.length > 0) {//치환3 문자가 있는 경우 - tempRep3List[sendCnt] = rep3List[i]; - } - - if(rep4List.length > 0) {//치환4 문자가 있는 경우 - tempRep4List[sendCnt] = rep4List[i]; - } - - sendCnt++; - - } - - } - - }else { - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - for(int i=0; i< callToListCnt; i++) { - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - } - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - } - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++ resultSts ::: " + resultSts); - System.out.println("========================================================================="); - - try { - - //문자 발송 캐시 차감 해주기 - serviceImple에서 처리하도록 변경 함 - /*MjonPayVO mjonPayVO = new MjonPayVO(); - - if(resultSts > 0 && resultBlockSts > 0) { - - Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * resultBlockSts; - Float resultTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - Float endPrice = resultTotPrice - blockPrice; - - mjonMsgVO.setTotPrice(Float.toString(endPrice)); - - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. - int groupCnt = resultSts; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - - } - - //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. - if(resultSts > 0) { - mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); - mjonPayVO.setUserId(mjonMsgVO.getUserId()); - mjonPayVO.setCash(-Float.parseFloat(mjonMsgVO.getTotPrice())); - mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); - mjonPayVO.setMemo("SMS 문자 " + resultSts + "건 발송"); - mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - - mjonPayService.insertCash(mjonPayVO); //캐시차감 - mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 - } - - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - if(resultSts > 0) { - - // 문자 전송 그룹 테이블에 정보 입력 - int groupCnt = resultSts; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - mjonMsgService.insertGroupMsgData(mjonMsgVO); - - //이벤트 회원 남은 캐시 업데이트 - fnUpdateEventRemainCash(mjonPayVO); - - }*/ - - //스팸문구 포함된 문자 발송의 경우 스팸 문구 내용도 별도 저장함. - String spamStatus = mjonMsgVO.getSpamStatus(); - - if(spamStatus == null) { - - spamStatus = "N"; - mjonMsgVO.setSpamStatus("N"); - - } - - if(spamStatus.equals("Y")) { - - int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO); - - System.out.println("+++++++++++++스팸문구 발송 내용 등록 +++++++++++++++++++++ "+resultCnt); - - } - - } catch (Exception e) { - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ fncSendMsgRtnMap() MJ_MSG_GROUP && CASH INSER ERROR !!! : " + e.getMessage()); - System.out.println("========================================================================="); - } - - }else { - - returnMap.put("message", "문자 발송에 필요한 보유 잔액이 부족 합니다."); - returnMap.put("result", "fail"); - returnMap.put("resultSts", "0"); - returnMap.put("resultBlockSts", "0"); - - return returnMap; - - } - - //문자 발송 후 남은 보유 캐시 정보 불러오기 - String afterCash = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - returnMap.put("afterCash", afterCash); - - }catch(Exception e) { - - logger.error(e.getMessage(), e); - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ 기타 시스템 오류 : " + e.getMessage()); - System.out.println("========================================================================="); - returnMap.put("result", "fail"); - returnMap.put("message", "기타 시스템 오류 : " + e.getMessage()); - - } - - returnMap.put("message", "문자 전송이 완료되었습니다."); - returnMap.put("result", "success"); - returnMap.put("resultSts", Integer.toString(resultSts)); - returnMap.put("resultBlockSts", Integer.toString(resultBlockSts)); - - return returnMap; - } - - /** - * 문자발송시 치환문자가 없거나 그림문자일 경우 타는 로직 - * param : MjonMsgVO - * return : ModelAndView - * - * */ - public ModelAndView fncSendMsg(MjonMsgVO mjonMsgVO) { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 - - try { - - //문자열 길이 체크 해주기 - String charset = "euc-kr"; - String smsCont = mjonMsgVO.getSmsTxt().replace("\r\n", "\n"); - int bytes = smsCont.getBytes(charset).length; //발송 문자 길이 - - if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setMsgType("6"); - }else { - if(bytes < 2000) { - if(bytes > 90) {// 90Byte 초과시 장문 - mjonMsgVO.setMsgType("6"); - }else {// 그외 단문 - mjonMsgVO.setMsgType("4"); - } - - if(bytes < 1) {//단문, 장문의 경우 문자 내용이 없는 경우 발송 안되도록 처리 - - System.out.println("===================================fncSendMsg======================================"); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++ 입력 문자 내용이 없습니다. ::: "); - System.out.println("===================================fncSendMsg======================================"); - - modelAndView.addObject("message", "입력 문자 내용을 확인할 수 없습니다. 문자 내용을 입력해 주세요."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - }else { //최대 문자길이 초과시 - - modelAndView.addObject("message", "문자 치환 후 전송 문자 길이를 초과하였습니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - } - } - - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - String totPrice = mjonMsgVO.getTotPrice(); - - BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN); - - - // 현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - // BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice, - - mjonMsgVO.setBefCash(userMoney); - // 문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - //문자 발송 처리 - //MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열 - String[] phoneList = mjonMsgVO.getCallToList(); - - int callToListCnt = mjonMsgVO.getCallToList().length; - mjonMsgVO.setTotalCallCnt(callToListCnt); - - /** - * 예약 문자인 경우 시간 및 분할 시간 셋팅 해주기 - * - * - * */ - - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - int turmMin = 0; - int totalCallCnt = 0; - int divideCnt = 0; - int count = 1; //분할 카운트 - - - if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - - } - - //분할 예약 시간 저장 리스트 생성 - List dividDayList = new ArrayList(); - - //서비스 단으로 특정 문자 건수 이상으로 한번에 보내지 않기 위해서 처리함 - if(callToListCnt > 200) { - - int sendCnt = 0; - for(int i=0; i< callToListCnt; i++) { - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - if((i < callToListCnt -1) && sendCnt == 199) { - - //sendCnt 4번째 값을 추가해준다. - tempPhoneList[sendCnt] = phoneList[i]; - - List arrPhoneList = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList.add(temp); - - } - - } - - - String[] sendPhoneList = new String[arrPhoneList.size()]; - - for(int j=0; j< arrPhoneList.size(); j++) { - - sendPhoneList[j] = arrPhoneList.get(j); - - } - - - mjonMsgVO.setCallToList(sendPhoneList); - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - //발송 처리후 배열 초기화 - Arrays.fill(tempPhoneList, null); - dividDayList.clear(); - - }else if((i == callToListCnt -1) && sendCnt < 200){ - - //마지막 리스트의 수신번호를 추가해 준다. - tempPhoneList[sendCnt] = phoneList[i]; - - List arrPhoneList2 = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList2.add(temp); - - } - - } - - - String[] sendPhoneList2 = new String[arrPhoneList2.size()]; - - for(int j=0; j< arrPhoneList2.size(); j++) { - - sendPhoneList2[j] = arrPhoneList2.get(j); - - } - - - mjonMsgVO.setCallToList(sendPhoneList2); - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - }else { - - tempPhoneList[sendCnt] = phoneList[i]; - sendCnt++; - - } - - } - - }else { - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - for(int i=0; i< callToListCnt; i++) { - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - } - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = Integer.parseInt(returnVO.getSendMsgBlockCnt()); - System.out.println("======================================== totPrice ::: "+mjonMsgVO.getTotPrice()); - - } - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++ resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++ resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - try { - - //문자 발송 캐시 차감 해주기 - serviceImple에서 처리하도록 변경 함 - /*MjonPayVO mjonPayVO = new MjonPayVO(); - - if(resultSts > 0 && resultBlockSts > 0) { - - Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * resultBlockSts; - Float resultTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - Float endPrice = resultTotPrice - blockPrice; - - mjonMsgVO.setTotPrice(Float.toString(endPrice)); - - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. - int groupCnt = resultSts; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - - } - - //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. - if(resultSts > 0) { - - mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); - mjonPayVO.setUserId(mjonMsgVO.getUserId()); - mjonPayVO.setCash(-Float.parseFloat(mjonMsgVO.getTotPrice())); - mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); - mjonPayVO.setMemo("SMS 문자 " + resultSts + "건 발송"); - mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - - //mjonPayService.insertCash(mjonPayVO); //캐시차감 - //mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 - - } - - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - if(resultSts > 0) { - - // 문자 전송 그룹 테이블에 정보 입력 - int groupCnt = resultSts; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - mjonMsgService.insertGroupMsgData(mjonMsgVO); - - //이벤트 회원 남은 캐시 업데이트 - fnUpdateEventRemainCash(mjonPayVO); - - }*/ - - //스팸문구 포함된 문자 발송의 경우 스팸 문구 내용도 별도 저장함. - String spamStatus = mjonMsgVO.getSpamStatus(); - - if(spamStatus == null) { - - spamStatus = "N"; - mjonMsgVO.setSpamStatus("N"); - - } - - if(spamStatus.equals("Y")) { - - int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO); - - System.out.println("+++++++++++++스팸문구 발송 내용 등록 +++++++++++++++++++++ "+resultCnt); - - } - - } catch (Exception e) { - System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); - System.out.println("====================================== fncSendMsg MJ_MSG_GROUP && CASH ERROR !!! ::: " + e.getMessage()); - System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); - } - - }else { - - modelAndView.addObject("message", "문자 발송에 필요한 보유 잔액이 부족 합니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - //문자 발송 후 남은 보유 캐시 정보 불러오기 - String afterCash = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - modelAndView.addObject("afterCash", afterCash); - - }catch(Exception e) { - - logger.error(e.getMessage(), e); - - System.out.println("========================================================================="); - System.out.println("++++++++++++++++++++++++++++++++++++++++++++기타 시스템 오류 : " + e.getMessage()); - System.out.println("========================================================================="); - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - - } - - - modelAndView.addObject("message", "문자 전송이 완료되었습니다."); - modelAndView.addObject("msgType", mjonMsgVO.getMsgType()); - modelAndView.addObject("msgGroupId", mjonMsgVO.getMsgGroupId()); - modelAndView.addObject("result", "success"); - modelAndView.addObject("resultSts", resultSts); - modelAndView.addObject("resultBlockSts", resultBlockSts); - - return modelAndView; - } - - //이벤트 회원 캐시 변경 함수 - public void fnUpdateEventRemainCash(MjonPayVO mjonPayVO) throws Exception{ - - //이벤트 회원인 경우 이벤트 캐시도 함께 차감. - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(mjonPayVO.getUserId()); - mjonEventVO.setEventStatus("Y"); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - if(eventMberInfo != null) { - - float evntRemainCash = (float) eventMberInfo.getEventRemainCash(); - float totPrice = (float) Math.abs(mjonPayVO.getCash()); - - float totRemainCash = evntRemainCash - totPrice; - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - - if(totRemainCash <= 0.0) {//차감액이 남아있지 않으면 이벤트를 종료 - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventRemainCash(0.0); - mjonEventService.updateEventEndStatus(mjonEventVO); - - }else {//이벤트 회원 캐시 차감시킴 - - mjonEventVO.setEventRemainCash(totRemainCash); - mjonEventService.updateEventRemainCash(mjonEventVO); - - } - - } - - } - - - /** - * 내 문자함 저장 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/insertMyMsgDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/insertMyMsgDataAjax.do"}) - public ModelAndView insertMyMsgDataAjax(MjonMsgDataVO mjonMsgDataVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO user = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - if(user != null) { - - mjonMsgDataVO.setUserId(user.getId()); - - }else { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "fail"); - - return modelAndView; - - } - - //문자에 첨부된 이미지 파일 아이디를 셋팅해준다. - int i = 0; - for(String fileId : mjonMsgDataVO.getImgFileId()) { - - if(i == 0) { - - mjonMsgDataVO.setAtchFileId1(fileId); - - }else if(i == 1) { - - mjonMsgDataVO.setAtchFileId2(fileId); - - }else if(i == 2) { - - mjonMsgDataVO.setAtchFileId3(fileId); - - } - - i++; - - } - - // 디비에 문자 내용을 저장해 준다. - int resultSts = mjonMsgDataService.insertMyMsgDataAjax(mjonMsgDataVO); - - if(resultSts > 0) { - - modelAndView.addObject("message", "문자가 저장되었습니다."); - modelAndView.addObject("result", "success"); - - }else { - - modelAndView.addObject("message", "문자가 저장이 실패 되었습니다."); - modelAndView.addObject("result", "fail"); - - } - - return modelAndView; - - } - - - - /** - * 이미지에디터 팝업 - * @param searchVO - * @param model - * @return "/web/mjon/msgtxt/openImageEditorPopup.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/openImageEditorPopup.do"}) - public String openImageEditorPopup(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - // 그림문자 카테고리 리스트 불러오기 - List cateConfList = letterService.selectCateConfWithList("N"); - model.addAttribute("cateCodeList", cateConfList); - - //그림 문자 리스트 불러오기 - LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit(letterVO.getPageUnit()); - } - - /** paging */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - List resultPhoList = mjonMsgDataService.selectPhotoLetterList(letterVO); - - model.addAttribute("resultPhoList", resultPhoList); - paginationInfo.setTotalRecordCount( resultPhoList.size()> 0 ? ((Long)((EgovMap)resultPhoList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - return "web/msgdata/imageEditorPopup"; - } - - - /** - * 에디터에서 수정한 이미지 등록 Ajax - * @param mjonMsgDataVO - * @param model - * @return modelAndView - * @throws Exception - */ - @RequestMapping(value = {"/web/mjon/msgdata/insertEditImageAjax.do"}) - public ModelAndView insertEditImageAjax(final MultipartHttpServletRequest multiRequest - , MjonMsgDataVO mjonMsgDataVO - , RedirectAttributes redirectAttributes - , HttpServletRequest request) throws Exception { - - //LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - String atchFileId = ""; - String isThumbFile = ""; - String imagePath = ""; - final Map files = multiRequest.getFileMap(); - String KeyStr = "CANVASIMG_"; - - - Date now = new Date(); - SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMdd"); - String fdlDate = formatDate.format(now); - - - //로컬 과 개발서버의 이미지 저장 경로 분기처리 - if(request.getServerName().equals("localhost")) { - - imagePath = fileSaveDir+"/file/MMS/" + fdlDate; - /*fileSaveDir+"src/main/webapp"*/ - - }else { - - /*imagePath = "C:/eGovFrameDev-3.9.0-64bit_ncms/workspace/mjon/src/main/webapp/MMS/" + fdlDate;*/ - /*imagePath = "/usr/local/tomcat_mjon/webapps/mjon/MMS/" + fdlDate;*/ - imagePath = fileSaveDir+"/file/MMS/" + fdlDate; - - } - - - if (!files.isEmpty()) { - List result = fileUtil.parseImageFileInf(files, KeyStr, 0, atchFileId, imagePath, isThumbFile); - atchFileId = fileMngService.insertFileInfs(result); - - FileVO tmpVO = new FileVO(); - tmpVO.setAtchFileId(atchFileId); //insert 한 파일의 정보를 가지고 옴 - - - FileVO fileVO = new FileVO(); - fileVO = fileMngService.selectFileInf(tmpVO); - - //저장한 파일의 경로 + 파일명 - String filefullPath = fileVO.getFileStreCours() +"/"+ fileVO.getStreFileNm() + "." + fileVO.getFileExtsn(); - - modelAndView.addObject("atchFileId", atchFileId); - modelAndView.addObject("filefullPath", filefullPath); - modelAndView.addObject("result", "success"); - //modelAndView.addObject("message", "이미지 업로드가 완료되었습니다."); - } - - }catch(Exception e) { - logger.error(e.getMessage(), e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - } - - return modelAndView; - } - - - /** - * 내문자함 문자내용 선택시 정보 불러오기 - * @param String msgId, String pageType - * @param model - * @return modelAndView - * @throws Exception - */ - @RequestMapping(value = {"/web/mjon/msgdata/selectMsgAddInfoAjax.do"}) - public ModelAndView selectMsgAddInfoAjax(@RequestParam Map commandMap - , MjonMsgDataVO mjonMsgDataVO - , HttpServletRequest request) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - /*LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());*/ - - try { - - //MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); - - //mjonMsgDataVO.setMsgId(commandMap.get("msgId").toString()); - //mjonMsgDataVO.setPageType(commandMap.get("pageType").toString()); - - //내 문자함 내용 및 첨부파일 정보 불러오기 - MjonMsgDataVO resultMsgInfo = mjonMsgDataService.selectMsgAddInfoAjax(mjonMsgDataVO); - - //문자함 리스트의 첨부이미지 정보 불러오기 - List resultMsgAddPhotoInfo = mjonMsgDataService.selectMsgAddPhotoInfo(resultMsgInfo); - - modelAndView.addObject("resultMsgInfo", resultMsgInfo); - modelAndView.addObject("resultMsgAddPhotoInfo", resultMsgAddPhotoInfo); - modelAndView.addObject("result", "success"); - //modelAndView.addObject("message", "이미지 업로드가 완료되었습니다."); - - }catch(Exception e) { - logger.error(e.getMessage(), e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - } - - return modelAndView; - } - - - /** - * 단문/장문 템플릿 조회수 증가 - * @param letterId - * @param redirectAttributes - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/updateSmsTemplateCntAjax.do"}) - public ModelAndView updateSmsTemplateCntAjax(@ModelAttribute("letterId") String letterId, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - - //템플릿 조회수 - int succCnt = letterService.updateSmsTemplateViewCount(letterId); - - if(succCnt > 0) { - modelAndView.addObject("result","success"); - }else { - modelAndView.addObject("result","fail"); - } - - } catch (Exception e) { - - logger.error(e.getMessage(), e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - - } - - return modelAndView; - } - - - /** - * 문자 발송 - 엑셀파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/msgdata/sendExelFilePhoneNumAjax.do") - @ResponseBody - public Object sendExelFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); - - try { - - //final Map files = multiRequest.getFileMap(); - List files = (List) multiRequest.getFiles("file0"); - - // 파일명에 .이 있을경우 오류 => Ex) 테스트6.20.xlsx - int fileNameSplitCnt = 0; - - if(!files.isEmpty()) { - fileNameSplitCnt = files.get(0).getOriginalFilename().split("[.]").length; - - if (files.get(0).getSize() > 0 - && (files.get(0).getContentType().indexOf("spreadsheetml") > -1) - || files.get(0).getContentType().indexOf("ms-excel") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xlsx") > -1 - || files.get(0).getOriginalFilename().split("[.]")[fileNameSplitCnt-1].indexOf("xls") > -1) { - - // 엑셀 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("엑셀 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - String Ext = files.get(0).getOriginalFilename().split("[.]")[1]; - String errMessage = ""; - String cellValue = ""; - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - int errPhoneCnt = 0; - int errNameCnt = 0; - int errRep1Cnt = 0; - int errRep2Cnt = 0; - int errRep3Cnt = 0; - int errRep4Cnt = 0; - String errPhoneLine = ""; - String errEtcLine = ""; - - //엑셀 확장자에 따른 처리 로직 분리 - if(Ext.equals("xls")) { - - HSSFWorkbook workbook = new HSSFWorkbook(files.get(0).getInputStream()); - HSSFSheet sheet = workbook.getSheetAt(0); - - if(sheet.getLastRowNum() > 20000) { // - errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - HSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - HSSFCell cell = null; - boolean errSts = true; - for(int j = 0 ; j < 6; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - //System.out.println("Cell 데이터가 없습니다."); - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - } - - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - boolean nmChk = getNameRepLenChk("name", cellValue); - - if(nmChk && errSts) { - jm.put("name", cellValue); - }else { - errNameCnt++; - errEtcLine += (i+1) + "행(이름) "; - errSts = false; - break; - } - - } - if(j == 1) { - //전화번호 - if(cellValue.matches(phoneRegExp) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errPhoneLine += (i+1) + "행 "; - errSts = false; - break; - } - } - if(j == 2) { - //치환1 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace1", cellValue); - }else { - errRep1Cnt++; - errEtcLine += (i+1) + "행(치환1) "; - errSts = false; - break; - } - } - if(j == 3) { - //치환2 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace2", cellValue); - }else { - errRep2Cnt++; - errEtcLine += (i+1) + "행(치환2) "; - errSts = false; - break; - } - - } - if(j == 4) { - //치환3 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace3", cellValue); - }else { - errRep3Cnt++; - errEtcLine += (i+1) + "행(치환3) "; - errSts = false; - break; - } - - } - if(j == 5) { - //치환4 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace4", cellValue); - }else { - errRep4Cnt++; - errEtcLine += (i+1) + "행(치환4) "; - errSts = false; - break; - } - - } - - } - if(null != jm.get("phone") && errSts) { - json.add(jm); - } - - } - - int resultErrCnt = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt; - int resultErrCntExceptPhone = errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - if (errPhoneCnt <= 10) { - if (StringUtils.isNotEmpty(errPhoneLine.trim())) { - errPhoneLine = "[" + errPhoneLine.trim() + "]"; - } - } - else { - errPhoneLine = ""; - } - if (resultErrCntExceptPhone <= 10) { - if (StringUtils.isNotEmpty(errEtcLine.trim())) { - errEtcLine = "[" + errEtcLine.trim() + "]"; - } - } - else { - errEtcLine = ""; - } - jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + "\n이름 : 20byte, [*1*]~[*4*] : 40byte 제한글자수 초과 "+ resultErrCntExceptPhone +"건" + errEtcLine.trim() + " 있습니다.\n해당 건을 제외하고 문자 발송됩니다."); - }else { - jr.setMessage(""); - } - - }else { //확장자가 xlsx - - OPCPackage opcPackage = OPCPackage.open(files.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - opcPackage.close(); - - int totRowDataCnt = 0; - for(int r=1; r 20000) { // - if(totRowDataCnt > 20000) { // - errMessage = "20000건 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setSuccess(false); - jr.setMessage(errMessage); - return jr; - } - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략) - XSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - // 행의 두번째 열(이름부터 받아오기) - XSSFCell cell = null; - boolean errSts = true; - - for(int j = 0 ; j < 6; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - //System.out.println("Cell 데이터가 없습니다."); - if(j == 1) { - if (sheet.getLastRowNum() == i) { - continue; - } - - //errPhoneCnt++; - //errSts = false; - break; - - } - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - boolean nmChk = getNameRepLenChk("name", cellValue); - - if(nmChk && errSts) { - jm.put("name", cellValue); - }else { - errNameCnt++; - errEtcLine += (i+1) + "행(이름) "; - errSts = false; - break; - } - - - } - if(j == 1) { - //전화번호 - if(cellValue.matches(phoneRegExp) && errSts) { - jm.put("phone", cellValue); - }else { - errPhoneCnt++; - errPhoneLine += (i+1) + "행 "; - errSts = false; - break; - } - } - if(j == 2) { - //치환1 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace1", cellValue); - }else { - errRep1Cnt++; - errEtcLine += (i+1) + "행(치환1) "; - errSts = false; - break; - } - - } - if(j == 3) { - //치환2 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace2", cellValue); - }else { - errRep2Cnt++; - errEtcLine += (i+1) + "행(치환2) "; - errSts = false; - break; - } - - } - if(j == 4) { - //치환3 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace3", cellValue); - }else { - errRep3Cnt++; - errEtcLine += (i+1) + "행(치환3) "; - errSts = false; - break; - } - - } - if(j == 5) { - //치환4 - boolean repChk = getNameRepLenChk("rep", cellValue); - - if(repChk && errSts) { - jm.put("replace4", cellValue); - }else { - errRep4Cnt++; - errEtcLine += (i+1) + "행(치환4) "; - errSts = false; - break; - } - - } - - } - - if(null != jm.get("phone") && errSts) { - json.add(jm); - } - - } - - int resultErrCnt = errPhoneCnt + errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt; - int resultErrCntExceptPhone = errNameCnt + errRep1Cnt + errRep2Cnt + errRep3Cnt + errRep4Cnt; - - jr.setData(json); - jr.setSuccess(true); - - if(resultErrCnt > 0) { - if (errPhoneCnt <= 10) { - if (StringUtils.isNotEmpty(errPhoneLine.trim())) { - errPhoneLine = "[" + errPhoneLine.trim() + "]"; - } - } - else { - errPhoneLine = ""; - } - if (resultErrCntExceptPhone <= 10) { - if (StringUtils.isNotEmpty(errEtcLine.trim())) { - errEtcLine = "[" + errEtcLine.trim() + "]"; - } - } - else { - errEtcLine = ""; - } - jr.setMessage("유효하지 않은 형식의 전화번호 "+ errPhoneCnt +"건" + errPhoneLine.trim() + "\n이름 : 20byte, [*1*]~[*4*] : 40byte 제한글자수 초과 "+ resultErrCntExceptPhone +"건" + errEtcLine.trim() + " 있습니다.\n해당 건을 제외하고 문자 발송됩니다."); - }else { - jr.setMessage(""); - } - } //xlsx 처리 끝 - - } - - } - - return jr; - - } catch (Exception e) { - // TODO: handle exception - System.out.println("+++++++++++++++++ sendExelFilePhoneNumAjax Controller Error !!! "+e); - jr.setSuccess(false); - jr.setMessage("엑셀 데이터에 오류가 있습니다. 엑셀 데이터를 확인해 주세요."); - return jr; - } - - } - - - /** - * 문자 발송 - TXT파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/msgdata/sendTxtFilePhoneNumAjax.do") - @ResponseBody - public Object sendTxtFilePhoneNumAjax(final MultipartHttpServletRequest multiRequest) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("TXT 파일만 업로드할 수 있습니다."); - - List files = (List) multiRequest.getFiles("file0"); - - if(!files.isEmpty()) { - - if (files.get(0).getSize() > 0 - || files.get(0).getOriginalFilename().split("[.]")[1].indexOf("txt") > -1) { - - // txt 파일 용량 3MB이상 시 10만건 이상으로 서버가 다운되는 증상 발생 - long fileSize = multiRequest.getFile("file0").getSize(); - - if(fileSize > 3374653) { - jr.setMessage("txt 파일은 3MB를 넘을수 없습니다."); - return jr; - } - - BufferedReader reader = new BufferedReader(new InputStreamReader(multiRequest.getFile("file0").getInputStream())); - - String line = null; - String[] splitedStr = null; - String[] tempStr = null; - int errPhoneCnt = 0; - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - List> json = new ArrayList>(); - - - //파일 읽어서 탭으로 구분해주기 - while ((line = reader.readLine()) != null) { - - HashMap jm = new HashMap<>(); - splitedStr = null; - tempStr = null; - - //txt 파일의 데이터가 탭 혹은 콤마로 구분되어 있는지 구분처리 - tempStr = line.split("\t"); - if(tempStr.length > 0) { - - splitedStr = tempStr; - - }else { - - splitedStr = line.split(","); - - } - - for (int i = 0; i < splitedStr.length; i++) { - - splitedStr[i] = splitedStr[i].trim(); - - if(i == 0) { - - //이름 - jm.put("name", splitedStr[i]); - } - - if(i == 1) { - - if(splitedStr[i].matches(phoneRegExp)) { - //휴대폰 번호 - jm.put("phone", splitedStr[i]); - }else { - errPhoneCnt++; - } - - } - - if(i == 2) { - //치환1 - jm.put("replace1", splitedStr[i]); - } - if(i == 3) { - //치환2 - jm.put("replace2", splitedStr[i]); - } - if(i == 4) { - //치환3 - jm.put("replace3", splitedStr[i]); - } - if(i == 5) { - //치환4 - jm.put("replace4", splitedStr[i]); - } - - } - - if(jm.get("phone") != null) { - - json.add(jm); - - } - - } // end while - jr.setData(json); - jr.setSuccess(true); - if(errPhoneCnt > 0) { - - jr.setMessage("올바르지 않은 휴대폰 번호가 "+ errPhoneCnt +" 건 있습니다."); - - }else { - - jr.setMessage(""); - - } - } - - } - - return jr; - } - - - /** - * 문자발송 주소록에 등록 기능 처리 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/excelCallAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/insertMsgAddrListAjax.do"}) - public ModelAndView insertMsgAddrListAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - AddrVO addrVO = new AddrVO(); - - if(userId.equals("")) { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "LoginFail"); - return modelAndView; - - }else { - - addrVO.setMberId(userId); - - } - - //주소록 데이터 갯수 불러오기 - 주소록은 총 10만개 까지만 등록이 가능함 - int addrBefAfterCnt = 0; - int addrBefCnt = addrService.selectAddrTotalCount(addrVO); - int addrNewCnt = mjonMsgVO.getCallToList().length; //신규 추가할 주소록 갯수 - int sumAddrCnt = addrBefCnt + addrNewCnt; //기존 + 신규 주소록 합산 - int dupliCnt = 0; // 중복 데이터 수 - - System.out.println("mjonMsgVO.getAddrGrpId() : " + mjonMsgVO.getAddrGrpId()); - System.out.println("mjonMsgVO.getAddrGrpNm() : " + mjonMsgVO.getAddrGrpNm()); - - // 신규 주소록 여부 체크 - if (mjonMsgVO.getAddrGrpId().equals("NEW")) { - AddrGroupVO addrGroupVO = new AddrGroupVO(); - addrGroupVO.setMberId(userId); - addrGroupVO.setAddrGrpNm(mjonMsgVO.getAddrGrpNm()); - // 정렬순서 - int nextOrderNumber = addrGroupService.selectMaxOrderNumber(addrGroupVO); - addrGroupVO.setGrpOrder(nextOrderNumber); - - addrGroupService.insertAddrGroup(addrGroupVO); - - // 신규 추가한 그룹아이디 - addrVO.setAddrGrpId(addrGroupVO.getAddrGrpId()); - addrVO.setBookmark("N"); - } - else { - // 그룹미지정, 자주보내는 번호 구분처리 - if("bookmark".equals (mjonMsgVO.getAddrGrpId())) { - // 자주보내는 번호 - addrVO.setAddrGrpId("0"); - addrVO.setBookmark("Y"); - } - else { - addrVO.setAddrGrpId(mjonMsgVO.getAddrGrpId()); - addrVO.setBookmark("N"); - } - } - - List addrDataInfo = new ArrayList(); - - // 2024.01.24 10만건 -> 50만건으로 증설 요청으로 인한 증설 - if(addrBefCnt < 500000) { // 기존 등록된 주소록이 10만건 미만이면 - - //받는사람 리스트 건수 체크해주기 - if(sumAddrCnt > 500000) { - - modelAndView.addObject("message", "주소록은 총 50만개까지만 등록이 가능합니다."); - modelAndView.addObject("result", "addrTotFail"); - return modelAndView; - - }else { - - //주소록 등록 VO 담아주기 - String[] addrNm = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] addrPhoneNo = mjonMsgVO.getCallToList(); //받는사람 연락처 리스트 - String[] addrInfo1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] addrInfo2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] addrInfo3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] addrInfo4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - for(int i=0; i < addrNewCnt; i++) { - - AddrVO tempAddrVO = new AddrVO(); - if(addrNm.length > 0 && addrNm[i].length() > 0) { - tempAddrVO.setAddrNm(addrNm[i].replaceAll("§", ",")); - } - - tempAddrVO.setAddrPhoneNo(addrPhoneNo[i]); - - if(addrInfo1[i].equals("-")) { - tempAddrVO.setAddrInfo1(null); - }else { - tempAddrVO.setAddrInfo1(addrInfo1[i].replaceAll("§", ",")); - } - - if(addrInfo2[i].equals("-")) { - tempAddrVO.setAddrInfo2(null); - }else { - tempAddrVO.setAddrInfo2(addrInfo2[i].replaceAll("§", ",")); - } - - if(addrInfo3[i].equals("-")) { - tempAddrVO.setAddrInfo3(null); - }else { - tempAddrVO.setAddrInfo3(addrInfo3[i].replaceAll("§", ",")); - } - - if(addrInfo4[i].equals("-")) { - tempAddrVO.setAddrInfo4(null); - }else { - tempAddrVO.setAddrInfo4(addrInfo4[i].replaceAll("§", ",")); - } - - tempAddrVO.setMberId(userId); - tempAddrVO.setFrstRegisterId(userId); - tempAddrVO.setAddrGrpId(addrVO.getAddrGrpId()); - tempAddrVO.setBookmark(addrVO.getBookmark()); - - AddrVO addrVO2 = new AddrVO(); - addrVO2.setMberId(userId); - addrVO2.setAddrGrpId(addrVO.getAddrGrpId()); - addrVO2.setBookmark(addrVO.getBookmark()); - addrVO2.setAddrPhoneNo(addrPhoneNo[i]); // 연락처 - int usedCnt = 0; - //int usedCnt = addrService.selectDuplAddrCnt(addrVO2); - if(usedCnt > 0) { - dupliCnt++; - } - else { - //주소록 리스트에 데이터 추가해 주기 - addrDataInfo.add(tempAddrVO); - } - - } - - //주소록에 데이터 추가해 주기 - int resultCnt = 0; - if(addrDataInfo.size() > 0) { - // 주소록 그룹별 중복 연락처 삭제 - addrVO.setMberId(userId); - - // 주소록 대량등록 By Temp 주소록 All - resultCnt = addrService.insertAddrByTempAddrAll(addrDataInfo, addrVO); - - addrBefAfterCnt = addrService.selectAddrTotalCount(addrVO); - - resultCnt = addrBefAfterCnt - addrBefCnt; - dupliCnt = addrNewCnt - resultCnt; - } - - modelAndView.addObject("message", "주소록 등록이 완료되었습니다."); - modelAndView.addObject("dupliCnt", dupliCnt); - modelAndView.addObject("resultCnt", resultCnt); - modelAndView.addObject("result", "success"); - - } - - }else { - - modelAndView.addObject("message", "주소록은 총 50만개까지만 등록이 가능합니다."); - modelAndView.addObject("result", "addrTotFail"); - - } - - return modelAndView; - - } - - /** - * 문자 통합검색 욕설 및 금지어 필터 체크 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectSwearWordFilterAjax.do"}) - public ModelAndView selectSwearWordFilterAjax( - MjonMsgDataVO mjonMsgDataVO, - HttpServletRequest req, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - /* - * 검색 키워드에서 한글, 영문, 숫자 이외의 특수기호를 입력하는 경우 오류 발생시킴 - * 해킹 시도에서 특수문자를 이용하는 경우가 있어서 추가하였음 - * 2023-04-24 우영두 - * - * */ - - String keyword = mjonMsgDataVO.getSearchKeyword(); - boolean searchKeyType = StringUtil.getSearchKeywordValidation(keyword); - - if(!searchKeyType) { - - modelAndView.addObject("status", "wordFail"); - modelAndView.addObject("message", "잘못된 검색어 입니다."); - return modelAndView; - } - - //욕설 및 금지 단어 리스트 불러오기 - int resultSwearCnt = letterService.selectSwearWordSearchCnt(mjonMsgDataVO.getSearchKeyword()); - - if(resultSwearCnt > 0) { - - modelAndView.addObject("status", "wordFail"); - modelAndView.addObject("message", "금지어가 포함된 검색어입니다."); - - }else { - - modelAndView.addObject("status", "success"); - - } - - return modelAndView; - } - - - - /** - * 엑셀 불러오기 레이어 팝업 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/excelCallAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/excelCallAjax.do"}) - public String excelCallAjax(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, CateCode cateCode, ModelMap model) throws Exception{ - - - return "web/msgdata/ExcelCallAjax"; - - } - - /* 테스트 발송 팝업 */ - @RequestMapping(value="/web/pop/testSendPop.do") - public String testSendPop(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, HttpServletRequest request, Model model) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - String msgpreview = request.getParameter("msgpreview"); - String mmsSubject = request.getParameter("mmsSubject"); - String callFrom = request.getParameter("callFrom"); - String eachPrice = request.getParameter("eachPrice"); - model.addAttribute("msgpreview", msgpreview); - model.addAttribute("mmsSubject", mmsSubject); - model.addAttribute("callFrom", callFrom); - model.addAttribute("eachPrice", eachPrice); - model.addAttribute("searchVO", searchVO); - - MberManageVO mberManageVO = new MberManageVO(); - - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - searchVO.setUserId(userId); - - } - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - String userPoint = mberManageVO.getUserPoint(); - - model.addAttribute("mberManageVO", mberManageVO); - model.addAttribute("userMoney", userMoney); - model.addAttribute("userPoint", userPoint); - - //0.이벤트 진행중이 회원 정보 불러오기. - //이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다. - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - model.addAttribute("eventMberInfo", eventMberInfo); - - return "/web/pop/testSendPop"; - } - - - - /* 테스트 발송 팝업 */ - @RequestMapping(value="/web/pop/testSmsSendPop.do") - public String testSmsSendPop(@ModelAttribute("searchVO") MjonMsgDataVO searchVO, HttpServletRequest request, Model model) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); - - String msgpreview = request.getParameter("msgpreview"); - String mmsSubject = request.getParameter("mmsSubject"); - String callFrom = request.getParameter("callFrom"); - String eachPrice = request.getParameter("eachPrice"); - model.addAttribute("msgpreview", msgpreview); - model.addAttribute("mmsSubject", mmsSubject); - model.addAttribute("callFrom", callFrom); - model.addAttribute("eachPrice", eachPrice); - model.addAttribute("searchVO", searchVO); - - MberManageVO mberManageVO = new MberManageVO(); - - if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { - - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - searchVO.setUserId(userId); - - } - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); - String userPoint = mberManageVO.getUserPoint(); - - model.addAttribute("mberManageVO", mberManageVO); - model.addAttribute("userMoney", userMoney); - model.addAttribute("userPoint", userPoint); - - //0.이벤트 진행중이 회원 정보 불러오기. - //이벤트 회원 정보 테이블에서 대상자의 정보를 불러온다. - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - model.addAttribute("eventMberInfo", eventMberInfo); - -// return "/web/pop/testSendPop"; - return "/web/pop/testSmsSendPop"; - } - - - /** - * 문자 발송 - 엑셀파일 불러오기 - * @param body - * @param uploadFile - * @param search - * @param result - * @param model - * @param request - * @return - * @throws Exception - */ - @RequestMapping(value = "/web/mjon/msgdata/excelCallProc.do") - @ResponseBody - public Object excelProc(@RequestBody(required = false) String body, - List uploadFile, - BindingResult result, Model model, - MultipartHttpServletRequest request) throws Exception { - - JsonResult jr = new JsonResult(); - jr.setSuccess(false); - jr.setMessage("엑셀 파일만 업로드할 수 있습니다."); - - //String sReturn = super.checkReferer(model, request, "", "", "/sms/mms.do", "/sms/sms.do"); - String sReturn = ""; - if (!StringUtil.isEmpty(sReturn)) { - jr.setMessage("올바르지 않은 요청입니다."); - return jr; - } - - //mime : application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - // application/vnd.ms-excel - if (uploadFile.get(0).getSize() > 0 - && (uploadFile.get(0).getContentType().indexOf("spreadsheetml") > -1) - || uploadFile.get(0).getContentType().indexOf("ms-excel") > -1 - || uploadFile.get(0).getOriginalFilename().split("[.]")[1].indexOf("xlsx") > -1 - || uploadFile.get(0).getOriginalFilename().split("[.]")[1].indexOf("xls") > -1) { - String col = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; - String[] cols = col.split(","); - //List> excel = ExcelUploadUtil.readExcel(request, super.getConfig().getUploadPathTemp(), cols, 2); - - //List> excel = null; - String UploadPathTemp = "/temp"; - //List> excel = ExcelUploadUtil.readExcel(request, super.getConfig().getUploadPathTemp(), cols, 2); - - //List> excel = ExcelUploadUtil.readExcel(request, UploadPathTemp, cols, 2); - - - OPCPackage opcPackage = OPCPackage.open(uploadFile.get(0).getInputStream()); - XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); - XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 - - String errMessage = ""; - String cellValue = ""; - if(sheet.getLastRowNum() > 5000) { // - errMessage = "5000줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."; - jr.setMessage(errMessage); - return jr; - } - - //String phoneRegExp = "^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$"; - String phoneRegExp = "^(050[2345678]{1}|01[016789]{1})-?[0-9]{3,4}-?[0-9]{4}$"; - - List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO(); - for(int i=1; i< sheet.getLastRowNum() + 1; i++){ //먼저 밸리데이션 체크(1줄은 생략) - XSSFRow row = sheet.getRow(i); //열읽기 - if(null == row) { - continue; - } - - HashMap jm = new HashMap<>(); - jm.put("group", ""); //그룹 빈칸세팅 - // 행의 두번째 열(이름부터 받아오기) - XSSFCell cell = null; - for(int j = 0 ; j < 6; j++){ //행읽기(6행까지나 2행까지만 필요) - cellValue = ""; - cell = row.getCell(j); //이름/핸드폰/집사무실/메모1/메모2/메모3 - if(null == cell || "".equals(cell.toString().trim())) { //셀에 값이 없으면 - - } - if(null != cell){ - switch(cell.getCellType()){ //숫자타임을 문자로 변환 - case Cell.CELL_TYPE_NUMERIC: - cell.setCellType(Cell.CELL_TYPE_STRING); - } - cellValue = StringUtil.getString(cell.getStringCellValue().trim()) ; - } - - if(j == 0) { - //이름 - jm.put("name", cellValue); - } - if(j == 1) { - //전화번호 - if(cellValue.matches(phoneRegExp)) { - jm.put("receive", cellValue); - } - } - if(j == 2) { - //집사무실 - jm.put("item2", cellValue); - } - if(j == 3) { - //메모1 - jm.put("item3", cellValue); - } - if(j == 4) { - //메모2 - jm.put("item4", cellValue); - } - if(j == 5) { - //메모3 - jm.put("item5", cellValue); - } - } - if(null != jm.get("receive")) { - json.add(jm); - } - - } - - //json 형식에 맞게 변환 - //[{phone: '전화번호', name: '주소록이름', group: '주소록 그룹 이름', item2: '집/사무실', item3: '메모1', item4: '메모2', item5: '메모3'}, {...}] - /*List> json = new ArrayList>(); - PhoneVO pVO = new PhoneVO();*/ - - //TODO : 데이터 유효성 판단? - /*for (HashMap map : excel) { - HashMap jm = new HashMap<>(); - //핸드폰 - pVO.setNo(StringUtil.getString(map.get(cols[1])).trim()); - if (StringUtil.isEmpty(pVO.getNo())) - continue; - jm.put("receive", pVO.getNo()); - - //이름 - jm.put("name", StringUtil.getString(map.get(cols[0])).trim()); - //그룹 - jm.put("group", ""); - - //항목2(집/사무실) - 주의 : 옵션 항목이므로 전화번호가 없어도 스킵하면 안됨 - pVO.setNo(StringUtil.getString(map.get(cols[2])).trim()); - jm.put("item2", pVO.getNo()); - //항목3 - jm.put("item3", StringUtil.getString(map.get(cols[3])).trim()); - //항목4 - jm.put("item4", StringUtil.getString(map.get(cols[4])).trim()); - //항목5 - jm.put("item5", StringUtil.getString(map.get(cols[5])).trim()); - - json.add(jm); - }*/ - - jr.setData(json); - jr.setSuccess(true); - jr.setMessage(""); - } - return jr; - } - - - /** - * 발송관리 엑셀다운로드 기능 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/recieveCallToListExcelDownAjax.do"}) - public void recieveCallToListExcelDownAjax(MjonMsgVO mjonMsgVO, - @RequestParam Map commandMap, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(!userId.equals("")) { - - mjonMsgVO.setUserId(userId); - - }else { - - /*modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "fail"); - - return modelAndView;*/ - - } - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - String fileName ="recieveAddr"; // 저장 파일명 - String sheetTitle = "recieveAddr" ; // 셀 제목 - Sheet sheet = wb.createSheet(sheetTitle); - Cell cell = null; - Row row = null; - - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - - // 정렬 - style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬 - style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬 - - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - - String type = ""; - String fCnt = ""; - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - - try{ - - {//화면 리스트 - - row = sheet.createRow(0); - - //sheet.setColumnWidth(0, 3000); // 번호 - sheet.setColumnWidth(0, 10000); // 휴대폰 번호 - sheet.setColumnWidth(1, 10000); // 이름 - sheet.setColumnWidth(2, 10000); // 치환문자1 - sheet.setColumnWidth(3, 10000); // 치환문자2 - sheet.setColumnWidth(4, 10000); // 치환문자3 - sheet.setColumnWidth(5, 10000); // 치환문자4 - - /*cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style);*/ - - cell = row.createCell(0); - cell.setCellValue("휴대폰"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("이름"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("[*1*]"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("[*2*]"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("[*3*]"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("[*4*]"); - cell.setCellStyle(style); - - } - - int listCnt = mjonMsgVO.getCallToList().length; - - String[] phoneList = mjonMsgVO.getCallToList(); - String[] nameList = mjonMsgVO.getNameList(); - String[] rep1List = mjonMsgVO.getRep1List(); - String[] rep2List = mjonMsgVO.getRep2List(); - String[] rep3List = mjonMsgVO.getRep3List(); - String[] rep4List = mjonMsgVO.getRep4List(); - - for(int i=0; i < listCnt; i++) { - - int excelLen = 0; - row = sheet.createRow(i+1); - excelLen = 6; - - for(int j=0 ; j < excelLen ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - - //if(j==0) cell.setCellValue(i+1); //번호 - if(j==0) cell.setCellValue(phoneList[i]); //휴대폰 번호 - if(j==1) cell.setCellValue(nameList[i]); //이름 - if(j==2) { - - String rep1 = rep1List[i]; - if(!rep1.equals("")) { - - cell.setCellValue(rep1.replaceAll("§", ",")); //치환문자1 - - } - - } - if(j==3) { - - String rep2 = rep2List[i]; - if(!rep2.equals("")) { - - cell.setCellValue(rep2.replaceAll("§", ",")); //치환문자2 - - } - - } - if(j==4) { - - String rep3 = rep3List[i]; - if(!rep3.equals("")) { - - cell.setCellValue(rep3.replaceAll("§", ",")); //치환문자3 - - } - - } - if(j==5) { - - String rep4 = rep4List[i]; - if(!rep4.equals("")) { - - cell.setCellValue(rep4.replaceAll("§", ",")); //치환문자4 - - } - - } - - } - } - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - - - } - - - /** - * 베스트 문자샘플 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgdata/selectBestMsgDataView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectBestMsgDataView.do"}) - public String selectBestMsgDataView(@ModelAttribute("searchVO") LetterVO searchVO, - HttpServletRequest request, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception{ - - //문자온 소개 태그 조회 - searchVO.setTagDiv("2"); - List mainTagList = letterService.selectMainTagWebList(searchVO); - - model.addAttribute("mainTagList", mainTagList); - - //베스트샘플 키워드 조회 - searchVO.setTagDiv("1"); - if("".equals(searchVO.getBestTagType()) || searchVO.getBestTagType() == null) { - searchVO.setBestTagType("S"); - } - List bestMsgDataList = letterService.selectMainTagWebList(searchVO); - //첫 메뉴 이동시 키워드가 없어서, 단문/장문/그림 탭 이동 시 키워드를 파라미터로 넘겨주기 위한 과정 - LetterVO frsLetterVO = letterService.selectFrsKeyword(searchVO); - if("".equals(searchVO.getBestSearchKeyword()) || searchVO.getBestSearchKeyword() == null){ - searchVO.setBestSearchKeyword(frsLetterVO.getTagNm().replace("문자", "")); - } - model.addAttribute("bestMsgDataList", bestMsgDataList); - - return "web/msgdata/MsgDataBestView"; - } - - /** - * 베스트 문자샘플 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectBestMsgDataListAjax.do"}) - public String selectBestMsgDataListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit((int)letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - String letterType = letterVO.getLetterType(); - - // 문자 종류 정보가 없으면 단문문자로 셋팅 - if(letterType == null || letterType.equals("")) { - - letterVO.setLetterType("S"); - - } - //키워드에 문자 제거 - letterVO.setBestSearchKeyword(letterVO.getBestSearchKeyword().replace("문자", "")); - // 장/단문 문자 리스트 - List resultLetterList = mjonMsgDataService.selectBestMsgDataList(letterVO); - model.addAttribute("resultLetterList", resultLetterList); - paginationInfo.setTotalRecordCount( resultLetterList.size()> 0 ? ((Long)((EgovMap)resultLetterList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - return "web/msgdata/BestMsgDataListAjax"; - } - - /** - * 베스트 그림 문자샘플 리스트 화면 불러오기 - * - * @param letterVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectBestPhotoMsgDataListAjax.do"}) - public String selectBestPhotoMsgDataListAjax( - @ModelAttribute("searchVO") LetterVO letterVO, - ModelMap model, - RedirectAttributes redirectAttributes) throws Exception { - - //그림 문자 리스트 불러오기 - //LetterVO letterVO = new LetterVO(); - if(letterVO.getPageUnit() != 10) { - letterVO.setPageUnit((int)letterVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(letterVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(letterVO.getPageUnit()); - paginationInfo.setPageSize(letterVO.getPageSize()); - - letterVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - letterVO.setLastIndex(paginationInfo.getLastRecordIndex()); - letterVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - letterVO.setLetterType("P"); - - //키워드에 문자 제거 - letterVO.setBestSearchKeyword(letterVO.getBestSearchKeyword().replace("문자", "")); - // 장/단문 문자 리스트 - List resultLetterList = mjonMsgDataService.selectBestPhotoMsgDataList(letterVO); - model.addAttribute("resultLetterList", resultLetterList); - paginationInfo.setTotalRecordCount( resultLetterList.size()> 0 ? ((Long)((EgovMap)resultLetterList.get(0)).get("totCnt")).intValue() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("letterVO", letterVO); - - return "web/msgdata/BestPhotoMsgDataListAjax"; - } - - - /** - * 문자발송 사용자 첨부 이미지 리사이즈 처리 Ajax - * @param mjonMsgDataVO - * @param model - * @return modelAndView - * @throws Exception - */ - @RequestMapping(value = {"/web/mjon/msgdata/insertAtchImageResizeAjax.do"}) - public ModelAndView insertAtchImageResizeAjax(final MultipartHttpServletRequest multiRequest - , MjonMsgDataVO mjonMsgDataVO - , RedirectAttributes redirectAttributes - , HttpServletRequest request) throws Exception { - - //LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - String atchFileId = ""; - String isThumbFile = ""; - String imagePath = ""; - final Map files = multiRequest.getFileMap(); - String KeyStr = "RESIZEIMG_"; - - - Date now = new Date(); - SimpleDateFormat formatDate = new SimpleDateFormat("yyyyMMdd"); - String fdlDate = formatDate.format(now); - - - //로컬 과 개발서버의 이미지 저장 경로 분기처리 - if(request.getServerName().equals("localhost")) { - - imagePath = fileSaveDir+ "/file/MMS/" + fdlDate; - - }else { - - imagePath = fileSaveDir+"/file/MMS/" + fdlDate; - - } - - - if (!files.isEmpty()) { - List result = fileUtil.parseImageFileResizeInf(files, KeyStr, 0, atchFileId, imagePath, isThumbFile); - atchFileId = fileMngService.insertFileInfs(result); - - FileVO tmpVO = new FileVO(); - tmpVO.setAtchFileId(atchFileId); //insert 한 파일의 정보를 가지고 옴 - - - FileVO fileVO = new FileVO(); - fileVO = fileMngService.selectFileInf(tmpVO); - - //저장한 파일의 경로 + 파일명 - String filefullPath = fileVO.getFileStreCours() +"/"+ fileVO.getStreFileNm() + "." + fileVO.getFileExtsn(); - - //문자전송 내용 입력 화면 및 미리보기에 보여주기 위한 이미지 경로 생성 - String imgSrc ="/cmm/fms/getImage2.do?atchFileId="+ atchFileId +"&fileSn=0"; - - modelAndView.addObject("atchFileId", atchFileId); - modelAndView.addObject("filefullPath", filefullPath); - modelAndView.addObject("fileName", fileVO.getStreFileNm()); - modelAndView.addObject("imgSrc", imgSrc); - - modelAndView.addObject("result", "success"); - modelAndView.addObject("message", "이미지 리사이즈 업로드가 완료되었습니다."); - } - - }catch(Exception e) { - logger.error(e.getMessage(), e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - } - - return modelAndView; - } - - // 치환문자 바이트수 체크 - public boolean getNameRepLenChk(String type, String value) { - String charset = "euc-kr"; - boolean rtnValue = true; - - try { - if(type.equals("name")) { - String tmpNm = value; - int nmLen = tmpNm.getBytes(charset).length; - if(nmLen >= 20) { - rtnValue = false; - } - }else if(type.equals("rep")) { - String tmpRep = value; - int repLen = tmpRep.getBytes(charset).length; - if(repLen >= 40) { - rtnValue = false; - } - } - } - catch(Exception e) { - rtnValue = false; - } - - return rtnValue; - } - - @RequestMapping(value= {"/web/mjon/msgdata/selectMjMsgGroupInfoByResendAjax.do"}) - public ModelAndView selectMjMsgGroupInfoByResendAjax( - MjonMsgDataVO mjonMsgDataVO, - HttpServletRequest request, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - List resultMsgAddPhotoInfo = null; - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - try { - if(userId.equals("")) { - isSuccess = false; - msg = "로그인이 필요합니다."; - } - else { - mjonMsgDataVO.setUserId(userId); - mjonMsgDataVO.setMsgGroupId(mjonMsgDataVO.getMsgResendAllGroupId()); - mjonMsgDataVO = mjonMsgDataService.selectMjMsgGroupInfoByResend(mjonMsgDataVO); - System.out.println("test!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - if (mjonMsgDataVO != null) { - String[] atchFiles = mjonMsgDataVO.getAtchFiles().split("\\^"); - if (atchFiles.length >= 1) { - mjonMsgDataVO.setAtchFileId1(atchFiles[0]); - } - if (atchFiles.length >= 2) { - mjonMsgDataVO.setAtchFileId2(atchFiles[1]); - } - if (atchFiles.length >= 3) { - mjonMsgDataVO.setAtchFileId3(atchFiles[2]); - } - } - - //문자함 리스트의 첨부이미지 정보 불러오기 - resultMsgAddPhotoInfo = mjonMsgDataService.selectMsgAddPhotoInfo(mjonMsgDataVO); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - modelAndView.addObject("resultMsgInfo", mjonMsgDataVO); - modelAndView.addObject("resultMsgAddPhotoInfo", resultMsgAddPhotoInfo); - - return modelAndView; - } - - @RequestMapping(value= {"/web/mjon/msgdata/selectMjMsgListByResendAjax.do"}) - public ModelAndView selectMjMsgListByResendAjax( - MjonMsgDataVO mjonMsgDataVO, - HttpServletRequest request, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - List resultList = null; - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - try { - if(userId.equals("")) { - isSuccess = false; - msg = "로그인이 필요합니다."; - } - else { - mjonMsgDataVO.setUserId(userId); - mjonMsgDataVO.setMsgGroupId(mjonMsgDataVO.getMsgResendAllGroupId()); - resultList = mjonMsgDataService.selectMjMsgListByResend(mjonMsgDataVO); - } - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - modelAndView.addObject("resultList", resultList); - - return modelAndView; - } - - /** - * 문자발송 리스트 화면 불러오기 - * - * @param MjonMsgDataVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgdata/selectMjMsgSentListAjax.do"}) - public String selectMjMsgSentListAjax( - @ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, - ModelMap model) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - List mjMsgSentList = null; - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - - if(loginVO != null) { - mjonMsgSentVO.setStateType("all"); - mjonMsgSentVO.setListType("groupList"); - mjonMsgSentVO.setUserId(userId); - - // 검색 리스트 불러오기 - if(mjonMsgSentVO.getPageUnit() != 10) { - mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(mjonMsgSentVO.getSearchSortOrd().equals("")) { - mjonMsgSentVO.setSearchSortOrd("desc"); - mjonMsgSentVO.setSearchSortCnd("regdate"); - } - - paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); - - mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - mjMsgSentList = mjonMsgSentService.selectAllMsgSentSimpleList(mjonMsgSentVO); - - paginationInfo.setTotalRecordCount( mjMsgSentList.size()> 0 ? (Integer.parseInt((mjMsgSentList.get(0)).getTotMsgCnt())) : 0); - } - - model.addAttribute("mjMsgSentList", mjMsgSentList); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - return "web/msgdata/MsgSentListAjax"; - } - -} diff --git a/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java b/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java deleted file mode 100644 index c33fe41..0000000 --- a/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java +++ /dev/null @@ -1,1130 +0,0 @@ -package itn.let.mjo.msgsent.web; - -import java.io.OutputStream; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.lang3.StringUtils; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.util.DateUtils; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.kakao.user.sent.service.KakaoSentService; -import itn.let.mail.service.StatusResponse; -import itn.let.mjo.addr.service.AddrGroupService; -import itn.let.mjo.addr.service.AddrGroupVO; -import itn.let.mjo.addr.service.AddrService; -import itn.let.mjo.addr.service.AddrVO; -import itn.let.mjo.apikey.service.ApiKeyMngService; -import itn.let.mjo.apikey.service.ApiKeyVO; -import itn.let.mjo.msgsent.service.MjonMsgDetailSentVO; -import itn.let.mjo.msgsent.service.MjonMsgSentCntVO; -import itn.let.mjo.msgsent.service.MjonMsgSentService; -import itn.let.mjo.msgsent.service.MjonMsgSentVO; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@Controller -public class MjonMsgSentController { - - @Resource(name = "MjonMsgSentService") - private MjonMsgSentService mjonMsgSentService; - - @Resource (name = "AddrGroupService") - private AddrGroupService addrGroupService; - - @Resource (name = "AddrService") - private AddrService addrService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - @Resource(name = "KakaoSentService") - private KakaoSentService kakaoSentService; - - //api key 정보 - @Resource(name = "apiKeyMngService") - private ApiKeyMngService apiKeyMngService; - - -private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentController.class); - - /** - * 발송관리 화면 - * @param searchVO - * @param model - * @return "/web/mjon/msgtxt/selectMsgTxtView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentView.do"}) - public String selectMsgSentView(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, - RedirectAttributes redirectAttributes, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(loginVO == null) { - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - -// mjonMsgSentVO.setUserId(userId); -// ApiKeyVO apiKeyVO = new ApiKeyVO(); -// apiKeyVO.setMberId(userId); -// model.addAttribute("appMgmt", apiKeyMngService.selectMberApiKeyChk(apiKeyVO) > 0 ? true : false); - - - - - // 검색 리스트 불러오기 - if(mjonMsgSentVO.getPageUnit() != 10) { - mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(mjonMsgSentVO.getSearchSortOrd().equals("")) { - - mjonMsgSentVO.setSearchSortOrd("desc"); - - } - - //기본 등록일자 정렬 - if(mjonMsgSentVO.getSearchSortCnd().equals("")) { - - mjonMsgSentVO.setSearchSortCnd("regdate"); - - } - -// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); -// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); -// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); -// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); -// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); - String startDate = mjonMsgSentVO.getSearchStartDate(); - String endDate = mjonMsgSentVO.getSearchEndDate(); - - if(StringUtils.isEmpty(startDate) - && StringUtils.isEmpty(endDate)) - { - - mjonMsgSentVO.setSearchStartDate(DateUtils.getDateMonthsAgo(3)); - mjonMsgSentVO.setSearchEndDate(DateUtils.getCurrentDate()); - - } - - log.info("pageIndex :: [{}]", mjonMsgSentVO.getPageIndex()); - model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); - model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); - model.addAttribute("siteId", mjonMsgSentVO.getSiteId()); - - return "web/msgsent/MsgSentView"; - } - - - /** - * 발송관리 화면 - * @param searchVO - * @param model/web/user/login/login.do - * @return "/web/mjon/msgtxt/selectMsgTxtView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/msgSentDetailView.do"}) - public String selectMsgSentDetailView(@ModelAttribute("searchVO") MjonMsgDetailSentVO mjonMsgDetailSentVO - , ModelMap model) throws Exception{ - - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(loginVO == null) { - return "redirect:/web/user/login/login.do"; - } - - Map resultMap = mjonMsgSentService.selectAllMsgSentDetailView(mjonMsgDetailSentVO); - model.addAttribute("result", resultMap.get("result")); - - return "web/msgsent/MsgSentDetailView"; - } - - // 팩스 금일 발송통계 갱신 - @RequestMapping(value= {"/web/mjon/msgsent/findByMsgDetailListAjax.do"}) - public ResponseEntity findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception { - - - List resultList = mjonMsgSentService.findByMsgDetailListAjax(mjonMsgDetailSentVO); - - - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", resultList)); - } - - /** - * 마이페이지 - 이용내역 - ajax - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserListAjax.do" - * @throws Exception - */ - @RequestMapping(value="/web/msgsent/subcontent/MsgSentView_HA_allSentAjax.do") - public String mberInfo_cash_pointAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - - mjonMsgSentVO.setUserId(userId); - - log.info("+ mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate()); - log.info("+ mjonMsgSentVO.getSearchEndDate() :: [{}]", mjonMsgSentVO.getSearchEndDate()); - //전체 발송 건수 통계 불러오기 - mjonMsgSentVO.setMsgType(""); - long startTime = System.nanoTime(); // 시작 시간 측정 - List totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCntMix(mjonMsgSentVO); - - long endTime = System.nanoTime(); // 종료 시간 측정 - double executionTimeInSeconds = (endTime - startTime) / 1_000_000_000.0; - System.out.println("Execution time: " + executionTimeInSeconds + " seconds"); - - - // H:홈페이지, A:API 로 sms, lms, mms 나누는 영역 - List H_smsMsgCnt = new ArrayList(); - List H_lmsMsgCnt = new ArrayList(); - List H_mmsMsgCnt = new ArrayList(); - - totalMsgCnt.forEach(t->{ - if (Integer.parseInt(t.getFilePath1())>0) { - H_smsMsgCnt.add(t); - } else if (Integer.parseInt(t.getFilePath2())>0) { - H_lmsMsgCnt.add(t); - } else if (Integer.parseInt(t.getFilePath3())>0) { - H_mmsMsgCnt.add(t); - } - }); - - //* 홈페이지에서 보낸 데이터 LIST - //* SEND_KIND = "H" - - // 전체 영역 - log.info("all"); - model.addAttribute("H_allSentCntVO", this.getResultCntProc(totalMsgCnt)); - // 전체 단문(SMS) - log.info("sms"); - model.addAttribute("H_smsSentCntVO", this.getResultCntProc(H_smsMsgCnt)); - // 전체 장문(LMS) - log.info("lms"); - model.addAttribute("H_lmsSentCntVO", this.getResultCntProc(H_lmsMsgCnt)); - // 전체 그림(MMS) - log.info("mms"); - model.addAttribute("H_mmsSentCntVO", this.getResultCntProc(H_mmsMsgCnt)); - - - - return "/web/msgsent/subcontent/MsgSentView_HA_allSentAjax"; - } - - /** - * @methodName : getResultCntProc - * @author : 이호영 - * @date : 2023.07.26 - * @description : MsgSentView.jsp에서 JSTL로 계산하는 것을 JAVA로 분리 - * @param msgCnt - * @param smsMsgCnt - * @param lmsMsgCnt - * @param mmsMsgCnt - * @return - */ - private MjonMsgSentCntVO getResultCntProc(List msgCnt) { -// MjonMsgSentCntVO mjonSentCntVO = new MjonMsgSentCntVO(); - MjonMsgSentCntVO cntVO = new MjonMsgSentCntVO(); - - - /* - * 전체 통계 - * */ - // 전체 대기 갯수 - cntVO.setWaitCnt(msgCnt.stream() - .filter(f->"W".equals(f.getMsgResultSts())) - .mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); - log.info(" :: cntVO.getWaitCnt() :: [{}]", cntVO.getWaitCnt()); - // 전체 성공 갯수 - cntVO.setSuccCnt(msgCnt.stream() - .filter(f->"S".equals(f.getMsgResultSts())) - .mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); - log.info(" :: cntVO.getSuccCnt() :: [{}]", cntVO.getSuccCnt()); - // 전체 실패 갯수 - cntVO.setFailCnt(msgCnt.stream() - .filter(f->"F".equals(f.getMsgResultSts())) - .mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); - log.info(" :: cntVO.getFailCnt() :: [{}]", cntVO.getFailCnt()); - - // 전체 갯수 구하기 - cntVO.setTotCnt(cntVO.getWaitCnt() + cntVO.getSuccCnt() + cntVO.getFailCnt()); - - - return cntVO; - } - - /** - * 발송관리 탭 리스트 화면 - * @param searchVO - * @param model - * @return "/web/mjon/reservmsg/selectReservMsgListViewAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentListViewAjax.do"}) - public String selectMsgSentListViewAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ - - String pageUrl = ""; - try { - - - log.info(" ListView pageIndex :: [{}]", mjonMsgSentVO.getPageIndex()); - log.info(" ListView pageUnit :: [{}]", mjonMsgSentVO.getPageUnit()); - - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgSentVO.setUserId(userId); - - // 검색 리스트 불러오기 -// if(mjonMsgSentVO.getPageUnit() != 10) { -// mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); -// } - - //기본 내림차순 정렬 - if(StringUtils.isEmpty(mjonMsgSentVO.getSearchSortOrd())) { - - mjonMsgSentVO.setSearchSortOrd("desc"); - mjonMsgSentVO.setSearchSortCnd("B.REQ_DATE"); - } - - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); - - mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if(!DateUtils.dateChkAndValueChk(mjonMsgSentVO.getSearchStartDate(),mjonMsgSentVO.getSearchEndDate(), 3 )) { - mjonMsgSentVO.setSearchStartDate(DateUtils.getDateMonthsAgo(3)); - mjonMsgSentVO.setSearchEndDate(DateUtils.getCurrentDate()); - }; - - model.addAttribute("searchStartDate", mjonMsgSentVO.getSearchStartDate()); - model.addAttribute("searchEndDate", mjonMsgSentVO.getSearchEndDate()); - - //전체 발송 리스트 불러오기 - Map resultMap = mjonMsgSentService.selectAllMsgSentList_advc(mjonMsgSentVO); - - - model.addAttribute("resultAllSentList", resultMap.get("resultList")); - - - paginationInfo.setTotalRecordCount((Integer)resultMap.get("totalCnt")); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); - - String stateType = mjonMsgSentVO.getStateType(); - - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - } - - return "web/msgsent/MsgSentAllListAjax"; - } - - @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentListViewAjax_backup.do"}) - public String selectMsgSentListViewAjax_backup(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ - - - - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgSentVO.setUserId(userId); - - // 검색 리스트 불러오기 - if(mjonMsgSentVO.getPageUnit() != 10) { - mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(mjonMsgSentVO.getSearchSortOrd().equals("")) { - - mjonMsgSentVO.setSearchSortOrd("desc"); - mjonMsgSentVO.setSearchSortCnd("regdate"); - } - - if(mjonMsgSentVO.getListType().equals("")) { - - mjonMsgSentVO.setListType("groupList"); - - } - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); - - mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - - - if(!DateUtils.dateChkAndValueChk(mjonMsgSentVO.getStartDate(),mjonMsgSentVO.getEndDate(), 3 )) { - mjonMsgSentVO.setStartDate(DateUtils.getDateMonthsAgo(3)); - mjonMsgSentVO.setEndDate(DateUtils.getCurrentDate()); - }; - - model.addAttribute("startDate", mjonMsgSentVO.getStartDate()); - model.addAttribute("endDate", mjonMsgSentVO.getEndDate()); - - //전체 발송 리스트 불러오기 - List resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); - - - model.addAttribute("resultAllSentList", resultAllSentList); - model.addAttribute("resultAllSentCnt", resultAllSentList.size()); - - model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - //발송 결과 성공 실패 건수 리스트 불러오기 - List resultMsgSucFailList = new ArrayList(); - - if(resultAllSentList.size() > 0) { - System.out.println("=====resultMsgSucFailList====="); - resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO); - System.out.println("//=====resultMsgSucFailList====="); - } - model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); - - model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); - - String stateType = mjonMsgSentVO.getStateType(); - // String pageUrl = "web/msgsent/MsgSentAllListAjax"; - String pageUrl = "web/msgsent/MsgSentAllListAjax"; - - if(stateType.equals("ready")) { - - pageUrl = "web/msgsent/MsgSentReadyListAjax"; - - }else if(stateType.equals("complete")) { - - pageUrl = "web/msgsent/MsgSentCompleteListAjax"; - - }else if(stateType.equals("fail")) { - - pageUrl = "web/msgsent/MsgSentFailListAjax"; - - } - - log.info(" :: pageUrl [{}]", pageUrl); - return pageUrl; - } - - /** - * 발송관리 건수별 상세 리스트 조회(전송건별) - * @param searchVO - * @param model - * @return "/web/mjon/msgsent/selectMsgSFDetailListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSFDetailListAjax.do"}) - public String selectMsgSFDetailListAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgSentVO.setUserId(userId); - - // 검색 리스트 불러오기 - if(mjonMsgSentVO.getPageUnit() != 10) { - mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(mjonMsgSentVO.getSearchSortOrd().equals("")) { - - mjonMsgSentVO.setSearchSortOrd("desc"); - mjonMsgSentVO.setSearchSortCnd("regdate"); - } - - mjonMsgSentVO.setListType("privateList"); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); - - mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - List resultAllSentList = mjonMsgSentService.selectAllMsgSentDetailList(mjonMsgSentVO); - model.addAttribute("resultAllSentList", resultAllSentList); - model.addAttribute("resultAllSentCnt", resultAllSentList.size()); - - model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - // JSPark 2023.02.28 => 위 쿼리에 문자결과 항목추가로 아래 데이터 불필요 - //발송 결과 성공 실패 건수 리스트 불러오기 - //List resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSFDetailList(mjonMsgSentVO); - //model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); - - model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); - - return "web/msgsent/MsgSentSFDetailListAjax"; - } - - - /** - * 발송관리 문자 상세보기 내용 - * @param searchVO - * @param model - * @return "/web/mjon/msgsent/selectMsgSentDetailDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentDetailDataAjax.do"}) - public String selectMsgSentDetailDataAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgSentVO.setUserId(userId); - - //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) - MjonMsgSentVO resultMsgDetail = mjonMsgSentService.selectMsgSentDetailDataAjax(mjonMsgSentVO); - - if(resultMsgDetail.getFileCnt() != "0") { - if(resultMsgDetail.getFilePath1() != null) { - String filePathId1 = resultMsgDetail.getFilePath1().substring(resultMsgDetail.getFilePath1().lastIndexOf("/")+1); - int idx = filePathId1.lastIndexOf("."); - String fileId = filePathId1.substring(0, idx); - MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); - model.addAttribute("atchFileId1", info.getAtchFileId()); - model.addAttribute("fileSn1", info.getFileSn()); - } - - if(resultMsgDetail.getFilePath2() != null) { - String filePathId2 = resultMsgDetail.getFilePath2().substring(resultMsgDetail.getFilePath2().lastIndexOf("/")+1); - int idx = filePathId2.lastIndexOf("."); - String fileId = filePathId2.substring(0, idx); - MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); - model.addAttribute("atchFileId2", info.getAtchFileId()); - model.addAttribute("fileSn2", info.getFileSn()); - } - - if(resultMsgDetail.getFilePath3() != null) { - String filePathId3 = resultMsgDetail.getFilePath3().substring(resultMsgDetail.getFilePath3().lastIndexOf("/")+1); - int idx = filePathId3.lastIndexOf("."); - String fileId = filePathId3.substring(0, idx); - MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); - model.addAttribute("atchFileId3", info.getAtchFileId()); - model.addAttribute("fileSn3", info.getFileSn()); - } - } - - - model.addAttribute("resultMsgDetail", resultMsgDetail); - - return "web/msgsent/MsgSentDetailPopAjax"; - } - - - - - /** - * 발송관리 문자 상세보기 내용 - * @param searchVO - * @param model - * @return "/web/mjon/msgsent/selectMsgSentDetailDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentDetailData2Ajax.do"}) - public String selectMsgSentDetailData2Ajax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgSentVO.setUserId(userId); - - //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) - MjonMsgSentVO resultMsgDetail = mjonMsgSentService.selectMsgSentDetailDataAjax2(mjonMsgSentVO); - - if(resultMsgDetail.getFileCnt() != "0") { - if(resultMsgDetail.getFilePath1() != null) { - String filePathId1 = resultMsgDetail.getFilePath1().substring(resultMsgDetail.getFilePath1().lastIndexOf("/")+1); - int idx = filePathId1.lastIndexOf("."); - String fileId = filePathId1.substring(0, idx); - MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); - model.addAttribute("atchFileId1", info.getAtchFileId()); - model.addAttribute("fileSn1", info.getFileSn()); - } - - if(resultMsgDetail.getFilePath2() != null) { - String filePathId2 = resultMsgDetail.getFilePath2().substring(resultMsgDetail.getFilePath2().lastIndexOf("/")+1); - int idx = filePathId2.lastIndexOf("."); - String fileId = filePathId2.substring(0, idx); - MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); - model.addAttribute("atchFileId2", info.getAtchFileId()); - model.addAttribute("fileSn2", info.getFileSn()); - } - - if(resultMsgDetail.getFilePath3() != null) { - String filePathId3 = resultMsgDetail.getFilePath3().substring(resultMsgDetail.getFilePath3().lastIndexOf("/")+1); - int idx = filePathId3.lastIndexOf("."); - String fileId = filePathId3.substring(0, idx); - MjonMsgSentVO info = mjonMsgSentService.selectFileInfo(fileId); - model.addAttribute("atchFileId3", info.getAtchFileId()); - model.addAttribute("fileSn3", info.getFileSn()); - } - } - - - model.addAttribute("resultMsgDetail", resultMsgDetail); - - return "web/msgsent/MsgSentDetailPop2Ajax"; - } - - /** - * 발송 관리 문자 선택 삭제 기능 - * @param searchVO - * @param model - * @return "web/mjon/msgsent/deleteMsgSentDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/deleteMsgSentDataAjax.do"}) - public String deleteMsgSentDataAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgSentVO.setUserId(userId); - - //선택 문자 삭제 처리 - int resultCnt = mjonMsgSentService.deleteMsgSentDataAjax(mjonMsgSentVO); - - /* - * - * 리스트 화면 불러오기 - * - * */ - - // 검색 리스트 불러오기 - if(mjonMsgSentVO.getPageUnit() != 10) { - mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(mjonMsgSentVO.getSearchSortOrd().equals("")) { - - mjonMsgSentVO.setSearchSortOrd("desc"); - - } - - //기본 등록일자 정렬 - if(mjonMsgSentVO.getSearchSortCnd().equals("")) { - - mjonMsgSentVO.setSearchSortCnd("regdate"); - - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); - - mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - List resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); - model.addAttribute("resultAllSentList", resultAllSentList); - model.addAttribute("resultAllSentCnt", resultAllSentList.size()); - - model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); - - String stateType = mjonMsgSentVO.getStateType(); - String pageUrl = "web/msgsent/MsgSentAllListAjax"; - - if(stateType.equals("ready")) { - - pageUrl = "web/msgsent/MsgSentReadyListAjax"; - - }else if(stateType.equals("complete")) { - - pageUrl = "web/msgsent/MsgSentCompleteListAjax"; - - }else if(stateType.equals("fail")) { - - pageUrl = "web/msgsent/MsgSentFailListAjax"; - - } - return pageUrl; - } - - /** - * 발송문자 수신번호 주소록에서 삭제 하기 - * - * @param MjonMsgSentVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/deleteAddrNoDataAjax.do"}) - public ModelAndView deleteAddrNoDataAjax( - @ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("status", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - }else { - - mjonMsgSentVO.setUserId(userId); - - } - - String listType = mjonMsgSentVO.getListType(); - - if(listType.equals("")) { - - mjonMsgSentVO.setListType("groupList"); - - } - - try { - - //문자 발송 테이블에서 수신자 목록 리스트 불러오기 - List resultCallToList = mjonMsgSentService.selectCallToListData(mjonMsgSentVO); - - MjonMsgSentVO mjonMsgCallListVO = new MjonMsgSentVO(); - - //디비에서 불러온 수신자 번호 리스트 저장 - mjonMsgCallListVO.setCallToList(resultCallToList); - - //아이디 저장 - mjonMsgCallListVO.setUserId(userId); - - //주소록 디비에서 연락처 정보를 delete 시킴 - int resultCnt = mjonMsgSentService.deleteAddrPhoneNo(mjonMsgCallListVO); - - modelAndView.addObject("status", "success"); - modelAndView.addObject("message", "총 " + resultCnt + "건의 주소록을 삭제하였습니다."); - modelAndView.addObject("resultCnt", resultCnt); - - - } catch (Exception e) { - modelAndView.addObject("status", "fail"); - modelAndView.addObject("message", "주소록 삭제 중 오류가 발생하였습니다."); - } - - return modelAndView; - } - - - /** - * 발송문자 수신거부번호 등록 하기 - * - * @param MjonMsgSentVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/insertAddBlockNoDataAjax.do"}) - public ModelAndView insertAddBlockNoDataAjax( - @ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("status", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - }else { - - mjonMsgSentVO.setUserId(userId); - - } - - String listType = mjonMsgSentVO.getListType(); - - if(listType.equals("")) { - - mjonMsgSentVO.setListType("groupList"); - - } - - try { - - if("fail".equals(mjonMsgSentVO.getStateType())) { - mjonMsgSentVO.setListType("privateList"); - } - - //문자 발송 테이블에서 수신자 목록 리스트 불러오기 - List resultCallToList = mjonMsgSentService.selectCallToListData(mjonMsgSentVO); - - MjonMsgSentVO mjonMsgCallListVO = new MjonMsgSentVO(); - - //디비에서 불러온 수신자 번호 리스트 저장 - mjonMsgCallListVO.setCallToList(resultCallToList); - - //아이디 저장 - mjonMsgCallListVO.setUserId(userId); - - //주소록 디비에서 연락처 정보를 delete 시킴 - int resultCnt = mjonMsgSentService.insertAddBlockNoDataAjax(mjonMsgCallListVO); - - modelAndView.addObject("status", "success"); - modelAndView.addObject("message", "총 " + resultCnt + "건의 수신거부번호를 등록하였습니다."); - modelAndView.addObject("resultCnt", resultCnt); - - - } catch (Exception e) { - modelAndView.addObject("status", "fail"); - modelAndView.addObject("message", "수신거부번호 등록 중 오류가 발생하였습니다."); - } - - return modelAndView; - } - - - /** - * 발송문자 주소록 그룹 등록 하기 - * - * @param MjonMsgSentVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/insertAddAddrGrpDataAjax.do"}) - public ModelAndView insertAddAddrGrpDataAjax( - @ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("status", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - }else { - - mjonMsgSentVO.setUserId(userId); - - } - - String listType = mjonMsgSentVO.getListType(); - - if(listType.equals("")) { - - mjonMsgSentVO.setListType("groupList"); - - } - - try { - - //문자 발송 테이블에서 수신자 목록 리스트 불러오기 - List resultCallToList = mjonMsgSentService.selectCallToListData(mjonMsgSentVO); - - MjonMsgSentVO mjonMsgCallListVO = new MjonMsgSentVO(); - - //디비에서 불러온 수신자 번호 리스트 저장 - mjonMsgCallListVO.setCallToList(resultCallToList); - - //아이디 저장 - mjonMsgCallListVO.setUserId(userId); - - int resultCnt = 0; - - AddrGroupVO addrGroupVO = new AddrGroupVO(); - - //신규 그룹 등록 - addrGroupVO.setAddrGrpNm(mjonMsgSentVO.getAddrGrpNm()); - addrGroupVO.setMberId(userId); - addrGroupVO.setFrstRegisterId(userId); - - String addrGrpId = addrGroupService.insertAddrGroup(addrGroupVO); - - if(addrGrpId != null) { - - List addrDataInfo = new ArrayList(); - - for(String phone : resultCallToList) { - AddrVO addrVO = new AddrVO(); - addrVO.setAddrPhoneNo(phone); - addrVO.setAddrGrpId(addrGrpId); - addrVO.setBookmark("N"); //북마크 : N - addrVO.setFrstRegisterId(userId); - addrVO.setMberId(userId); - addrDataInfo.add(addrVO); - } - - resultCnt = addrService.insertAddrList(addrDataInfo); - - } - - //주소록 디비에서 연락처 정보를 delete 시킴 - //int resultCnt = mjonMsgSentService.insertAddBlockNoDataAjax(mjonMsgCallListVO); - - modelAndView.addObject("status", "success"); - modelAndView.addObject("message", "총 " + resultCnt + "건의 수신번호를 등록하였습니다."); - modelAndView.addObject("resultCnt", resultCnt); - - - - - } catch (Exception e) { - modelAndView.addObject("status", "fail"); - modelAndView.addObject("message", "주소록 등록 중 오류가 발생하였습니다."); - } - - return modelAndView; - } - - - /** - * 발송관리 출력하기 팝업화면 - * - * @param MjonMsgSentVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/printMsgSentDataAjax.do"}) - public String printMsgSentDataAjax( - @ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, - ModelMap model) throws Exception { - - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - if(userId.equals("")) { - - /*modelAndView.addObject("status", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView;*/ - - }else { - - mjonMsgSentVO.setUserId(userId); - - } - - // 검색 리스트 불러오기 - if(mjonMsgSentVO.getPageUnit() != 10) { - mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(mjonMsgSentVO.getSearchSortOrd().equals("")) { - - mjonMsgSentVO.setSearchSortOrd("desc"); - mjonMsgSentVO.setSearchSortCnd("regdate"); - } - - if(mjonMsgSentVO.getListType().equals("")) { - - mjonMsgSentVO.setListType("groupList"); - - } - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); - - mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - List resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); - model.addAttribute("resultAllSentList", resultAllSentList); - model.addAttribute("resultAllSentCnt", resultAllSentList.size()); - - model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - //발송 결과 성공 실패 건수 리스트 불러오기 - List resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO); - model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); - - model.addAttribute("mjonMsgSentVO", mjonMsgSentVO); - model.addAttribute("userNm", userNm); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - - return "web/msgsent/MsgSentPrintListPopUp"; - } - - /** - * 발송관리 엑셀다운로드 기능 - * @param searchVO - * @param model - * @return "/web/mjon/msgsent/msgSentExcelDownLoadAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/msgsent/msgSentExcelDownLoadAjax.do"}) - public void msgSentExcelDownLoadAjax(MjonMsgSentVO mjonMsgSentVO, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(!userId.equals("")) { - - mjonMsgSentVO.setUserId(userId); - - }else { - - /*modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "fail"); - - return modelAndView;*/ - - } - - - mjonMsgSentService.msgSentExcelDownLoad(mjonMsgSentVO, response); - - - - } - -} diff --git a/src/main/java/itn/let/mjo/pay/web/MjonKGMPayController.java b/src/main/java/itn/let/mjo/pay/web/MjonKGMPayController.java index 3db5402..2e109c6 100644 --- a/src/main/java/itn/let/mjo/pay/web/MjonKGMPayController.java +++ b/src/main/java/itn/let/mjo/pay/web/MjonKGMPayController.java @@ -1,15 +1,9 @@ package itn.let.mjo.pay.web; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.net.URLDecoder; import java.util.List; -import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,79 +11,20 @@ import org.springframework.stereotype.Controller; 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.RequestMethod; -import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; //import com.mobilians.mcCancel_v0001.MC_Cancel; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.service.FileVO; -import itn.let.cop.bbs.service.BoardMasterVO; import itn.let.mjo.addragency.service.AddrAgencyService; import itn.let.mjo.addragency.service.AddrAgencyVO; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.msg.service.MjonMsgService; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.pay.service.MjonPayService; -import itn.let.mjo.pay.service.MjonPayVO; -import itn.let.mjo.pay.service.RefundService; -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.uss.umt.service.UserManageVO; -import itn.let.utl.fcc.service.EgovCryptoUtil; -import itn.let.utl.sim.service.EgovClntInfo; -import itn.let.utl.user.service.CheckBoardUtil; -import itn.let.utl.user.service.CheckFileUtil; import itn.let.utl.user.service.CheckLoginUtil; -import itn.let.utl.user.service.MjonNoticeSendUtil; @Controller public class MjonKGMPayController { - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - /** refundService */ - @Resource(name = "refundService") - private RefundService refundService; - - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - - //암호화 - @Resource(name = "egovCryptoUtil") - EgovCryptoUtil egovCryptoUtil; - //로그인 처리 @Resource(name = "checkLoginUtil") private CheckLoginUtil checkLoginUtil; @@ -97,483 +32,9 @@ public class MjonKGMPayController { //무료 대행 관련 쿼리 @Resource(name="addrAgencyService") private AddrAgencyService addrAgencyService; - - //게시판 체크 - @Resource(name = "checkBoardUtil") - private CheckBoardUtil checkBoardUtil; - - //첨부 파일 체크 - @Resource(name = "checkFileUtil") - private CheckFileUtil checkFileUtil; - - //파일 체크 & 관리 - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil egovFileMngUtil; - - //파일 정보 관리 - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - /** 알림전송 Util */ - @Resource(name = "mjonNoticeSendUtil") - private MjonNoticeSendUtil mjonNoticeSendUtil; - - @Resource(name="MjonCommon") - private MjonCommon mjonCommon; - - /** 사이트 설정 */ - @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; private static final Logger logger = LoggerFactory.getLogger(MjonKGMPayController.class); - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // USER - // - // - - /** - * KGM mobile 결제 Action 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/KGMPayActionAjax.do"}) - public String KGMPayActionAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - String userId = ""; - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - if(EgovUserDetailsHelper.isAuthenticated() && loginVO != null) { - userId = loginVO.getId(); - } - mjonPayVO.setMoid(userId); - - model.addAttribute("mjonPayVO", mjonPayVO); - - return "web/cop/kgm/mc_web"; - } - - /** - * KGM mobile 결제 okurl 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/NotiUrlAjax.do"}) - public String NotiUrlAjax( - HttpServletRequest request - , ModelMap model - ) throws Exception{ - - System.out.println("request.toString()"); - System.out.println(request.toString()); - - return "web/cop/kgm/notiurl"; - - } - - /** - * KGM mobile 결제 okurl 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/OkUrlAjax.do"}) - public String OkUrlAjax( - HttpServletRequest request - , HttpSession session - , HttpServletResponse response - , ModelMap model - , RedirectAttributes redirect - ) throws Exception{ - - //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 - response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); - - String Resultcd = request.getParameter("Resultcd"); //[ 4byte 고정] 결과코드 - String Resultmsg = URLDecoder.decode(request.getParameter("Resultmsg"), "euc-kr"); //[ 100byte 이하] 결과메세지 - String AutoBillKey = request.getParameter("AutoBillKey"); //[ 15byte 이하] 자동결제 최초등록키 - String CASH_GB = request.getParameter("CASH_GB"); //[ 2byte 고정] 결제수단(MC) - String Commid = request.getParameter("Commid"); //[ 3byte 고정] 이통사 - String Mobilid = request.getParameter("Mobilid"); //[ 15byte 이하] 모빌리언스 거래번호 - String Mrchid = request.getParameter("Mrchid"); //[ 8byte 고정] 상점ID - String MSTR = request.getParameter("MSTR"); //[2000byte 이하] 가맹점 전달 콜백변수 - String No = request.getParameter("No"); //[ 11byte 이하] 폰번호 - String Payeremail = request.getParameter("Payeremail"); //[ 30byte 이하] 결제자 이메일 - String Prdtnm = URLDecoder.decode(request.getParameter("Prdtnm"), "euc-kr"); //[ 50byte 이하] 상품명 - String Prdtprice = request.getParameter("Prdtprice"); //[ 10byte 이하] 상품가격 - String Signdate = request.getParameter("Signdate"); //[ 14byte 이하] 결제일자 - String Svcid = request.getParameter("Svcid"); //[ 12byte 고정] 서비스ID - String Tradeid = request.getParameter("Tradeid"); //[ 40byte 이하] 상점거래번호 - String Userid = request.getParameter("Userid"); //[ 20byte 이하] 사용자ID - String USERKEY = request.getParameter("USERKEY"); //[ 15byte 이하] 휴대폰정보(이통사, 휴대폰번호, 주민번호) 대체용 USERKEY - String MC_EZ_KEY = request.getParameter("Ezkey"); //[ 20byte 고정] 간소화결제 사용자키 - - - // 사용자 정보 - String mberNm = ""; - String moblphonNo = ""; - String mberEmailAdres = ""; - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setMberId(Userid); - MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); - if (userInfo != null) { - mberNm = userInfo.getMberNm(); - moblphonNo = userInfo.getMoblphonNo(); - mberEmailAdres = userInfo.getMberEmailAdres(); - } - - // MjonPayVO - MjonPayVO mjonPayVO = new MjonPayVO(); - mjonPayVO.setResultCd(Resultcd); - mjonPayVO.setResultMsg(Resultmsg); - mjonPayVO.setAutoBillKey(AutoBillKey); - mjonPayVO.setCashGb(CASH_GB); - mjonPayVO.setAutoYn(""); - mjonPayVO.setCommId(Commid); - mjonPayVO.setMobileId(Mobilid); - mjonPayVO.setMrchId(Mrchid); - mjonPayVO.setPno(No); - mjonPayVO.setPayerEmail(Payeremail); - mjonPayVO.setPrdtNm(Prdtnm); - mjonPayVO.setPrdtPrice(Prdtprice); - mjonPayVO.setSignDate(Signdate); - mjonPayVO.setSvcId(Svcid); - mjonPayVO.setTradeId(Tradeid); - mjonPayVO.setUserId(Userid); - mjonPayVO.setUserKey(USERKEY); - mjonPayVO.setMcEzKey(MC_EZ_KEY); - - // 추가정보(mj_pg) - String pgStatus = ""; - if("0000".equals(Resultcd)) { - pgStatus = "1"; // 1:결제완료 - } - else { - pgStatus = "4"; // 4.결제오류 - } - mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료 - mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값] - mjonPayVO.setResultCode(Resultcd); - mjonPayVO.setResultMsg(Resultmsg); - mjonPayVO.setAmt(Prdtprice); // 결제금액 - mjonPayVO.setPayMethod("CELLPHONE"); // 결제방법 - mjonPayVO.setPgCode("KGM"); // - mjonPayVO.setGoodsName("KG 모빌리언스"); // - mjonPayVO.setPhone(No); // 모바일 - mjonPayVO.setMobile(No); // 모바일 - mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보) - mjonPayVO.setTid(Tradeid); // Tid - mjonPayVO.setMid(Mrchid); // Mid - // 회원정보 - mjonPayVO.setBuyerName(mberNm); - mjonPayVO.setBuyerEmail(moblphonNo); - mjonPayVO.setBuyerTel(mberEmailAdres); - - // 로그인정보 - /* - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - if(EgovUserDetailsHelper.isAuthenticated() && loginVO != null) { - mjonPayVO.setBuyerName(loginVO.getName()); - mjonPayVO.setBuyerEmail(loginVO.getEmail()); - mjonPayVO.setBuyerTel(loginVO.getTel()); - } - else { - // 재로그인 처리 - //Userid - } - */ - - // 인서트 - mjonPayService.insertKgmAll(mjonPayVO); - - // 휴대폰 15만원결제 => 법인폰 알림 - if (mjonPayVO.getAmt().equals("165000")) { - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 15만원 결제", Userid, mberNm); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] 스미싱의심/휴대폰 15만원 결제 - " + mberNm +"("+ Userid + ")"; - mjonCommon.sendSimpleSlackMsg(msg); - } - - // 스미싱 의심회원으로 변경 - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setSmishingYn("Y"); - userManageVO.setMberId(Userid); - userManageService.updateOneUserSmishingYnNotAlert(userManageVO); - } - else { - // 대상 : 휴대폰결제, 즉시이체, 전용계좌 - // Step 1. 스미싱의심 지정 여부 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) { - // Step 1. 개인회원 여부 체크 - int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); - if (isPersnalMemberCnt == 1) { - // Step 2. 첫결제 여부 체크 - int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid); - if (isFirstPayCnt == 1) { - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 첫결제", Userid, mberNm); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] 스미싱의심/휴대폰 첫결제 - " + mberNm +"("+ Userid + ")"; - mjonCommon.sendSimpleSlackMsg(msg); - } - - // 스미싱 의심회원으로 변경 - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setSmishingYn("Y"); - userManageVO.setMberId(Userid); - userManageService.updateOneUserSmishingYnNotAlert(userManageVO); - } - } - } - } - - redirect.addAttribute("Resultcd", Resultcd); - redirect.addAttribute("Tradeid", Tradeid); - redirect.addAttribute("Prdtprice", Prdtprice); - - //return "web/cop/kgm/okurl"; - return "redirect:/web/kgm/pay/kgmResultAjax.do"; - } - - static String convert(String str, String encoding) throws IOException { - ByteArrayOutputStream requestOutputStream = new ByteArrayOutputStream(); - requestOutputStream.write(str.getBytes(encoding)); - - return requestOutputStream.toString(encoding); - } - - /** - * KGM mobile 결제 Result 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/kgmResultAjax"}, method=RequestMethod.GET) - public String kgmResultAjax(HttpServletRequest request - , ModelMap model - ) throws Exception{ - - String Resultmsg = ""; - String Prdtprice = ""; - if("0000".equals(request.getParameter("Resultcd"))) { - Prdtprice = request.getParameter("Prdtprice"); - - /* - MjonPayVO mjonPayVO = new MjonPayVO(); - mjonPayVO.setTradeId(request.getParameter("Tradeid")); - mjonPayVO = mjonPayService.selectKgmVO(mjonPayVO); - if (!mjonPayVO.equals(null)) { - - } - */ - - // 로그인정보 - /* - String userId = ""; - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - if(EgovUserDetailsHelper.isAuthenticated() && loginVO != null) { - } - else { - // 재로그인 처리 - userId = mjonPayVO.getUserId(); - } - */ - - Resultmsg = "휴대폰결제 정상처리 되었습니다."; - } - else { - Resultmsg = "휴대폰결제 실패 했습니다."; - } - - model.addAttribute("Resultcd", request.getParameter("Resultcd")); - model.addAttribute("Resultmsg", Resultmsg); - model.addAttribute("Prdtprice", Prdtprice); - - - return "web/cop/kgm/result"; - } - - - /** - * KGM mobile 결제 okurl 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/kgmCancelAjax.do"}, method=RequestMethod.GET) - public String kgmCancelAjax(HttpServletRequest request - , HttpServletResponse response - , ModelMap model - ) throws Exception { - - Boolean isSuccess = true; - String msg = ""; - String resultCd = ""; // 리턴코드 - String resultMsg = ""; // 리턴메시지 - - try { - // 아래정보가 맞지 않을 경우 취소정보 불일치 0045 가 리턴됩니다. - String Mrchid=""; //모빌리언스가 부여한 상점아이디 8자리 - String Svcid=""; //모빌리언스가 부여한 서비스아이디 12자리 - String Tradeid = ""; //결제된 상점거래번호 - String Prdtprice = ""; //결제된 금액 - String Mobilid = ""; //결제된 모빌리언스 거래번호 - - Mrchid = request.getParameter("Mrchid"); - Svcid = request.getParameter("Svcid"); - Tradeid = request.getParameter("Tradeid"); - Prdtprice = request.getParameter("Prdtprice"); - Mobilid = request.getParameter("Mobilid"); - - // MOID : MOID_000000000000630 - Mrchid = "17062204"; - Svcid = "170622040674"; - Tradeid = "170622040674_202204191748300618"; - Prdtprice = "3000"; - Mobilid = "5002140398"; - - String kgmServerIp = ""; // 메인서버아이피 - int kgmServerPort = 0; // 서버포트 - String kgmSwitchIp = ""; // 백업서버아이피 - int kgmRecvTimeOut = 0; // 전문수신타임아웃 - String kgmLogDir = ""; // 로그경로 - - String serverName = request.getServerName().toLowerCase(); - int serverPort = request.getServerPort(); - System.out.println("serverName : "+ serverName); - System.out.println("serverPort : "+ serverPort); - if (serverName.lastIndexOf("localhost") > -1 || serverName.lastIndexOf("127.0.0.1") > -1) { - System.out.println("KGM 연결서버 : 개발서버1"); - // 개발서버 - kgmServerIp = "175.158.12.131"; - kgmServerPort = 7500; - kgmSwitchIp = "175.158.12.131"; - kgmRecvTimeOut = 30000; - kgmLogDir = "c:\\cancel_log\\"; - } - else if (serverPort != 80 || serverPort != 443) { - System.out.println("KGM 연결서버 : 개발서버2"); - // 개발서버 - kgmServerIp = "175.158.12.131"; - kgmServerPort = 7500; - kgmSwitchIp = "175.158.12.131"; - kgmRecvTimeOut = 30000; - kgmLogDir = "c:\\cancel_log\\"; - } - else { - System.out.println("KGM 연결서버 : 운영서버"); - // 운영서버 - kgmServerIp = "175.158.12.140"; - kgmServerPort = 7500; - kgmSwitchIp = "218.50.55.107"; - kgmRecvTimeOut = 30000; - kgmLogDir = "/cancel_log/"; - } - - // MC Cancel - /* - MC_Cancel cancel = new MC_Cancel(); - cancel.setServerInfo(kgmServerIp, kgmServerPort, kgmSwitchIp, kgmRecvTimeOut, kgmLogDir); - resultCd = cancel.cancel_attempt(Mrchid, Svcid, Tradeid, Prdtprice, Mobilid); // 결제취소요청 - resultMsg = getMobiliansCancelReturnMsg(resultCd); - if (resultCd.equals("0000") ) { - // 결제취소 성공 - - } else { - // 결제취소 실패 - } - - // KG 모빌리언스 취소 리턴메시지 - System.out.println("

결과코드 : "+ resultCd +"

" ); - System.out.println("

결과메시지 : "+ getMobiliansCancelReturnMsg(resultCd) +"

" ); - if (resultCd.equals("0000") ) { - System.out.println("

결제취소 성공

"); - } else { - System.out.println("

결제취소 실패

"); - } - */ - - } catch (Exception e) { - e.printStackTrace(); - isSuccess = false; - msg = "Err : " + e.getMessage(); - } - - model.clear(); - model.addAttribute("isSuccess", isSuccess); - model.addAttribute("msg", msg); - model.addAttribute("resultCd", resultCd); - model.addAttribute("resultMsg", resultMsg); - - return ""; - } - - // KG 모빌리언스 취소 리턴메시지 - public static String getMobiliansCancelReturnMsg(String val) { - String rtnVal = ""; - switch (val.trim().toUpperCase()) { - case "0000": - rtnVal = "정상취소처리"; - break; - case "0011": - rtnVal = "통신사미등록폰"; - break; - case "0014": - rtnVal = "해지된 폰"; - break; - case "0020": - rtnVal = "SKT,LGT 경우 휴대폰정보 변경으로 인한 취소실패"; - break; - case "0041": - rtnVal = "거래내역 없음"; - break; - case "0042": - rtnVal = "취소기간경과"; - break; - case "0044": - rtnVal = "이미 취소된 자료"; - break; - case "0045": - rtnVal = "취소 자료 정보 불일치"; - break; - case "0097": - rtnVal = "요청자료 오류"; - break; - case "0098": - rtnVal = "통신사 통신오류"; - break; - case "0099": - rtnVal = "기타"; - break; - } - - return rtnVal; - } - - ///////////////////////////////////////////////////////////////////////////////////////// // // @@ -722,131 +183,4 @@ public class MjonKGMPayController { return p_paginationInfo; } - - //사용자 업로드 파일 처리 - 하나의 파일만 처리 - private String takeFile( - MultipartHttpServletRequest p_multiRequest - , ModelAndView p_modelAndView - , BoardMasterVO p_bmVO - ) throws Exception{ - //Map p_map = new Map<>(); - //Map in_map = new HashMap<>(); - boolean in_bool = true; - - - List result = null; - String atchFileId = ""; - String isThumbFile = ""; - //String isThumbFile = "thumbFile"; //"thumbFile" - 썸네일을 생성한다. - - final Map files = p_multiRequest.getFileMap(); - if (!files.isEmpty()) { - result = egovFileMngUtil.parseFileInf(files, "ADDRAGENCY_", 0, "", "", isThumbFile); - // 파일 사이즈, 개수, 확장자 체크. model에 체크 오류 메세지 set - - //관리자에서 게시판 설정시 업로드 파일 사이즈와 수량 체크용 - if(!checkFileUtil.isPosblAtchFileMvWithBoardMaster(result, p_modelAndView, 0, "xlsx|xls|zip|hwp|txt|doc|docx|csv", p_bmVO)) { - // 공통코드 Set - //setBBSCommCd(model, bmVO); - - //model.addAttribute("bdMstr", bmVO); - //return "web/cop/bbs/EgovNoticeRegist"; - //modelAndView.addObject("bdMstr", bmVO); - p_modelAndView.addObject("result", "fail"); - - in_bool = false; - } - - atchFileId = fileMngService.insertFileInfs(result); //첨부 파일 - } - - if (!in_bool) atchFileId = "ERROR"; - - return atchFileId; - } - - - //addragency 게시물에 글 남기기 - private ModelAndView insertAddrAgencyBoard( - ModelAndView p_modelAndView - //, Map p_fileResult - , String p_atchFileId - - , AddrAgencyVO p_addrAgencyVO - , String p_content - , String p_registerId - //, String p_processStatus - , MultipartHttpServletRequest p_multiRequest - ) throws Exception{ - - //게시판 등록하기 - try { - - String p_processStatus = ""; - p_processStatus = p_addrAgencyVO.getProcessStatus(); - if ("".equals(p_processStatus) || p_processStatus==null) p_processStatus = "B"; - - - p_addrAgencyVO.setAtchFileId(p_atchFileId); - p_addrAgencyVO.setRequestTxt(unscript(p_content)); // XSS 방지 - - p_addrAgencyVO.setProcessStatus(p_processStatus); //처리상태 B/I/E - - p_addrAgencyVO.setRegisterId(p_registerId); - String userIp = EgovClntInfo.getClntIP(p_multiRequest); - p_addrAgencyVO.setNtcrIp(userIp); - - - addrAgencyService.insert(p_addrAgencyVO); - - p_modelAndView.addObject("message", egovMessageSource.getMessage("success.common.insert")); - p_modelAndView.addObject("result", "success"); - - }catch(Exception ex){ - ex.printStackTrace(); - - p_modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.insert")); - p_modelAndView.addObject("result", "fail"); - - } - - return p_modelAndView; - } - - - /** - * XSS 방지 처리. - * - * @param data - * @return - */ - protected String unscript(String data) { - if (data == null || data.trim().equals("")) { - return ""; - } - - String ret = data; - - ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script"); - ret = ret.replaceAll(" commandMap, - @ModelAttribute("searchVO") MjonPayVO mjonPayVO) throws Exception { - - mjonPayVO.setReturnURL(request.getRequestURL().toString().split("nice")[0] + "nicepay/payResultAjax.do") ; - - //테스트 - if(null == mjonPayVO.getPrice()) { - mjonPayVO.setPrice("500"); - } - if(null == mjonPayVO.getBuyerName()) { - mjonPayVO.setBuyerName("우영두"); - } - if(null == mjonPayVO.getBuyerTel()) { - mjonPayVO.setBuyerTel("01063170383"); - } - if(null == mjonPayVO.getBuyerEmail()) { - mjonPayVO.setBuyerEmail("rosehips@naver.com"); - } - if(null == mjonPayVO.getMoid()) { - mjonPayVO.setMoid("mnoid1234567890"); - } - model.addAttribute("mjonPayVO", mjonPayVO); - //return "web/cop/nicepay/payRequest"; - return "web/cop/nicepay/payRequestAjax"; - } - - - /** - * 나이스페이(PG사 결과 리턴 페이지) - * - * @param - * @return - * @throws Exception - */ - @RequestMapping( value = {"/web/cop/nicepay/payResultAjax.do" , "/web/member/pay/payResultAjax.do"}) - public String payResult(HttpServletRequest request, - ModelMap model , @RequestParam Map commandMap, - @ModelAttribute("searchVO") MjonPayVO mjonPayVO) throws Exception { - - - String pattern = (String) request.getAttribute( - HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - - //mjonPayVO.setReturnURL(request.getRequestURL().toString().split("nice")[0] + "payResult.do") ; - MjonPayVO returnMjonPayVO = new MjonPayVO(); - - returnMjonPayVO = mjonPayService.insertPay(mjonPayVO , request, "nice" ); //PG, PGTXT, CASH , 포인트 insert / 회원정보 캐시,포인트 update - - model.addAttribute("mjonPayVO", returnMjonPayVO); - if(pattern.equals("/web/member/pay/payResultAjax.do")){ - model.addAttribute("userPage", true); - } - - return "web/cop/nicepay/payResultAjax"; - } - - /** - * 나이스페이(PG사 결제취소화면) - * - * @param - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/nicepay/cancelRequestAjax.do") - public String cancelRequestAjax(HttpServletRequest request, - ModelMap model , @RequestParam Map commandMap, - @ModelAttribute("searchVO") MjonPayVO mjonPayVO) throws Exception { - - mjonPayVO.setReturnURL(request.getRequestURL().toString().split("nice")[0] + "nicepay/payResultAjax.do") ; - - //테스트 - if(null == mjonPayVO.getPrice()) { - mjonPayVO.setPrice("500"); - } - if(null == mjonPayVO.getBuyerName()) { - mjonPayVO.setBuyerName("우영두"); - } - if(null == mjonPayVO.getBuyerTel()) { - mjonPayVO.setBuyerTel("01063170383"); - } - if(null == mjonPayVO.getBuyerEmail()) { - mjonPayVO.setBuyerEmail("rosehips@naver.com"); - } - if(null == mjonPayVO.getMoid()) { - mjonPayVO.setMoid("mnoid1234567890"); - } - - model.addAttribute("mjonPayVO", mjonPayVO); - //return "web/cop/nicepay/payRequest"; - return "web/cop/nicepay/cancelRequestAjax"; - } - - - /** - * 나이스페이(PG사 결제취소 결과) - * - * @param - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/nicepay/cancelResultAjax.do") - public String cancelResultAjax(HttpServletRequest request, - ModelMap model , @RequestParam Map commandMap, - @ModelAttribute("searchVO") MjonPayVO mjonPayVO) throws Exception { - - - MjonPayVO returnMjonPayVO = new MjonPayVO(); - returnMjonPayVO = mjonPayService.cancelPay(mjonPayVO , request ); //PG, CASH , 포인트 insert / 회원정보 캐시,포인트 update - model.addAttribute("mjonPayVO", returnMjonPayVO); - return "web/cop/nicepay/cancelResultAjax"; - } - - /** - * 나이스페이(PG사 전송화면) - * - * @param - * @return - * @throws Exception - */ - @RequestMapping("/web/cop/kmc/authRequestAjax.do") - public String authRequestAjax(HttpServletRequest request, HttpSession session, HttpServletResponse response, - ModelMap model , @RequestParam Map commandMap, - @ModelAttribute("searchVO") KmcVO kmcVO) throws Exception { - - //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 - response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); - - System.out.println("++++++++++++ 세션체크 ::: "+ session.getAttribute("mberSession")); - - String errMessage = ""; //에러메세지 - - String rec_cert = ""; // 결과값(암호화) - String certNum = ""; // certNum - - rec_cert = request.getParameter("rec_cert").trim(); - certNum = request.getParameter("certNum").trim(); - - kmcVO.setRecCert(rec_cert); - kmcVO.setCertNum(certNum); - // 파라미터 유효성 검증 - if( rec_cert.length() == 0 || certNum.length() == 0 ){ - errMessage = "비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - - - // 변수선언 -------------------------------------------------------------------------------------------------------- - String k_certNum = ""; // 파라미터로 수신한 요청번호 - k_certNum = certNum; - String date = ""; // 요청일시 - String CI = ""; // 연계정보(CI) - String DI = ""; // 중복가입확인정보(DI) - String phoneNo = ""; // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - String birthDay = ""; // 생년월일 - String gender = ""; // 성별 - String nation = ""; // 내국인 - String name = ""; // 성명 - String M_name = ""; // 미성년자 성명 - String M_birthDay = ""; // 미성년자 생년월일 - String M_Gender = ""; // 미성년자 성별 - String M_nation = ""; // 미성년자 내외국인 - String result = ""; // 결과값 - - String certMet = ""; // 인증방법 - String ip = ""; // ip주소 - String plusInfo = ""; - - String encPara = ""; - String encMsg1 = ""; - String encMsg2 = ""; - String msgChk = ""; - - com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager(); - - //02. 1차 복호화 - //수신된 certNum를 이용하여 복호화 - rec_cert = seed.getDec(rec_cert, k_certNum); - - //03. 1차 파싱 - int inf1 = rec_cert.indexOf("/",0); - int inf2 = rec_cert.indexOf("/",inf1+1); - - encPara = rec_cert.substring(0,inf1); //암호화된 통합 파라미터 - encMsg1 = rec_cert.substring(inf1+1,inf2); //암호화된 통합 파라미터의 Hash값 - - //04. 위변조 검증 - encMsg2 = seed.getMsg(encPara); - kmcVO.setEncMsg2(encMsg2); - if(encMsg2.equals(encMsg1)){ - msgChk="Y"; - } - - if(!"Y".equals(msgChk)) { - errMessage = "비정상접근입니다."; - return returnPage(model , errMessage , kmcVO) ; - } - - //05. 2차 복호화 - rec_cert = seed.getDec(encPara, k_certNum); - kmcVO.setRecCert(rec_cert); - //06. 2차 파싱 - int info1 = rec_cert.indexOf("/",0); - int info2 = rec_cert.indexOf("/",info1+1); - int info3 = rec_cert.indexOf("/",info2+1); - int info4 = rec_cert.indexOf("/",info3+1); - int info5 = rec_cert.indexOf("/",info4+1); - int info6 = rec_cert.indexOf("/",info5+1); - int info7 = rec_cert.indexOf("/",info6+1); - int info8 = rec_cert.indexOf("/",info7+1); - int info9 = rec_cert.indexOf("/",info8+1); - int info10 = rec_cert.indexOf("/",info9+1); - int info11 = rec_cert.indexOf("/",info10+1); - int info12 = rec_cert.indexOf("/",info11+1); - int info13 = rec_cert.indexOf("/",info12+1); - int info14 = rec_cert.indexOf("/",info13+1); - int info15 = rec_cert.indexOf("/",info14+1); - int info16 = rec_cert.indexOf("/",info15+1); - int info17 = rec_cert.indexOf("/",info16+1); - int info18 = rec_cert.indexOf("/",info17+1); - - certNum = rec_cert.substring(0,info1); kmcVO.setCertNum(certNum); - date = rec_cert.substring(info1+1,info2); kmcVO.setDate(date); - CI = rec_cert.substring(info2+1,info3); kmcVO.setCI(CI); - phoneNo = rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo); - phoneCorp = rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp); - birthDay = rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay); - gender = rec_cert.substring(info6+1,info7); kmcVO.setGender(gender); - nation = rec_cert.substring(info7+1,info8); kmcVO.setNation(nation); - name = rec_cert.substring(info8+1,info9); kmcVO.setName(name); - result = rec_cert.substring(info9+1,info10); kmcVO.setResult(result); - certMet = rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet); - ip = rec_cert.substring(info11+1,info12); kmcVO.setIp(ip); - M_name = rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name); - M_birthDay = rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay); - M_Gender = rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender); - M_nation = rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation); - plusInfo = rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo); - DI = rec_cert.substring(info17+1,info18); kmcVO.setDI(DI); - - //07. CI, DI 복호화 - CI = seed.getDec(CI, k_certNum); kmcVO.setCI(CI); - DI = seed.getDec(DI, k_certNum); kmcVO.setDI(DI); - - if("Y".equals(result)) { - - } - - //-------------------------------------------------------------- - String regex = ""; - if( certNum.length() == 0 || certNum.length() > 40){ - errMessage = "요청번호 비정상."; - return returnPage(model , errMessage , kmcVO) ; - } - - regex = "[0-9]*"; - if( date.length() != 14 || !paramChk(regex, date) ){ - errMessage = "요청일시"; - return returnPage(model , errMessage , kmcVO) ; - } - - regex = "[A-Z]*"; - if( certMet.length() != 1 || !paramChk(regex, certMet) ){ - errMessage = "본인인증방법 비정상" + certMet; - return returnPage(model , errMessage , kmcVO) ; - } - - - regex = "[0-9]*"; - if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){ - errMessage = "휴대폰번호 비정상" ; - return returnPage(model , errMessage , kmcVO) ; - } - - regex = "[A-Z]*"; - if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){ - errMessage = "이동통신사 비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - - regex = "[0-9]*"; - if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){ - errMessage = "생년월일 비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - - regex = "[0-9]*"; - if( gender.length() != 1 || !paramChk(regex, gender) ){ - errMessage = "성별 비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - - regex = "[0-9]*"; - if( nation.length() != 1 || !paramChk(regex, nation) ){ - errMessage = "내/외국인 비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - - regex = "[\\sA-Za-z가-�R.,-]*"; - if( name.length() > 60 || !paramChk(regex, name) ){ - errMessage = "성명 비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - - regex = "[A-Z]*"; - if( result.length() != 1 || !paramChk(regex, result) ){ - errMessage = "결과값 비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - - regex = "[\\sA-Za-z가-?.,-]*"; - if( M_name.length() != 0 ){ - if( M_name.length() > 60 || !paramChk(regex, M_name) ){ - errMessage = "미성년자 성명 비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - } - - regex = "[0-9]*"; - if( M_birthDay.length() != 0 ){ - if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){ - errMessage = "미성년자 생년월일 비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - } - - regex = "[0-9]*"; - if( M_Gender.length() != 0 ){ - if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){ - errMessage = "미성년자 성별 비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - } - - regex = "[0-9]*"; - if( M_nation.length() != 0 ){ - if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){ - errMessage = "미성년자 내/외국인 비정상"; - return returnPage(model , errMessage , kmcVO) ; - } - } - - //본인인증 결과 내용 저장하기. - /*System.out.println("+++++++++++++ getCertNum ::: "+kmcVO.getCertNum()); - System.out.println("+++++++++++++ getDate ::: "+kmcVO.getDate()); - System.out.println("+++++++++++++ getDI ::: "+kmcVO.getDI()); - System.out.println("+++++++++++++ getPhoneNo ::: "+kmcVO.getPhoneNo()); - System.out.println("+++++++++++++ getNation ::: "+kmcVO.getNation()); - System.out.println("+++++++++++++ getName ::: "+kmcVO.getName()); - System.out.println("+++++++++++++ getResult ::: "+kmcVO.getResult()); - System.out.println("+++++++++++++ getCertMet ::: "+kmcVO.getCertMet()); - System.out.println("+++++++++++++ getIp ::: "+kmcVO.getIp());*/ - - //KMC 본인인증 정보를 세션에 담아준다. - /*AuthCertVO certVO = new AuthCertVO(); - certVO.setCertNum(kmcVO.getCertNum()); - certVO.setCertDate(kmcVO.getDate()); - certVO.setCertDi(kmcVO.getDI()); - certVO.setCertPhone(kmcVO.getPhoneNo()); - certVO.setCertNation(kmcVO.getNation()); - certVO.setCertName(kmcVO.getName()); - certVO.setCertResult(kmcVO.getResult()); - certVO.setCertType("KMC문자인증"); - certVO.setCertIpaddr(kmcVO.getIp()); - certVO.setBirthDay(kmcVO.getBirthDay()); - certVO.setSexdstnCode(kmcVO.getGender());*/ - - /*request.getSession().setAttribute("AuthKmcCertVO", certVO);*/ - - /*System.out.println("++++++++++++ 세션체크22 ::: "+(MberManageVO) session.getAttribute("mberSession"));*/ - - //KMC 본인인증 로그 insert - AuthCertVO certVO = new AuthCertVO(); - certVO.setMberId(kmcVO.getPlusInfo()); - certVO.setCertNum(kmcVO.getCertNum()); - certVO.setCertDate(kmcVO.getDate()); - certVO.setCertDi(kmcVO.getDI()); - certVO.setCertPhone(kmcVO.getPhoneNo()); - certVO.setCertNation(kmcVO.getNation()); - certVO.setCertName(kmcVO.getName()); - certVO.setCertResult(kmcVO.getResult()); - certVO.setCertType("KMC_회원가입 인증"); - certVO.setCertIpaddr(kmcVO.getIp()); - certVO.setBirthDay(kmcVO.getBirthDay()); - certVO.setSexdstnCode(kmcVO.getGender()); - - //디비 테이블에 저장하기 - mberManageService.insertCertInfoLog(certVO); - - kmcVO.setIdx(certVO.getIdx()); //본인인증 로그 Idx - 로그 insert 후 idx selectKey - model.addAttribute("kmcVO", kmcVO); - return "web/cop/kmc/authRequestAjax"; - } - - // 파라미터 유효성 검증 -------------------------------------------- - public Boolean paramChk(String patn, String param){ - Pattern pattern = Pattern.compile(patn); - Matcher matcher = pattern.matcher(param); - boolean b = matcher.matches(); - return b; - } - - // 파라미터 유효성 검증 -------------------------------------------- - public String returnPage(ModelMap model , String errMessage , KmcVO kmcVO){ - kmcVO.setErrMessage(errMessage); - model.addAttribute("kmcVO", kmcVO); - return "web/cop/nicepay/payRequestAjax"; - } - /** * 세틀뱅크 가상계좌 입금 자동충전 * @@ -1548,2958 +993,6 @@ public class MjonPayController { return modelAndView; } - - /** - * 요금안내/견적내기 - * @param searchVO - * @param model - * @return "web/cop/bbs/NoticeList.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/pay/PayGuide.do"}) - public String PayGuide(@ModelAttribute("searchVO") MjonPayVO mjonPayVO, @RequestParam(value = "selected", defaultValue="a") String selected, - HttpServletRequest request, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - MberManageVO mberManageVO = null; - - if(!userId.equals("")) { - mberManageVO = mberManageService.selectMber(loginVO.getId()); - model.addAttribute("mberManageVO", mberManageVO); - - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - if(userId != "") { - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - model.addAttribute("mjonCandidateVO",mjonCandidateVO); - } - } - - //개별문자 가격 및 총 금액 셋팅해주기 - 시스템 기본 단가기준으로 입력해줌 - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - // 등급제 단가 추출 => 시스템 단가에 적용 - - - float shortPrice = 0; // 단문(SMS) - float longPrice = 0; // 장문(LMS) - float picturePrice = 0; // 그림문자(MMS) 1장 - float picturePrice2 = 0; // 그림문자(MMS) 2장 - float picturePrice3 = 0; // 그림문자(MMS) 3장 - String customSamplePrice = "0"; // 문자온 샘플 수정(글자, 색상, 폰트 등) - String customEditPrice = "0"; // 이미지 편집(첨부이미지 1장) - String customEdit3Price = "0"; // 이미지 편집(첨부이미지 3장이하) - String customTextPrice = "0"; // 텍스트 단순수정 - float kakaoAtPrice = 0; // 카카오 알림톡 - float faxPrice = 0; // 팩스 - - shortPrice = sysJoinSetVO.getShortPrice(); - longPrice = sysJoinSetVO.getLongPrice(); - picturePrice = sysJoinSetVO.getPicturePrice(); - picturePrice2 = sysJoinSetVO.getPicture2Price(); - picturePrice3 = sysJoinSetVO.getPicture3Price(); - - DecimalFormat df = new DecimalFormat("###,###"); - customSamplePrice = df.format(sysJoinSetVO.getCustomSamplePrice()); - customEditPrice = df.format(sysJoinSetVO.getCustomEditPrice()); - customEdit3Price = df.format(sysJoinSetVO.getCustomEdit3Price()); - customTextPrice = df.format(sysJoinSetVO.getCustomTextPrice()); - - kakaoAtPrice = sysJoinSetVO.getKakaoAtPrice(); - faxPrice = sysJoinSetVO.getFaxPrice(); - - // 회원로그인시 협의된 단가 - if (mberManageVO != null && (double)mberManageVO.getShortPrice() > 0) { - shortPrice = mberManageVO.getShortPrice(); - longPrice = mberManageVO.getLongPrice(); - picturePrice = mberManageVO.getPicturePrice(); - picturePrice2 = mberManageVO.getPicture2Price(); - picturePrice3 = mberManageVO.getPicture3Price(); - } - - if (mberManageVO != null && (double)mberManageVO.getKakaoAtPrice() > 0) { - kakaoAtPrice = mberManageVO.getKakaoAtPrice(); - } - - if (mberManageVO != null && (double)mberManageVO.getFaxPrice() > 0) { - faxPrice = mberManageVO.getFaxPrice(); - } - - model.addAttribute("shortPrice", shortPrice); - model.addAttribute("longPrice", longPrice); - model.addAttribute("picturePrice", picturePrice); - model.addAttribute("picturePrice2", picturePrice2); - model.addAttribute("picturePrice3", picturePrice3); - model.addAttribute("customSamplePrice", customSamplePrice); - model.addAttribute("customEditPrice", customEditPrice); - model.addAttribute("customEdit3Price", customEdit3Price); - model.addAttribute("customTextPrice", customTextPrice); - model.addAttribute("kakaoAtPrice", kakaoAtPrice); - model.addAttribute("faxPrice", faxPrice); - model.addAttribute("SysJoinSetVO", sysJoinSetVO); - - // 탭이동 - String tabType = "1"; - if(request.getParameter("tabType") != null) { - tabType = request.getParameter("tabType"); - } - model.addAttribute("tabType", tabType); - - return "/web/pay/PayGuide"; - } - - /** - * 요금안내/견적내기 - * @param searchVO - * @param model - * @return "web/cop/bbs/NoticeList.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/pay/PayEstimateAjax.do"}) - public String PayEstimateAjax(@ModelAttribute("searchVO") MjonPayVO mjonPayVO, @RequestParam(value = "selected", defaultValue="a") String selected, - HttpServletRequest request, - ModelMap model) throws Exception{ - - //개별문자 가격 및 총 금액 셋팅해주기 - 시스템 기본 단가기준으로 입력해줌 - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - float shortPrice = 0; // 단문(SMS) - float longPrice = 0; // 장문(LMS) - float picturePrice = 0; // 그림문자(MMS) 1장 - float picturePrice2 = 0; // 그림문자(MMS) 2장 - float picturePrice3 = 0; // 그림문자(MMS) 3장 - - shortPrice = sysJoinSetVO.getShortPrice(); - longPrice = sysJoinSetVO.getLongPrice(); - picturePrice = sysJoinSetVO.getPicturePrice(); - picturePrice2 = sysJoinSetVO.getPicturePrice(); - picturePrice3 = sysJoinSetVO.getPicturePrice(); - - model.addAttribute("shortPrice", shortPrice); - model.addAttribute("longPrice", longPrice); - model.addAttribute("picturePrice", picturePrice); - model.addAttribute("picturePrice2", picturePrice2); - model.addAttribute("picturePrice3", picturePrice3); - model.addAttribute("SysJoinSetVO", sysJoinSetVO); - - // 파라미터 - request.setCharacterEncoding("UTF-8"); - String isVat = request.getParameter("isVat"); - String title = request.getParameter("title"); // 제목 - String recipientName = request.getParameter("recipientName"); // 수신자 - String managerName = request.getParameter("managerName"); // 담당자(성명) - String mobile = request.getParameter("mobile"); // 연락처 - String publishDate = request.getParameter("publishDate"); // 발행일 - - DecimalFormat decFormat = new DecimalFormat("###,###"); - /**** JSONArray 받는 방법 ****/ - String jsonStr = request.getParameter("smsList"); // request로 문자열형식의 데이터를 받고 - JSONArray jsonArr = new JSONArray(); - JSONParser parser = new JSONParser(); - jsonArr = (JSONArray)parser.parse(jsonStr); // 문자열 형식의 데이터를 JSONArray로 가공 - // 데이터의 길이만큼 반복 및 JSONObject로 변환하며 확인 - for(int i=0;i refundList = refundService.selectRefundList(refundVO); - int totCnt = 0; - if(refundList.size() > 0) { - totCnt = refundList.get(0).getTotCnt(); - } - - paginationInfo.setTotalRecordCount(refundList.size() > 0 ? ((RefundVO)refundList.get(0)).getTotCnt() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("refundList", refundList); - model.addAttribute("refundVO", refundVO); - - return "/web/pay/PayListRefundAjax"; - } - - //일반 결제 페이지 처리 - if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonPayVO.setSearchSortCnd("moid"); - mjonPayVO.setSearchSortOrd("desc"); - }else {//포인트 교환내역에서 정렬 종류가 달라서 변환처리 해줌 - - String sortCnt = mjonPayVO.getSearchSortCnd(); - - if(sortCnt.equals("pointUseId") || sortCnt.equals("refundId")) { - mjonPayVO.setSearchSortCnd("moid"); - }else if(sortCnt.equals("frstRegistPnttm") || sortCnt.equals("frstRegisterPnttm") || sortCnt.equals("refundHandlePnttm")) { - mjonPayVO.setSearchSortCnd("regDate"); - }else if(sortCnt.equals("type")) { - mjonPayVO.setSearchSortCnd("payMethodTxt"); - }else if(sortCnt.equals("point") || sortCnt.equals("refundMoney") || sortCnt.equals("refundCash")) { - mjonPayVO.setSearchSortCnd("amt"); - }else if(sortCnt.equals("cmpltYn") || sortCnt.equals("refundStatus")) { - mjonPayVO.setSearchSortCnd("pgStatusTxt"); - } - - } - - if(pattern.equals("/web/member/pay/PayListAllAjax.do")) { //전체 - mjonPayVO.setPageType("all"); - } - if(pattern.equals("/web/member/pay/PayListMobileAjax.do")) { //모바일일때 - mjonPayVO.setSearchCondition2("CELLPHONE"); - mjonPayVO.setPayMethod("CELLPHONE"); - mjonPayVO.setPageType("cellphone"); - } - if(pattern.equals("/web/member/pay/PayListCardAjax.do")) { //신용카드 - mjonPayVO.setSearchCondition2("CARD"); - mjonPayVO.setPayMethod("CARD"); - mjonPayVO.setPageType("card"); - } - if(pattern.equals("/web/member/pay/PayListVBankAjax.do")) { //전용계좌 - mjonPayVO.setSearchCondition2("VBANK"); - mjonPayVO.setPayMethod("VBANK"); - mjonPayVO.setPageType("vbank"); - } - if(pattern.equals("/web/member/pay/PayListBankAjax.do")) { //즉시이체 - mjonPayVO.setSearchCondition2("BANK"); - mjonPayVO.setPayMethod("BANK"); - mjonPayVO.setPageType("bank"); - } - if(pattern.equals("/web/member/pay/PayListSPayAjax.do")) { //즉시이체 - mjonPayVO.setSearchCondition2("SPAY"); - mjonPayVO.setPayMethod("SPAY"); - mjonPayVO.setPageType("SPAY"); - } - if(pattern.equals("/web/member/pay/PayListOfflineAjax.do")) { //무통장 - mjonPayVO.setSearchCondition2("OFFLINE"); - mjonPayVO.setPayMethod("OFFLINE"); - mjonPayVO.setPageType("offline"); - } - - - /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonPayVO.setUserId(userId);*/ - - // 이메일 코드조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("ITN031"); - model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - -// mjonPayVO.setStartDate(mjonPayVO.getStartDate() == null ? DateUtil.getDateDaysAgo(365) : mjonPayVO.getStartDate()); -// mjonPayVO.setEndDate(mjonPayVO.getEndDate() == null ? DateUtil.getCurrentDate() : mjonPayVO.getEndDate()); - - if(!DateUtils.dateChkAndValueChk(mjonPayVO.getStartDate(),mjonPayVO.getEndDate(), 12 )) { - mjonPayVO.setStartDate(DateUtils.getDateMonthsAgo(12)); - mjonPayVO.setEndDate(DateUtils.getCurrentDate()); - }; - - - //결제 리스트 정보 불러오기 - List resultList = mjonPayService.selectPayList(mjonPayVO); - - - model.addAttribute("totChgPay", resultList.size() > 0 ? PayUtils.getTrimToFirstDecimal(resultList.get(0).getTotChgPay()) : 0); - - - model.addAttribute("resultList", resultList); - paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonPayVO)resultList.get(0)).getTotCnt() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - return "/web/pay/PayListAllAjax"; - } - return "/web/pay/PayList"; - } - - /** - * 포인트 전환내역 - * @param searchVO - * @param model - * @return "/web/member/pay/PayList.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayListPointAjax.do"}) - public String PoinUseList(@ModelAttribute("searchVO") MjonPayVO mjonPayVO, - HttpServletRequest request, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - - //세금계산서, 현금영수증 정보 조회 - /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(loginVO == null) { - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonPayVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonPayVO.getPageUnit()); - paginationInfo.setPageSize(mjonPayVO.getPageSize()); - - mjonPayVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonPayVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonPayVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - mjonPayVO.setType("1"); // 현금 - mjonPayVO.setUserId(userId); - - if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonPayVO.setSearchSortCnd("pointUseId"); - mjonPayVO.setSearchSortOrd("desc"); - }else {//포인트 교환내역에서 정렬 종류가 달라서 변환처리 해줌 - - String sortCnt = mjonPayVO.getSearchSortCnd(); - - if(sortCnt.equals("moid") || sortCnt.equals("refundId")) { - mjonPayVO.setSearchSortCnd("pointUseId"); - }else if(sortCnt.equals("regDate") || sortCnt.equals("refundHandlePnttm") || sortCnt.equals("frstRegisterPnttm")) { - mjonPayVO.setSearchSortCnd("frstRegistPnttm"); - }else if(sortCnt.equals("payMethodTxt")) { - mjonPayVO.setSearchSortCnd("type"); - }else if(sortCnt.equals("amt") || sortCnt.equals("cash") || sortCnt.equals("refundMoney") || sortCnt.equals("refundCash")) { - mjonPayVO.setSearchSortCnd("point"); - }else if(sortCnt.equals("pgStatusTxt") || sortCnt.equals("refundStatus")) { - mjonPayVO.setSearchSortCnd("cmpltYn"); - } - - } - - List resultList = mjonPayService.selectPointUseList(mjonPayVO); - model.addAttribute("resultList", resultList); - paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonPayVO)resultList.get(0)).getTotCnt() : 0); - model.addAttribute("paginationInfo", paginationInfo); - - model.addAttribute("totChgPay", resultList.size() > 0 ? resultList.get(0).getTotChgPay() : 0); - -// String requestUri = request.getRequestURI(); -// String fileName = requestUri.substring(requestUri.lastIndexOf('/') + 1); -// -// model.addAttribute("fileName", fileName); - - return "/web/pay/PayListPointAjax"; - - } - - @RequestMapping(value= {"/web/member/pay/PayPrintListPopUpAjax.do"}) - public String printMsgSentDataAjax( - @ModelAttribute("searchVO") MjonPayVO mjonPayVO - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception { - - - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - mjonPayVO.setUserId(userId); - model.addAttribute("userNm", userNm); - - String pageType = mjonPayVO.getPageType(); - if(pageType.equals("all")) { - - }else if(pageType.equals("vbank")) { - mjonPayVO.setSearchCondition2("VBANK"); - mjonPayVO.setPayMethod("VBANK"); - - }else if(pageType.equals("card")) { - mjonPayVO.setSearchCondition2("CARD"); - mjonPayVO.setPayMethod("CARD"); - - }else if(pageType.equals("cellphone")) { - mjonPayVO.setSearchCondition2("CELLPHONE"); - mjonPayVO.setPayMethod("CELLPHONE"); - - }else if(pageType.equals("bank")) { - mjonPayVO.setSearchCondition2("BANK"); - mjonPayVO.setPayMethod("BANK"); - } - - mjonPayVO.setFirstIndex(0); - mjonPayVO.setRecordCountPerPage(10000); - - - //결제 리스트 정보 불러오기 - List resultList = mjonPayService.selectPayList(mjonPayVO); - model.addAttribute("resultList", resultList); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - return "web/pay/PayPrintListPopUp"; - } - - @RequestMapping(value= {"/web/member/pay/PayPrintPointListPopUpAjax.do"}) - public String payPrintPointPrintDataAjax( - @ModelAttribute("searchVO") MjonPayVO mjonPayVO - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - mjonPayVO.setUserId(userId); - model.addAttribute("userNm", userNm); - - mjonPayVO.setType("1"); // 현금 - mjonPayVO.setFirstIndex(0); - mjonPayVO.setRecordCountPerPage(10000); - - - //결제 리스트 정보 불러오기 - List resultList = mjonPayService.selectPointUseList(mjonPayVO); - model.addAttribute("resultList", resultList); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - return "web/pay/PayPrintPointListPopUp"; - } - - @RequestMapping(value= {"/web/member/pay/PayPrintRefundListPopUpAjax.do"}) - public String payPrintRefundPrintDataAjax( - @ModelAttribute("searchVO") MjonPayVO mjonPayVO - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - RefundVO refundVO = new RefundVO(); - refundVO.setRecordCountPerPage(100000); - refundVO.setFirstIndex(0); - - if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - refundVO.setSearchSortCnd("refundId"); - refundVO.setSearchSortOrd("desc"); - }else { - //환불 요청 리스트 정보 셋팅하기 - refundVO.setSearchSortCnd(mjonPayVO.getSearchSortCnd()); - refundVO.setSearchSortOrd(mjonPayVO.getSearchSortOrd()); - } - - // JSPark 2022.03.16 => 뷰 목록과 데이터 상이 - refundVO.setMberId(userId); - model.addAttribute("userNm", userNm); - - String refundListType = mjonPayVO.getRefundListType(); - - if(refundListType == null || refundListType.equals("")) { - mjonPayVO.setRefundListType("tab1"); - } - - refundVO.setStartDate(mjonPayVO.getStartDate()); - refundVO.setEndDate(mjonPayVO.getEndDate()); - - //결제 리스트 정보 불러오기 - List resultList = refundService.selectRefundList(refundVO); - model.addAttribute("resultList", resultList); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - return "web/pay/PayPrintRefundListPopUp"; - } - - @RequestMapping(value= {"/web/member/pay/PayPdfListPopUpAjax.do"}) - public String payPrintPdfDataAjax( - @ModelAttribute("searchVO") MjonMsgVO mjonMsgVO - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception { - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - mjonMsgVO.setUserId(userId); - model.addAttribute("userNm", userNm); - - mjonMsgVO.setFirstIndex(0); - mjonMsgVO.setRecordCountPerPage(10000); - - //결제 리스트 정보 불러오기 - List payUserList = mjonMsgDataService.selectPayUserList(mjonMsgVO); - model.addAttribute("payUserList", payUserList); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - return "web/pay/PrintPayUserListPdfPopUp"; - } - - //사용내역 pdf저장 카카오 추가 - @RequestMapping(value= {"/web/member/pay/PayPdfWithKakaoListPopUpAjax.do"}) - public String PayPdfWithKakaoListPopUpAjax( - @ModelAttribute("searchVO") MjonMsgVO mjonMsgVO - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception { - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - mjonMsgVO.setUserId(userId); - model.addAttribute("userNm", userNm); - - mjonMsgVO.setFirstIndex(0); - mjonMsgVO.setRecordCountPerPage(10000); - - //결제 리스트 정보 불러오기 - List payUserList = mjonMsgDataService.selectPayUserWithKakaoList(mjonMsgVO); - model.addAttribute("payUserList", payUserList); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - return "web/pay/PrintPayUserWithKakaoListPdfPopUp"; - } - - - /** - * 요금사용내역 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserList.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayUserList.do"}) - public String PayUserList(@ModelAttribute("mjonMsgVO") MjonMsgVO mjonMsgVO, - MjonPayVO mjonPayVO, - MberManageVO mberManageVO, RedirectAttributes redirectAttributes, - HttpServletRequest request, - ModelMap model) throws Exception{ - - /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - if(loginVO == null) { - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - { // 충전캐시 - String sumPayMoney = mjonPayService.selectAgentSumPayMoney(userId); - model.addAttribute("sumPayMoney", sumPayMoney); - } - - { // 충전포인트 - String sumPoint = mjonPayService.selectSumPoint(userId); - model.addAttribute("sumPoint", sumPoint); - } - - { // 총 사용금액 - mjonPayVO.setUserId(userId); - List usedCashTotList = mjonPayService.selectUsedCashWithKakaoTotCnt(mjonPayVO); - model.addAttribute("usedCashTotList", usedCashTotList); - } - { // 사용가능한 금액 - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - model.addAttribute("mberManageVO", mberManageVO); - } - - { // 발송건수 - mjonMsgVO.setReserveYn("N"); - List sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO); - model.addAttribute("sendTotList", sendTotList); - } - - { // 예약건수 - mjonMsgVO.setReserveYn("Y"); - List reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO); - model.addAttribute("reservToList", reservToList); - } - - { - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - if("p".equals(mberManageVO.getDept())) { //개인회원 선거 후보자 정보 불러오기 - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - if(mjonCandidateVO != null) { - mjonCandidateVO.setRegidentNo1(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1())); - mjonCandidateVO.setRegidentNo2(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2())); - } - } - model.addAttribute("mjonCandidateVO", mjonCandidateVO); - } - return "/web/pay/PayUserList"; - } - - /** - * 요금사용내역 카카오 테스트용 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserWithKakaoList.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayUserWithKakaoList.do"}) - public String PayUserWithKakaoList(@ModelAttribute("mjonMsgVO") MjonMsgVO mjonMsgVO, - MjonPayVO mjonPayVO, - MberManageVO mberManageVO, RedirectAttributes redirectAttributes, - HttpServletRequest request, - ModelMap model) throws Exception{ - - /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - if(loginVO == null) { - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - - { // 충전캐시 - String sumPayMoney = mjonPayService.selectAgentSumPayMoney(userId); - model.addAttribute("sumPayMoney", sumPayMoney); - } - - { // 충전포인트 - String sumPoint = mjonPayService.selectSumPoint(userId); - model.addAttribute("sumPoint", sumPoint); - } - - { // 총 사용금액 - mjonPayVO.setUserId(userId); - List usedCashTotList = mjonPayService.selectUsedCashWithKakaoTotCnt(mjonPayVO); - model.addAttribute("usedCashTotList", usedCashTotList); - } - { // 사용가능한 금액 - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - model.addAttribute("mberManageVO", mberManageVO); - } - - { // 발송건수 - mjonMsgVO.setReserveYn("N"); - List sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO); - model.addAttribute("sendTotList", sendTotList); - } - - { // 예약건수 - mjonMsgVO.setReserveYn("Y"); - List reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO); - model.addAttribute("reservToList", reservToList); - } - - return "/web/pay/PayUserWithKakaoList"; - } - /** - * 요금사용내역 하단 리스트 영역 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayUserListAjax.do"}) - public String PayUserListAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - if(mjonMsgVO.getPageUnit() != 10) { - mjonMsgVO.setPageUnit(mjonMsgVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgVO.getPageSize()); - - mjonMsgVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonMsgVO.setSearchSortCnd("regDate"); - mjonMsgVO.setSearchSortOrd("desc"); - } - - List payUserList = mjonMsgDataService.selectPayUserList(mjonMsgVO); - - paginationInfo.setTotalRecordCount(payUserList.size()> 0 ? payUserList.get(0).getTotCnt() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("payUserList", payUserList); - - return "/web/pay/PayUserListAjax"; - } - - - - - /** - * 요금사용내역 신규 화면 - * 2023.12.22 우영두 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserSWList.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayUserSWList.do"}) - public String PayUserSWList(@ModelAttribute("mjonMsgVO") MjonMsgVO mjonMsgVO, - MjonPayVO mjonPayVO, - MberManageVO mberManageVO, RedirectAttributes redirectAttributes, - HttpServletRequest request, - ModelMap model) throws Exception{ - - /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - if(loginVO == null) { - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - /* - { // 충전캐시 - String sumPayMoney = mjonPayService.selectAgentSumPayMoney(userId); - model.addAttribute("sumPayMoney", sumPayMoney); - } - - { // 충전포인트 - String sumPoint = mjonPayService.selectSumPoint(userId); - model.addAttribute("sumPoint", sumPoint); - } - */ - - { // 총 사용금액 - mjonPayVO.setUserId(userId); - List usedCashTotList = mjonPayService.selectUsedCashWithKakaoTotCnt(mjonPayVO); - model.addAttribute("usedCashTotList", usedCashTotList); - } - { // 사용가능한 금액 - // mberManageVO.prePaymentYn 선불 후불 회원 구분으로 인해 select함 - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - model.addAttribute("mberManageVO", mberManageVO); - } - /* - { // 발송건수 - mjonMsgVO.setReserveYn("N"); - List sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO); - model.addAttribute("sendTotList", sendTotList); - } - - { // 예약건수 - mjonMsgVO.setReserveYn("Y"); - List reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO); - model.addAttribute("reservToList", reservToList); - } - */ - {// 선거 후보자 정보 조회 - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - if("p".equals(mberManageVO.getDept())) { //개인회원 선거 후보자 정보 불러오기 - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - if(mjonCandidateVO != null) { - mjonCandidateVO.setRegidentNo1(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1())); - mjonCandidateVO.setRegidentNo2(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2())); - } - } - model.addAttribute("mjonCandidateVO", mjonCandidateVO); - } - - - { - /** - * 후불제 회원 관련 사용 요금 내역 정보 조회하기 - * 20231228 우영두 추가 - * 누적사용금액, 누적 납부금액, 당월 납부 예상금액 정보 조회 - * - * */ - - //누적 사용금액 조회 (캐시 테이블에서 현재까지 사용된 금액 합산 - 캐시 테이블에서 "-"로 사용된 금액만 합산) - String totSumCashAfterPay = mjonPayService.selectTotalSumCashForAfterPay(userId); - model.addAttribute("totSumCashAfterPay", totSumCashAfterPay); - - //누적 사용 포인트 조회 (포인트 테이블에서 현재까지 사용된 포인트 합산 - 회원 포인트 정보 업데이트시 사용되는 쿼리 이용) - String totSumPointAfterPay = mjonPayService.selectTotalSumPointForAfterPay(userId); - model.addAttribute("totSumPointAfterPay", totSumPointAfterPay); - - //누적 납부금액 조회 (후불회원이 사용금액을 실 납부한 금액 합산 - 미납 금액 제외한 총 합산 금액) - String totSumPaymentAfterPay = mjonPayService.selectTotSumPaymentAfterPay(userId); - model.addAttribute("totSumPaymentAfterPay", totSumPaymentAfterPay); - - //누적 납부 포인트 조회 ( 누적 납부금액 합산에 대한 2% 포인트 정보 계산) - float p_i_re_point = 0; - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - if (sysJoinSetVO != null) { - p_i_re_point = sysJoinSetVO.getPointPer(); - } - int paymentPointAfterPay = Math.round((Float.parseFloat(totSumPaymentAfterPay) * p_i_re_point / 100)); - model.addAttribute("sumPaymentPointAfterPay", paymentPointAfterPay); - - //당월 납부 예상금액 (누적 사용금액 합산 - 누적 납부금액 합산 정보 계산) - - float unPaymentAfterPay = Float.parseFloat(totSumCashAfterPay) - Float.parseFloat(totSumPaymentAfterPay); - model.addAttribute("unPaymentAfterPay", unPaymentAfterPay); - - //당월 납부 예상 포인트 (당월 납부 예상 금액에 대한 2% 포인트 정보 계산) - int unPaymentPointAfterPay = Math.round((unPaymentAfterPay * p_i_re_point / 100)); - model.addAttribute("unPaymentPointAfterPay", unPaymentPointAfterPay); - - /* - * 2024.02.06 후불제 회원 중 협의단가를 사용하는 회원은 포인트 적립이 되지 않아야함. - * 후불제 협의 단가 여부 체크 - * 모든 협의 단가 금액을 합산하여 0보다 크면 협의단가 있음. - * */ - float shortPrice = mberManageVO.getShortPrice(); - float longPrice = mberManageVO.getLongPrice(); - float picturePrice = mberManageVO.getPicturePrice() + mberManageVO.getPicture2Price() + mberManageVO.getPicture3Price(); - float kakaoAtPrice = mberManageVO.getKakaoAtPrice(); - float kakaoFtPrice = mberManageVO.getKakaoFtPrice(); - float totPrice = shortPrice + longPrice + picturePrice + kakaoAtPrice + kakaoFtPrice; - String negoPriceYn = "N"; - - if(totPrice > 0) { - negoPriceYn = "Y"; - } - model.addAttribute("negoPriceYn", negoPriceYn); - - } - { - // 초기 날짜 셋팅 - model.addAttribute("startDate", DateUtils.getDateMonthsAgo(12)); - model.addAttribute("endDate", DateUtils.getCurrentDate()); - } - - return "/web/pay/PayUserSWList"; - } - - - - - - - /** - * 요금사용내역 하단 리스트 영역 신규 화면 - * 2023.12.22 우영두 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserSWListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayUserSWListAjax.do"}) - public String PayUserSWListAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - try { - - if(mjonMsgVO.getPageUnit() != 10) { - mjonMsgVO.setPageUnit(mjonMsgVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgVO.getPageSize()); - - mjonMsgVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonMsgVO.setSearchSortCnd("regDate"); - mjonMsgVO.setSearchSortOrd("desc"); - } - - // 검색 데이터가 없거나 - // 시작일자가 종료일자보다 이후이거나 - // 총 기간이 365일이 넘으면 현재일부터 365일 전 날짜를 넣어서 검색 - if(!DateUtils.dateChkAndValueChk(mjonMsgVO.getStartDate(),mjonMsgVO.getEndDate(), 12 )) { - - mjonMsgVO.setStartDate(DateUtils.getDateMonthsAgo(12)); - mjonMsgVO.setEndDate(DateUtils.getCurrentDate()); - - }; - - List payUserSWList = mjonMsgDataService.selectPayUserSWList(mjonMsgVO); - - paginationInfo.setTotalRecordCount(payUserSWList.size()> 0 ? payUserSWList.get(0).getTotCnt() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("payUserSWList", payUserSWList); - - model.addAttribute("totSuccSendPrice", payUserSWList.size() > 0 ? PayUtils.getTrimToFirstDecimal(payUserSWList.get(0).getTotSuccSendPrice()) : 0); - - model.addAttribute("mjonMsgVO", mjonMsgVO); - - - } catch (Exception e) { - e.printStackTrace(); - System.out.println("PayUserSWListAjax Controller Error!!! " + e); - } - - - return "/web/pay/PayUserSWListAjax"; - } - - @RequestMapping(value= {"/web/member/pay/PayPdfSWListPopUpAjax.do"}) - public String payPrintPdfSWDataAjax( - @ModelAttribute("searchVO") MjonMsgVO mjonMsgVO - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception { - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - mjonMsgVO.setUserId(userId); - model.addAttribute("userNm", userNm); - - mjonMsgVO.setFirstIndex(0); - mjonMsgVO.setRecordCountPerPage(10000); - - //결제 리스트 정보 불러오기 - List payUserList = mjonMsgDataService.selectPayUserSWList(mjonMsgVO); - model.addAttribute("payUserList", payUserList); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - return "web/pay/PrintPayUserSWListPdfPopUp"; - } - - - /** - * 요금 사용내역 엑셀 다운 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayUserSWListExcelDownload.do"}) - public void PayUserSWListExcelDownload(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception{ - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - String fileName ="사용내역 엑셀 리스트"; // 저장 파일명 - String sheetTitle = "요금사용내역" ; // 셀 제목 - Sheet sheet = wb.createSheet(sheetTitle); - Cell cell = null; - Row row = null; - - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - - // 정렬 - style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬 - style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬 - - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - sheet.setColumnWidth(1, 5000); // 칼럼의 폭 조절 - sheet.setColumnWidth(4, 10000); // 칼럼의 폭 조절 - - try{ - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - mjonMsgVO.setRecordCountPerPage(100000); - mjonMsgVO.setFirstIndex(0); - - if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonMsgVO.setSearchSortCnd("regDate"); - mjonMsgVO.setSearchSortOrd("desc"); - } - - List payUserList = mjonMsgDataService.selectPayUserSWList(mjonMsgVO); - {//화면 리스트 - - row = sheet.createRow(0); - - sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //셀병합 - - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("날짜"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("문자유형"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - /*cell = row.createCell(5); - cell.setCellValue("충전"); - sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); //셀병합 - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellStyle(style);*/ - - cell = row.createCell(5); - cell.setCellValue("사용"); - sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); //셀병합 - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellStyle(style); - - - /*cell = row.createCell(9); - cell.setCellValue("잔액"); - sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); //셀병합 - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellStyle(style);*/ - - row = sheet.createRow(1); - - cell = row.createCell(0); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellStyle(style); - - /*cell = row.createCell(5); - cell.setCellValue("충전금"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("포인트"); - cell.setCellStyle(style);*/ - - cell = row.createCell(5); - cell.setCellValue("충전금"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("포인트"); - cell.setCellStyle(style); - - /*cell = row.createCell(9); - cell.setCellValue("충전금"); - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellValue("포인트"); - cell.setCellStyle(style);*/ - - DecimalFormat formatter = new DecimalFormat("###,###.##"); - String befCash = ""; - String befPoint = ""; - String totPrice = ""; - String thisPoint = ""; - - for(int i=0; i < payUserList.size(); i++) { - - befCash = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getBefCash())); - befPoint = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getBefPoint())); - totPrice = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getTotPrice())); - thisPoint = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getThisPoint())); - - String msgType = "단문"; - if(payUserList.get(i).getMsgTypeTxt().equals("6") && payUserList.get(i).getFileCnt().equals("0")) { - msgType = "장문"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("6") && !payUserList.get(i).getFileCnt().equals("0")) { - msgType = "그림"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("8")) { - msgType = "알림톡"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("9")) { - msgType = "친구톡"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("fax")) { - msgType = "팩스"; - } - - int sendCount = ((MjonMsgVO)payUserList.get(i)).getSendCount(); - - - String sendSum = Integer.toString(sendCount); - - if(payUserList.get(i).getMsgTypeTxt().equals("fax")) { - sendSum = sendSum+"("+payUserList.get(i).getFileCnt()+")"; - } - - row = sheet.createRow(i+2); - for(int j=0 ; j < 7 ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getRegDate()); //결제일시 - if(j==2) cell.setCellValue(msgType); //문자유형 - if(j==3) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendCnt()); //발송건수 - if(j==4) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSmsTxt()); //내용 - if(j==5) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendPrice()); //충전 - 충전금 - if(j==6) cell.setCellValue(0); //충전 - 포인트 - /*if(j==7) cell.setCellValue(totPrice); //사용 - 충전금 - if(j==8) cell.setCellValue(0); //사용 - 포인트 - if(j==9) cell.setCellValue(thisPoint); //잔액 - 충전금 - if(j==10) cell.setCellValue(befPoint); //잔액 - 포인트 -*/ } - } - } - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - - - @RequestMapping(value= {"/web/member/pay/PrintPayUserSWListAjax.do"}) - public String printPayUserSWListAjax( - @ModelAttribute("searchVO") MjonMsgVO mjonMsgVO - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception { - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - mjonMsgVO.setUserId(userId); - model.addAttribute("userNm", userNm); - - - mjonMsgVO.setFirstIndex(0); - mjonMsgVO.setRecordCountPerPage(10000); - - //결제 리스트 정보 불러오기 - List payUserList = mjonMsgDataService.selectPayUserSWList(mjonMsgVO); - model.addAttribute("payUserList", payUserList); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - return "web/pay/PrintPayUserSWListPopUp"; - } - - - - /** - * 요금사용내역 - 카카오 테스트용 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayUserWithKakaoListAjax.do"}) - public String PayUserWithKakaoListAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - if(mjonMsgVO.getPageUnit() != 10) { - mjonMsgVO.setPageUnit(mjonMsgVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonMsgVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonMsgVO.getPageUnit()); - paginationInfo.setPageSize(mjonMsgVO.getPageSize()); - - mjonMsgVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonMsgVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonMsgVO.setSearchSortCnd("regDate"); - mjonMsgVO.setSearchSortOrd("desc"); - } - - List payUserList = mjonMsgDataService.selectPayUserWithKakaoList(mjonMsgVO); - - paginationInfo.setTotalRecordCount(payUserList.size()> 0 ? payUserList.get(0).getTotCnt() : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("payUserList", payUserList); - - return "/web/pay/PayUserWithKakaoListAjax"; - } - - @RequestMapping(value= {"/web/member/pay/PrintPayUserListAjax.do"}) - public String printPayUserListAjax( - @ModelAttribute("searchVO") MjonMsgVO mjonMsgVO - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception { - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - mjonMsgVO.setUserId(userId); - model.addAttribute("userNm", userNm); - - - mjonMsgVO.setFirstIndex(0); - mjonMsgVO.setRecordCountPerPage(10000); - - //결제 리스트 정보 불러오기 - List payUserList = mjonMsgDataService.selectPayUserList(mjonMsgVO); - model.addAttribute("payUserList", payUserList); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - return "web/pay/PrintPayUserListPopUp"; - } - - //사용내역 인쇄하기 카카오 추가 - @RequestMapping(value= {"/web/member/pay/PrintPayUserWithKakaoListAjax.do"}) - public String PrintPayUserWithKakaoListAjax( - @ModelAttribute("searchVO") MjonMsgVO mjonMsgVO - , RedirectAttributes redirectAttributes - , ModelMap model) throws Exception { - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - mjonMsgVO.setUserId(userId); - model.addAttribute("userNm", userNm); - - - mjonMsgVO.setFirstIndex(0); - mjonMsgVO.setRecordCountPerPage(10000); - - //결제 리스트 정보 불러오기 - List payUserList = mjonMsgDataService.selectPayUserWithKakaoList(mjonMsgVO); - model.addAttribute("payUserList", payUserList); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - return "web/pay/PrintPayUserWithKakaoListPopUp"; - } - - /** - * 예약관리 문자 상세보기 내용 - * @param searchVO - * @param model - * @return "/web/member/pay/selectReservMsgDetailDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/selectPayUserMsgDetailDataAjax.do"}) - public String selectPayUserMsgDetailDataAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgVO.setUserId(userId); - - //문자 상세보기 처리 - MjonMsgVO resultMsgDetail = mjonMsgDataService.selectPayUserMsgDetailDataAjax(mjonMsgVO); - model.addAttribute("resultMsgDetail", resultMsgDetail); - - //문자 상세보기 이미지 아이디 받아오기 - String atchFileId1 =""; - String atchFileId2 =""; - String atchFileId3 =""; - - String path1 = resultMsgDetail.getFilePath1(); - String path2 = resultMsgDetail.getFilePath2(); - String path3 = resultMsgDetail.getFilePath3(); - - FileVO fileVO1 = new FileVO(); - FileVO fileVO2 = new FileVO(); - FileVO fileVO3 = new FileVO(); - - if(StringUtil.isNotEmpty(path1)) { - - //파일경로 및 이름을 이용하여 atchFileId, fileExtsn 번호 받아오기 - fileVO1 = getFilePathToAtchFileId(path1); - - } - - if(StringUtil.isNotEmpty(path2)) { - - //파일경로 및 이름을 이용하여 atchFileId, fileExtsn 번호 받아오기 - fileVO2 = getFilePathToAtchFileId(path2); - - } - - - if(StringUtil.isNotEmpty(path3)) { - - //파일경로 및 이름을 이용하여 atchFileId, fileExtsn 번호 받아오기 - fileVO3 = getFilePathToAtchFileId(path3); - - } - - model.addAttribute("fileVO1", fileVO1); - model.addAttribute("fileVO2", fileVO2); - model.addAttribute("fileVO3", fileVO3); - return "web/pay/PayUserMsgDetailPopAjax"; - } - - /** - * 사용내역 문자 상세보기 내용(카카오 추가) - * @param searchVO - * @param model - * @return "/web/member/pay//selectPayUserMsgWithKakaoDetailDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/selectPayUserMsgWithKakaoDetailDataAjax.do"}) - public String selectPayUserMsgWithKakaoDetailDataAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonMsgVO.setUserId(userId); - - //문자 상세보기 처리 - MjonMsgVO resultMsgDetail = mjonMsgDataService.selectPayUserMsgDetailDataAjax(mjonMsgVO); - model.addAttribute("resultMsgDetail", resultMsgDetail); - - //문자 상세보기 이미지 아이디 받아오기 - String atchFileId1 =""; - String atchFileId2 =""; - String atchFileId3 =""; - - String path1 = resultMsgDetail.getFilePath1(); - String path2 = resultMsgDetail.getFilePath2(); - String path3 = resultMsgDetail.getFilePath3(); - - FileVO fileVO1 = new FileVO(); - FileVO fileVO2 = new FileVO(); - FileVO fileVO3 = new FileVO(); - - if(StringUtil.isNotEmpty(path1)) { - - //파일경로 및 이름을 이용하여 atchFileId, fileExtsn 번호 받아오기 - fileVO1 = getFilePathToAtchFileId(path1); - - } - - if(StringUtil.isNotEmpty(path2)) { - - //파일경로 및 이름을 이용하여 atchFileId, fileExtsn 번호 받아오기 - fileVO2 = getFilePathToAtchFileId(path2); - - } - - - if(StringUtil.isNotEmpty(path3)) { - - //파일경로 및 이름을 이용하여 atchFileId, fileExtsn 번호 받아오기 - fileVO3 = getFilePathToAtchFileId(path3); - - } - - model.addAttribute("fileVO1", fileVO1); - model.addAttribute("fileVO2", fileVO2); - model.addAttribute("fileVO3", fileVO3); - return "web/pay/PayUserMsgWithKakaoDetailPopAjax"; - } - - //파일 이름을 이용하여 첨부파일 아이디(atchFileId), 첨부파일 순번(fileExtsn)을 찾는 함수 - public FileVO getFilePathToAtchFileId(String filePath) throws Exception{ - - //마지막 / 의 인덱스 값 +1을 기준으로 문자열을 짤라줌 - String strFilePath = filePath.substring(filePath.lastIndexOf("/")+1); - - FileVO returnFileVO = new FileVO(); - - //파일 이름과 확장자를 분리해줌 - String[] arrFileNm = strFilePath.split("\\."); - String fileNm = arrFileNm[0]; - String fileExtsn = arrFileNm[1]; - - FileVO fileVO = new FileVO(); - fileVO.setStreFileNm(fileNm); - fileVO.setFileExtsn(fileExtsn); - returnFileVO = mjonReservMsgService.selectFileNmToAtchFileIdInfo(fileVO); - - return returnFileVO; - - } - - - /** - * 요금사용내역 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/simpRecipAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/simpRecipAjax.do"}) - public String simpRecipAjax(MjonPayVO mjonPayVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonPayVO.setUserId(userId); - mjonPayVO.setBuyerName(loginVO.getName()); - - System.out.println(mjonPayVO.getMoid()); - System.out.println(mjonPayVO.getTid()); - - MjonPayVO resultPayVO = mjonPayService.selectPayVO(mjonPayVO); - - // Step 1. 세금계산서, 현금영수증 발행 - TaxVO taxVO2 = new TaxVO(); - taxVO2.setMoid(mjonPayVO.getMoid()); - taxVO2.setRcptType("3"); - taxService.deleteReceiptInfo(taxVO2); - - // Step 2. 간이영수증 발행 - TaxVO taxVO = new TaxVO(); - //간이영수증은 해당 팝업 호출 시 바로 완료처리함 - taxVO.setMoid(mjonPayVO.getMoid()); - taxVO.setRcptType("0"); // 발행유형-[PG결제-현금영수증 유형과 동일] 1:소득공제, 2:지출증빙, 3:의무발행, 9:세금계산서, 0:간이영수증 - taxVO.setConfirmYn("Y"); - taxVO.setFrstRegisterId(userId); - - taxService.insertCashBill(taxVO); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("resultPayVO", resultPayVO); - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - return "/web/pay/PaySimpRecipAjax"; - } - /** - * 요금 사용내역 엑셀 다운 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayUserListExcelDownload.do"}) - public void PayUserListExcelDownload(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception{ - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - String fileName ="사용내역 엑셀 리스트"; // 저장 파일명 - String sheetTitle = "요금사용내역" ; // 셀 제목 - Sheet sheet = wb.createSheet(sheetTitle); - Cell cell = null; - Row row = null; - - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - - // 정렬 - style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬 - style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬 - - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - sheet.setColumnWidth(1, 5000); // 칼럼의 폭 조절 - sheet.setColumnWidth(4, 10000); // 칼럼의 폭 조절 - - try{ - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - mjonMsgVO.setRecordCountPerPage(100000); - mjonMsgVO.setFirstIndex(0); - - if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonMsgVO.setSearchSortCnd("regDate"); - mjonMsgVO.setSearchSortOrd("desc"); - } - - List payUserList = mjonMsgDataService.selectPayUserList(mjonMsgVO); - {//화면 리스트 - - row = sheet.createRow(0); - - sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //셀병합 - - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("날짜"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("문자유형"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("충전"); - sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); //셀병합 - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("사용"); - sheet.addMergedRegion(new CellRangeAddress(0,0,7,8)); //셀병합 - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellStyle(style); - - - cell = row.createCell(9); - cell.setCellValue("잔액"); - sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); //셀병합 - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellStyle(style); - - row = sheet.createRow(1); - - cell = row.createCell(0); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("충전금"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("포인트"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("충전금"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("포인트"); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("충전금"); - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellValue("포인트"); - cell.setCellStyle(style); - - DecimalFormat formatter = new DecimalFormat("###,###.##"); - String befCash = ""; - String befPoint = ""; - String totPrice = ""; - String thisPoint = ""; - - for(int i=0; i < payUserList.size(); i++) { - - befCash = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getBefCash())); - befPoint = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getBefPoint())); - totPrice = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getTotPrice())); - thisPoint = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getThisPoint())); - - String msgType = "단문"; - if(payUserList.get(i).getMsgTypeTxt().equals("6") && payUserList.get(i).getFileCnt().equals("0")) { - msgType = "장문"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("6") && !payUserList.get(i).getFileCnt().equals("0")) { - msgType = "그림"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("8")) { - msgType = "알림톡"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("9")) { - msgType = "친구톡"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("fax")) { - msgType = "팩스"; - } - - int sendCount = ((MjonMsgVO)payUserList.get(i)).getSendCount(); - - - String sendSum = Integer.toString(sendCount); - - if(payUserList.get(i).getMsgTypeTxt().equals("fax")) { - sendSum = sendSum+"("+payUserList.get(i).getFileCnt()+")"; - } - - row = sheet.createRow(i+2); - for(int j=0 ; j <= sendPayUserExcelValue.length ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getRegDate()); //결제일시 - if(j==2) cell.setCellValue(msgType); //문자유형 - if(j==3) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSendCount()); //발송건수 - if(j==4) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSmsTxt()); //내용 - if(j==5) cell.setCellValue(befCash); //충전 - 충전금 - if(j==6) cell.setCellValue(befPoint); //충전 - 포인트 - if(j==7) cell.setCellValue(totPrice); //사용 - 충전금 - if(j==8) cell.setCellValue(0); //사용 - 포인트 - if(j==9) cell.setCellValue(thisPoint); //잔액 - 충전금 - if(j==10) cell.setCellValue(befPoint); //잔액 - 포인트 - } - } - } - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - - /** - * 요금 사용내역 엑셀 다운 카카오 추가 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserWithKakaoListExcelDownload.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayUserWithKakaoListExcelDownload.do"}) - public void PayUserWithKakaoListExcelDownload(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception{ - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - String fileName ="사용내역 엑셀 리스트"; // 저장 파일명 - String sheetTitle = "요금사용내역" ; // 셀 제목 - Sheet sheet = wb.createSheet(sheetTitle); - Cell cell = null; - Row row = null; - - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - - // 정렬 - style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬 - style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬 - - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - sheet.setColumnWidth(1, 5000); // 칼럼의 폭 조절 - sheet.setColumnWidth(4, 10000); // 칼럼의 폭 조절 - - try{ - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - mjonMsgVO.setRecordCountPerPage(100000); - mjonMsgVO.setFirstIndex(0); - - if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonMsgVO.setSearchSortCnd("regDate"); - mjonMsgVO.setSearchSortOrd("desc"); - } - - List payUserList = mjonMsgDataService.selectPayUserWithKakaoList(mjonMsgVO); - {//화면 리스트 - - row = sheet.createRow(0); - - sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //셀병합 - - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("날짜"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("문자유형"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("충전"); - sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); //셀병합 - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("사용"); - sheet.addMergedRegion(new CellRangeAddress(0,0,7,8)); //셀병합 - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellStyle(style); - - - cell = row.createCell(9); - cell.setCellValue("잔액"); - sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); //셀병합 - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellStyle(style); - - row = sheet.createRow(1); - - cell = row.createCell(0); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("충전금"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("포인트"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("충전금"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("포인트"); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("충전금"); - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellValue("포인트"); - cell.setCellStyle(style); - - DecimalFormat formatter = new DecimalFormat("###,###.##"); - String befCash = ""; - String befPoint = ""; - String totPrice = ""; - String thisPoint = ""; - - for(int i=0; i < payUserList.size(); i++) { - - befCash = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getBefCash())); - //카카오 테스트 데이터들에 beforPoint가 null이라 임시로 null체크 처리 - if(payUserList.get(i).getBefPoint() != null){ - befPoint = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getBefPoint())); - } - totPrice = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getTotPrice())); - thisPoint = formatter.format(Double.parseDouble(((MjonMsgVO)payUserList.get(i)).getThisPoint())); - - String msgType = "단문"; - if(payUserList.get(i).getMsgTypeTxt().equals("6") && payUserList.get(i).getFileCnt().equals("0")) { - msgType = "장문"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("6") && !payUserList.get(i).getFileCnt().equals("0")) { - msgType = "그림"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("8")) { - msgType = "알림톡"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("9")) { - msgType = "친구톡"; - }else if(payUserList.get(i).getMsgTypeTxt().equals("fax")) { - msgType = "팩스"; - } - - int sendCount = ((MjonMsgVO)payUserList.get(i)).getSendCount(); - - - String sendSum = Integer.toString(sendCount); - - if(payUserList.get(i).getMsgTypeTxt().equals("fax")) { - sendSum = sendSum+"("+payUserList.get(i).getFileCnt()+")"; - } - - row = sheet.createRow(i+2); - for(int j=0 ; j < sendPayUserExcelValue.length ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getRegDate()); //결제일시 - if(j==2) cell.setCellValue(msgType); //문자유형 - if(j==3) cell.setCellValue(sendSum); //발송건수 - if(j==4) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSmsTxt()); //내용 - if(j==5) cell.setCellValue(befCash); //충전 - 충전금 - if(j==6) cell.setCellValue(befPoint); //충전 - 포인트 - if(j==7) cell.setCellValue(totPrice); //사용 - 충전금 - if(j==8) cell.setCellValue(0); //사용 - 포인트 - if(j==9) cell.setCellValue(thisPoint); //잔액 - 충전금 - if(j==10) cell.setCellValue(befPoint); //잔액 - 포인트 - } - } - } - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - - - - /** - * 계산서/현금영수증 발행 등록 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/BillPub.do"}) - public String BillPub(@ModelAttribute("searchVO") MjonPayVO mjonPayVO, @RequestParam(required = false) String billType, - HttpServletRequest request, RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - if(loginVO == null) { - //redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다."); - return "redirect:/web/user/login/login.do"; - } - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - // 이메일 코드조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("ITN031"); - model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - MberManageVO mberManageVO = mberManageService.selectMber(userId); - //결제내역에서 왔을 시 세금계산서/현금영수증 수정 화면 맞게 뿌려주기 - mberManageVO.setBillType(billType); - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - if("p".equals(mberManageVO.getDept())) { //개인회원 선거 후보자 정보 불러오기 - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - if(mjonCandidateVO != null) { - mjonCandidateVO.setRegidentNo1(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1())); - mjonCandidateVO.setRegidentNo2(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2())); - } - } - model.addAttribute("mberManageVO", mberManageVO); - model.addAttribute("mjonCandidateVO", mjonCandidateVO); - return "/web/pay/BillPub"; - } - - /** - * 계산서/현금영수증 자동발행 select - 세금계산서 자동 발행 일 시 현금영수증 탭 이동 막기, 현금영수증 자동 발행 시 세금계산서 탭 이동 막기 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/billSelectAjax.do"}) - public ModelAndView billSelectAjax(@ModelAttribute("searchVO") MjonPayVO mjonPayVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - MberManageVO mberManageVO = mberManageService.selectMber(loginVO.getId()); - - //개인회원일 시 선거후보자 주민등록번호 체크 후 후보자 미등록시 세금계산서 발행 막기 - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - String regidentNo = ""; - if("p".equals(mberManageVO.getDept())) { - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(mberManageVO.getMberId()); - if(mjonCandidateVO != null) { - regidentNo = mjonCandidateVO.getRegidentNo1() + mjonCandidateVO.getRegidentNo2(); - } - } - - modelAndView.addObject("dept", mberManageVO.getDept()); - modelAndView.addObject("regidentNo", regidentNo); - modelAndView.addObject("taxbillAutoYN", mberManageVO.getTaxbillAuto()); - modelAndView.addObject("cashbillAutoYN", mberManageVO.getCashbillAuto()); - - return modelAndView; - } - - /** - * 계산서 발행 수정 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/updateTaxbill.do"}) - public String updateTaxbill(@ModelAttribute("searchVO") MjonPayVO mjonPayVO, - @ModelAttribute("mberManageVO") MberManageVO mberManageVO, HttpServletRequest request, - ModelMap model, RedirectAttributes redirectAttributes) throws Exception{ - - //230801 이지우 추가 - 세금계산서 발행 시 아이디 변조하여 다른 계정의 세금계산서 정보 수정하는 취약점 대응 조치 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getUniqId()); - - if(userId.equals("")) { - - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("fail.common.login")); - return "redirect:/web/member/pay/BillPub.do"; - - } - - try { - - //세금계산서 정보 수정해주기 - mberManageVO.setUniqId(userId); - mberManageService.updateTaxbill(mberManageVO); - - /* - * 20231122 우영두 기능 추가 - * 개인회원인 경우 - * 세금계산서 타입이 개인인 경우 - * 후보자 정보가 있는지 확인하여 후보자 정보가 있다면 세금계산서 정보와 일치하도록 변경된 정보를 후보자 정보도 수정해준다. - * */ - String mberId = loginVO.getId(); - String taxCNm = mberManageVO.getTaxCNm(); - - MberManageVO tmpMberManageVO = mjonMsgDataService.selectMberManageInfo(mberId); - String dept = tmpMberManageVO.getDept(); - - //후보자 정보 조회 - MjonCandidateVO mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(mberId); - - if(mjonCandidateVO != null && dept.equals("p") && taxCNm != null && taxCNm.length() > 0) { - - String candidateNm = mjonCandidateVO.getCandidateNm(); - if(candidateNm != null && candidateNm.length() > 0) { - - MjonCandidateVO updtCandidateVO = new MjonCandidateVO(); - - //이메일 정보 아이디/도메인 정보 분리 - String email = mberManageVO.getTaxMngEmail().split("@")[0]; - String emailDomain = mberManageVO.getTaxMngEmail().split("@")[1]; - - /* - * 주민번호 앞, 뒷 자리 암호화 처리하기 - * 세금계산서에서 주민번호는 별도로 암/복호화 처리를 안하고 저장함 - * 기본 가비아 암호화 솔루션 처리로 안한것 같음, 후보자 정보 쪽에서는 전자정부 프레임워크의 암/복호화 적용하여 저장함. - * - * */ - String regidentNo1 = egovCryptoUtil.encrypt(mberManageVO.getTaxCIhidNum().substring(0, 6)); - String regidentNo2 = egovCryptoUtil.encrypt(mberManageVO.getTaxCIhidNum().substring(6, 13)); - - updtCandidateVO.setMberId(mberId); - updtCandidateVO.setCandidateNm(taxCNm); - updtCandidateVO.setRegidentNo1(regidentNo1); - updtCandidateVO.setRegidentNo2(regidentNo2); - updtCandidateVO.setCandidateAddr(mberManageVO.getTaxCAddr()); - updtCandidateVO.setManagerNm(mberManageVO.getTaxMngNm()); - updtCandidateVO.setPhoneNo(mberManageVO.getTaxMngPhoneNum()); - updtCandidateVO.setEmail(email); - updtCandidateVO.setEmailDomain(emailDomain); - updtCandidateVO.setLastUpdusrId(mberId); - - int resultCnt = mjonCandidateService.updateCandidateDataInfo(updtCandidateVO); - - } - - } - - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); - - } catch (Exception e) { - System.out.println("updateTaxbill Controller Error!!! " + e); - - redirectAttributes.addFlashAttribute("message", "세금계산서 정보 수정 중 오류가 발생하였습니다."); - return "redirect:/web/member/pay/BillPub.do"; - } - - return "redirect:/web/member/pay/BillPub.do"; - } - /** - * 현금영수증 발행 수정 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/updateCashbill.do"}) - public String updateCashbill(@ModelAttribute("searchVO") MjonPayVO mjonPayVO, - @ModelAttribute("mberManageVO") MberManageVO mberManageVO, HttpServletRequest request, - ModelMap model, RedirectAttributes redirectAttributes) throws Exception{ - - mberManageService.updateCashbill(mberManageVO); - - redirectAttributes.addFlashAttribute("message", egovMessageSource.getMessage("success.common.update")); - - return "redirect:/web/member/pay/BillPub.do"; - } - - //결제 엑셀 다운로드 - @RequestMapping(value= {"/web/member/pay/PayExcelDownload_OLD.do"}) - public void PayExcelDownload( MjonPayVO mjonPayVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - mjonPayVO.setRecordCountPerPage(100000); - mjonPayVO.setFirstIndex(0); - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - Cell cell = null; - Row row = null; - - String fileName ="결제내역 엑셀 리스트"; - - String sheetTitle = ""; - try{ - if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonPayVO.setSearchSortCnd("moid"); - mjonPayVO.setSearchSortOrd("desc"); - } - if(!"".equals(mjonPayVO.getPayMethod())){ - mjonPayVO.setSearchCondition2(mjonPayVO.getPayMethod()); - } - - // JSPark 2022.03.16 => 뷰 목록과 데이터 상이 - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonPayVO.setUserId(userId); - - List resultList = mjonPayService.selectPayList(mjonPayVO); - { //화면 리스트 - sheetTitle = "요금결제내역" ; //제목 - Sheet sheet = wb.createSheet(sheetTitle); - row = sheet.createRow(0); - for(int i=0 ; i < sendPayExcelValue.length ; i++) { - cell = row.createCell(i); - cell.setCellStyle(style); - cell.setCellValue(sendPayExcelValue[i][1]); - } - - for(int i=0; i < resultList.size(); i++){ - row = sheet.createRow(i+1); - for(int j=0 ; j < sendPayExcelValue.length ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(((MjonPayVO)resultList.get(i)).getRegDate()); //결제일시 - if(j==2) cell.setCellValue(((MjonPayVO)resultList.get(i)).getPayMethodTxt()); //결제방식 - if(j==3) cell.setCellValue(((MjonPayVO)resultList.get(i)).getAmt()); //결제금액(부과세포함) - if(j==4) cell.setCellValue(((MjonPayVO)resultList.get(i)).getPgStatusTxt()); //결제상태 - if(j==5) cell.setCellValue(((MjonPayVO)resultList.get(i)).getTid()); //결제정보 - if(j==6) cell.setCellValue(((MjonPayVO)resultList.get(i)).getRcptTypeTxt()); //증빙서류 발행요청 - } - } - } - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - - //결제 엑셀 다운로드 - @RequestMapping(value= {"/web/member/pay/PayExcelDownload.do"}) - public void PayNewExcelDownload( MjonPayVO mjonPayVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - //로그인 여부 체크 및 ID 획득 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(loginVO != null) { - - String fileName ="결제내역 엑셀 리스트"; //file name - - try{ - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(1); - paginationInfo.setRecordCountPerPage(10000); - paginationInfo.setPageSize(10); - - mjonPayVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonPayVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonPayVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - mjonPayVO.setUserId(userId); - - - //url에 따른 타입 처리 - String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); - System.out.println("pattern========"); - System.out.println(pattern); - - //url에 따른 검색 조건 처리 - mjonPayVO = this.p_checkSearchCnd(pattern, mjonPayVO); - - - //검색 기간 처리 - mjonPayVO = this.p_checkSearchDate(mjonPayVO); - - - //정렬 처리 - mjonPayVO = this.p_checkSortCnd(mjonPayVO); - - - //결과 리스트 정보 불러오기 - List resultList = mjonPayService.selectPayList(mjonPayVO); - - //필요 컬럼 추가 - for (int i=0;i excelData = new ArrayList<>(); - excelData.addAll(resultList); - // 세팅값 - String title = "요금결제내역"; //sheet name & title - - // 너비 - int[] width = { - 4000 - , 4000 - , 4000 - , 4000 - , 4000 - - , 4000 - //, 4000 - , 4000 - }; - - // 헤더 - String[] header = { - "번호" - , "결제일시" - , "결제방식" - , "결제금액" - , "충전금액" - - , "결제상태" - //, "증빙서류 발행 요청" - , "비고1" - }; - - // 컬럼명 - String[] order = { - "SeqNo" - , "RegDate" - , "PayMethodTxt" - , "Amt" - , "Cash" - - , "PgStatusTxt" - //, "RcptTypeTxt" - , "VbankNum" - - }; - - // 호출 - download file 처리 - SXSSFWorkbook workbook = ExcelUtil.makeSimpleFruitExcelWorkbook(excelData , header, order, width, title); - response = this.p_makeResponse(response, fileName); - workbook.write(response.getOutputStream()); - - }catch(Exception e) { - e.printStackTrace(); - } - - } - - } - - //포인트 교환내역 엑셀 다운로드 - @RequestMapping(value= {"/web/member/pay/PointExcelDownload.do"}) - public void PointExcelDownload( MjonPayVO mjonPayVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - mjonPayVO.setRecordCountPerPage(100000); - mjonPayVO.setFirstIndex(0); - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - Cell cell = null; - Row row = null; - - String fileName ="포인트 교환내역 엑셀 리스트"; - - String sheetTitle = ""; - try{ - if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonPayVO.setSearchSortCnd("pointUseId"); - mjonPayVO.setSearchSortOrd("desc"); - } - - // JSPark 2022.03.16 => 뷰 목록과 데이터 상이 - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonPayVO.setUserId(userId); - mjonPayVO.setType("1"); // 현금 - - List resultList = mjonPayService.selectPointUseList(mjonPayVO); - { //화면 리스트 - sheetTitle = "포인트 교환내역" ; //제목 - Sheet sheet = wb.createSheet(sheetTitle); - row = sheet.createRow(0); - for(int i=0 ; i < sendPointUseExcelValue.length ; i++) { - cell = row.createCell(i); - cell.setCellStyle(style); - cell.setCellValue(sendPointUseExcelValue[i][1]); - } - - for(int i=0; i < resultList.size(); i++){ - row = sheet.createRow(i+1); - for(int j=0 ; j < sendPointUseExcelValue.length ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(((MjonPayVO)resultList.get(i)).getFrstRegistPnttm()); //교환일시 - if(j==2) { //교환방식 - String type = ((MjonPayVO)resultList.get(i)).getType(); - if(type.equals("1")) { - cell.setCellValue("현금"); - }else { - cell.setCellValue("캐쉬 전환"); - } - } - if(j==3) cell.setCellValue(((MjonPayVO)resultList.get(i)).getPoint()); //교환 포인트 - if(j==4) { //교환상태 - String cmpltYn = ((MjonPayVO)resultList.get(i)).getCmpltYn(); - if(cmpltYn.equals("Y")) { - cell.setCellValue("전환 완료"); - }else if(cmpltYn.equals("N")) { - cell.setCellValue("처리중"); - }else { - cell.setCellValue("전환 불가"); - } - } - if(j==5) cell.setCellValue(((MjonPayVO)resultList.get(i)).getBankNm()); //은행 - if(j==6) cell.setCellValue(((MjonPayVO)resultList.get(i)).getAccountNum()); //계좌번호 - if(j==7) cell.setCellValue(((MjonPayVO)resultList.get(i)).getAccountNm()); //예금주 - if(j==8) cell.setCellValue(((MjonPayVO)resultList.get(i)).getMbtlNum()); //연락처 - } - } - } - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - - //환불 요청내역 엑셀 다운로드 - @RequestMapping(value= {"/web/member/pay/refundExcelDownload.do"}) - public void refundExcelDownload( MjonPayVO mjonPayVO, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception { - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - Cell cell = null; - Row row = null; - - String fileName ="환불 요청내역 엑셀 리스트"; - String sheetTitle = ""; - try{ - - RefundVO refundVO = new RefundVO(); - refundVO.setRecordCountPerPage(100000); - refundVO.setFirstIndex(0); - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - - if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - refundVO.setSearchSortCnd("refundId"); - refundVO.setSearchSortOrd("desc"); - }else { - //환불 요청 리스트 정보 셋팅하기 - refundVO.setSearchSortCnd(mjonPayVO.getSearchSortCnd()); - refundVO.setSearchSortOrd(mjonPayVO.getSearchSortOrd()); - } - - // JSPark 2022.03.16 => 뷰 목록과 데이터 상이 - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - refundVO.setMberId(userId); - - String refundListType = mjonPayVO.getRefundListType(); - - if(refundListType == null || refundListType.equals("")) { - mjonPayVO.setRefundListType("tab1"); - } - - refundVO.setStartDate(mjonPayVO.getStartDate()); - refundVO.setEndDate(mjonPayVO.getEndDate()); - - List resultList = refundService.selectRefundList(refundVO); - { //화면 리스트 - sheetTitle = "환불 요청내역" ; //제목 - Sheet sheet = wb.createSheet(sheetTitle); - row = sheet.createRow(0); - for(int i=0 ; i < refundExcelValue.length ; i++) { - cell = row.createCell(i); - cell.setCellStyle(style); - cell.setCellValue(refundExcelValue[i][1]); - } - - for(int i=0; i < resultList.size(); i++){ - row = sheet.createRow(i+1); - for(int j=0 ; j < refundExcelValue.length ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(((RefundVO)resultList.get(i)).getFrstRegisterPnttm()); //환불요청일시 - if(j==2) cell.setCellValue(((RefundVO)resultList.get(i)).getRefundHandlePnttm()); //환불처리일시 - if(j==3) cell.setCellValue(((RefundVO)resultList.get(i)).getRefundMoney()); //환불요청금액 - if(j==4) cell.setCellValue(((RefundVO)resultList.get(i)).getRefundCash()); //환불처리금액 - if(j==5) { //교환상태 - String refundStatus = ((RefundVO)resultList.get(i)).getRefundStatus(); - if(refundStatus.equals("1")) { - cell.setCellValue("환불 요청"); - }else if(refundStatus.equals("2")) { - cell.setCellValue("환불 처리중 "); - }else if(refundStatus.equals("3")) { - cell.setCellValue("환불 완료"); - }else { - cell.setCellValue("환불 취소"); - } - } - } - } - } - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - - - /** - * 결제 Action 페이지 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayActionAjax.do"}) - public String PayAction(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - String pattern = (String) request.getAttribute( - HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - - mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "pay/payResultAjax.do") ; - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - //테스트 - mjonPayVO.setBuyerName(loginVO.getName()); //구매자 이름 - mjonPayVO.setBuyerEmail(loginVO.getEmail()); //구매자 이메일 - mjonPayVO.setBuyerTel(loginVO.getMoblphonNo()); //구매자 휴대폰 번호 - //moid 생성 위치 변경 - mjonPayVO.setMoid(idgenPgMoid.getNextStringId()); - - model.addAttribute("mjonPayVO", mjonPayVO); - return "web/cop/nicepay/payRequestMber"; - - } - - /** - * 포인트 전환 ajax - * @param mjonPayVO - * @param model - * @throws Exception - */ - @RequestMapping(value= "/web/member/pay/pointUseAjax.do") - public ModelAndView pointUseAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - LoginVO user = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - mjonPayVO.setFrstRegisterId(user.getId()); - mjonPayVO.setUserId(user.getId()); - - RefundVO refundVO = new RefundVO(); - refundVO.setMberId(user.getId()); - - RefundVO mberInfoVO = refundService.selectRefundMberInfo(refundVO); - - //포인트 교환요청에서 포인트 정보가 음수(-)로 넘어오는 경우 처리를 위해 절대값 처리 해줌. - 20230824 우영두 - mjonPayVO.setPoint(Math.abs(mjonPayVO.getPoint())); - - if(Double.parseDouble(mberInfoVO.getMberPoint()) - < mjonPayVO.getPoint()) { - - modelAndView.addObject("status", "moreThanUserPoint"); - modelAndView.addObject("msg", "현재 회원의 보유포인트보다 큰 포인트를 환불 할 수 없습니다."); - - return modelAndView; - } - - - if("1".equals(mjonPayVO.getType())){ //현금전환 시 - mjonPayVO.setMemo("현금 "+mjonPayVO.getPoint()+" 전환"); //전환 내용 - mjonPayVO.setCmpltYn("N"); //현금 전환 시 처리 전 - }else { //잔액 전환 시 - mjonPayVO.setMemo("잔액 "+mjonPayVO.getPoint()+" 전환"); //전환 내용 - mjonPayVO.setCmpltYn("Y"); //잔액 전환 시 바로 처리 - } - try { - //impl에서 point use 테이블, point 테이블, cash 테이블, 회워테이블 insert 및 update 처리 - mjonPayService.insertPointUse(mjonPayVO); - modelAndView.addObject("result", "success"); - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // 이메일 체크 - if (joinSettingVO != null && joinSettingVO.getEmailNoti().equals("Y")) { - String emailTitle = "결제관리 > 포인트 현금 전환 요청"; - // CS관리자 이메일 알림전송 - mjonNoticeSendUtil.csAdminEmailNoticeSend(user.getName(), user.getId(), emailTitle); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] 포인트 현금 전환 요청 - " + user.getName() +"("+ user.getId() + ")"; - mjonCommon.sendSimpleSlackMsg(msg); - } - - }catch (Exception e) { - modelAndView.addObject("result", "fail"); - } - - return modelAndView; - - } /** * 포인트 현금 전환 요청 목록 @@ -4818,547 +1311,6 @@ public class MjonPayController { return modelAndView; } - /** - * 요금사용내역 - > 사용내역서 팝업 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/printMsgUsageDetailsAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/printMsgUsageDetailsAjax.do"}) - public String printMsgUsageDetailsAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - ModelMap model) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - int sendSumCount = 0; - double supplySumPrice = 0.0; - double vatSumPrice = 0.0; - double totalSumPrice = 0.0; - Date minRegDate = null; - Date maxRegDate = null; - int i = 0; - - String pageType = mjonMsgVO.getPageType(); - - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd"); - List payUserSumList = new ArrayList(); - - if(!pageType.equals("fax")) { - payUserSumList = mjonMsgDataService.selectPayUserSumList(mjonMsgVO); - for(MjonMsgVO item : payUserSumList) { - sendSumCount = sendSumCount + (item.getShtSendCount() + item.getLongSendCount() + item.getPictSendCount() + item.getAtSendCount() + item.getFtSendCount() + item.getFaxSendCount()); - supplySumPrice += item.getSupplyPrice(); - vatSumPrice += item.getVatPrice(); - totalSumPrice += item.getTotalPrice(); - - // 시작일, 종료일 - if (i == 0) { - minRegDate = transFormat.parse(item.getMinRegDate()); - maxRegDate = transFormat.parse(item.getMaxRegDate()); - } - else { - if(minRegDate.after(transFormat.parse(item.getMinRegDate()))) { - minRegDate = transFormat.parse(item.getMinRegDate()); - } - - if(maxRegDate.before(transFormat.parse(item.getMaxRegDate()))) { - maxRegDate = transFormat.parse(item.getMaxRegDate()); - } - } - - i++; - } - } - - //팩스 내용 불러오기 - List payUserSumFaxList = new ArrayList(); - - if(pageType.equals("") || pageType.equals("fax")) { - //팩스 정보 불러오기 - payUserSumFaxList = mjonMsgDataService.selectPayUserSumFaxList(mjonMsgVO); - - //총 사용금액에 팩스 금액 합산해주기 - for(MjonMsgVO item : payUserSumFaxList) { - supplySumPrice += item.getSupplyPrice(); - totalSumPrice += item.getTotalPrice(); - - } - } - - model.addAttribute("payUserSumFaxList", payUserSumFaxList); - - // 현재 날짜 구하기 (시스템 시계, 시스템 타임존) - LocalDate now = LocalDate.now(); - int year = now.getYear(); - int month = now.getMonthValue(); - int day = now.getDayOfMonth(); - String monthStr = now.getMonthValue() > 9 ? "" + now.getMonthValue() : "0" + now.getMonthValue(); - int lastDay = 0; - Calendar cal = Calendar.getInstance(); - cal.set(year, month-1, day); - lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - model.addAttribute("monthStr", monthStr); - model.addAttribute("lastDay", lastDay); - - String startDate = mjonMsgVO.getStartDate(); - if(!"".equals(startDate)) { - startDate = startDate.replaceAll("/", "-"); - }else { - - if(minRegDate != null) { - startDate = transFormat.format(minRegDate); - } - } - model.addAttribute("startDate", startDate); - - String endDate = mjonMsgVO.getEndDate(); - if(!"".equals(endDate)) { - endDate = endDate.replaceAll("/", "-"); - }else { - if(maxRegDate != null) { - endDate = transFormat.format(maxRegDate); - } - } - model.addAttribute("endDate", endDate); - - DecimalFormat decFormat = new DecimalFormat("###,###"); - model.addAttribute("sendSumCount", decFormat.format(sendSumCount)); - model.addAttribute("supplySumPrice", decFormat.format(supplySumPrice)); - model.addAttribute("vatSumPrice", decFormat.format(vatSumPrice)); - model.addAttribute("totalSumPrice", decFormat.format(totalSumPrice)); - model.addAttribute("resultList", payUserSumList); - - // 수신자 정보 - String mberNm = ""; // 회사명 - String managerNm = ""; // 담당자명 - String moblphonNo = ""; // 연락처 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - if (mberManageVO != null) { - // 회원종류 p-개인 c-기업 - if (mberManageVO.getDept().equals("c")) { - mberNm = mberManageVO.getMberNm(); - managerNm = mberManageVO.getManagerNm(); - moblphonNo = mberManageVO.getMoblphonNo(); - } - else { - mberNm = mberManageVO.getMberNm(); - managerNm = mberManageVO.getMberNm(); - moblphonNo = mberManageVO.getMoblphonNo(); - } - } - - model.addAttribute("mberNm", mberNm); - model.addAttribute("managerNm", managerNm); - model.addAttribute("moblphonNo", moblphonNo); - - //부가세 포함 가격 정보 계산 - double addTax = Math.round(totalSumPrice * 0.1); - - model.addAttribute("addTax", decFormat.format(addTax)); - model.addAttribute("addTaxSumPrice", decFormat.format(addTax+totalSumPrice)); - model.addAttribute("pageType", mjonMsgVO.getPageType()); - - return "/web/pay/MsgPrintUsageDetailsPopUp"; - } - - /** - * 요금사용내역 - > 사용내역서 팝업 카카오 추가 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/printMsgUsageDetailsAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/printMsgWithKakaoUsageDetailsAjax.do"}) - public String printMsgWithKakaoUsageDetailsAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - ModelMap model) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - int sendSumCount = 0; - double supplySumPrice = 0.0; - double vatSumPrice = 0.0; - double totalSumPrice = 0.0; - Date minRegDate = null; - Date maxRegDate = null; - int i = 0; - - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd"); - List payUserSumList = mjonMsgDataService.selectPayUserWithKakaoSumList(mjonMsgVO); - for(MjonMsgVO item : payUserSumList) { - sendSumCount += item.getSendCount(); - supplySumPrice += item.getSupplyPrice(); - vatSumPrice += item.getVatPrice(); - totalSumPrice += item.getTotalPrice(); - - // 시작일, 종료일 - if (i == 0) { - minRegDate = transFormat.parse(item.getMinRegDate()); - maxRegDate = transFormat.parse(item.getMaxRegDate()); - } - else { - if(minRegDate.after(transFormat.parse(item.getMinRegDate()))) { - minRegDate = transFormat.parse(item.getMinRegDate()); - } - - if(maxRegDate.before(transFormat.parse(item.getMaxRegDate()))) { - maxRegDate = transFormat.parse(item.getMaxRegDate()); - } - } - - i++; - } - - // 현재 날짜 구하기 (시스템 시계, 시스템 타임존) - LocalDate now = LocalDate.now(); - int year = now.getYear(); - int month = now.getMonthValue(); - int day = now.getDayOfMonth(); - String monthStr = now.getMonthValue() > 9 ? "" + now.getMonthValue() : "0" + now.getMonthValue(); - int lastDay = 0; - Calendar cal = Calendar.getInstance(); - cal.set(year, month-1, day); - lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - model.addAttribute("monthStr", monthStr); - model.addAttribute("lastDay", lastDay); - - String startDate = mjonMsgVO.getStartDate(); - if(!"".equals(startDate)) { - startDate = startDate.replaceAll("/", "-"); - }else { - startDate = transFormat.format(minRegDate); - } - model.addAttribute("startDate", startDate); - - String endDate = mjonMsgVO.getEndDate(); - if(!"".equals(endDate)) { - endDate = endDate.replaceAll("/", "-"); - }else { - endDate = transFormat.format(maxRegDate); - } - model.addAttribute("endDate", endDate); - - DecimalFormat decFormat = new DecimalFormat("###,###"); - model.addAttribute("sendSumCount", decFormat.format(sendSumCount)); - model.addAttribute("supplySumPrice", decFormat.format(supplySumPrice)); - model.addAttribute("vatSumPrice", decFormat.format(vatSumPrice)); - model.addAttribute("totalSumPrice", decFormat.format(totalSumPrice)); - model.addAttribute("resultList", payUserSumList); - - // 수신자 정보 - String mberNm = ""; // 회사명 - String managerNm = ""; // 담당자명 - String moblphonNo = ""; // 연락처 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - if (mberManageVO != null) { - // 회원종류 p-개인 c-기업 - if (mberManageVO.getDept().equals("c")) { - mberNm = mberManageVO.getMberNm(); - managerNm = mberManageVO.getManagerNm(); - moblphonNo = mberManageVO.getMoblphonNo(); - } - else { - mberNm = mberManageVO.getMberNm(); - managerNm = mberManageVO.getMberNm(); - moblphonNo = mberManageVO.getMoblphonNo(); - } - } - - model.addAttribute("mberNm", mberNm); - model.addAttribute("managerNm", managerNm); - model.addAttribute("moblphonNo", moblphonNo); - - return "/web/pay/MsgPrintUsageDetailsPopUp"; - } - - /** - * 요금사용내역 - > 거레명세서 팝업 - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/printMsgStatementAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/printMsgStatementAjax.do"}) - public String printMsgStatementAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - ModelMap model) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - int sendSumCount = 0; - double supplySumPrice = 0.0; - double vatSumPrice = 0.0; - double totalSumPrice = 0.0; - Date minRegDate = null; - Date maxRegDate = null; - int i = 0; - - String pageType = mjonMsgVO.getPageType(); - - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd"); - List payUserSumList = new ArrayList(); - - if(!pageType.equals("fax")) { - - payUserSumList = mjonMsgDataService.selectPayUserSumList(mjonMsgVO); - for(MjonMsgVO item : payUserSumList) { - sendSumCount = sendSumCount + (item.getShtSendCount() + item.getLongSendCount() + item.getPictSendCount() + item.getAtSendCount() + item.getFtSendCount()); - supplySumPrice += item.getSupplyPrice(); - vatSumPrice += item.getVatPrice(); - totalSumPrice += item.getTotalPrice(); - - // 시작일, 종료일 - if (i == 0) { - minRegDate = transFormat.parse(item.getMinRegDate()); - maxRegDate = transFormat.parse(item.getMaxRegDate()); - } - else { - if(minRegDate.after(transFormat.parse(item.getMinRegDate()))) { - minRegDate = transFormat.parse(item.getMinRegDate()); - } - - if(maxRegDate.before(transFormat.parse(item.getMaxRegDate()))) { - maxRegDate = transFormat.parse(item.getMaxRegDate()); - } - } - - i++; - } - - } - - //팩스 내용 불러오기 - List payUserSumFaxList = new ArrayList(); - - if(pageType.equals("") || pageType.equals("fax")) { - //팩스 정보 불러오기 - payUserSumFaxList = mjonMsgDataService.selectPayUserSumFaxList(mjonMsgVO); - - //총 사용금액에 팩스 금액 합산해주기 - for(MjonMsgVO item : payUserSumFaxList) { - supplySumPrice += item.getSupplyPrice(); - totalSumPrice += item.getTotalPrice(); - - } - } - - model.addAttribute("payUserSumFaxList", payUserSumFaxList); - - // 현재 날짜 구하기 (시스템 시계, 시스템 타임존) - LocalDate now = LocalDate.now(); - int year = now.getYear(); - int month = now.getMonthValue(); - int day = now.getDayOfMonth(); - String monthStr = now.getMonthValue() > 9 ? "" + now.getMonthValue() : "0" + now.getMonthValue(); - int lastDay = 0; - Calendar cal = Calendar.getInstance(); - cal.set(year, month-1, day); - lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - model.addAttribute("monthStr", monthStr); - model.addAttribute("lastDay", lastDay); - - String startDate = mjonMsgVO.getStartDate(); - if(!"".equals(startDate)) { - startDate = startDate.replaceAll("/", "-"); - }else { - if(minRegDate != null) { - startDate = transFormat.format(minRegDate); - } - } - model.addAttribute("startDate", startDate); - - String endDate = mjonMsgVO.getEndDate(); - if(!"".equals(endDate)) { - endDate = endDate.replaceAll("/", "-"); - }else { - if(maxRegDate != null) { - endDate = transFormat.format(maxRegDate); - } - } - model.addAttribute("endDate", endDate); - - - DecimalFormat decFormat = new DecimalFormat("###,###"); - model.addAttribute("sendSumCount", decFormat.format(sendSumCount)); - model.addAttribute("supplySumPrice", decFormat.format(supplySumPrice)); - model.addAttribute("vatSumPrice", decFormat.format(vatSumPrice)); - model.addAttribute("totalSumPrice", decFormat.format(totalSumPrice)); - model.addAttribute("resultList", payUserSumList); - - // 수신자 정보 - String mberNm = ""; // 회사명 - String managerNm = ""; // 담당자명 - String moblphonNo = ""; // 연락처 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - if (mberManageVO != null) { - // 회원종류 p-개인 c-기업 - if (mberManageVO.getDept().equals("c")) { - mberNm = mberManageVO.getMberNm(); - managerNm = mberManageVO.getManagerNm(); - moblphonNo = mberManageVO.getMoblphonNo(); - } - else { - mberNm = mberManageVO.getMberNm(); - managerNm = mberManageVO.getMberNm(); - moblphonNo = mberManageVO.getMoblphonNo(); - } - } - - model.addAttribute("mberNm", mberNm); - model.addAttribute("managerNm", managerNm); - model.addAttribute("moblphonNo", moblphonNo); - - - //부가세 포함 가격 정보 계산 - double addTax = Math.round(totalSumPrice * 0.1); - - model.addAttribute("addTax", decFormat.format(addTax)); - model.addAttribute("addTaxSumPrice", decFormat.format(addTax+totalSumPrice)); - model.addAttribute("pageType", mjonMsgVO.getPageType()); - - return "/web/pay/MsgPrintStatementPopUp"; - } - - /** - * 요금사용내역 - > 거레명세서 팝업(카카오 추가) - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/printMsgWithKakaoStatementAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/printMsgWithKakaoStatementAjax.do"}) - public String printMsgWithKakaoStatementAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO, - ModelMap model) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - mjonMsgVO.setUserId(userId); - - int sendSumCount = 0; - double supplySumPrice = 0.0; - double vatSumPrice = 0.0; - double totalSumPrice = 0.0; - Date minRegDate = null; - Date maxRegDate = null; - int i = 0; - - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd"); - List payUserSumList = mjonMsgDataService.selectPayUserWithKakaoSumList(mjonMsgVO); - for(MjonMsgVO item : payUserSumList) { - sendSumCount += item.getSendCount(); - supplySumPrice += item.getSupplyPrice(); - vatSumPrice += item.getVatPrice(); - totalSumPrice += item.getTotalPrice(); - - // 시작일, 종료일 - if (i == 0) { - minRegDate = transFormat.parse(item.getMinRegDate()); - maxRegDate = transFormat.parse(item.getMaxRegDate()); - } - else { - if(minRegDate.after(transFormat.parse(item.getMinRegDate()))) { - minRegDate = transFormat.parse(item.getMinRegDate()); - } - - if(maxRegDate.before(transFormat.parse(item.getMaxRegDate()))) { - maxRegDate = transFormat.parse(item.getMaxRegDate()); - } - } - - i++; - } - - // 현재 날짜 구하기 (시스템 시계, 시스템 타임존) - LocalDate now = LocalDate.now(); - int year = now.getYear(); - int month = now.getMonthValue(); - int day = now.getDayOfMonth(); - String monthStr = now.getMonthValue() > 9 ? "" + now.getMonthValue() : "0" + now.getMonthValue(); - int lastDay = 0; - Calendar cal = Calendar.getInstance(); - cal.set(year, month-1, day); - lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - model.addAttribute("monthStr", monthStr); - model.addAttribute("lastDay", lastDay); - - String startDate = mjonMsgVO.getStartDate(); - if(!"".equals(startDate)) { - startDate = startDate.replaceAll("/", "-"); - }else { - startDate = transFormat.format(minRegDate); - } - model.addAttribute("startDate", startDate); - - String endDate = mjonMsgVO.getEndDate(); - if(!"".equals(endDate)) { - endDate = endDate.replaceAll("/", "-"); - }else { - endDate = transFormat.format(maxRegDate); - } - model.addAttribute("endDate", endDate); - - - DecimalFormat decFormat = new DecimalFormat("###,###"); - model.addAttribute("sendSumCount", decFormat.format(sendSumCount)); - model.addAttribute("supplySumPrice", decFormat.format(supplySumPrice)); - model.addAttribute("vatSumPrice", decFormat.format(vatSumPrice)); - model.addAttribute("totalSumPrice", decFormat.format(totalSumPrice)); - model.addAttribute("resultList", payUserSumList); - - // 수신자 정보 - String mberNm = ""; // 회사명 - String managerNm = ""; // 담당자명 - String moblphonNo = ""; // 연락처 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - if (mberManageVO != null) { - // 회원종류 p-개인 c-기업 - if (mberManageVO.getDept().equals("c")) { - mberNm = mberManageVO.getMberNm(); - managerNm = mberManageVO.getManagerNm(); - moblphonNo = mberManageVO.getMoblphonNo(); - } - else { - mberNm = mberManageVO.getMberNm(); - managerNm = mberManageVO.getMberNm(); - moblphonNo = mberManageVO.getMoblphonNo(); - } - } - - model.addAttribute("mberNm", mberNm); - model.addAttribute("managerNm", managerNm); - model.addAttribute("moblphonNo", moblphonNo); - - return "/web/pay/MsgPrintStatementPopUp"; - } /** * 일별 결제 통계 * @param searchVO @@ -5954,13 +1906,6 @@ public class MjonPayController { } } -/* @RequestMapping(value= {"/web/main/vacTest.do"}) - public void vacTest() throws Exception { - - schdlrManageService.msgFailPayBack(); - - }*/ - /** * * 캐시 , 포인트 이전 등록화면 * @param searchVO @@ -6077,117 +2022,24 @@ public class MjonPayController { return "/uss/ion/pay/cashPointSendList"; } - /** - * @param p_pattern - * @param p_mjonPayVO - * @return - * @throws Exception - */ - private MjonPayVO p_checkSearchCnd( - String p_pattern - , MjonPayVO p_mjonPayVO - ) throws Exception{ - if(p_pattern.equals("/web/member/pay/PayListAllAjax.do")) { //전체 - p_mjonPayVO.setPageType("all"); - } - if(p_pattern.equals("/web/member/pay/PayListMobileAjax.do")) { //모바일일때 - p_mjonPayVO.setSearchCondition2("CELLPHONE"); - p_mjonPayVO.setPayMethod("CELLPHONE"); - p_mjonPayVO.setPageType("cellphone"); - } - if(p_pattern.equals("/web/member/pay/PayListCardAjax.do")) { //신용카드 - p_mjonPayVO.setSearchCondition2("CARD"); - p_mjonPayVO.setPayMethod("CARD"); - p_mjonPayVO.setPageType("card"); - } - if(p_pattern.equals("/web/member/pay/PayListVBankAjax.do")) { //전용계좌 - p_mjonPayVO.setSearchCondition2("VBANK"); - p_mjonPayVO.setPayMethod("VBANK"); - p_mjonPayVO.setPageType("vbank"); - } - if(p_pattern.equals("/web/member/pay/PayListBankAjax.do")) { //즉시이체 - p_mjonPayVO.setSearchCondition2("BANK"); - p_mjonPayVO.setPayMethod("BANK"); - p_mjonPayVO.setPageType("bank"); - } - if(p_pattern.equals("/web/member/pay/PayListSPayAjax.do")) { //즉시이체 - p_mjonPayVO.setSearchCondition2("SPAY"); - p_mjonPayVO.setPayMethod("SPAY"); - p_mjonPayVO.setPageType("SPAY"); - } - if(p_pattern.equals("/web/member/pay/PayListOfflineAjax.do")) { //무통장 - p_mjonPayVO.setSearchCondition2("OFFLINE"); - p_mjonPayVO.setPayMethod("OFFLINE"); - p_mjonPayVO.setPageType("offline"); - } - - return p_mjonPayVO; - } - - /** - * @param p_mjonPayVO - * @return - * @throws Exception - */ - private MjonPayVO p_checkSortCnd( - MjonPayVO p_mjonPayVO - ) throws Exception{ - //정렬 처리 - if("".equals(p_mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - p_mjonPayVO.setSearchSortCnd("moid"); - p_mjonPayVO.setSearchSortOrd("desc"); - }else {//포인트 교환내역에서 정렬 종류가 달라서 변환처리 해줌 - - String sortCnt = p_mjonPayVO.getSearchSortCnd(); - - if(sortCnt.equals("pointUseId") || sortCnt.equals("refundId")) { - p_mjonPayVO.setSearchSortCnd("moid"); - }else if(sortCnt.equals("frstRegistPnttm") || sortCnt.equals("frstRegisterPnttm") || sortCnt.equals("refundHandlePnttm")) { - p_mjonPayVO.setSearchSortCnd("regDate"); - }else if(sortCnt.equals("type")) { - p_mjonPayVO.setSearchSortCnd("payMethodTxt"); - }else if(sortCnt.equals("point") || sortCnt.equals("refundMoney") || sortCnt.equals("refundCash")) { - p_mjonPayVO.setSearchSortCnd("amt"); - }else if(sortCnt.equals("cmpltYn") || sortCnt.equals("refundStatus")) { - p_mjonPayVO.setSearchSortCnd("pgStatusTxt"); - } - - } - - return p_mjonPayVO; - } - - /** - * @param p_mjonPayVO - * @return - * @throws Exception - */ - private MjonPayVO p_checkSearchDate( - MjonPayVO p_mjonPayVO - ) throws Exception{ - //검색 기간 처리 - if(!DateUtils.dateChkAndValueChk(p_mjonPayVO.getStartDate(),p_mjonPayVO.getEndDate(), 12 )) - { - p_mjonPayVO.setStartDate(DateUtils.getDateMonthsAgo(12)); - p_mjonPayVO.setEndDate(DateUtils.getCurrentDate()); - } - - return p_mjonPayVO; - } - - private HttpServletResponse p_makeResponse( - HttpServletResponse p_response - , String p_fileName - ) throws Exception{ - p_response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd_HH_mm_ss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - p_fileName = p_fileName+"("+mTime+")"; - - p_response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((p_fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - - return p_response; - } + //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} + private String[][] sendPayExcelValue ={ + {"0" ,"번호" , "1" , "" }, + {"1", "결제일시" , "2021-06-08 11:05:38" , ""}, + {"2", "결제방식" , "개인전용계좌", ""}, + {"3", "결제금액" , "500", ""}, + {"4", "결제상태" , "결제완료", ""}, + {"5", "결제정보" , "승인번호 : nicepay00m03012105271819041065", ""}, + {"6", "증빙서류 발행요청" , "카드전표", ""} + } ; + + private String[][] sendPayExcelValue2 ={ + {"0" ,"번호" , "1" , "" }, + {"1", "결제일자" , "2021-06-08 11:05:38" , ""}, + {"2", "결제시간" , "2021-06-08 11:05:38" , ""}, + {"3", "결제수단" , "개인전용계좌", ""}, + {"4", "결제상태" , "결제완료", ""}, + {"5", "결제금액" , "500", ""} + } ; } diff --git a/src/main/java/itn/let/mjo/pay/web/MjonPayTypeController.java b/src/main/java/itn/let/mjo/pay/web/MjonPayTypeController.java index 13adca0..3256736 100644 --- a/src/main/java/itn/let/mjo/pay/web/MjonPayTypeController.java +++ b/src/main/java/itn/let/mjo/pay/web/MjonPayTypeController.java @@ -8,9 +8,7 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; @@ -20,7 +18,6 @@ import itn.com.cmm.util.StringUtil; import itn.com.utl.fcc.service.EgovStringUtil; import itn.let.mjo.pay.service.MjonPayTypeService; import itn.let.mjo.pay.service.MjonPayTypeVO; -import itn.let.uss.umt.service.EgovUserManageService; @Controller public class MjonPayTypeController { @@ -28,9 +25,6 @@ public class MjonPayTypeController { @Resource(name = "mjonPayTypeService") private MjonPayTypeService mjonPayTypeService; - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - //결제 수단 정보 조회 @RequestMapping(value={"/let/mjo/pay/selectMjonPayTypeView.do"}) public String selectMjonPayTypeView(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception{ @@ -70,49 +64,4 @@ public class MjonPayTypeController { RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/let/mjo/pay/selectMjonPayTypeView.do"); return redirectUrlMaker.getRedirectUrl(); } - - - //결제 수단 및 회원 상태 조회 - @RequestMapping(value={"/web/member/pay/checkPayTypeStatusAjax.do"}) - public ModelAndView checkPayTypeStatusAjax(@ModelAttribute("searchVO") MjonPayTypeVO mjonPayTypeVO, - HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 정보 획득 - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - - /** - * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 - * 현재 로그인 세션도 만료 처리함 - * */ - - boolean mberSttus = userManageService.selectUserStatusInfo(loginVO.getId()); - - if(!mberSttus) { - - modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 결제 하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); - modelAndView.addObject("result", "statusFail"); - - // 세션 로그아웃 - request.getSession().invalidate(); - } else { - - //결제수단 상태 확인 - String useYn = mjonPayTypeService.selectMjonPayTypeStatus(mjonPayTypeVO.getPayTypeCode()); - - if("N".equals(useYn)) { - modelAndView.addObject("message", "해당 결제수단이 일시적으로 이용이 불가능합니다."); - modelAndView.addObject("result", "tempNotUse"); - } else { - modelAndView.addObject("result", "success"); - } - - } - - return modelAndView; - } - } diff --git a/src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java b/src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java deleted file mode 100644 index 9547bc3..0000000 --- a/src/main/java/itn/let/mjo/pay/web/MjonPayV2Controller.java +++ /dev/null @@ -1,1834 +0,0 @@ -package itn.let.mjo.pay.web; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Date; -import java.util.List; -import java.util.Random; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.HandlerMapping; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.LoginVO; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.mjo.mjocommon.MjonCommon; -import itn.let.mjo.msgcampain.service.MjonCandidateService; -import itn.let.mjo.msgcampain.service.MjonCandidateVO; -import itn.let.mjo.pay.service.MjonPayService; -import itn.let.mjo.pay.service.MjonPayVO; -import itn.let.mjo.pay.service.MjonVaMsgLogVO; -import itn.let.mjo.payva.service.VacsVactService; -import itn.let.mjo.payva.service.VacsVactVO; -import itn.let.sym.site.service.EgovSiteManagerService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.uss.umt.service.UserManageVO; -import itn.let.utl.user.service.MjonNoticeSendUtil; -import mup.mcash.module.common.McashCipher.McashCipher; - -@Controller -public class MjonPayV2Controller { - private static final Logger LOGGER = LoggerFactory.getLogger(MjonPayController.class); - - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource(name = "mjonCandidateService") - private MjonCandidateService mjonCandidateService; - - //전용계좌 서비스 - @Resource(name = "vacsVactService") - private VacsVactService vacsVactService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - /** 사이트 설정 */ - @Resource(name = "egovSiteManagerService") - EgovSiteManagerService egovSiteManagerService; - - /** 알림전송 Util */ - @Resource(name = "mjonNoticeSendUtil") - private MjonNoticeSendUtil mjonNoticeSendUtil; - - @Resource(name="MjonCommon") - private MjonCommon mjonCommon; - - - - - /** KG 모빌리언스 설정 */ - // CARD - @Value("#{globalSettings['Globals.pay.kgm.card.cnSvcid']}") - private String globalCnSvcid; - @Value("#{globalSettings['Globals.pay.kgm.card.payMode']}") - private String globalCnPayMode; - - // BANK - @Value("#{globalSettings['Globals.pay.kgm.bank.raSvcid']}") - private String globalRaSvcid; - @Value("#{globalSettings['Globals.pay.kgm.bank.payMode']}") - private String globalRaPayMode; - - // MOBILE - @Value("#{globalSettings['Globals.pay.kgm.mobile.mcSvcid']}") - private String globalMcSvcid; - @Value("#{globalSettings['Globals.pay.kgm.mobile.payMode']}") - private String globalMcPayMode; - - /** - * 결제하기 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/PayView.do"}) - public String PayViewV2(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, - HttpServletRequest request, RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - String pattern = (String) request.getAttribute( - HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - - //로그인 정보 획득 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(loginVO == null) { - return "redirect:/web/user/login/login.do"; - } - - // 하드코딩 - // Itm Member Id Check - //if(!getItnMemberId(userId)) { - // return "redirect:/web/main/mainPage.do"; - //} - - MberManageVO mberManageVO = mberManageService.selectMber(loginVO.getId()); - model.addAttribute("mberManageVO", mberManageVO); - - MjonCandidateVO mjonCandidateVO = new MjonCandidateVO(); - if(userId != "") { - mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId); - model.addAttribute("mjonCandidateVO",mjonCandidateVO); - } - - mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "nicepay/payResultAjax.do") ; - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonPayVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonPayVO.getPageUnit()); - paginationInfo.setPageSize(mjonPayVO.getPageSize()); - - mjonPayVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonPayVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonPayVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonPayVO.setSearchSortCnd("moid"); - mjonPayVO.setSearchSortOrd("desc"); - } - mjonPayVO.setUserId(loginVO.getId()); - - //대상 리스트 가져오기 - VacsVactVO vacsVactVO = new VacsVactVO(); - vacsVactVO.setMberId(loginVO.getId()); - List bankList = vacsVactService.selectBankAcctAllList(vacsVactVO); //할당 가능한 계좌 수량 리스트 받아오기 - List myBankList = vacsVactService.selectMyBankAcctList(vacsVactVO); //내가 할당받은 전용계좌 리스트 받아오기 - - MjonVaMsgLogVO vaMsgLogVO = new MjonVaMsgLogVO(); - vaMsgLogVO.setMberId(loginVO.getId()); - - Date now = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - String date = sdf.format(now); - vaMsgLogVO.setSendDate(date); - - MjonVaMsgLogVO resultMsgInfo = mjonPayService.selectMyAcctSendCnt(vaMsgLogVO); - - //대상 리스트, 페이징 정보 전달 - model.addAttribute("resultList", bankList); - model.addAttribute("resultMyList", myBankList); - model.addAttribute("resultMsgInfo", resultMsgInfo); - model.addAttribute("mjonPayVO", mjonPayVO); - - // 탭이동 - String tabType = "1"; - if(request.getParameter("tabType") != null) { - tabType = request.getParameter("tabType"); - } - model.addAttribute("tabType", tabType); - - return "/web/pay/PayView"; - } - - - /** - * 결제하기 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/pay/selectVaViewPrintPopupAjax.do"}) - public String selectVaViewPrintPopupAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, - HttpServletRequest request, RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - String pattern = (String) request.getAttribute( - HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - - //로그인 정보 획득 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - if(loginVO == null) { - return "redirect:/web/user/login/login.do"; - } - - // 하드코딩 - // Itm Member Id Check - //if(!getItnMemberId(userId)) { - // return "redirect:/web/main/mainPage.do"; - //} - - MberManageVO mberManageVO = mberManageService.selectMber(loginVO.getId()); - model.addAttribute("mberManageVO", mberManageVO); - - //회원 전용계좌 정보 리스트 가져오기 - VacsVactVO vacsVactVO = new VacsVactVO(); - vacsVactVO.setMberId(loginVO.getId()); - List myBankList = vacsVactService.selectMyBankAcctList(vacsVactVO); //내가 할당받은 전용계좌 리스트 받아오기 - - //대상 리스트, 페이징 정보 전달 - model.addAttribute("resultMyList", myBankList); - //사용자 정보 - model.addAttribute("userId", userId); - model.addAttribute("userNm", userNm); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - - return "/web/pay/PayVaViewPrintPopup"; - } - - /** - * 다음 결제시 결제수단 SELECT - * @throws Exception - */ - @RequestMapping(value = "/web/member/pay/selectNextPayMethodAjax.do") - public ModelAndView selectNextPayMethodAjax(MjonPayVO mjonPayVO, - HttpServletRequest request ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - String nextPayMethod = ""; - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == null) { - isSuccess = false; - msg = "로그인이 필요합니다."; - } - - try { - // 다음 결제시 결제수단 SELECT - nextPayMethod = userManageService.selectNextPayMethod(userId); - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - modelAndView.addObject("nextPayMethod", nextPayMethod); - - return modelAndView; - } - - /** - * 다음 결제시 결제수단 UPDATE - * @throws Exception - */ - @RequestMapping(value = "/web/member/pay/updateNextPayMethodAjax.do") - public ModelAndView updateNextPayMethodAjax(UserManageVO userManageVO, - HttpServletRequest request ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == null) { - isSuccess = false; - msg = "로그인이 필요합니다."; - } - - try { - // 다음 결제시 결제수단 SELECT - userManageVO.setMberId(userId); - userManageService.updateNextPayMethod(userManageVO); - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // CARD - // - // - - /** - * KGM 간편결제 정보 Encode - * @param MjonPayVO - * @param modelAndView - * @return /web/member/pay/kgmCardEncodeAjax.do - * @throws Exception - */ - @RequestMapping(value = "/web/member/pay/kgmCardEncodeAjax.do") - public ModelAndView kgmCardEncodeAjax(MjonPayVO mjonPayVO, - HttpServletRequest request ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - if(userId == null) { - isSuccess = false; - msg = "로그인이 필요합니다."; - } - - try { - // Get Server Info - String kgmServerName = request.getServerName(); - String kgmPath = ""; - kgmPath = getKgServerPath(request); - - // Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회) - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS"); - String appr_dtm = dateFormat.format(new Date()); - - - /*****************************************************************************************/ - String CASH_GB = "CN"; // 대표결제수단. 고정 - - /***************************************************************************************** - - 필수 입력 항목 - *****************************************************************************************/ - String VER = "ALL_NEW"; //ALL_NEW : 버전설정 고정 - String CN_SVCID = globalCnSvcid; //서비스아이디 - String PAY_MODE = globalCnPayMode; //10 : 실거래결제 고정 - String Prdtprice = request.getParameter("Prdtprice");; //결제요청금액. - String Prdtnm = "캐시충전"; //상품명 ( 50byte 이내 ) - String Siteurl = kgmServerName; //가맹점도메인 - String Okurl = kgmPath + "/web/kgm/pay/okUrlCardAjax.do"; //성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp ) - String Tradeid = CN_SVCID + "_" + appr_dtm + "_" + numberGen(6,1); //가맹점거래번호 //결제 요청 시 마다 unique한 값을 세팅해야 함. - - /***************************************************************************************** - - 선택 입력 항목 - *****************************************************************************************/ - String Notiurl = kgmPath + "/web/kgm/pay/notiUrlCardAjax.do"; //결제처리URL : 결제 완료 후, 가맹점측 과금 등 처리할 가맹점측 URL - String Userid = userId; //가맹점결제자ID - String Username = userNm; //결제자명 - String CALL_TYPE = "P"; //결제창 호출방식 - String Failurl = ""; //결제 실패 시 사용자에게 보여질 가맹점 측 실패 페이지 - String Closeurl = ""; //닫기버튼 클릭 시 호출되는 가맹점 측 페이지. CALL_TYPE = ‘I’ 또는 ‘SELF’ 셋팅 시 필수 - String MSTR = ""; //가맹점콜백변수 //가맹점에서 추가적으로 파라미터가 필요한 경우 사용하며 &,%,?,^ 는 사용불가 ( 예 : MSTR="a=1|b=2|c=3" ) - String Payeremail = ""; //결제자email - String CN_BILLTYPE = ""; //매출전표 출력 시 과세/비과세 구분 - String CN_TAXFREE = ""; //비과세 - String CN_TAX = ""; //부과세 - 전체금액의 10%이하로 설정 - String CN_FREEINTEREST = ""; //무이자할부정보 - String CN_POINT = ""; //카드사포인트사용여부 - String Termregno = ""; //하위가맹점사업자번호 - String APP_SCHEME = ""; //APP SCHEME - String CN_INSTALL = ""; //할부개월 - String CN_FIXCARDCD = ""; //카드사 선택노출 '결제창에 노출할 카드사 코드 셋팅 - String CN_DIRECT = ""; //카드사 직접호출 ( 예 : KBC:00:N ) - String Deposit = ""; //일회용컵보증금 - - /***************************************************************************************** - - 암호화 처리 (암호화 사용 시) - Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다. - - 주) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로 - 암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다. - *****************************************************************************************/ - String Cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용 - String Cryptstring = ""; //암호화 사용 시 암호화된 스트링 - - if ("Y".equals(Cryptyn)) { - Cryptstring = Prdtprice + Okurl; //금액변조확인 (결제요청금액 + Okurl) - Okurl = McashCipher.encodeString(Okurl, Tradeid); - Failurl = McashCipher.encodeString(Failurl, Tradeid); - Notiurl = McashCipher.encodeString(Notiurl, Tradeid); - Prdtprice = McashCipher.encodeString(Prdtprice, Tradeid); - Cryptstring = McashCipher.encodeString(Cryptstring, Tradeid); - } - - // 필수 - modelAndView.addObject("CASH_GB", CASH_GB); - modelAndView.addObject("VER", VER); - modelAndView.addObject("CN_SVCID", CN_SVCID); - modelAndView.addObject("PAY_MODE", PAY_MODE); - modelAndView.addObject("Prdtnm", Prdtnm); - modelAndView.addObject("Siteurl", Siteurl); - modelAndView.addObject("Tradeid", Tradeid); - // 선택 - modelAndView.addObject("CALL_TYPE", CALL_TYPE); - modelAndView.addObject("Closeurl", Closeurl); - modelAndView.addObject("MSTR", MSTR); - modelAndView.addObject("Payeremail", Payeremail); - modelAndView.addObject("Userid", Userid); - modelAndView.addObject("Username", Username); - modelAndView.addObject("CN_BILLTYPE", CN_BILLTYPE); - modelAndView.addObject("CN_TAXFREE", CN_TAXFREE); - modelAndView.addObject("CN_TAXFREE", CN_TAXFREE); - modelAndView.addObject("CN_TAX", CN_TAX); - modelAndView.addObject("CN_FREEINTEREST", CN_FREEINTEREST); - modelAndView.addObject("CN_POINT", CN_POINT); - modelAndView.addObject("Termregno", Termregno); - modelAndView.addObject("APP_SCHEME", APP_SCHEME); - modelAndView.addObject("CN_INSTALL", CN_INSTALL); - modelAndView.addObject("CN_FIXCARDCD", CN_FIXCARDCD); - modelAndView.addObject("CN_DIRECT", CN_DIRECT); - modelAndView.addObject("Deposit", Deposit); - // 변환 - modelAndView.addObject("Cryptyn", Cryptyn); - modelAndView.addObject("Okurl", Okurl); - modelAndView.addObject("Failurl", Failurl); - modelAndView.addObject("Notiurl", Notiurl); - modelAndView.addObject("Prdtprice", Prdtprice); - modelAndView.addObject("Cryptstring", Cryptstring); - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - /** - * KGM Card 결제 notiUrl 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/notiUrlCardAjax.do"}) - public String notiUrlCardAjax( - HttpServletRequest request - , HttpServletResponse response - , ModelMap model - ) throws Exception{ - - //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 - response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); - - String rtnMsg = ""; - - String CASH_GB = request.getParameter("CASH_GB"); /* 결제수단(CN)*/ - String Svcid = request.getParameter("Svcid"); /* 서비스아이디 */ - String Mobilid = request.getParameter("Mobilid"); /* 모빌리언스 거래번호 */ - String Signdate = request.getParameter("Signdate"); /* 결제일자 */ - String Tradeid = request.getParameter("Tradeid"); /* 상점거래번호 */ - String Mrchid = request.getParameter("Mrchid"); // 상점ID - String Prdtnm = request.getParameter("Prdtnm"); /* 상품명 */ - String Prdtprice = request.getParameter("Prdtprice"); /* 상품가격 */ - String Userid = request.getParameter("Userid"); /* 사용자아이디*/ - String Resultcd = request.getParameter("Resultcd"); /* 결과코드 */ - String Resultmsg = request.getParameter("Resultmsg"); /* 결과메세지 */ - String Payeremail = request.getParameter("Payeremail"); /* 결제자 이메일 */ - String Cardcode = request.getParameter("Cardcode"); /* 결제 카드코드 */ - String Cardname = request.getParameter("Cardname"); /* 결제 카드사명 */ - String chkValue = request.getParameter("chkValue"); /* 결과값 검증 hash데이터 */ - String spayMethod = request.getParameter("Paymethod"); /* 지불방법 (간편결제 시에만 응답) */ - String MSTR = request.getParameter("MSTR"); //[2000byte 이하] 가맹점 전달 콜백변수 - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - CARD MSTR : " + MSTR); - System.out.println("KG MOBILIANS NotiUrl - CARD SpayMethod : " + spayMethod); - - String cpChkValue = ""; - cpChkValue = "Mobilid="+ Mobilid + - "&Mrchid=null"+ - "&Svcid="+ Svcid + - "&Tradeid="+ Tradeid + - "&Signdate="+ Signdate + - "&Prdtprice="+ Prdtprice; - - String encChkValue = McashCipher.encodeString(cpChkValue, Tradeid); - //chkValue = "ZZZZZ"; - //encChkValue = chkValue; - System.out.println("KG MOBILIANS NotiUrl - CARD chkValue : " + chkValue); - System.out.println("KG MOBILIANS NotiUrl - CARD encChkValue : " + encChkValue); - System.out.println("KG MOBILIANS NotiUrl - CARD getIsKgmServerIp : " + getIsKgmServerIp(request)); // Kgm Ip Check - - try { - // Step 1. Tid로 존재여부 체크 - int tidCnt = mjonPayService.selectPayCountByTid(Tradeid); - - if (tidCnt > 0) { - // 저장된 데이터 있을경우 - rtnMsg = "SUCCESS"; - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - CARD returnMsg2 : " + rtnMsg); - } - else if (tidCnt == 0) { - // Check0. 데이터 위·변조 체크 - if (!encChkValue.equals(chkValue)) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - CARD : 데이터 위·변조 가능성 높으니 결제오류 처리 => " + cpChkValue); - - Resultcd = "9999"; - Resultmsg = "데이터 위·변조 가능성이 있어 결제오류 처리했습니다. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요."; - - try { - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("간편결제 데이터 위·변조 가능성 결제오류 처리", Userid, ""); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] " + Userid + "님 결제건 알림 => 데이터 위·변조 가능성이 있어 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요."; - mjonCommon.sendSimpleSlackMsg(msg); - } - } - catch (Exception e) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - CARD : 데이터 위·변조 가능성 높으니 결제오류 처리 => SMS, 슬랙 알림 오류"); - } - } - - // Check1. KG모빌리언스 호출아이피 체크 - if (!getIsKgmServerIp(request)) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - CARD : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리"); - - Resultcd = "9998"; - Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요."; - - try { - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, ""); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요."; - mjonCommon.sendSimpleSlackMsg(msg); - } - } - catch (Exception e) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - CARD : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리 => SMS, 슬랙 알림 오류"); - } - } - - // 저장 Start - // 사용자 정보 - String mberNm = ""; - String moblphonNo = ""; - String mberEmailAdres = ""; - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setMberId(Userid); - MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); - if (userInfo != null) { - mberNm = userInfo.getMberNm(); - moblphonNo = userInfo.getMoblphonNo(); - mberEmailAdres = userInfo.getMberEmailAdres(); - } - - // MjonPayVO - MjonPayVO mjonPayVO = new MjonPayVO(); - mjonPayVO.setResultCd(Resultcd); - mjonPayVO.setResultMsg(Resultmsg); - mjonPayVO.setAutoBillKey(""); - mjonPayVO.setCashGb(CASH_GB); - mjonPayVO.setAutoYn(""); - mjonPayVO.setCommId(""); - mjonPayVO.setMobileId(Mobilid); - mjonPayVO.setMrchId(Mrchid); - mjonPayVO.setPno(""); - mjonPayVO.setPrdtNm(Prdtnm); - mjonPayVO.setPrdtPrice(Prdtprice); - mjonPayVO.setSignDate(Signdate); - mjonPayVO.setSvcId(Svcid); - mjonPayVO.setTradeId(Tradeid); - mjonPayVO.setUserId(Userid); - mjonPayVO.setUserKey(""); - mjonPayVO.setMcEzKey(""); - - // 추가정보(mj_pg) - String pgStatus = ""; - if("0000".equals(Resultcd)) { - pgStatus = "1"; // 1:결제완료 - } - else { - pgStatus = "4"; // 4.결제오류 - } - mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료 - mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값] - mjonPayVO.setResultCode(Resultcd); - mjonPayVO.setResultMsg(Resultmsg); - mjonPayVO.setAmt(Prdtprice); // 결제금액 - mjonPayVO.setPayMethod("SPAY"); // 결제방법 - mjonPayVO.setSpayMethod(spayMethod); // 간편결제 결제방법 - mjonPayVO.setSpayDiv(MSTR); // 간편결제분류 - - mjonPayVO.setPgCode("KGM"); // - mjonPayVO.setGoodsName(Prdtnm); // - mjonPayVO.setPhone(""); // 모바일 - mjonPayVO.setMobile(""); // 모바일 - mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보) - mjonPayVO.setPayerEmail(Payeremail); - mjonPayVO.setTid(Tradeid); // Tid - mjonPayVO.setMid(Svcid); // Mid = Svcid - // 회원정보 - mjonPayVO.setBuyerName(mberNm); - mjonPayVO.setBuyerTel(moblphonNo); - mjonPayVO.setBuyerEmail(mberEmailAdres); - // 추가 - mjonPayVO.setCardCode(Cardcode); - mjonPayVO.setCardName(Cardname); - - // 인서트 - mjonPayService.insertKgmAllV2(mjonPayVO); - - rtnMsg = "SUCCESS"; - - try { - // 대상 : 휴대폰결제, 즉시이체, 전용계좌 - // Step 1. 스미싱의심 지정 여부 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) { - // Step 1. 개인회원 여부 체크 - int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); - if (isPersnalMemberCnt == 1) { - // Step 2. 첫결제 여부 체크 - int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid); - if (isFirstPayCnt == 1) { - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/간편결제 첫결제", Userid, mberNm); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] 스미싱의심/간편결제 첫결제 - " + mberNm +"("+ Userid + ")"; - mjonCommon.sendSimpleSlackMsg(msg); - } - - // 스미싱 의심회원으로 변경 - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setSmishingYn("Y"); - userManageVO.setMberId(Userid); - userManageService.updateOneUserSmishingYnNotAlert(userManageVO); - } - } - } - } - catch (Exception e) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - CARD 슬랙알림 & 스미싱의심 처리 Error"); - System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - CARD e.getMessage() : " + e.getMessage()); - } - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - CARD returnMsg : " + rtnMsg); - } - } - catch(Exception e) { - rtnMsg = "FAIL"; - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - CARD Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - CARD returnMsg : " + rtnMsg); - System.out.println("KG MOBILIANS NotiUrl - CARD e.getMessage() : " + e.getMessage()); - } - - model.addAttribute("returnMsg", rtnMsg); - - return "web/cop/kgmV2/cardNotiUrl"; - } - - /** - * KGM Card 결제 okUrl 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/okUrlCardAjax.do"}) - public String okUrlCardAjax( - HttpServletRequest request - , HttpSession session - , HttpServletResponse response - , ModelMap model - ) throws Exception{ - - //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 - response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); - - String rstMsg = ""; - if("0000".equals(request.getParameter("Resultcd"))) { - rstMsg = "간편결제가 정상적으로 완료되었습니다."; - } - else { - rstMsg = "간편결제가 실패했습니다."; - } - - model.addAttribute("Resultcd", request.getParameter("Resultcd")); - model.addAttribute("Resultmsg", rstMsg); - - System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); - System.out.println("KG MOBILIANS OkUrl - CARD ResultCd : " + request.getParameter("Resultcd")); - System.out.println("KG MOBILIANS OkUrl - CARD ResultMsg : " + rstMsg); - - - return "web/cop/kgmV2/cardOkUrl"; - } - - - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // MOBILE - // - // - - /** - * KGM 모바일 정보 Encode - * @param MjonPayVO - * @param modelAndView - * @return /web/member/pay/kgmMobileEncodeAjax.do - * @throws Exception - */ - @RequestMapping(value = "/web/member/pay/kgmMobileEncodeAjax.do") - public ModelAndView kgmMobileEncodeAjax(MjonPayVO mjonPayVO, - HttpServletRequest request ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == null) { - isSuccess = false; - msg = "로그인이 필요합니다."; - } - - try { - // Get Server Info - String kgmServerName = request.getServerName(); - String kgmPath = ""; - kgmPath = getKgServerPath(request); - - // Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회) - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS"); - String appr_dtm = dateFormat.format(new Date()); - - - /*****************************************************************************************/ - String CASH_GB = "MC"; //[ 2byte 고정] 결제수단구분. "MC" 고정값. 수정불가! - - /***************************************************************************************** - - 필수 입력 항목 - *****************************************************************************************/ - String MC_SVCID = globalMcSvcid; //C //[ 12byte 고정] 모빌리언스에서 부여한 서비스ID (12byte 숫자 형식) - String PAY_MODE = globalMcPayMode; //C //[ 2byte 고정] 연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금) - String Prdtprice = request.getParameter("Prdtprice");; //결제요청금액. - String Okurl = kgmPath + "/web/kgm/pay/okUrlMobileAjax.do"; //성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp ) - String Prdtnm = "캐시충전"; //C //[ 50byte 이하] 상품명 - String Siteurl = kgmServerName; // localhost [ 20byte 이하] 가맹점도메인 (예: www.mcash.co.kr) - String Tradeid = MC_SVCID + "_" + appr_dtm + "_" + numberGen(6,1); //[4byte 이상, 40byte 이하] 가맹점거래번호. 결제 요청 시 마다 unique한 값을 세팅해야 함. //해당 샘플에는 테스트를 위해 {가맹점 서비스ID + 요청일시} 형식으로 세팅하였음. - String Notiurl = kgmPath + "/web/kgm/pay/notiUrlMobileAjax.do"; - - /***************************************************************************************** - - 디자인 관련 필수항목 - *****************************************************************************************/ - String LOGO_YN = "N"; //[ 1byte 고정] 가맹점 로고 사용 여부 (N: 모빌리언스 로고-default, Y: 가맹점 로고 (사전에 모빌리언스에 가맹점 로고 이미지를 등록해야함)) - String CALL_TYPE = "P"; //[ 4byte 이하] 결제창 호출 방식 (P: 팝업-default, SELF: 페이지전환, I: 아이프레임) - - /***************************************************************************************** - - 선택 입력 항목 - *****************************************************************************************/ - String MC_AUTHPAY = ""; //[ 1byte 고정] 하이브리드 방식 사용시 "Y" 로 설정 (휴대폰 SMS인증 후 일반 소켓모듈 결제 연동시 사용) (N: 미사용-default, Y: 사용) - String MC_AUTOPAY = ""; //[ 1byte 고정] 자동결제를 위한 최초 일반결제 시 "Y" 세팅. 결제 완료 후 휴대폰정보 대체용 USERKEY 발급 및 자동결제용 AutoBillKey 발급 (N: 미사용-default, Y: 사용) - String MC_PARTPAY = ""; //[ 1byte 고정] 부분취소를 위한 일반결제 시 "Y" 세팅. 결제 완료 후 자동결제 USERKEY 발급 (N: 미사용-default, Y: 사용) - String MC_No = ""; //[ 11byte 이하] 사용자 폰번호 (결제창 호출시 세팅할 폰번호) - String MC_FIXNO = ""; //[ 1byte 고정] 사용자 폰번호 수정불가 여부(N: 수정가능-default, Y: 수정불가) - String MC_DEFAULTCOMMID = ""; //[ 3byte 고정] 통신사 기본 선택 값. SKT, KTF, LGT 3개의 값 중 원하는 통신사 세팅 시 해당 통신사가 미리 선택되어짐. - String MC_FIXCOMMID = ""; //[ 1byte 고정] 통신사 고정 선택 값. SKT, KTF, LGT 3개의 값 중 원하는 통신사 세팅 시 해당 통신사만 결제창에 보여짐. - String Payeremail = ""; //[ 30byte 이하] 결제자 e-mail - String Userid = userId; //[ 50byte 이하] 가맹점 결제자ID - String Item = ""; //[ 8byte 이하] 아이템코드. 미사용 시 반드시 공백으로 세팅. - String Prdtcd = ""; //[ 40byte 이하] 상품코드. 자동결제인 경우 상품코드별 SMS문구를 별도 세팅할 때 사용하며 사전에 모빌리언스에 등록이 필요함. - String MC_Cpcode = ""; //[ 20byte 이하] 리셀러하위상점key. 리셀러 업체인 경우에만 세팅. - String Notiemail = ""; //[ 30byte 이하] 알림 e-mail: 결제 완료 후 당사와 가맹점간의 Noti 연동이 실패한 경우 알람 메일을 받을 가맹점 담당자 이메일주소 - String Closeurl = ""; //[ 128byte 이하] 결제창 취소버튼, 닫기버튼 클릭 시 호출되는 가맹점 측 페이지. iframe 호출 시 필수! (예: http://www.mcash.co.kr/closeurl.jsp) - String Failurl = ""; //[ 128byte 이하] 결제 실패 시 사용자에게 보여질 가맹점 측 실패 페이지. 결제처리에 대한 실패처리 안내를 가맹점에서 제어해야 할 경우만 사용. - String MSTR = ""; //[2000byte 이하] 가맹점 콜백 변수. 가맹점에서 추가적으로 파라미터가 필요한 경우 사용하며 &, % 는 사용불가 (예: MSTR="a=1|b=2|c=3") - String MC_EZ_YN = "Y"; //[ 1byte 고정] 간소화결제여부. 간소화결제 사용시 "Y" 로 설정 (N: 미사용-default, Y: 사용) - String MC_EZ_KEY = ""; //[ 20byte 고정] 간소화결제 사용자키 - - /***************************************************************************************** - - 오픈마켓의 경우 아래의 정보를 입력해야 합니다. - 장바구니 결제의 경우 대표 판매자 외 n명, 대표 판매자 연락처를 입력하세요. - 예) Sellernm = "홍길동외 2명"; - Sellertel = "0212345678"; - *****************************************************************************************/ - String Sellernm = ""; //[ 50byte 이하] 실판매자 이름 (오픈마켓의 경우 실 판매자 정보 필수) - String Sellertel = ""; //[ 15byte 이하] 실판매자 전화번호 (오픈마켓의 경우 실 판매자 정보 필수) - - /***************************************************************************************** - - 디자인 관련 선택항목 (향후 변경될 수 있습니다.) - *****************************************************************************************/ - String IFRAME_NAME = ""; //[ 1byte 고정] 결제창을 iframe으로 호출 할 경우 iframe 명칭 세팅 - String INFOAREA_YN = ""; //[ 1byte 고정] 결제창 안내문 표시여부 (Y: 표시-default, N: 미표시) - String FOOTER_YN = ""; //[ 1byte 고정] 결제창 하단 안내 표시여부 (Y: 표시-default, N: 미표시) - String HEIGHT = ""; //[ 4byte 이하] 결제창 높이 (px단위: iframe 등 사용시 결제창 높이 조절, 팝업창 등 호출시 "" 로 세팅) - String PRDT_HIDDEN = ""; //[ 1byte 고정] iframe 사용시 상품명 숨김 여부 (가맹점 디자인 결제창으로 결제 입력 사항만 iframe에서 사용시) - String EMAIL_HIDDEN = ""; //[ 1byte 고정] 결제자 e-mail 입력창 숨김 여부 (N: 표시-default, Y: 미표시) - String CONTRACT_HIDDEN = ""; //[ 1byte 고정] 이용약관 숨김 여부 (Y: 표시-default, N: 미표시) - - /***************************************************************************************** - - 암호화 처리 (암호화 사용 시) - Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다. - - 주) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로 - 암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다. - *****************************************************************************************/ - String Cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용 - String Cryptstring = ""; //암호화 사용 시 암호화된 스트링 - - if ("Y".equals(Cryptyn)) { - Cryptstring = Prdtprice + Okurl; //금액변조확인 (결제요청금액 + Okurl) - Okurl = McashCipher.encodeString(Okurl, Tradeid); - Failurl = McashCipher.encodeString(Failurl, Tradeid); - Notiurl = McashCipher.encodeString(Notiurl, Tradeid); - Prdtprice = McashCipher.encodeString(Prdtprice, Tradeid); - Cryptstring = McashCipher.encodeString(Cryptstring, Tradeid); - } - - // 필수 - modelAndView.addObject("CASH_GB", CASH_GB); - modelAndView.addObject("MC_SVCID", MC_SVCID); - modelAndView.addObject("PAY_MODE", PAY_MODE); - modelAndView.addObject("Prdtnm", Prdtnm); - modelAndView.addObject("Siteurl", Siteurl); - modelAndView.addObject("Tradeid", Tradeid); - // 선택 - modelAndView.addObject("LOGO_YN", LOGO_YN); - modelAndView.addObject("MC_AUTHPAY", MC_AUTHPAY); - modelAndView.addObject("MC_AUTOPAY", MC_AUTOPAY); - modelAndView.addObject("MC_PARTPAY", MC_PARTPAY); - modelAndView.addObject("MC_No", MC_No); - modelAndView.addObject("MC_FIXNO", MC_FIXNO); - modelAndView.addObject("MC_DEFAULTCOMMID", MC_DEFAULTCOMMID); - modelAndView.addObject("MC_DEFAULTCOMMID", MC_DEFAULTCOMMID); - modelAndView.addObject("MC_FIXCOMMID", MC_FIXCOMMID); - modelAndView.addObject("MC_FIXCOMMID", MC_FIXCOMMID); - modelAndView.addObject("Item", Item); - modelAndView.addObject("Prdtcd", Prdtcd); - modelAndView.addObject("MC_Cpcode", MC_Cpcode); - modelAndView.addObject("Notiemail", Notiemail); - modelAndView.addObject("MC_EZ_YN", MC_EZ_YN); - modelAndView.addObject("MC_EZ_KEY", MC_EZ_KEY); - modelAndView.addObject("Sellernm", Sellernm); - modelAndView.addObject("Sellertel", Sellertel); - modelAndView.addObject("IFRAME_NAME", IFRAME_NAME); - modelAndView.addObject("INFOAREA_YN", INFOAREA_YN); - modelAndView.addObject("FOOTER_YN", FOOTER_YN); - modelAndView.addObject("HEIGHT", HEIGHT); - modelAndView.addObject("PRDT_HIDDEN", PRDT_HIDDEN); - modelAndView.addObject("EMAIL_HIDDEN", EMAIL_HIDDEN); - modelAndView.addObject("CONTRACT_HIDDEN", CONTRACT_HIDDEN); - - modelAndView.addObject("CALL_TYPE", CALL_TYPE); - modelAndView.addObject("Closeurl", Closeurl); - modelAndView.addObject("MSTR", MSTR); - modelAndView.addObject("Payeremail", Payeremail); - modelAndView.addObject("Userid", Userid); - // 변환 - modelAndView.addObject("Cryptyn", Cryptyn); - modelAndView.addObject("Okurl", Okurl); - modelAndView.addObject("Failurl", Failurl); - modelAndView.addObject("Notiurl", Notiurl); - modelAndView.addObject("Prdtprice", Prdtprice); - modelAndView.addObject("Cryptstring", Cryptstring); - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - /** - * KGM Mobile 결제 notiUrl 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/notiUrlMobileAjax.do"}) - public String notiUrlMobileAjax( - HttpServletRequest request - , HttpServletResponse response - , ModelMap model - ) throws Exception{ - - //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 - response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); - - response.setContentType("text/xml; charset=euc-kr"); - request.setCharacterEncoding("euc-kr"); - - /*****************************************************************************************/ - String CASH_GB = "MC"; //[ 2byte 고정] 결제수단구분. "MC" 고정값. 수정불가! - - String rtnMsg = ""; - String Svcid = request.getParameter("Svcid"); /* 서비스아이디 */ - String Mobilid = request.getParameter("Mobilid"); /* 모빌리언스 거래번호 */ - String Signdate = request.getParameter("Signdate"); /* 결제일자 */ - String Tradeid = request.getParameter("Tradeid"); /* 상점거래번호 */ - String Prdtnm = request.getParameter("Prdtnm"); /* 상품명 */ - String Prdtprice = request.getParameter("Prdtprice"); /* 상품가격 */ - String Userid = request.getParameter("Userid"); /* 사용자아이디*/ - String Resultcd = request.getParameter("Resultcd"); /* 결과코드 */ - String Resultmsg = request.getParameter("Resultmsg"); //[ 100byte 이하] 결과메세지 - String Payeremail = request.getParameter("Payeremail"); /* 결제자 이메일 */ - String chkValue = request.getParameter("chkValue"); /* 결과값 검증 hash데이터 */ - String AutoBillKey = request.getParameter("AutoBillKey"); //[ 15byte 이하] 자동결제 최초등록키 - String Commid = request.getParameter("Commid"); //[ 3byte 고정] 이통사 - String Mrchid = request.getParameter("Mrchid"); //[ 8byte 고정] 상점ID - String MSTR = request.getParameter("MSTR"); //[2000byte 이하] 가맹점 전달 콜백변수 - String No = request.getParameter("No"); //[ 11byte 이하] 폰번호 - String USERKEY = request.getParameter("USERKEY"); //[ 15byte 이하] 휴대폰정보(이통사, 휴대폰번호, 주민번호) 대체용 USERKEY - String MC_EZ_KEY = request.getParameter("Ezkey"); //[ 20byte 고정] 간소화결제 사용자키 - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - MOBILE getIsKgmServerIp : " + getIsKgmServerIp(request)); // Kgm Ip Check - - try { - // Step 1. Tid로 존재여부 체크 - int tidCnt = mjonPayService.selectPayCountByTid(Tradeid); - - if (tidCnt > 0) { - // 저장된 데이터 있을경우 - rtnMsg = "SUCCESS"; - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg2 : " + rtnMsg); - } - else if (tidCnt == 0) { - // Check1. KG모빌리언스 호출아이피 체크 - if (!getIsKgmServerIp(request)) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리"); - - Resultcd = "9998"; - Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요."; - - try { - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, ""); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요."; - mjonCommon.sendSimpleSlackMsg(msg); - } - } - catch (Exception e) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - MOBILE : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리 => SMS, 슬랙 알림 오류"); - } - } - - // 저장 Start - // 사용자 정보 - String mberNm = ""; - String moblphonNo = ""; - String mberEmailAdres = ""; - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setMberId(Userid); - MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); - if (userInfo != null) { - mberNm = userInfo.getMberNm(); - moblphonNo = userInfo.getMoblphonNo(); - mberEmailAdres = userInfo.getMberEmailAdres(); - } - - // MjonPayVO - MjonPayVO mjonPayVO = new MjonPayVO(); - mjonPayVO.setResultCd(Resultcd); - mjonPayVO.setResultMsg(Resultmsg); - mjonPayVO.setAutoBillKey(AutoBillKey); - mjonPayVO.setCashGb(CASH_GB); - mjonPayVO.setAutoYn(""); - mjonPayVO.setCommId(Commid); - mjonPayVO.setMobileId(Mobilid); - mjonPayVO.setMrchId(Mrchid); - mjonPayVO.setPno(No); - mjonPayVO.setPrdtNm(Prdtnm); - mjonPayVO.setPrdtPrice(Prdtprice); - mjonPayVO.setSignDate(Signdate); - mjonPayVO.setSvcId(Svcid); - mjonPayVO.setTradeId(Tradeid); - mjonPayVO.setUserId(Userid); - mjonPayVO.setUserKey(USERKEY); - mjonPayVO.setMcEzKey(MC_EZ_KEY); - - // 추가정보(mj_pg) - String pgStatus = ""; - if("0000".equals(Resultcd)) { - pgStatus = "1"; // 1:결제완료 - } - else { - pgStatus = "4"; // 4.결제오류 - } - mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료 - mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값] - mjonPayVO.setResultCode(Resultcd); - mjonPayVO.setResultMsg(Resultmsg); - mjonPayVO.setAmt(Prdtprice); // 결제금액 - mjonPayVO.setPayMethod("CELLPHONE"); // 결제방법 - mjonPayVO.setSpayMethod(""); // 간편결제 결제방법 - mjonPayVO.setSpayDiv(""); // 간편결제분류 - - mjonPayVO.setPgCode("KGM"); // - mjonPayVO.setGoodsName(Prdtnm); // - mjonPayVO.setPhone(""); // 모바일 - mjonPayVO.setMobile(""); // 모바일 - mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보) - mjonPayVO.setPayerEmail(Payeremail); - mjonPayVO.setTid(Tradeid); // Tid - mjonPayVO.setMid(Svcid); // Mid = Svcid - // 회원정보 - mjonPayVO.setBuyerName(mberNm); - mjonPayVO.setBuyerTel(moblphonNo); - mjonPayVO.setBuyerEmail(mberEmailAdres); - - // 인서트 - mjonPayService.insertKgmAllV2(mjonPayVO); - - rtnMsg = "SUCCESS"; - - try { - // 휴대폰 15만원결제 => 법인폰 알림 - if (mjonPayVO.getAmt().equals("165000")) { - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 15만원 결제", Userid, mberNm); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] 스미싱의심/휴대폰 15만원 결제 - " + mberNm +"("+ Userid + ")"; - mjonCommon.sendSimpleSlackMsg(msg); - } - - // 스미싱 의심회원으로 변경 - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setSmishingYn("Y"); - userManageVO.setMberId(Userid); - userManageService.updateOneUserSmishingYnNotAlert(userManageVO); - } - else { - // 대상 : 휴대폰결제, 즉시이체, 전용계좌 - // Step 1. 스미싱의심 지정 여부 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) { - // Step 1. 개인회원 여부 체크 - int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); - if (isPersnalMemberCnt == 1) { - // Step 2. 첫결제 여부 체크 - int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid); - if (isFirstPayCnt == 1) { - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/휴대폰 첫결제", Userid, mberNm); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] 스미싱의심/휴대폰 첫결제 - " + mberNm +"("+ Userid + ")"; - mjonCommon.sendSimpleSlackMsg(msg); - } - - // 스미싱 의심회원으로 변경 - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setSmishingYn("Y"); - userManageVO.setMberId(Userid); - userManageService.updateOneUserSmishingYnNotAlert(userManageVO); - } - } - } - } - } - catch (Exception e) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - MOBILE 슬랙알림 & 스미싱의심 처리 Error"); - System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - MOBILE e.getMessage() : " + e.getMessage()); - } - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg : " + rtnMsg); - } - } - catch(Exception e) { - rtnMsg = "FAIL"; - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - MOBILE Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - MOBILE returnMsg : " + rtnMsg); - System.out.println("KG MOBILIANS NotiUrl - MOBILE e.getMessage() : " + e.getMessage()); - } - - model.addAttribute("returnMsg", rtnMsg); - - return "web/cop/kgmV2/mobileNotiUrl"; - } - - /** - * KGM Mobile 결제 okUrl 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/okUrlMobileAjax.do"}) - public String okUrlMobileAjax( - HttpServletRequest request - , HttpSession session - , HttpServletResponse response - , ModelMap model - ) throws Exception{ - - //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 - response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); - - String rstMsg = ""; - if("0000".equals(request.getParameter("Resultcd"))) { - rstMsg = "휴대폰결제가 정상적으로 완료되었습니다."; - } - else { - rstMsg = "휴대폰결제가 실패했습니다."; - } - - model.addAttribute("Resultcd", request.getParameter("Resultcd")); - model.addAttribute("Resultmsg", rstMsg); - - System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); - System.out.println("KG MOBILIANS OkUrl - MOBILE ResultCd : " + request.getParameter("Resultcd")); - System.out.println("KG MOBILIANS OkUrl - MOBILE ResultMsg : " + rstMsg); - - return "web/cop/kgmV2/mobileOkUrl"; - } - - - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // BANK - // - // - - /** - * KGM 즉시이체 정보 Encode - * @param MjonPayVO - * @param modelAndView - * @return /web/member/pay/kgmBankEncodeAjax.do - * @throws Exception - */ - @RequestMapping(value = "/web/member/pay/kgmBankEncodeAjax.do") - public ModelAndView kgmBankEncodeAjax(MjonPayVO mjonPayVO, - HttpServletRequest request ) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == null) { - isSuccess = false; - msg = "로그인이 필요합니다."; - } - - try { - // Get Server Info - String kgmServerName = request.getServerName(); - String kgmPath = ""; - kgmPath = getKgServerPath(request); - - // Unique한 거래번호를 위한 값 추출 (밀리세컨드까지 조회) - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSS"); - String appr_dtm = dateFormat.format(new Date()); - - - /*****************************************************************************************/ - String CASH_GB = "RA"; //[ 2byte 고정] 결제수단구분. "RA" 고정값. 수정불가! - - /***************************************************************************************** - - 필수 입력 항목 - *****************************************************************************************/ - String RA_SVCID = globalRaSvcid; //서비스아이디 - String PAY_MODE = globalRaPayMode; //[ 2byte 고정] 연동시 테스트/실결제 구분 (00: 테스트결제-비과금, 10: 실거래결제-과금) - String Prdtprice = request.getParameter("Prdtprice");; //결제요청금액. - String Prdtnm = "캐시충전"; //상품명 ( 50byte 이내 ) - String Siteurl = kgmServerName; //가맹점도메인 - String Okurl = kgmPath + "/web/kgm/pay/okUrlBankAjax.do"; //성공화면처리URL : 결제완료통보페이지 full Url (예:http://www.mcash.co.kr/okurl.jsp ) - String Tradeid = RA_SVCID + "_" + appr_dtm + "_" + numberGen(6,1); //가맹점거래번호 //결제 요청 시 마다 unique한 값을 세팅해야 함. - - /***************************************************************************************** - - 선택 입력 항목 - *****************************************************************************************/ - String Notiurl = kgmPath + "/web/kgm/pay/notiUrlBankAjax.do"; //결제처리URL : 결제 완료 후, 가맹점측 과금 등 처리할 가맹점측 URL - String Userid = userId; //가맹점결제자ID - String Payeremail = ""; //[ 30byte 이하] 결제자 e-mail - String Item = ""; //[ 8byte 이하] 아이템코드. 미사용 시 반드시 공백으로 세팅. - String Prdtcd = ""; //[ 30byte 이하] 상품코드. 사전에 모빌리언스에 등록이 필요함. - String Notiemail = ""; //[ 30byte 이하] 알림 e-mail: 결제 완료 후 당사와 가맹점간의 Noti 연동이 실패한 경우 알람 메일을 받을 가맹점 담당자 이메일주소 - String Closeurl = ""; //[ 128byte 이하] 결제창 취소버튼, 닫기버튼 클릭 시 호출되는 가맹점 측 페이지. iframe 호출 시 필수! (예: http://www.mcash.co.kr/closeurl.jsp) - String Failurl = ""; //[ 128byte 이하] 결제 실패 시 사용자에게 보여질 가맹점 측 실패 페이지. 결제처리에 대한 실패처리 안내를 가맹점에서 제어해야 할 경우만 사용. - String MSTR = ""; //[2000byte 이하] 가맹점 콜백 변수. 가맹점에서 추가적으로 파라미터가 필요한 경우 사용하며 &, % 는 사용불가 (예: MSTR="a=1|b=2|c=3") - String Deposit = ""; //[ 10byte 이하] 1회용컵 보증금 변수 - - /***************************************************************************************** - - 디자인 관련 필수항목 - *****************************************************************************************/ - String LOGO_YN = "N"; //[ 1byte 고정] 가맹점 로고 사용 여부 (N: 모빌리언스 로고-default, Y: 가맹점 로고 (사전에 모빌리언스에 가맹점 로고 이미지를 등록해야함)) - String CALL_TYPE = "P"; //[ 4byte 이하] 결제창 호출 방식 (P: 팝업-default, SELF: 페이지전환, I: 아이프레임) - - /***************************************************************************************** - - 디자인 관련 선택항목 (향후 변경될 수 있습니다.) - *****************************************************************************************/ - String IFRAME_NAME = ""; //[ 1byte 고정] 결제창을 iframe으로 호출 할 경우 iframe 명칭 세팅 - String INFOAREA_YN = ""; //[ 1byte 고정] 결제창 안내문 표시여부 (Y: 표시-default, N: 미표시) - String FOOTER_YN = ""; //[ 1byte 고정] 결제창 하단 안내 표시여부 (Y: 표시-default, N: 미표시) - String HEIGHT = ""; //[ 4byte 이하] 결제창 높이 (px단위: iframe 등 사용시 결제창 높이 조절, 팝업창 등 호출시 "" 로 세팅) - String PRDT_HIDDEN = ""; //[ 1byte 고정] iframe 사용시 상품명 숨김 여부 (가맹점 디자인 결제창으로 결제 입력 사항만 iframe에서 사용시) - String EMAIL_HIDDEN = ""; //[ 1byte 고정] 결제자 e-mail 입력창 숨김 여부 (N: 표시-default, Y: 미표시) - String CONTRACT_HIDDEN = ""; //[ 1byte 고정] 이용약관 숨김 여부 (Y: 표시-default, N: 미표시) - - /***************************************************************************************** - - 암호화 처리 (암호화 사용 시) - Cryptstring 항목은 금액변조에 대한 확인용으로 반드시 아래와 같이 문자열을 생성하여야 합니다. - - 주) 암호화 스트링은 가맹점에서 전달하는 거래번호로 부터 추출되어 사용되므로 - 암호화에 이용한 거래번호가 변조되어 전달될 경우 복호화 실패로 결제 진행이 불가합니다. - *****************************************************************************************/ - String Cryptyn = "Y"; //Y: 암호화 사용, N: 암호화 미사용 - String Cryptstring = ""; //암호화 사용 시 암호화된 스트링 - - if ("Y".equals(Cryptyn)) { - Cryptstring = Prdtprice + Okurl; //금액변조확인 (결제요청금액 + Okurl) - Okurl = McashCipher.encodeString(Okurl, Tradeid); - Failurl = McashCipher.encodeString(Failurl, Tradeid); - Notiurl = McashCipher.encodeString(Notiurl, Tradeid); - Prdtprice = McashCipher.encodeString(Prdtprice, Tradeid); - Cryptstring = McashCipher.encodeString(Cryptstring, Tradeid); - } - - // 필수 - modelAndView.addObject("CASH_GB", CASH_GB); - modelAndView.addObject("RA_SVCID", RA_SVCID); - modelAndView.addObject("PAY_MODE", PAY_MODE); - modelAndView.addObject("Prdtnm", Prdtnm); - modelAndView.addObject("Siteurl", Siteurl); - modelAndView.addObject("Tradeid", Tradeid); - // 선택 - modelAndView.addObject("Closeurl", Closeurl); - modelAndView.addObject("MSTR", MSTR); - modelAndView.addObject("Payeremail", Payeremail); - modelAndView.addObject("Userid", Userid); - modelAndView.addObject("Deposit", Deposit); - modelAndView.addObject("Item", Item); - modelAndView.addObject("Prdtcd", Prdtcd); - modelAndView.addObject("Notiemail", Notiemail); - modelAndView.addObject("IFRAME_NAME", IFRAME_NAME); - modelAndView.addObject("INFOAREA_YN", INFOAREA_YN); - modelAndView.addObject("FOOTER_YN", FOOTER_YN); - modelAndView.addObject("HEIGHT", HEIGHT); - modelAndView.addObject("PRDT_HIDDEN", PRDT_HIDDEN); - modelAndView.addObject("EMAIL_HIDDEN", EMAIL_HIDDEN); - modelAndView.addObject("CONTRACT_HIDDEN", CONTRACT_HIDDEN); - modelAndView.addObject("LOGO_YN", LOGO_YN); - modelAndView.addObject("CALL_TYPE", CALL_TYPE); - // 변환 - modelAndView.addObject("Cryptyn", Cryptyn); - modelAndView.addObject("Okurl", Okurl); - modelAndView.addObject("Failurl", Failurl); - modelAndView.addObject("Notiurl", Notiurl); - modelAndView.addObject("Prdtprice", Prdtprice); - modelAndView.addObject("Cryptstring", Cryptstring); - } - catch(Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - - return modelAndView; - } - - /** - * KGM Bank 결제notiUrl 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/notiUrlBankAjax.do"}) - public String notiUrlBankAjax( - HttpServletRequest request - , HttpServletResponse response - , ModelMap model - ) throws Exception{ - - //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 - response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); - - /*****************************************************************************************/ - String CASH_GB = "RA"; //[ 2byte 고정] 결제수단구분. "RA" 고정값. 수정불가! - - String rtnMsg = ""; - String Resultcd = request.getParameter("Resultcd"); //[ 4byte 고정] 결과코드 - String Resultmsg = request.getParameter("Resultmsg"); //[ 100byte 이하] 결과메세지 - String Mobilid = request.getParameter("Mobilid"); //[ 15byte 이하] 모빌리언스 거래번호 - String Mrchid = request.getParameter("Mrchid"); // 상점ID - String Prdtnm = request.getParameter("Prdtnm"); //[ 50byte 이하] 상품명 - String Prdtprice = request.getParameter("Prdtprice"); //[ 10byte 이하] 상품가격 - String Signdate = request.getParameter("Signdate"); //[ 14byte 이하] 결제일자 - String Svcid = request.getParameter("Svcid"); //[ 12byte 고정] 서비스ID - String Tradeid = request.getParameter("Tradeid"); //[ 40byte 이하] 상점거래번호 - String Userid = request.getParameter("Userid"); //[ 20byte 이하] 사용자ID - // 추가 - String Payeremail = request.getParameter("Payeremail"); /* 결제자 이메일 */ - String Banknm = request.getParameter("Banknm"); /* 은행명 */ - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - BANK Banknm : " + Banknm); - System.out.println("KG MOBILIANS NotiUrl - BANK getIsKgmServerIp : " + getIsKgmServerIp(request)); // Kgm Ip Check - - try { - // Step 1. Tid로 존재여부 체크 - int tidCnt = mjonPayService.selectPayCountByTid(Tradeid); - - if (tidCnt > 0) { - // 저장된 데이터 있을경우 - rtnMsg = "SUCCESS"; - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg2 : " + rtnMsg); - } - else if (tidCnt == 0) { - // Check1. KG모빌리언스 호출아이피 체크 - if (!getIsKgmServerIp(request)) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - BANK : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리"); - - Resultcd = "9998"; - Resultmsg = "NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리. KG모빌리언스 정상결제 여부 확인후, 고객님께 안내후 결제취소해주세요."; - - try { - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리", Userid, ""); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] " + Userid + "님 결제건 알림 => NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리했습니다. KG모빌리언스 에는 정상결제 됐을수 있습니다. https://cp.mcash.co.kr/mcht 에서 정상결제 확인후, 고객님께 안내후, 결제취소해주세요."; - mjonCommon.sendSimpleSlackMsg(msg); - } - } - catch (Exception e) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - BANK : NotiUrl 호출 IP가 KG모빌리언스 결제서버군이 아니어서 결제오류 처리 => SMS, 슬랙 알림 오류"); - } - } - - // 저장 Start - // 사용자 정보 - String mberNm = ""; - String moblphonNo = ""; - String mberEmailAdres = ""; - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO.setMberId(Userid); - MberManageVO userInfo = userManageService.selectUserInfo(mberManageVO); - if (userInfo != null) { - mberNm = userInfo.getMberNm(); - moblphonNo = userInfo.getMoblphonNo(); - mberEmailAdres = userInfo.getMberEmailAdres(); - } - - // MjonPayVO - MjonPayVO mjonPayVO = new MjonPayVO(); - mjonPayVO.setResultCd(Resultcd); - mjonPayVO.setResultMsg(Resultmsg); - mjonPayVO.setAutoBillKey(""); - mjonPayVO.setCashGb(CASH_GB); - mjonPayVO.setAutoYn(""); - mjonPayVO.setCommId(""); - mjonPayVO.setMobileId(Mobilid); - mjonPayVO.setMrchId(Mrchid); - mjonPayVO.setPno(""); - mjonPayVO.setPrdtNm(Prdtnm); - mjonPayVO.setPrdtPrice(Prdtprice); - mjonPayVO.setSignDate(Signdate); - mjonPayVO.setSvcId(Svcid); - mjonPayVO.setTradeId(Tradeid); - mjonPayVO.setUserId(Userid); - mjonPayVO.setUserKey(""); - mjonPayVO.setMcEzKey(""); - - // 추가정보(mj_pg) - String pgStatus = ""; - if("0000".equals(Resultcd)) { - pgStatus = "1"; // 1:결제완료 - } - else { - pgStatus = "4"; // 4.결제오류 - } - mjonPayVO.setPgStatus(pgStatus); // 결제 상태 - 0:입금대기, 1:결제완료, 4.결제오류, 9:취소완료 - mjonPayVO.setRcptType("9"); // 현금영수증 유형-0:미발행, 1:소득공제, 2:지출증빙, 9:세금계산서[PG에 없는 값] - mjonPayVO.setResultCode(Resultcd); - mjonPayVO.setResultMsg(Resultmsg); - mjonPayVO.setAmt(Prdtprice); // 결제금액 - mjonPayVO.setPayMethod("BANK"); // 결제방법 - mjonPayVO.setSpayMethod(""); // 간편결제 결제방법 - mjonPayVO.setSpayDiv(""); // 간편결제분류 - mjonPayVO.setPgCode("KGM"); // - mjonPayVO.setGoodsName(Prdtnm); // - mjonPayVO.setPhone(""); // 모바일 - mjonPayVO.setMobile(""); // 모바일 - mjonPayVO.setEmail(mberEmailAdres); // 이메일(회원정보) - mjonPayVO.setPayerEmail(Payeremail); - mjonPayVO.setTid(Tradeid); // Tid - mjonPayVO.setMid(Svcid); // Mid = Svcid - // 회원정보 - mjonPayVO.setBuyerName(mberNm); - mjonPayVO.setBuyerTel(moblphonNo); - mjonPayVO.setBuyerEmail(mberEmailAdres); - // 추가 - mjonPayVO.setBankName(Banknm); - - // 인서트 - mjonPayService.insertKgmAllV2(mjonPayVO); - - rtnMsg = "SUCCESS"; - - try { - // 대상 : 휴대폰결제, 즉시이체, 전용계좌 - // Step 1. 스미싱의심 지정 여부 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - if (joinSettingVO != null && joinSettingVO.getSmishingNoti().equals("Y")) { - // Step 1. 개인회원 여부 체크 - int isPersnalMemberCnt = egovSiteManagerService.selectPersnalMemberCnt(Userid); - if (isPersnalMemberCnt == 1) { - // Step 2. 첫결제 여부 체크 - int isFirstPayCnt = egovSiteManagerService.selectFirstPayCnt(Userid); - if (isFirstPayCnt == 1) { - // SMS 체크 - if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { - // 스미싱의심 SMS 알림전송 - mjonNoticeSendUtil.smishingSmsNoticeSend("스미싱의심/즉시이체 첫결제", Userid, mberNm); - } - - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - // Slack 메시지 발송(단순본문) - String msg = "[문자온] 스미싱의심/즉시이체 첫결제 - " + mberNm +"("+ Userid + ")"; - mjonCommon.sendSimpleSlackMsg(msg); - } - - // 스미싱 의심회원으로 변경 - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setSmishingYn("Y"); - userManageVO.setMberId(Userid); - userManageService.updateOneUserSmishingYnNotAlert(userManageVO); - } - } - } - } - catch (Exception e) { - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - BANK 슬랙알림 & 스미싱의심 처리 Error"); - System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - BANK e.getMessage() : " + e.getMessage()); - } - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg : " + rtnMsg); - } - } - catch(Exception e) { - rtnMsg = "FAIL"; - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - BANK Tradeid : " + Tradeid); - System.out.println("KG MOBILIANS NotiUrl - BANK returnMsg : " + rtnMsg); - System.out.println("KG MOBILIANS NotiUrl - BANK e.getMessage() : " + e.getMessage()); - } - - - model.addAttribute("returnMsg", rtnMsg); - - return "web/cop/kgmV2/bankNotiUrl"; - } - - /** - * KGM Bank 결제 okUrl 페이지 - * @param searchVO - * @param model - * @throws Exception - */ - @RequestMapping(value= {"/web/kgm/pay/okUrlBankAjax.do"}) - public String okUrlBankAjax( - HttpServletRequest request - , HttpSession session - , HttpServletResponse response - , ModelMap model - ) throws Exception{ - - //크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리 - response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None"); - - String rstMsg = ""; - if("0000".equals(request.getParameter("Resultcd"))) { - rstMsg = "즉시이체가 정상적으로 완료되었습니다."; - } - else { - rstMsg = "즉시이체가 실패했습니다."; - } - - model.addAttribute("Resultcd", request.getParameter("Resultcd")); - model.addAttribute("Resultmsg", rstMsg); - - System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); - System.out.println("KG MOBILIANS OkUrl - BANK ResultCd : " + request.getParameter("Resultcd")); - System.out.println("KG MOBILIANS OkUrl - BANK ResultMsg : " + rstMsg); - - return "web/cop/kgmV2/bankOkUrl"; - } - - // Get Server Path - public static String getKgServerPath(HttpServletRequest request) { - String kgmPath = request.getScheme() + "://" + request.getServerName() +":" + request.getServerPort(); - if (request.getServerPort() == 80) { - kgmPath = request.getScheme() + "://" + request.getServerName(); - } - - // 테스트서버 정보 변환 - if(kgmPath.indexOf("192.168.0.125") > -1){ - kgmPath = "https://test.munjaon.co.kr:9998"; - } - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS kgServerPath : " + kgmPath); - - return kgmPath; - } - - // Get Ip - public static String getClientIP(HttpServletRequest request) { - String ip = request.getHeader("X-Forwarded-For") == null ? request.getHeader("X-Forwarded-For") : request.getHeader("X-Forwarded-For").replaceAll("10.12.107.11", "").replaceAll(",", "").trim(); - String ipMethod = "X-Forwarded-For"; - - if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { - ip = request.getHeader("Proxy-Client-IP"); - ipMethod = "Proxy-Client-IP"; - } - if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { - ip = request.getHeader("WL-Proxy-Client-IP"); - ipMethod = "WL-Proxy-Client-IP"; - } - if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { - ip = request.getHeader("HTTP_CLIENT_IP"); - ipMethod = "HTTP_CLIENT_IP"; - } - if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { - ip = request.getHeader("HTTP_X_FORWARDED_FOR"); - ipMethod = "HTTP_X_FORWARDED_FOR"; - } - if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { - ip = request.getRemoteAddr(); - ipMethod = "getRemoteAddr"; - } - - System.out.println("#############################################################"); - System.out.println("KG MOBILIANS NotiUrl - getClientIP : " + ipMethod); - System.out.println("KG MOBILIANS NotiUrl - getClientIP : " + ip); - - return ip; - } - - // Kgm Ip Check - public boolean getIsKgmServerIp(HttpServletRequest request) { - boolean rtnVal = false; - - String[] kgmServerIpArray = { - "175.158.12.133" - , "175.158.12.140" - , "175.158.12.1" - , "116.127.121.151" - , "218.50.55.107" - , "116.127.121.132"}; - - // List 로 변환 - List strList = new ArrayList<>(Arrays.asList(kgmServerIpArray)); - - // List Contains - if(strList.contains(getClientIP(request))) { - rtnVal = true; // 해당아이피 strArray에 존재 - } - - return rtnVal; - } - - /** - * 전달된 파라미터에 맞게 난수를 생성한다 - * @param len : 생성할 난수의 길이 - * @param dupCd : 중복 허용 여부 (1: 중복허용, 2:중복제거) - */ - public static String numberGen(int len, int dupCd ) { - Random rand = new Random(); - String numStr = ""; //난수가 저장될 변수 - - for(int i=0;i strList = new ArrayList<>(Arrays.asList(idArray)); - - // List Contains - if(strList.contains(userId)) { - rtnVal = true; // 해당아이피 strArray에 존재 - } - - return rtnVal; - } - -} diff --git a/src/main/java/itn/let/mjo/pay/web/MjonPrePayController.java b/src/main/java/itn/let/mjo/pay/web/MjonPrePayController.java index 7adba4a..79c84f1 100644 --- a/src/main/java/itn/let/mjo/pay/web/MjonPrePayController.java +++ b/src/main/java/itn/let/mjo/pay/web/MjonPrePayController.java @@ -34,39 +34,20 @@ import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.cmm.util.RedirectUrlMaker; import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.mjo.pay.service.MjonPayService; import itn.let.mjo.pay.service.MjonPrePayService; import itn.let.mjo.pay.service.MjonPrePayVO; -import itn.let.uss.umt.service.EgovUserManageService; @Controller public class MjonPrePayController { private static final Logger LOGGER = LoggerFactory.getLogger(MjonPrePayController.class); - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - @Resource(name = "mjonPrePayService") private MjonPrePayService mjonPrePayService; /** EgovMessageSource */ @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} - private String[][] sendPrePayExcelValue ={ - {"0" ,"번호" , "1" , "" }, - {"1", "아이디" , "아이디" , ""}, - {"2", "전송사" , "개인전용계좌", ""}, - {"3", "선결제일시" , "2021-06-08 11:05:38", ""}, - {"4", "결제금액" , "1000", ""}, - {"5", "등록일자" , "2021-06-08 11:05:38", ""}, - } ; /** * 결제 리스트 @@ -563,5 +544,15 @@ public class MjonPrePayController { } } + //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} + private String[][] sendPrePayExcelValue ={ + {"0" ,"번호" , "1" , "" }, + {"1", "아이디" , "아이디" , ""}, + {"2", "전송사" , "개인전용계좌", ""}, + {"3", "선결제일시" , "2021-06-08 11:05:38", ""}, + {"4", "결제금액" , "1000", ""}, + {"5", "등록일자" , "2021-06-08 11:05:38", ""}, + } ; + } diff --git a/src/main/java/itn/let/mjo/pay/web/MjonSBVAPayController.java b/src/main/java/itn/let/mjo/pay/web/MjonSBVAPayController.java index 03e6c69..5d359b7 100644 --- a/src/main/java/itn/let/mjo/pay/web/MjonSBVAPayController.java +++ b/src/main/java/itn/let/mjo/pay/web/MjonSBVAPayController.java @@ -24,22 +24,12 @@ import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.service.EgovFileMngService; import itn.com.cmm.service.EgovFileMngUtil; import itn.com.cmm.service.FileVO; import itn.com.cmm.util.RedirectUrlMaker; import itn.let.cop.bbs.service.Board; -import itn.let.mjo.msg.service.MjonMsgService; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.pay.service.MjonPayService; -import itn.let.mjo.pay.service.MjonPayVO; -import itn.let.mjo.pay.service.RefundService; import itn.let.mjo.payva.service.VacsVactService; import itn.let.mjo.payva.service.VacsVactVO; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.utl.fcc.service.EgovCryptoUtil; import itn.let.utl.user.service.CheckFileUtil; import itn.let.utl.user.service.CheckLoginUtil; @@ -51,45 +41,13 @@ import itn.let.utl.user.service.CheckLoginUtil; @Controller public class MjonSBVAPayController { - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - /** EgovMessageSource */ @Resource(name="egovMessageSource") EgovMessageSource egovMessageSource; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - /** refundService */ - @Resource(name = "refundService") - private RefundService refundService; - - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - - //암호화 - @Resource(name = "egovCryptoUtil") - EgovCryptoUtil egovCryptoUtil; //로그인 처리 @Resource(name = "checkLoginUtil") private CheckLoginUtil checkLoginUtil; - - //무료 대행 관련 쿼리 - //@Resource(name="addrAgencyService") - //private AddrAgencyService addrAgencyService; //가상계좌원장 @Resource(name="vacsVactService") @@ -103,89 +61,8 @@ public class MjonSBVAPayController { @Resource(name="EgovFileMngUtil") private EgovFileMngUtil egovFileMngUtil; - //파일 정보 관리 - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - private static final Logger logger = LoggerFactory.getLogger(MjonSBVAPayController.class); - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // USER - // - // - - /** - * 세틀뱅크 가상계좌 결제 Action 페이지 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/payva/SBPayActionAjax.do"}) - public String KGMPayActionAjax(@ModelAttribute("mjonPayVO") MjonPayVO mjonPayVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - /* - String pattern = (String) request.getAttribute( - HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; - */ - - mjonPayVO.setReturnURL(request.getRequestURL().toString().split("pay")[0] + "payva/SBPayActionAjax.do") ; - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - //테스트 - mjonPayVO.setBuyerName(loginVO.getName()); - mjonPayVO.setBuyerEmail(loginVO.getEmail()); - mjonPayVO.setMoid(loginVO.getId()); - - model.addAttribute("mjonPayVO", mjonPayVO); - return "web/cop/sb/mc_web"; - - } - - /** - * KGM mobile 결제 okurl 페이지 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/payva/OkUrl.do"}) - public String OkUrl( - HttpServletRequest request - , ModelMap model - ) throws Exception{ - - System.out.println("request.toString()"); - System.out.println(request.toString()); - - return "web/cop/sb/okurl"; - - } - - /** - * KGM mobile 결제 okurl 페이지 - * @param searchVO - * @param model - * @return "/web/pay/PayView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/member/payva/NotiUrl.do"}) - public String NotiUrl( - HttpServletRequest request - , ModelMap model - ) throws Exception{ - - System.out.println("request.toString()"); - System.out.println(request.toString()); - - return "web/cop/sb/notiurl"; - - } - ///////////////////////////////////////////////////////////////////////////////////////// // // @@ -683,13 +560,11 @@ public class MjonSBVAPayController { in_bool = false; } - //atchFileId = fileMngService.insertFileInfs(result); //첨부 파일 for(int i=0;i p_fileResult - , String p_atchFileId - - , VacsVactVO p_vacsVactVO - , String p_content - , String p_registerId - //, String p_processStatus - , MultipartHttpServletRequest p_multiRequest - ) throws Exception{ - - //게시판 등록하기 - try { - - String p_processStatus = ""; - - //p_processStatus = p_vacsVactVO.getProcessStatus(); - //if ("".equals(p_processStatus) || p_processStatus==null) p_processStatus = "B"; - - - //p_vacsVactVO.setAtchFileId(p_atchFileId); - //p_vacsVactVO.setRequestTxt(unscript(p_content)); // XSS 방지 - - //p_vacsVactVO.setProcessStatus(p_processStatus); //처리상태 B/I/E - - //p_vacsVactVO.setRegisterId(p_registerId); - //String userIp = EgovClntInfo.getClntIP(p_multiRequest); - //p_vacsVactVO.setNtcrIp(userIp); - - - vacsVactService.insert(p_vacsVactVO); - - p_modelAndView.addObject("message", egovMessageSource.getMessage("success.common.insert")); - p_modelAndView.addObject("result", "success"); - - }catch(Exception ex){ - ex.printStackTrace(); - - p_modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.insert")); - p_modelAndView.addObject("result", "fail"); - - } - - return p_modelAndView; - } - */ - - - /** - * XSS 방지 처리. - * - * @param data - * @return - */ - protected String unscript(String data) { - if (data == null || data.trim().equals("")) { - return ""; - } - - String ret = data; - - ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script"); - ret = ret.replaceAll(" refundList = refundService.selectRefundList(refundVO); int totCnt = 0; @@ -200,7 +179,7 @@ public class RefundController { if(refundVO.getBankAtchFileId() !=null) { FileVO fileVO = new FileVO(); fileVO.setAtchFileId(refundVO.getBankAtchFileId()); - List fileList = fileService.selectFileInfs(fileVO); + List fileList = fileMngService.selectFileInfs(fileVO); model.addAttribute("bankfileList", fileList); } @@ -208,7 +187,7 @@ public class RefundController { if(refundVO.getDocuAtchFileId() !=null) { FileVO fileVO = new FileVO(); fileVO.setAtchFileId(refundVO.getDocuAtchFileId()); - List fileList = fileService.selectFileInfs(fileVO); + List fileList = fileMngService.selectFileInfs(fileVO); model.addAttribute("docufileList", fileList); } @@ -216,7 +195,7 @@ public class RefundController { if(refundVO.getAdmAtchFileId() !=null) { FileVO fileVO = new FileVO(); fileVO.setAtchFileId(refundVO.getAdmAtchFileId()); - List fileList = fileService.selectFileInfs(fileVO); + List fileList = fileMngService.selectFileInfs(fileVO); model.addAttribute("resultFileList", fileList); } @@ -298,7 +277,7 @@ public class RefundController { * @return modelAndView * @throws Exception */ - @RequestMapping(value = {"/uss/ion/pay/insertRefundAjax.do","/web/member/pay/insertRefundAjax.do"}) + @RequestMapping(value = {"/uss/ion/pay/insertRefundAjax.do"}) public ModelAndView insertRefundAjax(final MultipartHttpServletRequest multiRequest , RefundVO refundVO , HttpServletRequest request) throws Exception { @@ -318,13 +297,6 @@ public class RefundController { return modelAndView; } - /*if(true) { - modelAndView.addObject("msg", "디버그존~"); - modelAndView.addObject("status", "fail"); - return modelAndView; - }*/ - - //230802 이지우 취약점 조치 - 보유금액을 변조하여 환불 신청 한 경우 방지 //회원 정보 조회 RefundVO mberInfoVO = refundService.selectRefundMberInfo(refundVO); @@ -406,47 +378,6 @@ public class RefundController { return modelAndView; } - /** - * 환불신청금액(환불요청 상태) Ajax - * @param RefundVO - * @param model - * @return modelAndView - * @throws Exception - */ - @RequestMapping(value = {"/web/member/pay/refMonSumAjax.do"}) - public ModelAndView RefundMoneySumAjax(RefundVO refundVO, HttpServletRequest request) throws Exception { - - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - boolean isSuccess = true; - String msg = ""; - int refundMoneySum = 0; - int userMoney = 0; - - try { - refundVO.setMberId(loginVO.getId()); - - refundVO = refundService.selectRefundMberInfo(refundVO); - userMoney = (int)Double.parseDouble(refundVO.getMberMoney()); // 보유Cash - - refundMoneySum = refundService.selectRefundMoneySum(refundVO); // 환불신청금액(환불요청 상태) - - } catch (Exception e) { - isSuccess = false; - msg = e.getMessage(); - } - - modelAndView.addObject("isSuccess", isSuccess); - modelAndView.addObject("msg", msg); - modelAndView.addObject("userMoney", userMoney); - modelAndView.addObject("refundMoneySum", refundMoneySum); - - return modelAndView; - } - /** * 환불요청 상태 업데이트 Ajax * @param RefundVO diff --git a/src/main/java/itn/let/mjo/payva/web/VacsController.java b/src/main/java/itn/let/mjo/payva/web/VacsController.java deleted file mode 100644 index 99b9485..0000000 --- a/src/main/java/itn/let/mjo/payva/web/VacsController.java +++ /dev/null @@ -1,634 +0,0 @@ -package itn.let.mjo.payva.web; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; -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.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.util.StringUtil; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.cop.bbs.service.EgovBBSAttributeManageService; -import itn.let.mjo.addragency.service.AddrAgencyService; -import itn.let.mjo.msg.service.MjonMsgService; -import itn.let.mjo.msg.service.MjonMsgVO; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.msgdata.service.MjonMsgReturnVO; -import itn.let.mjo.pay.service.MjonPayService; -import itn.let.mjo.pay.service.MjonPayVO; -import itn.let.mjo.pay.service.MjonVaMsgLogVO; -import itn.let.mjo.payva.service.VacsVactService; -import itn.let.mjo.payva.service.VacsVactVO; -import itn.let.mjo.temp.service.TempVO; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.MberManageVO; -import itn.let.utl.user.service.CheckBoardUtil; -import itn.let.utl.user.service.CheckFileUtil; -//import itn.let.utl.user.service.CheckLoginUtil;il;il;il;il;il;il; -import itn.let.utl.user.service.CheckLoginUtil; - -@Controller -public class VacsController { - -/* - @Resource(name = "MjonMsgSentService") - private MjonMsgSentService mjonMsgSentService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - */ - - @Resource(name="addrAgencyService") - private AddrAgencyService addrAgencyService; - - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; - - @Resource(name = "egovMjonCashIdGnrService") - private EgovIdGnrService idgenMjonCashId; - - @Resource(name = "checkBoardUtil") - private CheckBoardUtil checkBoardUtil; - - @Resource(name = "checkFileUtil") - private CheckFileUtil checkFileUtil; - - @Resource(name = "checkLoginUtil") - private CheckLoginUtil checkLoginUtil; - - @Resource(name = "EgovBBSAttributeManageService") - private EgovBBSAttributeManageService bbsAttrbService; - - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil egovFileMngUtil; - - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - //전용계좌 서비스 - @Resource(name="vacsVactService") - private VacsVactService vacsVactService; - - //결제 서비스 - @Resource(name="mjonPayService") - private MjonPayService mjonPayService; - - //문자발송 서비스 - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - - private static final Logger logger = LoggerFactory.getLogger(VacsController.class); - - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // USER - // - // - // 1.전용계좌 ajax 페이지 - - /** - * - * 전용 계좌 정보 가져오기 - * 1.신규 계좌 정보 - * 2.보유 하고 있는 전용계좌 - * - * @param addrVO - * @param model - * @return - * @throws Exception - */ - - @RequestMapping(value= { - "/web/member/pay/selectPayVAViewAjax.do" - }) - public String selectVAListAjax( - HttpServletRequest request - , @ModelAttribute("searchVO") TempVO tempVO - , ModelMap model - , RedirectAttributes redirectAttributes - ) throws Exception { - - logger.debug("VacsController-selectVAListAjax"); - - //사용자 로그인 여부 체크 - String isLogin = checkLoginUtil.isLoginCheck4JsonPage(redirectAttributes); - if (!"Y".equals(isLogin)) return "/web/member/pay/PayView"; - - - //로그인 정보 획득 - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - - //대상 리스트 가져오기 - VacsVactVO vacsVactVO = new VacsVactVO(); - - vacsVactVO.setMberId(loginVO.getId()); - List bankList = vacsVactService.selectBankAcctList(vacsVactVO); //할당 가능한 계좌 수량 리스트 받아오기 - List myBankList = vacsVactService.selectMyBankAcctList(vacsVactVO); //내가 할당받은 전용계좌 리스트 받아오기 - - MjonVaMsgLogVO vaMsgLogVO = new MjonVaMsgLogVO(); - vaMsgLogVO.setMberId(loginVO.getId()); - - Date now = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - String date = sdf.format(now); - vaMsgLogVO.setSendDate(date); - - MjonVaMsgLogVO resultMsgInfo = mjonPayService.selectMyAcctSendCnt(vaMsgLogVO); - - //대상 리스트, 페이징 정보 전달 - model.addAttribute("resultList", bankList); - model.addAttribute("resultMyList", myBankList); - model.addAttribute("resultMsgInfo", resultMsgInfo); - - return "/web/pay/PayVAViewAjax"; - - } - - /** - * 전용계좌 할당해주기 - * @param commandMap 파라메터전달용 commandMap - * @param model 화면모델 - * @return uss/umt/EgovIdDplctCnfirm - * @throws Exception - */ - @RequestMapping(value = "/web/member/pay/updateVacsAccountUsrIdAjax.do") - public ModelAndView updateVacsAccountUsrIdAjax(@RequestParam Map commandMap, HttpServletRequest request) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 정보 획득 - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - try { - - //대상 리스트 가져오기 - VacsVactVO vacsVactVO = new VacsVactVO(); - //사용자 아이디 셋팅 - vacsVactVO.setMberId(loginVO.getId()); - - /** - * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 - * 현재 로그인 세션도 만료 처리함 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(loginVO.getId()); - - if(!mberSttus) { - - modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 전용계좌를 발급하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); - modelAndView.addObject("result", "statusFail"); - - // 세션 로그아웃 - request.getSession().invalidate(); - - return modelAndView; - - } - - - List bankList = vacsVactService.selectBankAcctList(vacsVactVO); //할당 가능한 계좌 수량 리스트 받아오기 - List myBankList = vacsVactService.selectMyBankAcctList(vacsVactVO); //내가 할당받은 전용계좌 리스트 받아오기 - - int myBankCnt = myBankList.size(); - - if(myBankCnt > 0) { //할당받은 전용계좌가 1개 이상이면 할당 불가 처리 - - modelAndView.addObject("message", "전용계좌를 보유하고 있어 추가 할 수 없습니다."); - modelAndView.addObject("result", "fail"); - - }else { - - //은행코드 셋팅 - vacsVactVO.setBankCd(commandMap.get("bankCd").toString()); - - //계좌 할당일자 생성 - Date now = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - String openDate = sdf.format(now); - vacsVactVO.setOpenIl(openDate); - - //계좌 상태 셋팅 0: 미할당, 1:할당 - vacsVactVO.setAcctSt("1"); - - String cmfNm = "문자온_" + loginVO.getName(); //예금주명 셋팅 - 문자온_예금주명 으로 입력하되 최대 20바이트를 넘을 수 없다. - //String cmfNm = "itn_예금주명 으로 입력하되 최대 20바이트를 넘을 수 없다."; //예금주명 셋팅 - itn_예금주명 으로 입력하되 최대 20바이트를 넘을 수 없다. - String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 - int bytes = cmfNm.getBytes(charset).length; - - if(bytes > 20) { - - cmfNm = cmfNm.substring(0,10); - - } - - vacsVactVO.setCmfNm(cmfNm); - - //할당 된 계좌 return 받기로 변경 - String myBankAccount = vacsVactService.updateVacsAccountUsrId(vacsVactVO); //내가 할당받은 전용계좌 리스트 받아오기 - - if(StringUtil.isNotEmpty(myBankAccount)){ - modelAndView.addObject("result", "success"); - - - vacsVactService.insertVacsHistory(vacsVactVO); - - } - else { - - modelAndView.addObject("message", "해당 은행은 전용계좌를 받을 수 없습니다."); - modelAndView.addObject("result", "fail"); - - } - - } - - } catch (Exception e) { - throw new Exception("전용계좌 신규 신청 오류 ::: " + e); - } - - - - return modelAndView; - } - - /** - * 전용계좌 계좌번호 문자 전송해주기 - * @param commandMap 파라메터전달용 commandMap - * @param model 화면모델 - * @return uss/umt/EgovIdDplctCnfirm - * @throws Exception - */ - @RequestMapping(value = "/web/member/pay/insertVacsAccountSendMsgLogAjax.do") - public ModelAndView insertVacsAccountSendMsgLogAjax(MjonVaMsgLogVO vaMsgLogVO) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - //로그인 정보 획득 - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - String resultSts = "0"; - String resultBlockSts = "0"; - - if(userId.equals("")) { - - modelAndView.addObject("message", "로그인이 필요합니다."); - modelAndView.addObject("result", "LoginFail"); - return modelAndView; - - } - - try { - - String accMsg = vaMsgLogVO.getAccMsg(); - String[] tempMsg = accMsg.split("/"); - String msg = "회원님의 계좌번호는 {{0}} 입니다."; - String replaceMsg = ""; - int i = 0; - for(String temp : tempMsg) { - - String[] arrStr = temp.split("_"); //은행코드_은행명_전용계좌번호 형태의 텍스트로 넘어온다. - - if(arrStr.length < 1) { - modelAndView.addObject("message", "올바른 계좌정보가 아닙니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - }else { - - if(i == 0) { //은행명 + 전용계좌번호 문장 만들기 - - replaceMsg = "[" + arrStr[1] + "] " + arrStr[2]; - - }else { - - replaceMsg = replaceMsg + ", " +"[" + arrStr[1] + "] " + arrStr[2]; - - } - - vaMsgLogVO.setBankCd(arrStr[0]); //은행 코드번호 - vaMsgLogVO.setAcctNo(arrStr[2]); //전용계좌번호 - - } - - i++; - - } - - //전송 문자 내용 만들기 - String repMsg = msg.replace("{{0}}", replaceMsg); - vaMsgLogVO.setMsg(repMsg); - vaMsgLogVO.setMberId(userId); - - MjonMsgVO mjonMsgVO = new MjonMsgVO(); - - //문자 종류 체크 - int bytes = repMsg.getBytes("euc-kr").length; - if(bytes < 90) { //단문 - mjonMsgVO.setMsgType("4"); - }else { //장문 - mjonMsgVO.setMsgType("6"); - } - - //회원 발신번호 받아오기 - List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); - - //회원 발신번호 등록이 되어있지 않으면 발송 중지처리. - if(resultSendPhonList.size() == 0 || resultSendPhonList == null) { - - modelAndView.addObject("message", "문자 발송에 필요한 발신번호가 등록되어 있지 않습니다. 마이페이지에서 발신번호를 등록해 주세요."); - modelAndView.addObject("result", "fail"); - - return modelAndView; - - } - - String callFrom = resultSendPhonList.get(0); //임의로 리스트 첫번째 발신번호로 지정 - String callTo = vaMsgLogVO.getCallTo(); - mjonMsgVO.setCallFrom(callFrom); //발신자번호 - mjonMsgVO.setSmsTxt(repMsg); //전송 메세지 - //mjonMsgVO.setCallTo(vaMsgLogVO.getCallTo()); //수신자 번호 - mjonMsgVO.setUserId(userId); //회원아이디 - mjonMsgVO.setReserveYn("N"); //즉시전송 - mjonMsgVO.setFileCnt("0"); //첨부이미지 갯수 - - //수신번호가 배열로 되어있어서 배열에 담아준다. - String[] phone = new String[1]; - for(int j=0; j< 1; j++) { - - phone[j] = callTo; - - } - - mjonMsgVO.setCallToList(phone); - int callToListCnt = mjonMsgVO.getCallToList().length; - mjonMsgVO.setTotalCallCnt(callToListCnt); - - //전송사 선택하기 - /*MjonMsgVO pramVO = new MjonMsgVO(); - List sendRateList = mjonMsgService.selectTodayAgentSendCntList(pramVO); // 전송사 전송 배분률 및 현재 전송건수 조회 - for (MjonMsgVO tmpVO : sendRateList) { - float cnt = Float.parseFloat(tmpVO.getMsgGroupCnt()); - float totCnt = tmpVO.getTotCnt(); - tmpVO.setSendRateInfo(Float.parseFloat(tmpVO.getSendRate()) - (cnt / totCnt * 100)); // 배분률 - 현재전송 비율 - } - - String sendAgent = sendRateList.get(0).getAgentCode(); - float maxRate = sendRateList.get(0).getSendRateInfo(); - for (MjonMsgVO tmpVO : sendRateList) { // 배분률 대비 현재전송 비율이 가장 적은거 찾기 - if (maxRate < tmpVO.getSendRateInfo()) { - maxRate = tmpVO.getSendRateInfo(); - sendAgent = tmpVO.getAgentCode(); - } - }*/ - - mjonMsgVO.setAgentCode("04"); //전송사 선택 - //mjonMsgVO.setAgentCode(sendAgent); //전송사 선택 - - if(mjonMsgVO.getAgentCode().equals("03")) { //아이엠오 전송사 문자 타입 설정해 주기 - - // 단순 장문 문자는 neoType : 2, 그림 포함 : 4 - if(mjonMsgVO.getFileCnt().equals("0")) { // 단순 장문 문자 - - mjonMsgVO.setNeoType("2"); - - }else{ // 그림포함 문자인경우 - - mjonMsgVO.setNeoType("4"); - - } - - } - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 -// mjonMsgVO.setBefCash(userMoney); //현재 보유 포인트 정보 저장 - - //문자발송 금액 계산하기 - //문자 전송 개인 단가 불러오기 - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - - if(!userId.equals("")) { - - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - } - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - - if(shortPrice == 0 || longPrice == 0) { - - shortPrice = sysJoinSetVO.getShortPrice(); - longPrice = sysJoinSetVO.getLongPrice(); - - } - - if(mjonMsgVO.getMsgType().equals("4")) { //단문 금액 - mjonMsgVO.setTotPrice(shortPrice.toString()); //총금액 - mjonMsgVO.setEachPrice(shortPrice.toString()); //한건 금액 - }else { //장문 금액 - mjonMsgVO.setTotPrice(longPrice.toString()); - mjonMsgVO.setEachPrice(longPrice.toString()); - } - - String totPrice = mjonMsgVO.getTotPrice(); - //String eachPrice = mjonMsgVO.getEachPrice(); - - BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN); - - - - //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - //BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) == 1) { // -1 : befCash > totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash < totMsgPrice, - - //문자 발송 처리 - //resultSts = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - - mjonMsgVO.setBefCash(befCash.toString()); - - //문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - - resultSts = returnVO.getSendMsgCnt(); - resultBlockSts = returnVO.getSendMsgBlockCnt(); - - //문자 발송 캐시 차감 해주기 - MjonPayVO mjonPayVO = new MjonPayVO(); - - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - /*if(Integer.parseInt(resultSts) > 0 && Integer.parseInt(mjonMsgVO.getMsgGroupCnt()) > 0) { - - // 문자 전송 그룹 테이블에 정보 입력 - mjonMsgService.insertGroupMsgData(mjonMsgVO); - - }*/ - - //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. - /*if(Integer.parseInt(resultSts) > 0) { - mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); - mjonPayVO.setUserId(mjonMsgVO.getUserId()); - mjonPayVO.setCash(-Float.parseFloat(mjonMsgVO.getTotPrice())); - mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); - mjonPayVO.setMemo("SMS 문자 " + resultSts + "건 발송"); - mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - - mjonPayService.insertCash(mjonPayVO); //캐시차감 - mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 - }*/ - - }else { - - modelAndView.addObject("message", "문자 발송에 필요한 보유 잔액이 부족 합니다."); - modelAndView.addObject("result", "fail"); - - return modelAndView; - - } - - //문자 발송하기 - - //발송일자 생성 - 하루에 세번만 보낼수 있어서 날짜를 입력하는 것임 - Date now = new Date(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); - String date = sdf.format(now); - vaMsgLogVO.setSendDate(date); - - //전송문자 로그 입력하기 - int logCnt = mjonPayService.insertVaMsgLogInfo(vaMsgLogVO); - - if(logCnt > 0 && Integer.parseInt(resultSts) > 0) { - - modelAndView.addObject("result", "success"); - - }else { - - modelAndView.addObject("message", "문자 발송에 실패 하였습니다."); - modelAndView.addObject("result", "fail"); - - } - - } catch (Exception e) { - System.out.println(" insertVacsAccountSendMsgLogAjax Controller 전용계좌 문자 발송 오류 ::: " + e); - throw new Exception("전용계좌 문자 발송 오류 ::: " + e); - - } - - return modelAndView; - } - - - /* - * 1.url 이동 - * 2.ajax - * 2-1.page call return htem - * 2-2.action call return success or fail - * - * 1. - * a call b redirect c - * - * 2-1.ajax call - * blank html - * - * 2-2. - * return fail - * - * */ - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // ADMIN - // - // - - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // - // private function - // - // - - - /** - * XSS 방지 처리. - * - * @param data - * @return - */ - protected String unscript(String data) { - if (data == null || data.trim().equals("")) { - return ""; - } - - String ret = data; - - ret = ret.replaceAll("<(S|s)(C|c)(R|r)(I|i)(P|p)(T|t)", "<script"); - ret = ret.replaceAll(" totalMsgCnt = mjonReservMsgService.selectDetailMsgCnt(mjonResvMsgVO);//mjonReservMsgService.selectTotalMsgCnt(mjonResvMsgVO); - - List H_totalMsgCnt = totalMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); - List A_totalMsgCnt = totalMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); - - model.addAttribute("totalMsgCnt", totalMsgCnt); - - //단문 성공건, 실패건 불러오기 - mjonResvMsgVO.setMsgType("4"); - List smsMsgCnt = mjonReservMsgService.selectDetailMsgCnt(mjonResvMsgVO); - - List H_smsMsgCnt = smsMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); - List A_smsMsgCnt = smsMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); - - model.addAttribute("smsMsgCnt", smsMsgCnt); - - //장문 성공건, 실패건 불러오기 - mjonResvMsgVO.setMsgType("6"); - mjonResvMsgVO.setFileCnt("0"); - List lmsMsgCnt = mjonReservMsgService.selectDetailMsgCnt(mjonResvMsgVO); - - List H_lmsMsgCnt = lmsMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); - List A_lmsMsgCnt = lmsMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); - model.addAttribute("lmsMsgCnt", lmsMsgCnt); - - //그림문자 성공건, 실패건 불러오기 - mjonResvMsgVO.setMsgType("6"); - mjonResvMsgVO.setFileCnt("1"); - List mmsMsgCnt = mjonReservMsgService.selectDetailMsgCnt(mjonResvMsgVO); - - - List H_mmsMsgCnt = mmsMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); - List A_mmsMsgCnt = mmsMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); - model.addAttribute("mmsMsgCnt", mmsMsgCnt); - - - - - // * 홈페이지에서 보낸 데이터 LIST - //* SEND_KIND = "H" - - // 전체 영역 - model.addAttribute("H_allSentCntVO", this.getResultCntProc(H_totalMsgCnt)); - // 전체 단문(SMS) - model.addAttribute("H_smsSentCntVO", this.getResultCntProc(H_smsMsgCnt)); - // 전체 장문(LMS) - model.addAttribute("H_lmsSentCntVO", this.getResultCntProc(H_lmsMsgCnt)); - // 전체 장문(LMS) - model.addAttribute("H_mmsSentCntVO", this.getResultCntProc(H_mmsMsgCnt)); - - - // ==================================================================================== - - - - // * 홈페이지에서 보낸 데이터 LIST - // * SEND_KIND = "A" - - // 전체 영역 - model.addAttribute("A_allSentCntVO", this.getResultCntProc(A_totalMsgCnt)); - // 전체 단문(SMS) - model.addAttribute("A_smsSentCntVO", this.getResultCntProc(A_smsMsgCnt)); - // 전체 장문(LMS) - model.addAttribute("A_lmsSentCntVO", this.getResultCntProc(A_lmsMsgCnt)); - // 전체 장문(LMS) - model.addAttribute("A_mmsSentCntVO", this.getResultCntProc(A_mmsMsgCnt)); - - ApiKeyVO apiKeyVO = new ApiKeyVO(); - apiKeyVO.setMberId(userId); - model.addAttribute("appMgmt", apiKeyMngService.selectMberApiKeyChk(apiKeyVO) > 0 ? true : false); - */ - -// model.addAttribute("mmsMsgCnt", mmsMsgCnt); - - // 검색 리스트 불러오기 - if(mjonResvMsgVO.getPageUnit() != 10) { - mjonResvMsgVO.setPageUnit(mjonResvMsgVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(mjonResvMsgVO.getSearchSortOrd().equals("")) { - - mjonResvMsgVO.setSearchSortOrd("desc"); - - } - - //기본 등록일자 정렬 - if(mjonResvMsgVO.getSearchSortCnd().equals("")) { - - mjonResvMsgVO.setSearchSortCnd("regdate"); - - } - - /** pageing */ - /*PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonResvMsgVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonResvMsgVO.getPageUnit()); - paginationInfo.setPageSize(mjonResvMsgVO.getPageSize()); - - mjonResvMsgVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonResvMsgVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonResvMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());*/ - - //전체 발송 리스트 불러오기 - /*List resultAllResList = mjonReservMsgService.selectAllResvMsgList(mjonResvMsgVO); - model.addAttribute("resultAllResList", resultAllResList); - model.addAttribute("resultAllResCnt", resultAllResList.size()); - - model.addAttribute("searchKeyword", mjonResvMsgVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllResList.size()> 0 ? (Integer.parseInt((resultAllResList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount());*/ - - - String startDate = mjonResvMsgVO.getStartDate(); - String endDate = mjonResvMsgVO.getEndDate(); - - if(startDate == null && endDate == null ) { - - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - //종료일은 오늘날짜 - cal.setTime(now); - endDate = format.format(cal.getTime()); - - //시작일은 전날로 셋팅 - cal.add(Calendar.DATE, -1); - startDate = format.format(cal.getTime()); - - mjonResvMsgVO.setStartDate(startDate); - mjonResvMsgVO.setEndDate(endDate); - - } - - model.addAttribute("searchKeyword", mjonResvMsgVO.getSearchKeyword()); - model.addAttribute("mjonResvMsgVO", mjonResvMsgVO); - model.addAttribute("siteId", mjonResvMsgVO.getSiteId()); - return "web/reservedmsg/ReservedMsgView"; - } - - /** - * 마이페이지 - 이용내역 - ajax - * @param mjonMsgVO - * @param model - * @return "/web/member/pay/PayUserListAjax.do" - * @throws Exception - */ - @RequestMapping(value="/web/reservedmsg/subcontent/MsgSentView_HA_allSentAjax.do") - public String mberInfo_cash_pointAjax(@ModelAttribute("searchVO") MjonResvMsgVO mjonResvMsgVO, - HttpServletRequest request, - ModelMap model) throws Exception{ - - System.out.println("ReservedMsgSentView_HA_allSentAjax"); - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - - mjonResvMsgVO.setUserId(userId); - - //전체 발송 건수 통계 불러오기 - mjonResvMsgVO.setMsgType(""); - List totalMsgCnt = mjonReservMsgService.selectDetailMsgCnt(mjonResvMsgVO);//mjonReservMsgService.selectTotalMsgCnt(mjonResvMsgVO); - - List H_totalMsgCnt = totalMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); - List A_totalMsgCnt = totalMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); - - model.addAttribute("totalMsgCnt", totalMsgCnt); - - //단문 성공건, 실패건 불러오기 - mjonResvMsgVO.setMsgType("4"); - List smsMsgCnt = mjonReservMsgService.selectDetailMsgCnt(mjonResvMsgVO); - - List H_smsMsgCnt = smsMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); - List A_smsMsgCnt = smsMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); - - model.addAttribute("smsMsgCnt", smsMsgCnt); - - //장문 성공건, 실패건 불러오기 - mjonResvMsgVO.setMsgType("6"); - mjonResvMsgVO.setFileCnt("0"); - List lmsMsgCnt = mjonReservMsgService.selectDetailMsgCnt(mjonResvMsgVO); - - List H_lmsMsgCnt = lmsMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); - List A_lmsMsgCnt = lmsMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); - model.addAttribute("lmsMsgCnt", lmsMsgCnt); - - //그림문자 성공건, 실패건 불러오기 - mjonResvMsgVO.setMsgType("6"); - mjonResvMsgVO.setFileCnt("1"); - List mmsMsgCnt = mjonReservMsgService.selectDetailMsgCnt(mjonResvMsgVO); - - - List H_mmsMsgCnt = mmsMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); - List A_mmsMsgCnt = mmsMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); - model.addAttribute("mmsMsgCnt", mmsMsgCnt); - - - - /* - * 홈페이지에서 보낸 데이터 LIST - * SEND_KIND = "H" - * */ - // 전체 영역 - model.addAttribute("H_allSentCntVO", this.getResultCntProc(H_totalMsgCnt)); - // 전체 단문(SMS) - model.addAttribute("H_smsSentCntVO", this.getResultCntProc(H_smsMsgCnt)); - // 전체 장문(LMS) - model.addAttribute("H_lmsSentCntVO", this.getResultCntProc(H_lmsMsgCnt)); - // 전체 장문(LMS) - model.addAttribute("H_mmsSentCntVO", this.getResultCntProc(H_mmsMsgCnt)); - - - /* ==================================================================================== */ - - - /* - * 홈페이지에서 보낸 데이터 LIST - * SEND_KIND = "A" - * */ - // 전체 영역 - model.addAttribute("A_allSentCntVO", this.getResultCntProc(A_totalMsgCnt)); - // 전체 단문(SMS) - model.addAttribute("A_smsSentCntVO", this.getResultCntProc(A_smsMsgCnt)); - // 전체 장문(LMS) - model.addAttribute("A_lmsSentCntVO", this.getResultCntProc(A_lmsMsgCnt)); - // 전체 장문(LMS) - model.addAttribute("A_mmsSentCntVO", this.getResultCntProc(A_mmsMsgCnt)); - - ApiKeyVO apiKeyVO = new ApiKeyVO(); - apiKeyVO.setMberId(userId); - model.addAttribute("appMgmt", apiKeyMngService.selectMberApiKeyChk(apiKeyVO) > 0 ? true : false); - - - - System.out.println("ReservedMsgSentView_HA_allSentAjax_end"); - - return "/web/reservedmsg/subcontent/ReservedMsgSentView_HA_allSentAjax"; - } - - - /** - * @methodName : getResultCntProc - * @author : 이호영 - * @date : 2023.07.26 - * @description : MsgSentView.jsp에서 JSTL로 계산하는 것을 JAVA로 분리 - * @param msgCnt - * @param smsMsgCnt - * @param lmsMsgCnt - * @param mmsMsgCnt - * @return - */ - private MjonMsgReservCntVO getResultCntProc(List msgCnt) { -// MjonMsgSentCntVO mjonSentCntVO = new MjonMsgSentCntVO(); - MjonMsgReservCntVO cntVO = new MjonMsgReservCntVO(); - - - /* - * 전체 통계 - * */ - // 대기 갯수 - cntVO.setWaitCnt(msgCnt.stream() - .filter(f->"W".equals(f.getMsgResultSts())) - .mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); - // 성공 갯수 - cntVO.setSuccCnt(msgCnt.stream() - .filter(f->"S".equals(f.getMsgResultSts())) - .mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); - // 실패 갯수 - cntVO.setFailCnt(msgCnt.stream() - .filter(f->"F".equals(f.getMsgResultSts())) - .mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); - // 예약취소 갯수 - cntVO.setCnclCnt(msgCnt.stream() - .filter(f->"C".equals(f.getMsgResultSts())) - .mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); - - // 전체 갯수 구하기 - cntVO.setTotCnt(cntVO.getWaitCnt() + cntVO.getSuccCnt() + cntVO.getFailCnt() + cntVO.getCnclCnt()); - - - return cntVO; - } - - - /** - * 예약관리 탭 리스트 화면 - * @param searchVO - * @param model - * @return "/web/mjon/reservmsg/selectReservMsgListViewAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/reservmsg/selectReservMsgListViewAjax.do"}) - public String selectReservMsgListViewAjax(@ModelAttribute("searchVO") MjonResvMsgVO mjonResvMsgVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonResvMsgVO.setUserId(userId); - - // 검색 리스트 불러오기 - if(mjonResvMsgVO.getPageUnit() != 10) { - mjonResvMsgVO.setPageUnit(mjonResvMsgVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(mjonResvMsgVO.getSearchSortOrd().equals("")) { - - mjonResvMsgVO.setSearchSortOrd("desc"); - mjonResvMsgVO.setSearchSortCnd("regdate"); - } - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonResvMsgVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonResvMsgVO.getPageUnit()); - paginationInfo.setPageSize(mjonResvMsgVO.getPageSize()); - - mjonResvMsgVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonResvMsgVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonResvMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - List resultAllResList = mjonReservMsgService.selectAllResvMsgList(mjonResvMsgVO); - model.addAttribute("resultAllResList", resultAllResList); - model.addAttribute("resultAllResCnt", resultAllResList.size()); - - model.addAttribute("searchKeyword", mjonResvMsgVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllResList.size()> 0 ? (Integer.parseInt((resultAllResList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - //전체, 발송 완료 탭의 발송 결과 건수 리스트 불러오기 - List resultMsgSucFailList = mjonReservMsgService.selectAllResvMsgSucFailList(resultAllResList); - model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); - - model.addAttribute("mjonResvMsgVO", mjonResvMsgVO); - - String stateType = mjonResvMsgVO.getStateType(); - String pageUrl = "web/reservedmsg/ReservedMsgAllListAjax"; - - if(stateType.equals("ready")) { - - pageUrl = "web/reservedmsg/ReservedMsgReadyListAjax"; - - }else if(stateType.equals("complete")) { - - pageUrl = "web/reservedmsg/ReservedMsgCompleteListAjax"; - - }else if(stateType.equals("cancel")) { - - pageUrl = "web/reservedmsg/ReservedMsgCancelListAjax"; - - } - return pageUrl; - } - - - /** - * 예약관리 문자 선택 삭제 기능 - * @param searchVO - * @param model - * @return "web/mjon/reservmsg/selectReservAllMsgListAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/reservmsg/deleteReservMsgDataAjax.do"}) - public String deleteReservMsgDataAjax(@ModelAttribute("searchVO") MjonResvMsgVO mjonResvMsgVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonResvMsgVO.setUserId(userId); - - //선택 문자 삭제 처리 - int resultCnt = mjonReservMsgService.deleteReservMsgDataAjax(mjonResvMsgVO); - - /* - * - * 리스트 화면 불러오기 - * - * */ - - // 검색 리스트 불러오기 - if(mjonResvMsgVO.getPageUnit() != 10) { - mjonResvMsgVO.setPageUnit(mjonResvMsgVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(mjonResvMsgVO.getSearchSortOrd().equals("")) { - - mjonResvMsgVO.setSearchSortOrd("desc"); - - } - - //기본 등록일자 정렬 - if(mjonResvMsgVO.getSearchSortCnd().equals("")) { - - mjonResvMsgVO.setSearchSortCnd("regdate"); - - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonResvMsgVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonResvMsgVO.getPageUnit()); - paginationInfo.setPageSize(mjonResvMsgVO.getPageSize()); - - mjonResvMsgVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonResvMsgVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonResvMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - List resultAllResList = mjonReservMsgService.selectAllResvMsgList(mjonResvMsgVO); - model.addAttribute("resultAllResList", resultAllResList); - model.addAttribute("resultAllResCnt", resultAllResList.size()); - - model.addAttribute("searchKeyword", mjonResvMsgVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllResList.size()> 0 ? (Integer.parseInt((resultAllResList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - model.addAttribute("mjonResvMsgVO", mjonResvMsgVO); - - return "web/reservedmsg/ReservedMsgAllListAjax"; - } - - - - /** - * 예약관리 문자 상세보기 내용 - * @param searchVO - * @param model - * @return "/web/mjon/reservmsg/selectReservMsgDetailDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/reservmsg/selectReservMsgDetailDataAjax.do"}) - public String selectReservMsgDetailDataAjax(@ModelAttribute("searchVO") MjonResvMsgVO mjonResvMsgVO, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - mjonResvMsgVO.setUserId(userId); - - //문자 상세보기 처리 - MjonResvMsgVO resultMsgDetail = mjonReservMsgService.selectReservMsgDetailDataAjax(mjonResvMsgVO); - model.addAttribute("resultMsgDetail", resultMsgDetail); - - //문자 상세보기 이미지 아이디 받아오기 - String atchFileId1 =""; - String atchFileId2 =""; - String atchFileId3 =""; - - String path1 = resultMsgDetail.getFilePath1(); - String path2 = resultMsgDetail.getFilePath2(); - String path3 = resultMsgDetail.getFilePath3(); - - FileVO fileVO1 = new FileVO(); - FileVO fileVO2 = new FileVO(); - FileVO fileVO3 = new FileVO(); - - if(StringUtil.isNotEmpty(path1)) { - - //파일경로 및 이름을 이용하여 atchFileId, fileExtsn 번호 받아오기 - fileVO1 = getFilePathToAtchFileId(path1); - - } - - if(StringUtil.isNotEmpty(path2)) { - - //파일경로 및 이름을 이용하여 atchFileId, fileExtsn 번호 받아오기 - fileVO2 = getFilePathToAtchFileId(path2); - - } - - - if(StringUtil.isNotEmpty(path3)) { - - //파일경로 및 이름을 이용하여 atchFileId, fileExtsn 번호 받아오기 - fileVO3 = getFilePathToAtchFileId(path3); - - } - - model.addAttribute("fileVO1", fileVO1); - model.addAttribute("fileVO2", fileVO2); - model.addAttribute("fileVO3", fileVO3); - return "web/reservedmsg/ReservedMsgDetailPopAjax"; - } - - /** - * 예약 문자 취소 처리 기능 - * @param searchVO - * @param model - * @return "/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do"}) - public ModelAndView deleteReservMsgCancelDataAjax(MjonResvMsgVO mjonResvMsgVO, - RedirectAttributes redirectAttributes, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - try { - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(!userId.equals("")) { - - mjonResvMsgVO.setUserId(userId); - - }else { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "fail"); - - return modelAndView; - - } - - // 디비에 문자 내용을 저장해 준다. - int resultSts = mjonReservMsgService.deleteReservMsgCancelDataAjax(mjonResvMsgVO); - - if(resultSts > 0) { - - modelAndView.addObject("message", "예약 발송이 정상적으로 취소 되었습니다."); - modelAndView.addObject("result", "success"); - - }else { - - modelAndView.addObject("message", "예약 발송 취소 처리가 실패 되었습니다. 잠시 후 다시 시도해 주세요."); - modelAndView.addObject("result", "fail"); - - } - - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - } - - return modelAndView; - - } - - /** - * 예약관리 출력하기 팝업화면 - * - * @param MjonMsgSentVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/reservmsg/printReservMsgDataAjax.do"}) - public String printReservMsgDataAjax( - @ModelAttribute("searchVO") MjonResvMsgVO mjonResvMsgVO, - ModelMap model) throws Exception { - - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - if(userId.equals("")) { - - /*modelAndView.addObject("status", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView;*/ - - }else { - - mjonResvMsgVO.setUserId(userId); - - } - - - // 검색 리스트 불러오기 - if(mjonResvMsgVO.getPageUnit() != 10) { - mjonResvMsgVO.setPageUnit(mjonResvMsgVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(mjonResvMsgVO.getSearchSortOrd().equals("")) { - - mjonResvMsgVO.setSearchSortOrd("desc"); - mjonResvMsgVO.setSearchSortCnd("regdate"); - } - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(mjonResvMsgVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(mjonResvMsgVO.getPageUnit()); - paginationInfo.setPageSize(mjonResvMsgVO.getPageSize()); - - mjonResvMsgVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - mjonResvMsgVO.setLastIndex(paginationInfo.getLastRecordIndex()); - mjonResvMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - List resultAllResList = mjonReservMsgService.selectAllResvMsgList(mjonResvMsgVO); - model.addAttribute("resultAllSentList", resultAllResList); - model.addAttribute("resultAllSentCnt", resultAllResList.size()); - - model.addAttribute("searchKeyword", mjonResvMsgVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllResList.size()> 0 ? (Integer.parseInt((resultAllResList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - //발송 결과 성공 실패 건수 리스트 불러오기 - List resultMsgSucFailList = mjonReservMsgService.selectAllResvMsgSucFailList(resultAllResList); - model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); - - model.addAttribute("mjonMsgSentVO", mjonResvMsgVO); - model.addAttribute("userNm", userNm); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - - return "web/reservedmsg/ReservedMsgPrintListPopUp"; - } - - - - /** - * 예약관리 엑셀다운로드 기능 - * @param searchVO - * @param model - * @return "/web/mjon/reservmsg/reservMsgExcelDownLoadAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/reservmsg/reservMsgExcelDownLoadAjax.do"}) - public void reservMsgExcelDownLoadAjax(MjonResvMsgVO mjonResvMsgVO, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(!userId.equals("")) { - - mjonResvMsgVO.setUserId(userId); - - }else { - - /*modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "fail"); - - return modelAndView;*/ - - } - - String stateType = mjonResvMsgVO.getStateType(); - String tabType = mjonResvMsgVO.getTabType(); - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - String fileName ="예약관리 엑셀 리스트"; // 저장 파일명 - String sheetTitle = "예약 발송 내역" ; // 셀 제목 - Sheet sheet = wb.createSheet(sheetTitle); - Cell cell = null; - Row row = null; - - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - - // 정렬 - style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬 - style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬 - - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - - String type = ""; - String fCnt = ""; - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - - try{ - - - mjonResvMsgVO.setRecordCountPerPage(100000); - mjonResvMsgVO.setFirstIndex(0); - - if("".equals(mjonResvMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - mjonResvMsgVO.setSearchSortCnd("regdate"); - mjonResvMsgVO.setSearchSortOrd("desc"); - } - - //예약 관리 리스트 불러오기 - List resultAllResList = mjonReservMsgService.selectAllResvMsgList(mjonResvMsgVO); - - //전체, 발송 완료 탭의 발송 결과 건수 리스트 불러오기 - List resultMsgSucFailList = mjonReservMsgService.selectAllResvMsgSucFailList(resultAllResList); - int msgSFsize = resultMsgSucFailList.size(); - //발송 성공,실패 건수 불러오기 - - {//화면 리스트 - - row = sheet.createRow(0); - - if(stateType.equals("all")) { - - sheet.setColumnWidth(1, 5000); // 발송형태 칼럼의 폭 조절 - sheet.setColumnWidth(2, 5000); // 접수일자 칼럼의 폭 조절 - sheet.setColumnWidth(3, 5000); // 예약일자 칼럼의 폭 조절 - sheet.setColumnWidth(5, 7000); // 제목 칼럼의 폭 조절 - sheet.setColumnWidth(6, 10000); // 내용 칼럼의 폭 조절 - sheet.setColumnWidth(8, 5000); // 내용 칼럼의 폭 조절 - - //셀병합 처리 - sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //번호 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //발송상태 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //접수일자 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //예약일자 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); //형태 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,5,5)); //제목 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); //내용 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,7,7)); //발송건수 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,8,8)); //발신번호 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,9,9)); //금액 세로 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,12,12)); //예약 취소 세로 셀병합 - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("발송상태"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("접수일자"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("예약일자"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("형태"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("제목"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("발신번호"); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("금액"); - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellValue("발송결과 건수"); - sheet.addMergedRegion(new CellRangeAddress(0,0,10,11)); // 발송결과 건수 가로 셀병합 - cell.setCellStyle(style); - - cell = row.createCell(11); - cell.setCellStyle(style); - - cell = row.createCell(12); - cell.setCellValue("예약취소"); - cell.setCellStyle(style); - - row = sheet.createRow(1); - - cell = row.createCell(0); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellValue("성공"); - cell.setCellStyle(style); - - cell = row.createCell(11); - cell.setCellValue("실패"); - cell.setCellStyle(style); - - cell = row.createCell(12); - cell.setCellStyle(style); - - }else { - - if(stateType.equals("complete")) { - - sheet.setColumnWidth(1, 5000); // 접수일자 칼럼의 폭 조절 - sheet.setColumnWidth(2, 5000); // 예약일자 칼럼의 폭 조절 - sheet.setColumnWidth(4, 7000); // 제목 칼럼의 폭 조절 - sheet.setColumnWidth(5, 10000); // 내용 칼럼의 폭 조절 - sheet.setColumnWidth(7, 5000); // 내용 칼럼의 폭 조절 - - sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //번호 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //접수일자 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //예약일자 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //형태 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); //제목 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,5,5)); //내용 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); //발송건수 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,7,7)); //발신번호 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,8,8)); //금액 세로 셀병합 - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("접수일자"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("예약일자"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("형태"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("제목"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("발신번호"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("금액"); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("발송결과 건수"); - sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); //셀병합 - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellStyle(style); - - row = sheet.createRow(1); - - cell = row.createCell(0); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("성공"); - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellValue("실패"); - cell.setCellStyle(style); - - }else if(stateType.equals("ready")) { - - sheet.setColumnWidth(1, 5000); // 접수일자 칼럼의 폭 조절 - sheet.setColumnWidth(2, 5000); // 예약일자 칼럼의 폭 조절 - sheet.setColumnWidth(4, 7000); // 제목 칼럼의 폭 조절 - sheet.setColumnWidth(5, 10000); // 내용 칼럼의 폭 조절 - sheet.setColumnWidth(7, 5000); // 내용 칼럼의 폭 조절 - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("접수일자"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("예약일자"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("형태"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("제목"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("발신번호"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("금액"); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("예약취소"); - cell.setCellStyle(style); - - - }else if(stateType.equals("cancel")) { - - sheet.setColumnWidth(1, 5000); // 접수일자 칼럼의 폭 조절 - sheet.setColumnWidth(2, 5000); // 예약일자 칼럼의 폭 조절 - sheet.setColumnWidth(4, 7000); // 제목 칼럼의 폭 조절 - sheet.setColumnWidth(5, 10000); // 내용 칼럼의 폭 조절 - sheet.setColumnWidth(7, 5000); // 내용 칼럼의 폭 조절 - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("접수일자"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("예약일자"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("형태"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("제목"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("발신번호"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("금액"); - cell.setCellStyle(style); - - } - - } - - DecimalFormat formatter = new DecimalFormat("###,###"); - String totPriceStr = ""; - - for(int i=0; i < resultAllResList.size(); i++) { - totPriceStr = formatter.format((int)Double.parseDouble(((resultAllResList.get(i)).getTotPrice()))); - - String msgType = "단문"; - if(resultAllResList.get(i).getMsgType().equals("6") && resultAllResList.get(i).getFileCnt().equals("0")) { - msgType = "장문"; - }else if(resultAllResList.get(i).getMsgType().equals("6") && !resultAllResList.get(i).getFileCnt().equals("0")) { - msgType = "그림"; - } - - - int excelLen = 0; - - if(stateType.equals("all")) { - - row = sheet.createRow(i+2); - excelLen = 13; - - }else if(stateType.equals("ready")) { - - row = sheet.createRow(i+2); - excelLen = 10; - - }else if(stateType.equals("complete")) { - - row = sheet.createRow(i+2); - excelLen = 11; - - }else { - - row = sheet.createRow(i+1); - excelLen = 9; - } - - for(int j=0 ; j < excelLen ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - - - if(stateType.equals("all")) { - - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) { //발송상태 처리해주기 - - String resvCYn = resultAllResList.get(i).getReserveCYn(); - String curState = resultAllResList.get(i).getCurState(); - - if(resvCYn.equals("Y")) { - - cell.setCellValue("예약 취소"); //발송상태 - - }else { - - if(curState.equals("0")) { - - cell.setCellValue("발송 대기"); //발송상태 - - }else if(curState.equals("1")) { - - cell.setCellValue("발송중"); //발송상태 - - }else if(curState.equals("2")) { - - cell.setCellValue("결과 대기"); //발송상태 - - }else if(curState.equals("3")) { - - cell.setCellValue("발송 완료"); //발송상태 - - } - } - - } - if(j==2) cell.setCellValue(sdf.format((resultAllResList.get(i)).getRegdate())); //접수일자 - if(j==3) cell.setCellValue(sdf.format((resultAllResList.get(i)).getReqdate())); //발송일자 - if(j==4) { - - type = resultAllResList.get(i).getMsgType(); - fCnt = resultAllResList.get(i).getFileCnt(); - - if(type.equals("4")) { - - cell.setCellValue("단문"); //형태 - - }else { - - if(fCnt.equals("0")) { - - cell.setCellValue("장문"); //형태 - - }else { - - cell.setCellValue("그림"); //형태 - - } - - } - - } - if(j==5) { - - if(resultAllResList.get(i).getSubject() == null) { - - cell.setCellValue("제목 없음"); //제목 - - }else { - - cell.setCellValue((resultAllResList.get(i)).getSubject()); //제목 - - } - - } - if(j==6) cell.setCellValue((resultAllResList.get(i)).getSmsTxt()); //내용 - if(j==7) cell.setCellValue((resultAllResList.get(i)).getMsgGroupCnt()); //발송건수 - if(j==8) cell.setCellValue((resultAllResList.get(i)).getCallFromComma()); //발신번호 - if(j==9) cell.setCellValue(totPriceStr); //금액 - - //발송결과 성공, 실패 처리 - String resSucCnt = "0"; - String resFailCnt = "0"; - for(int k=0; k < msgSFsize; k++) { - - if(resultAllResList.get(i).getMsgGroupId().equals(resultMsgSucFailList.get(k).getMsgGroupId())) { - - - if(resultMsgSucFailList.get(k).getMsgResultSts().equals("S")) {//발송 성공 건수 - - resSucCnt = resultMsgSucFailList.get(k).getMsgResultCnt(); - - }else if(resultMsgSucFailList.get(k).getMsgResultSts().equals("W")){//발송 대기 건수 - - resFailCnt = "0"; - - }else { - resFailCnt = resultMsgSucFailList.get(k).getMsgResultCnt(); - } - - } - - } - if(j==10) cell.setCellValue(resSucCnt); //발송결과 성공 - if(j==11) cell.setCellValue(resFailCnt); //발송결과 실패 - if(j==12) cell.setCellValue((resultAllResList.get(i)).getReserveCYn()); //예약 취소 - - }else if(stateType.equals("ready")) { - - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(sdf.format((resultAllResList.get(i)).getRegdate())); //접수일자 - if(j==2) cell.setCellValue(sdf.format((resultAllResList.get(i)).getReqdate())); //발송일자 - if(j==3) { - - type = resultAllResList.get(i).getMsgType(); - fCnt = resultAllResList.get(i).getFileCnt(); - - if(type.equals("4")) { - - cell.setCellValue("단문"); //형태 - - }else { - - if(fCnt.equals("0")) { - - cell.setCellValue("장문"); //형태 - - }else { - - cell.setCellValue("그림"); //형태 - - } - - } - - } //형태 - if(j==4) { - - if(resultAllResList.get(i).getSubject() == null) { - - cell.setCellValue("제목 없음"); //제목 - - }else { - - cell.setCellValue((resultAllResList.get(i)).getSubject()); //제목 - - } - - } - if(j==5) cell.setCellValue((resultAllResList.get(i)).getSmsTxt()); //내용 - if(j==6) cell.setCellValue((resultAllResList.get(i)).getMsgGroupCnt()); //발송건수 - if(j==7) cell.setCellValue((resultAllResList.get(i)).getCallFromComma()); //발신번호 - if(j==8) cell.setCellValue(totPriceStr); //금액 - if(j==9) cell.setCellValue((resultAllResList.get(i)).getReserveCYn()); //예약 취소 - - }else if(stateType.equals("complete")) { - - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(sdf.format((resultAllResList.get(i)).getRegdate())); //접수일자 - if(j==2) cell.setCellValue(sdf.format((resultAllResList.get(i)).getReqdate())); //발송일자 - if(j==3) { - - type = resultAllResList.get(i).getMsgType(); - fCnt = resultAllResList.get(i).getFileCnt(); - - if(type.equals("4")) { - - cell.setCellValue("단문"); //형태 - - }else { - - if(fCnt.equals("0")) { - - cell.setCellValue("장문"); //형태 - - }else { - - cell.setCellValue("그림"); //형태 - - } - - } - - } - if(j==4) { - - if(resultAllResList.get(i).getSubject() == null) { - - cell.setCellValue("제목 없음"); //제목 - - }else { - - cell.setCellValue((resultAllResList.get(i)).getSubject()); //제목 - - } - - } - if(j==5) cell.setCellValue((resultAllResList.get(i)).getSmsTxt()); //내용 - if(j==6) cell.setCellValue((resultAllResList.get(i)).getMsgGroupCnt()); //발송건수 - if(j==7) cell.setCellValue((resultAllResList.get(i)).getCallFromComma()); //발신번호 - if(j==8) cell.setCellValue(totPriceStr); //금액 - //발송결과 성공, 실패 처리 - String resSucCnt = "0"; - String resFailCnt = "0"; - for(int l=0; l < msgSFsize; l++) { - - if(resultAllResList.get(i).getMsgGroupId().equals(resultMsgSucFailList.get(l).getMsgGroupId())) { - - if(resultMsgSucFailList.get(l).getMsgResultSts().equals("S")) {//발송 성공 건수 - - resSucCnt = resultMsgSucFailList.get(l).getMsgResultCnt(); - - }else if(resultMsgSucFailList.get(l).getMsgResultSts().equals("W")){//발송 대기 건수 - - resFailCnt = "0"; - - }else { - - resFailCnt = resultMsgSucFailList.get(l).getMsgResultCnt(); - } - - } - - } - if(j==9) cell.setCellValue(resSucCnt); //발송결과 성공 - if(j==10) cell.setCellValue(resFailCnt); //발송결과 실패 - - }else { //예약 취소 - - if(j==0) cell.setCellValue(i+1); //번호 - if(j==1) cell.setCellValue(sdf.format((resultAllResList.get(i)).getRegdate())); //접수일자 - if(j==2) cell.setCellValue(sdf.format((resultAllResList.get(i)).getReqdate())); //발송일자 - if(j==3) { - - type = resultAllResList.get(i).getMsgType(); - fCnt = resultAllResList.get(i).getFileCnt(); - - if(type.equals("4")) { - - cell.setCellValue("단문"); //형태 - - }else { - - if(fCnt.equals("0")) { - - cell.setCellValue("장문"); //형태 - - }else { - - cell.setCellValue("그림"); //형태 - - } - - } - - } - if(j==4) { - - if(resultAllResList.get(i).getSubject() == null) { - - cell.setCellValue("제목 없음"); //제목 - - }else { - - cell.setCellValue((resultAllResList.get(i)).getSubject()); //제목 - - } - - } - if(j==5) cell.setCellValue((resultAllResList.get(i)).getSmsTxt()); //내용 - if(j==6) cell.setCellValue((resultAllResList.get(i)).getMsgGroupCnt()); //발송건수 - if(j==7) cell.setCellValue((resultAllResList.get(i)).getCallFromComma()); //발신번호 - if(j==8) cell.setCellValue(totPriceStr); //금액 - - } - - } - } - } - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - - - } - - /** - * 예약관리 화면 - 카카오톡 - * @param searchVO - * @param model - * @return "/web/mjon/reservmsg/selectReservKaKaoView.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/reservmsg/selectReservKaKaoView.do"}) - public String selectReservKaKaoView(@ModelAttribute("searchVO") KakaoSentVO kakaoSentVO, - RedirectAttributes redirectAttributes, ModelMap model) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(loginVO == null) { - return "redirect:/web/user/login/login.do"; - } - - kakaoSentVO.setUserId(userId); - - //전체 발송 건수 통계 불러오기 - kakaoSentVO.setMsgType(""); - - System.out.println("kakaoSentVO.getNtceBgnde() : "+ kakaoSentVO.getNtceBgnde()); - - List totalMsgCnt = kakaoSentService.selectKakaoReservSentCntAll(kakaoSentVO); - model.addAttribute("totalMsgCnt", totalMsgCnt); - - List atCnt = new ArrayList(); - List ftCnt = new ArrayList(); - - - totalMsgCnt.forEach(t->{ - if (Integer.parseInt(t.getFilePath1())>0) { - atCnt.add(t); - } else if (Integer.parseInt(t.getFilePath2())>0) { - ftCnt.add(t); - } - }); - - //알림톡 성공건, 실패건 불러오기 - model.addAttribute("atCnt", atCnt); - - //친구톡 성공건, 실패건 불러오기 - model.addAttribute("ftCnt", ftCnt); - - // 검색 리스트 불러오기 - if(kakaoSentVO.getPageUnit() != 10) kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit()); - - //기본 내림차순 정렬 - if(kakaoSentVO.getSearchSortOrd().equals("")) kakaoSentVO.setSearchSortOrd("desc"); - - //기본 등록일자 정렬 - if(kakaoSentVO.getSearchSortCnd().equals("")) kakaoSentVO.setSearchSortCnd("regdate"); - - String startDate = kakaoSentVO.getStartDate(); - String endDate = kakaoSentVO.getEndDate(); - - if(startDate == null && endDate == null ) { - - Calendar cal = Calendar.getInstance(); - Date now = new Date(); - - SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); - - //종료일은 오늘날짜 - cal.setTime(now); - endDate = format.format(cal.getTime()); - - //시작일은 전날로 셋팅 - cal.add(Calendar.DATE, -1); - startDate = format.format(cal.getTime()); - - kakaoSentVO.setStartDate(startDate); - kakaoSentVO.setEndDate(endDate); - - } - - model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword()); - model.addAttribute("kakaoSentVO", kakaoSentVO); - model.addAttribute("siteId", "tabKakao"); - - return "web/reservedmsg/ReservedKakaoView"; - } - - /** - * 예약관리 탭 리스트 화면 - 카카오톡 - * @param searchVO - * @param model - * @return "/web/mjon/reservmsg/selectReservKakaoListViewAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/reservmsg/selectReservKakaoListViewAjax.do"}) - public String selectReservKakaoListViewAjax( - @ModelAttribute("searchVO") MjonResvMsgVO mjonResvMsgVO - , @ModelAttribute("kakaoVO") KakaoSentVO kakaoSentVO - , ModelMap model - , HttpServletResponse response) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if("".equals(userId)) { - PrintWriter out = response.getWriter(); - response.setContentType("text/html; charset=UTF-8"); - out.println(""); - out.close(); - }else { - mjonResvMsgVO.setUserId(userId); - - // 검색 리스트 불러오기 - if(kakaoSentVO.getPageUnit() != 10) { - kakaoSentVO.setPageUnit(mjonResvMsgVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(kakaoSentVO.getSearchSortOrd().equals("")) { - - kakaoSentVO.setSearchSortOrd("desc"); - kakaoSentVO.setSearchSortCnd("regdate"); - } - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(kakaoSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(kakaoSentVO.getPageUnit()); - paginationInfo.setPageSize(kakaoSentVO.getPageSize()); - - kakaoSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - kakaoSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - kakaoSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - // List resultAllResList = mjonReservMsgService.selectAllResvMsgList(mjonResvMsgVO); - kakaoSentVO.setUserId(userId); - //예약관리는 그룹데이터로 조회 - kakaoSentVO.setListType("groupList"); - List resultAllResList = kakaoSentService.selectReservKakaoSentList(kakaoSentVO); - model.addAttribute("resultAllResList", resultAllResList); - model.addAttribute("resultAllResCnt", resultAllResList.size()); - - model.addAttribute("searchKeyword", mjonResvMsgVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllResList.size()> 0 ? (Integer.parseInt((resultAllResList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - //전체, 발송 완료 탭의 발송 결과 건수 리스트 불러오기 - // List resultMsgSucFailList = mjonReservMsgService.selectAllResvMsgSucFailList(resultAllResList); - // model.addAttribute("resultMsgSucFailList", resultMsgSucFailList); - - model.addAttribute("mjonResvMsgVO", mjonResvMsgVO); - - String stateType = mjonResvMsgVO.getStateType(); - //전체 - String pageUrl = "web/reservedmsg/ReservedKakaoAllListAjax"; - - //발송대기 - if(stateType.equals("ready")) { - pageUrl = "web/reservedmsg/ReservedKakaoReadyListAjax"; - } - //발송완료 - else if(stateType.equals("complete")) { - pageUrl = "web/reservedmsg/ReservedKakaoCompleteListAjax"; - } - //예약취소 - else if(stateType.equals("cancel")) { - pageUrl = "web/reservedmsg/ReservedKakaoCancelListAjax"; - } - - return pageUrl; - } - return "web/reservedmsg/ReservedKakaoAllListAjax"; - } - - /** - * @Method Name : deleteReservKakaoDataAjax - * @작성일 : 2023. 4. 6. - * @작성자 : WYH - * @Method 설명 : 카카오 예약관리 예약선택 취소 - */ - @RequestMapping(value= {"/web/mjon/reservmsg/deleteReservKakaoDataAjax.do"}) - public String deleteReservKakaoDataAjax( - @ModelAttribute("searchVO") MjonResvMsgVO mjonResvMsgVO - , @ModelAttribute("kakaoVO") KakaoSentVO kakaoSentVO - , ModelMap model - , HttpServletResponse response) throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if("".equals(userId)) { - PrintWriter out = response.getWriter(); - response.setContentType("text/html; charset=UTF-8"); - out.println(""); - out.close(); - }else { - - mjonResvMsgVO.setUserId(userId); - - //선택 문자 삭제 처리 - int resultCnt = mjonReservMsgService.deleteReservMsgDataAjax(mjonResvMsgVO); - - /* - * - * 리스트 화면 불러오기 - * - * */ - - // 검색 리스트 불러오기 - if(kakaoSentVO.getPageUnit() != 10) { - kakaoSentVO.setPageUnit(mjonResvMsgVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(kakaoSentVO.getSearchSortOrd().equals("")) { - - kakaoSentVO.setSearchSortOrd("desc"); - kakaoSentVO.setSearchSortCnd("regdate"); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(kakaoSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(kakaoSentVO.getPageUnit()); - paginationInfo.setPageSize(kakaoSentVO.getPageSize()); - - kakaoSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - kakaoSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - kakaoSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - kakaoSentVO.setUserId(userId); - kakaoSentVO.setListType("groupList"); - List resultAllResList = kakaoSentService.selectReservKakaoSentList(kakaoSentVO); - model.addAttribute("resultAllResList", resultAllResList); - model.addAttribute("resultAllResCnt", resultAllResList.size()); - - model.addAttribute("searchKeyword", mjonResvMsgVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllResList.size()> 0 ? (Integer.parseInt((resultAllResList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - model.addAttribute("mjonResvMsgVO", mjonResvMsgVO); - } - - return "web/reservedmsg/ReservedKakaoAllListAjax"; - } - - - - /** - * 예약관리 엑셀다운로드 기능 - 카카오톡 - * @param searchVO - * @param model - * @return "/web/mjon/reservmsg/reservKakaoExcelDownLoadAjax.do" - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/reservmsg/reservKakaoExcelDownLoadAjax.do"}) - public void reservKakaoExcelDownLoadAjax( - KakaoSentVO kakaoSentVO, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - HttpServletResponse response , - ModelMap model) throws Exception{ - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(!userId.equals("")) { - - kakaoSentVO.setUserId(userId); - - String stateType = kakaoSentVO.getStateType(); - String tabType = kakaoSentVO.getTabType(); - - // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. - SXSSFWorkbook wb = new SXSSFWorkbook(100); - String fileName ="발송관리 엑셀 리스트"; // 저장 파일명 - String sheetTitle = "문자 발송 내역" ; // 셀 제목 - Sheet sheet = wb.createSheet(sheetTitle); - Cell cell = null; - Row row = null; - - CellStyle style = wb.createCellStyle(); - style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 - style.setBorderLeft(CellStyle.BORDER_THIN); - style.setBorderRight(CellStyle.BORDER_THIN); - style.setBorderTop(CellStyle.BORDER_THIN); - - CellStyle styleLastCell = wb.createCellStyle(); - styleLastCell.setBorderLeft(CellStyle.BORDER_THIN); - - // 정렬 - style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬 - style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬 - - Font font = wb.createFont(); - font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold - - - String type = ""; - String fCnt = ""; - - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - - try{ - kakaoSentVO.setRecordCountPerPage(100000); - kakaoSentVO.setFirstIndex(0); - - if("".equals(kakaoSentVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - kakaoSentVO.setSearchSortCnd("regdate"); - kakaoSentVO.setSearchSortOrd("desc"); - } - - //발송결과-카카오톡 리스트 불러오기 - //예약관리는 그룹데이터로 조회 - kakaoSentVO.setListType("groupList"); - kakaoSentVO.setReserveYn("Y"); - - /*List resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);*/ - List resultAllSentList = kakaoSentService.selectReservKakaoSentList(kakaoSentVO); - - if("ready".equals(kakaoSentVO.getStateType())) { - kakaoSentExcelReservReady(resultAllSentList, row, sheet, cell, style, styleLastCell, type, fCnt, sdf); - }else if("complete".equals(kakaoSentVO.getStateType())) { - kakaoSentExcelReservComplete(resultAllSentList, row, sheet, cell, style, styleLastCell, type, fCnt, sdf); - }else if("cancel".equals(kakaoSentVO.getStateType())) { - kakaoSentExcelReservCancel(resultAllSentList, row, sheet, cell, style, styleLastCell, type, fCnt, sdf); - }else { - kakaoSentExcelReservAll(resultAllSentList, row, sheet, cell, style, styleLastCell, type, fCnt, sdf); - } - - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - }catch(Exception e) { - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - - }else { - response.sendRedirect("/web/kakao/sent/selectKakaoSentView.do"); - } - } - - private void kakaoSentExcelReservAll(List resultAllSentList - , Row row - ,Sheet sheet - ,Cell cell - ,CellStyle style - ,CellStyle styleLastCell - ,String type - ,String fCnt - ,SimpleDateFormat sdf) { - - {//화면 리스트 - row = sheet.createRow(0); - - sheet.setColumnWidth(2, 5000); // 접수일자 칼럼의 폭 조절 - sheet.setColumnWidth(3, 5000); // 예약일자 칼럼의 폭 조절 - sheet.setColumnWidth(5, 10000); // 내용 칼럼의 폭 조절 - sheet.setColumnWidth(7, 5000); // 발신번호 칼럼의 폭 조절 - sheet.setColumnWidth(8, 5000); // 금액 칼럼의 폭 조절 - sheet.setColumnWidth(13, 5000); // 예약취소 칼럼의 폭 조절 - - //셀병합 처리 - sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //번호 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //발송상태 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //접수일자 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //예약일자 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); //형태 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,5,5)); //내용 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); //발송건수 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,7,7)); //발신번호 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,8,8)); //금액 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0,1,13,13)); //예약취소 셀병합 - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("발송상태"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("접수일자"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("예약일자"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("형태"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("발신번호"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("금액"); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("발송결과 건수"); - sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); // 발송결과 건수 가로 셀병합 - cell.setCellStyle(style); - - cell = row.createCell(11); - cell.setCellValue("대체문자 건수"); - sheet.addMergedRegion(new CellRangeAddress(0,0,11,12)); // 발송결과 건수 가로 셀병합 - cell.setCellStyle(style); - - cell = row.createCell(13); - cell.setCellValue("예약취소"); - cell.setCellStyle(style); - - cell = row.createCell(14); - cell.setCellStyle(styleLastCell); - - row = sheet.createRow(1); - - cell = row.createCell(0); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("성공"); - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellValue("실패"); - cell.setCellStyle(style); - - cell = row.createCell(11); - cell.setCellValue("성공"); - cell.setCellStyle(style); - - cell = row.createCell(12); - cell.setCellValue("실패"); - cell.setCellStyle(style); - - cell = row.createCell(13); - cell.setCellStyle(style); - - cell = row.createCell(14); - cell.setCellStyle(styleLastCell); - } - - for(int i=0; i < resultAllSentList.size(); i++) { - String msgType = ""; - if(resultAllSentList.get(i).getMsgType().equals("8") && resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "알림톡"; - }else if(resultAllSentList.get(i).getMsgType().equals("9") && !resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "친구톡"; - } - int excelLen = 0; - row = sheet.createRow(i+2); - excelLen = 14; - - for(int j=0 ; j < excelLen ; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if(j==0) cell.setCellValue(i+1); //번호 - - if(j==1) { //발송상태 - if("Y".equals(resultAllSentList.get(i).getReserveCYn())) { - cell.setCellValue("예약취소"); - }else { - if("0".equals(resultAllSentList.get(i).getCurState())) cell.setCellValue("발송대기"); - if("1".equals(resultAllSentList.get(i).getCurState())) cell.setCellValue("발송중"); - if("2".equals(resultAllSentList.get(i).getCurState())) cell.setCellValue("결과대기"); - if("3".equals(resultAllSentList.get(i).getCurState())) cell.setCellValue("발송완료"); - } - } - if(j==2) cell.setCellValue(sdf.format((resultAllSentList.get(i)).getRegdate())); //접수일자 - if(j==3) cell.setCellValue(sdf.format((resultAllSentList.get(i)).getReqdate())); //예약일자 - if(j==4) { - cell.setCellValue(resultAllSentList.get(i).getMsgTypeName()); - } - if(j==5) cell.setCellValue((resultAllSentList.get(i)).getSmsTxt()); //내용 - if(j==6) cell.setCellValue((resultAllSentList.get(i)).getMsgGroupCnt()); //발송건수 - if(j==7) cell.setCellValue((resultAllSentList.get(i)).getCallFromComma()); //발신번호 - if(j==8) cell.setCellValue((resultAllSentList.get(i)).getTotPrice()); //발신번호 - - //발송결과 성공, 실패 처리 - if(j==9) cell.setCellValue(resultAllSentList.get(i).getSuccessCount()); //알림톡 발송결과 성공 - if(j==10) cell.setCellValue(resultAllSentList.get(i).getFailCount()); //알림톡 발송결과 실패 - - if(j==11) cell.setCellValue(resultAllSentList.get(i).getKakaoResendSuccCount()); //대체문자 발송결과 대기 - if(j==12) cell.setCellValue(resultAllSentList.get(i).getKakaoResendFailCount()); //대체문자 발송결과 대기 - - if(j==13) { - if(resultAllSentList.get(i).getCancelDate() != null) { - cell.setCellValue(sdf.format(resultAllSentList.get(i).getCancelDate())); //대체문자 발송결과 대기 - }else { - cell.setCellValue("-"); //대체문자 발송결과 대기 - } - } - } - } - } - - private void kakaoSentExcelReservReady(List resultAllSentList - , Row row - ,Sheet sheet - ,Cell cell - ,CellStyle style - ,CellStyle styleLastCell - ,String type - ,String fCnt - ,SimpleDateFormat sdf) { - - {// 화면 리스트 - row = sheet.createRow(0); - - sheet.setColumnWidth(1, 5000); // 접수일자 칼럼의 폭 조절 - sheet.setColumnWidth(2, 5000); // 예약일자 칼럼의 폭 조절 - sheet.setColumnWidth(4, 10000); // 내용 칼럼의 폭 조절 - sheet.setColumnWidth(6, 5000); // 발신번호 칼럼의 폭 조절 - sheet.setColumnWidth(7, 5000); // 금액 칼럼의 폭 조절 - sheet.setColumnWidth(8, 5000); // 예약취소 칼럼의 폭 조절 - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("접수일자"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("예약일자"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("형태"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("발신번호"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("금액"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("예약취소"); - cell.setCellStyle(style); - - } - - for (int i = 0; i < resultAllSentList.size(); i++) { - String msgType = ""; - if (resultAllSentList.get(i).getMsgType().equals("8") - && resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "알림톡"; - } else if (resultAllSentList.get(i).getMsgType().equals("9") - && !resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "친구톡"; - } - int excelLen = 0; - row = sheet.createRow(i + 1); - excelLen = 9; - - for (int j = 0; j < excelLen; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if (j == 0) - cell.setCellValue(i + 1); // 번호 - if (j == 1) - cell.setCellValue(sdf.format((resultAllSentList.get(i)).getRegdate())); // 접수일자 - if (j == 2) - cell.setCellValue(sdf.format((resultAllSentList.get(i)).getReqdate())); // 예약일자 - if (j == 3) { - cell.setCellValue(resultAllSentList.get(i).getMsgTypeName()); - } - if (j == 4) - cell.setCellValue((resultAllSentList.get(i)).getSmsTxt()); // 내용 - if (j == 5) - cell.setCellValue((resultAllSentList.get(i)).getMsgGroupCnt()); // 발송건수 - if (j == 6) - cell.setCellValue((resultAllSentList.get(i)).getCallFromComma()); // 발신번호 - if (j == 7) - cell.setCellValue((resultAllSentList.get(i)).getTotPrice()); // 발신번호 - if (j == 8) { - if (resultAllSentList.get(i).getCancelDate() != null) { - cell.setCellValue(sdf.format(resultAllSentList.get(i).getCancelDate())); // 대체문자 발송결과 대기 - } else { - cell.setCellValue("-"); // 대체문자 발송결과 대기 - } - } - } - } - } - - private void kakaoSentExcelReservComplete(List resultAllSentList - , Row row - ,Sheet sheet - ,Cell cell - ,CellStyle style - ,CellStyle styleLastCell - ,String type - ,String fCnt - ,SimpleDateFormat sdf) { - - {// 화면 리스트 - row = sheet.createRow(0); - - sheet.setColumnWidth(2, 5000); // 접수일자 칼럼의 폭 조절 - sheet.setColumnWidth(3, 5000); // 예약일자 칼럼의 폭 조절 - sheet.setColumnWidth(5, 10000); // 내용 칼럼의 폭 조절 - sheet.setColumnWidth(7, 5000); // 발신번호 칼럼의 폭 조절 - sheet.setColumnWidth(8, 5000); // 금액 칼럼의 폭 조절 - sheet.setColumnWidth(13, 5000); // 예약취소 칼럼의 폭 조절 - - //셀병합 처리 - sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0)); // 번호 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1)); // 발송상태 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0, 1, 2, 2)); // 접수일자 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0, 1, 3, 3)); // 예약일자 세로 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0, 1, 4, 4)); // 형태 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0, 1, 5, 5)); // 내용 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0, 1, 6, 6)); // 발송건수 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0, 1, 7, 7)); // 발신번호 셀병합 - sheet.addMergedRegion(new CellRangeAddress(0, 1, 8, 8)); // 금액 셀병합 - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("발송상태"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("접수일자"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("예약일자"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("형태"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("발신번호"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("금액"); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("발송결과 건수"); - sheet.addMergedRegion(new CellRangeAddress(0, 0, 9, 10)); // 발송결과 건수 가로 셀병합 - cell.setCellStyle(style); - - cell = row.createCell(11); - cell.setCellValue("대체문자 건수"); - sheet.addMergedRegion(new CellRangeAddress(0, 0, 11, 12)); // 발송결과 건수 가로 셀병합 - cell.setCellStyle(style); - - cell = row.createCell(13); - cell.setCellStyle(styleLastCell); - - row = sheet.createRow(1); - - cell = row.createCell(0); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellStyle(style); - - cell = row.createCell(9); - cell.setCellValue("성공"); - cell.setCellStyle(style); - - cell = row.createCell(10); - cell.setCellValue("실패"); - cell.setCellStyle(style); - - cell = row.createCell(11); - cell.setCellValue("성공"); - cell.setCellStyle(style); - - cell = row.createCell(12); - cell.setCellValue("실패"); - cell.setCellStyle(style); - - cell = row.createCell(13); - cell.setCellStyle(styleLastCell); - } - - for (int i = 0; i < resultAllSentList.size(); i++) { - String msgType = ""; - if (resultAllSentList.get(i).getMsgType().equals("8") - && resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "알림톡"; - } else if (resultAllSentList.get(i).getMsgType().equals("9") - && !resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "친구톡"; - } - int excelLen = 0; - row = sheet.createRow(i + 2); - excelLen = 13; - - for (int j = 0; j < excelLen; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if (j == 0) - cell.setCellValue(i + 1); // 번호 - - if (j == 1) { // 발송상태 - if ("Y".equals(resultAllSentList.get(i).getReserveCYn())) { - cell.setCellValue("예약취소"); - } else { - if ("0".equals(resultAllSentList.get(i).getCurState())) - cell.setCellValue("발송대기"); - if ("1".equals(resultAllSentList.get(i).getCurState())) - cell.setCellValue("발송중"); - if ("3".equals(resultAllSentList.get(i).getCurState())) - cell.setCellValue("결과대기"); - if ("4".equals(resultAllSentList.get(i).getCurState())) - cell.setCellValue("발송완료"); - } - } - if (j == 2) - cell.setCellValue(sdf.format((resultAllSentList.get(i)).getRegdate())); // 접수일자 - if (j == 3) - cell.setCellValue(sdf.format((resultAllSentList.get(i)).getReqdate())); // 예약일자 - if (j == 4) { - cell.setCellValue(resultAllSentList.get(i).getMsgTypeName()); - } - if (j == 5) - cell.setCellValue((resultAllSentList.get(i)).getSmsTxt()); // 내용 - if (j == 6) - cell.setCellValue((resultAllSentList.get(i)).getMsgGroupCnt()); // 발송건수 - if (j == 7) - cell.setCellValue((resultAllSentList.get(i)).getCallFromComma()); // 발신번호 - if (j == 8) - cell.setCellValue((resultAllSentList.get(i)).getTotPrice()); // 발신번호 - - //발송결과 성공, 실패 처리 - if (j == 9) - cell.setCellValue(resultAllSentList.get(i).getSuccessCount()); // 알림톡 발송결과 성공 - if (j == 10) - cell.setCellValue(resultAllSentList.get(i).getFailCount()); // 알림톡 발송결과 실패 - - if (j == 11) - cell.setCellValue(resultAllSentList.get(i).getKakaoResendSuccCount()); // 대체문자 발송결과 대기 - if (j == 12) - cell.setCellValue(resultAllSentList.get(i).getKakaoResendFailCount()); // 대체문자 발송결과 대기 - } - } - } - - private void kakaoSentExcelReservCancel(List resultAllSentList - , Row row - ,Sheet sheet - ,Cell cell - ,CellStyle style - ,CellStyle styleLastCell - ,String type - ,String fCnt - ,SimpleDateFormat sdf) { - - {// 화면 리스트 - row = sheet.createRow(0); - - sheet.setColumnWidth(1, 5000); // 접수일자 칼럼의 폭 조절 - sheet.setColumnWidth(2, 5000); // 예약일자 칼럼의 폭 조절 - sheet.setColumnWidth(3, 5000); // 취소일자 칼럼의 폭 조절 - sheet.setColumnWidth(5, 10000); // 내용 칼럼의 폭 조절 - sheet.setColumnWidth(6, 5000); // 발신번호 칼럼의 폭 조절 - sheet.setColumnWidth(7, 5000); // 금액 칼럼의 폭 조절 - - cell = row.createCell(0); - cell.setCellValue("번호"); - cell.setCellStyle(style); - - cell = row.createCell(1); - cell.setCellValue("접수일자"); - cell.setCellStyle(style); - - cell = row.createCell(2); - cell.setCellValue("예약일자"); - cell.setCellStyle(style); - - cell = row.createCell(3); - cell.setCellValue("취소일자"); - cell.setCellStyle(style); - - cell = row.createCell(4); - cell.setCellValue("형태"); - cell.setCellStyle(style); - - cell = row.createCell(5); - cell.setCellValue("내용"); - cell.setCellStyle(style); - - cell = row.createCell(6); - cell.setCellValue("발송건수"); - cell.setCellStyle(style); - - cell = row.createCell(7); - cell.setCellValue("발신번호"); - cell.setCellStyle(style); - - cell = row.createCell(8); - cell.setCellValue("금액"); - cell.setCellStyle(style); - - } - - for (int i = 0; i < resultAllSentList.size(); i++) { - String msgType = ""; - if (resultAllSentList.get(i).getMsgType().equals("8") - && resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "알림톡"; - } else if (resultAllSentList.get(i).getMsgType().equals("9") - && !resultAllSentList.get(i).getFileCnt().equals("0")) { - msgType = "친구톡"; - } - int excelLen = 0; - row = sheet.createRow(i + 1); - excelLen = 9; - - for (int j = 0; j < excelLen; j++) { - cell = row.createCell(j); - cell.setCellStyle(style); - if (j == 0) - cell.setCellValue(i + 1); // 번호 - if (j == 1) - cell.setCellValue(sdf.format((resultAllSentList.get(i)).getRegdate())); // 접수일자 - if (j == 2) - cell.setCellValue(sdf.format((resultAllSentList.get(i)).getReqdate())); // 예약일자 - if (j == 3) { - cell.setCellValue(sdf.format((resultAllSentList.get(i)).getCancelDate())); // 취소일자 - } - if (j == 4) { - cell.setCellValue(resultAllSentList.get(i).getMsgTypeName()); - } - if (j == 5) - cell.setCellValue((resultAllSentList.get(i)).getSmsTxt()); // 내용 - if (j == 6) - cell.setCellValue((resultAllSentList.get(i)).getMsgGroupCnt()); // 발송건수 - if (j == 7) - cell.setCellValue((resultAllSentList.get(i)).getCallFromComma()); // 발신번호 - if (j == 8) - cell.setCellValue((resultAllSentList.get(i)).getTotPrice()); // 발신번호 - } - } - } - - - /** - * 예약관리 출력하기 팝업화면 - * - * @param MjonMsgSentVO - * @param - * @param sessionVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= {"/web/mjon/reservmsg/printReservKakaoDataAjax.do"}) - public String printReservKakaoDataAjax( - @ModelAttribute("searchVO") MjonResvMsgVO mjonResvMsgVO, KakaoSentVO kakaoSentVO, - ModelMap model) throws Exception { - - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - String userNm = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getName()); - - if(userId.equals("")) { - - /*modelAndView.addObject("status", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView;*/ - - }else { - - kakaoSentVO.setUserId(userId); - - } - - - // 검색 리스트 불러오기 - if(kakaoSentVO.getPageUnit() != 10) { - kakaoSentVO.setPageUnit(mjonResvMsgVO.getPageUnit()); - } - - //기본 내림차순 정렬 - if(kakaoSentVO.getSearchSortOrd().equals("")) { - - kakaoSentVO.setSearchSortOrd("desc"); - kakaoSentVO.setSearchSortCnd("regdate"); - } - - //선택 탭 정보 저장 - //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(kakaoSentVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(kakaoSentVO.getPageUnit()); - paginationInfo.setPageSize(kakaoSentVO.getPageSize()); - - kakaoSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - kakaoSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); - kakaoSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - //전체 발송 리스트 불러오기 - List resultAllResList = kakaoSentService.selectReservKakaoSentList(kakaoSentVO); - model.addAttribute("resultAllSentList", resultAllResList); - model.addAttribute("resultAllSentCnt", resultAllResList.size()); - - model.addAttribute("searchKeyword", mjonResvMsgVO.getSearchKeyword()); - paginationInfo.setTotalRecordCount( resultAllResList.size()> 0 ? (Integer.parseInt((resultAllResList.get(0)).getTotMsgCnt())) : 0); - model.addAttribute("paginationInfo", paginationInfo); - model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount()); - - - model.addAttribute("mjonMsgSentVO", mjonResvMsgVO); - model.addAttribute("userNm", userNm); - - Calendar cal = Calendar.getInstance(); - - int year = cal.get(Calendar.YEAR); - int month = cal.get(Calendar.MONTH) + 1; - int day = cal.get(Calendar.DAY_OF_MONTH); - - model.addAttribute("year", year); - model.addAttribute("month", month); - model.addAttribute("day", day); - - - return "web/reservedmsg/ReservedKakaoPrintListPopUp"; - } - - //파일 이름을 이용하여 첨부파일 아이디(atchFileId), 첨부파일 순번(fileExtsn)을 찾는 함수 - public FileVO getFilePathToAtchFileId(String filePath) throws Exception{ - - //마지막 / 의 인덱스 값 +1을 기준으로 문자열을 짤라줌 - String strFilePath = filePath.substring(filePath.lastIndexOf("/")+1); - - FileVO returnFileVO = new FileVO(); - - //파일 이름과 확장자를 분리해줌 - String[] arrFileNm = strFilePath.split("\\."); - String fileNm = arrFileNm[0]; - String fileExtsn = arrFileNm[1]; - - FileVO fileVO = new FileVO(); - fileVO.setStreFileNm(fileNm); - fileVO.setFileExtsn(fileExtsn); - returnFileVO = mjonReservMsgService.selectFileNmToAtchFileIdInfo(fileVO); - - return returnFileVO; - - } - -} diff --git a/src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser_advc_backup_20241113.java b/src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser_advc_backup_20241113.java deleted file mode 100644 index 8781e94..0000000 --- a/src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser_advc_backup_20241113.java +++ /dev/null @@ -1,249 +0,0 @@ -package itn.let.mjo.spammsg.web; - -import java.util.List; - -import itn.let.hangulparser.HangulParser; - -public class ComGetSpamStringParser_advc_backup_20241113 { - - /* - * 스팸 문자 필터링을 위한 변형된 한글 SMS 문장의 정규화 기법을 기반으로 개발 - * Kang Seung-Shik - * - * 20230419 - * */ - - //이상문자열 파싱 후 결합하여 - public static String getSpamTextParse(String strString) throws Exception { - - String smsTxt = strString; - String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", ""); //한글, 영문, 숫자 이외의 문자는 제거 - String[] split = repSmsTxt.split(" "); //띄어쓰기를 기준으로 분할 - String reMakeStringText = ""; - - try { - - for(String txt : split) { - - for(int i=0; i < txt.length(); i++) { - - char test = txt.charAt(i); - if(test >= 0xAC00) {//한글 문자이면 스킵 - continue; - }else { - - String tmpStr = Character.toString(test); - if(tmpStr.matches(".*[ㄱ-ㅎ]+.*")) { - - String nextCharAt = Character.toString(txt.charAt(i+1));//현재 단어 다음 단어가 어떤것인지 가져온다. - - if(i == txt.length() - 1 ) {//일단 마지막 자음은 스킵 한다. - break; - }/*else if(!nextCharAt.matches(".*[ㄱ-ㅎㅏ-ㅣa-zA-Z]+.*")) {//현재 자음이면서 다음글자가 자/모음이 아니면 삭제 액ㄱ정 이런 경우 삭제하려고 함. - txt = txt.replace(tmpStr, ""); - break; - }*/ - - - if(nextCharAt.matches(".*[a-zA-Z]+.*")) {//다음 단어가 영문이면 영문과 유사한 한글 모음을 찾아서 합쳐준다. - - String repCharAt = getEngToHanglue(nextCharAt); - String repStringChar = tmpStr + repCharAt; - - String repTxt = tmpStr + nextCharAt; - - txt = txt.replace(repTxt, repStringChar); - //System.out.println(txt); - - - }/*else if(nextCharAt.matches(".*[ㅏ-ㅣ]+.*")) {//다음 단어가 모음이면 앞 자음과 합쳐 주기 - - String repStringChar = tmpStr + nextCharAt; - //String norString = Normalizer.normalize(repStringChar, Normalizer.Form.NFC); - //System.out.println(repStringChar); - - //txt = txt.replace(repStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다. - - //System.out.println(txt); - - }*/ - - }else if(tmpStr.matches(".*[a-zA-Z]+.*")) {//영문단어가 나오면 앞뒤 단어 체크하여 연관성 없으면 삭제 처리. - - String engStr = tmpStr; - if(i < txt.length() - 1) {//마지막 글자 제외 - char nextEngChar = txt.charAt(i+1); - if(i > 0) {//첫글자가 영문인 경우 제외 - - char befEngChar = txt.charAt(i-1); - - //한글 단어사이에 영문자 한글자만 있는 경우 삭제 처리함. - if(nextEngChar >= 0xAC00 && befEngChar >= 0xAC00) { - - if(tmpStr.toLowerCase().equals("b")) {//B를 넣어서 한글로 읽힐수 있게도 함, 서B스 와 같은 형태 - txt = txt.replace(engStr, "비"); - }else { - txt = txt.replace(engStr, ""); - } - } - - } - - }else { - - char befEngChar = txt.charAt(i-1); - //마지막 글자이고 앞글자가 한글이면 마지막 영단어 삭제 처리 - if(befEngChar >= 0xAC00) { - txt = txt.replace(engStr, ""); - //continue; - } - - } - - }else if(tmpStr.matches(".*[0-9]+.*")) { - - if(i-1 < 0) {//한글자만 있는경우 패스 - continue; - } - - String befString = Character.toString(txt.charAt(i-1)); - - if(befString.matches(".*[ㄱ-ㅎ]+.*")) {//이전 글자가 자음이면 변환 문자 체크 - - String numToStr = getNumberToString(tmpStr); //숫자를 모음으로 변환 처리 - - String orgStringChar = befString + tmpStr; //원래 앞자음 + 숫자 - String repStringChar = befString + numToStr; //원래 앞자음 + 숫자를 변환한 모음 - - txt = txt.replace(orgStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다. - //System.out.println(txt); - - }else { - //숫자면 스킵 - continue; - } - - }else { - //특수문자들 처리 - String repSpcStr = getRepSpacialString(tmpStr); - if(!repSpcStr.equals("")) {//변환문자가 있는경우만 치환 - txt = txt.replace(tmpStr, repSpcStr); - } - - } - - } - - } - - reMakeStringText = reMakeStringText + " " + txt; - - } - - //System.out.println("++++++++++++++ ::: "+reMakeStringText); - //넘어오는 모든 글자에서 한글에 대해서 자/모음을 분리해준다. - List jasoList = HangulParser.disassemble(reMakeStringText); - - //분리된 자/모음 리스트를 다시 한글로 합쳐준다. - String assembleStr = HangulParser.assemble(jasoList); - - reMakeStringText = assembleStr; - - } catch (Exception e) { - System.out.println("++++++++++ getSpamTextParse Error !!! "+e); - return "getSpamTextParse 오류가 발생하였습니다."; - } - - return reMakeStringText; - - } - - /* - * - * 한글과 유사한 영문자를 변환 처리함 - * - * */ - public static String getEngToHanglue(String strWord) throws Exception { - - String returnStr = ""; - - try { - - if(strWord.toLowerCase().equals("r")) { - - returnStr = "ㅏ"; - - }else if(strWord.toLowerCase().equals("h")) { - - returnStr = "ㅐ"; - - }else if(strWord.toLowerCase().equals("i") || strWord.toLowerCase().equals("I") || strWord.toLowerCase().equals("l")) { - - returnStr = "ㅣ"; - - } - - } catch (Exception e) { - System.out.println("++++++++++++++ getEngToHanglue Error !!! "+e); - } - - return returnStr; - } - - - /* - * - * 한글과 유사한 숫자를 변환처리함 - * - * */ - public static String getNumberToString(String strWord) throws Exception { - - String returnStr = ""; - - try { - - if(strWord.equals("1")) { - - returnStr = "ㅣ"; - - } - - } catch (Exception e) { - System.out.println("++++++++++++++ getNumberToString Error !!! "+e); - } - - return returnStr; - } - - /* - * - * 한글과 유사한 특수문자들 변환처리함 - * - * */ - public static String getRepSpacialString(String strWord) throws Exception{ - - String returnStr = ""; - - try { - - if(strWord.equals("ⓒ")) { - returnStr = "c"; - }else if(strWord.equals("β")) { - returnStr = "비"; - }else if(strWord.equals("⒪")) { - returnStr = "ㅇ"; - }else if(strWord.equals("㈄")) { - returnStr = "ㅁ"; - }else if(strWord.equals("①")) { - returnStr = "ㅣ"; - } - - } catch (Exception e) { - System.out.println("++++++++++++++ getRepSpacialString Error !!! "+e); - } - - return returnStr; - - } - -} diff --git a/src/main/java/itn/let/mjo/spammsg/web/MjonSpamMsgController.java b/src/main/java/itn/let/mjo/spammsg/web/MjonSpamMsgController.java deleted file mode 100644 index 286501f..0000000 --- a/src/main/java/itn/let/mjo/spammsg/web/MjonSpamMsgController.java +++ /dev/null @@ -1,338 +0,0 @@ -package itn.let.mjo.spammsg.web; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.text.SimpleDateFormat; -import java.util.Date; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.LoginVO; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.lett.service.LetterService; -import itn.let.mjo.msg.service.MjonMsgService; -import itn.let.mjo.msg.service.MjonMsgVO; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.spammsg.service.MjonSpamMsgService; -import itn.let.sym.site.service.JoinSettingVO; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.UserManageVO; - -@Controller -public class MjonSpamMsgController { - - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - - @Resource(name = "mjonSpamMsgService") - private MjonSpamMsgService mjonSpamMsgService; - - @Resource(name = "LetterService") - private LetterService letterService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - - @RequestMapping(value= {"/web/mjon/spammsgdata/insertSpamKeyWordMsgDataAjax.do"}) - public ModelAndView insertSpamKeyWordMsgDataAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - String userId = ""; - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId.equals("")) { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - return modelAndView; - - } - - mjonMsgVO.setUserId(userId); - - //문자 즉시 발송 일경우 시간 셋팅 - - String reserveYn = mjonMsgVO.getReserveYn(); - - if(reserveYn.equals("N")) {//즉시발송인 경우 현재 시간 셋팅해줌 - - Date now = new Date(); - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - mjonMsgVO.setReqDate(sdFormat.format(now)); - - } - - String msgType = mjonMsgVO.getMsgType(); - int fileCount = 0; - - if(msgType.equals("6")) {// 단문이 아닌경우 그림이미지가 있는지 체크 - - //그림 이미지가 첨부된 경우 - if(mjonMsgVO.getImgFilePath() != null || mjonMsgVO.getImgFilePath().length > 0) { - - String[] path = mjonMsgVO.getImgFilePath(); - String[] fileId = mjonMsgVO.getImgFileId(); - String[] templateYn = mjonMsgVO.getTemplateYn(); - - for(int i=0; i회원 이용정지 처리 되었습니다.
자세한 사항은 문자온 고객센터를 통해 문의주시기 바랍니다."); - modelAndView.addObject("result", "spamKeyWordFail"); - - - } catch (Exception e) { - - System.out.println("++++++++++++++++++ insertSpamKeyWordMsgDataAjax Controller Error !!!" + e); - modelAndView.addObject("message", "오류가 발생하였습니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - /** - * 사용자가 보낸 문자를 문자온 법인폰으로도 하나 전송하는 기능 시작 - * - * */ - - try { - - String adminSmsNoticeYn = "Y"; - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setMberId(userId); - if(!userId.equals("")) { - userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO); - adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); - } - - if(adminSmsNoticeYn.equals("Y")) { - getAdminPhoneSendMsgData(mjonMsgVO); - } - - } catch (Exception e) { - throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e); - } - - return modelAndView; - } - - - /** - * 관리자로 문자 발송해주기 - * 사용자가 보낸 문자를 문자온 법인폰으로 발송해주는 기능 함수. - * 일반문자 와 대량 문자 모두 적용하고 있음 - * 2022.09.19 우영두 추가 - * - * */ - public boolean getAdminPhoneSendMsgData(MjonMsgVO mjonMsgVO) throws Exception{ - - try { - - mjonMsgVO.setUserId("system");//시스템 발송 문자로 처리 - - //전송사 선택 - String msgType = mjonMsgVO.getMsgType(); - int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt());//그림 이미지 갯수 - - - //예약문자를 발송하는 경우 문자 내용 앞에 "[자동이용정지]" 표시되도록 처리 - 법인폰으로 발송되는 문자내용 수정함.20221125 추가 - //String reserveYn = mjonMsgVO.getReserveYn(); - - String smsTxt = mjonMsgVO.getSmsTxt(); - String reservSmsTxt = "[자동이용정지]" + smsTxt; - - //[예약] 문구 추가시 문자열 길이 및 문자 종류 재계산 하기 - String charset = "euc-kr"; - int bytes = reservSmsTxt.getBytes(charset).length; //발송 문자 길이 - - if(bytes > 2000) {//문자열 길이가 2000을 넘어가면 [예약] 문구를 제외한 원래 문구를 넣어준다. 안그러면 문자전송이 실패하게 됨. - - mjonMsgVO.setSmsTxt(smsTxt); - - }else { - - //[예약] 문구를 추가한 내용으로 메세지 내용을 셋팅해 준다. - mjonMsgVO.setSmsTxt(reservSmsTxt); - if(bytes > 90) {//장문일 경우 문자타입을 변경해준다. - - msgType = "6"; - mjonMsgVO.setMsgType(msgType); - - } - - } - - /** - * 문자 종류 별 가장 저렴한 단가(아이하트를 제외) - * sms : 다우(7.3), 현대퓨처넷(7.5) - * Lms : 현대퓨처넷(23.5) - * MMS : 아이엠오(49) - * - * */ - if(msgType.equals("4")) {//단문인 경우 - - mjonMsgVO.setAgentCode("02");//현대퓨처넷 - - }else if(msgType.equals("6")) {//장문 혹은 그림문자인 경우 - - if(fileCount > 0) {//그림문자인 경우 아이엠오로 전송 - - mjonMsgVO.setAgentCode("03");//아이엠오 - mjonMsgVO.setNeoType("4"); - - }else {//장문인 경우 - - mjonMsgVO.setAgentCode("02");//현대퓨처넷 - } - - } - - //mjonMsgVO.setAgentCode("01"); - - //수신번호가 배열로 되어있어서 배열에 담아준다. - String[] phone = new String[1]; - String callTo = "15518011"; - phone[0] = callTo; - mjonMsgVO.setCallToList(phone);//수신번호 리스트 - - //시스템 로그용 수신 정보 - mjonMsgVO.setCallTo("help@iten.co.kr"); - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - //String userMoney = "0.0"; - String userPoint = "0.0"; - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - mjonMsgVO.setBefCash("0.0"); //관리자가 발송하는 것이라서 0원으로 입력 - mjonMsgVO.setMsgGroupCnt("1"); - - //문자종류 관리자가 발송하는 것은 msgKind : S 로 셋팅 - mjonMsgVO.setMsgKind("S"); - - //문자발송 금액 계산하기 - //문자 전송 개인 단가 불러오기 - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = sysJoinSetVO.getShortPrice(); - Float longPrice = sysJoinSetVO.getLongPrice(); - Float photo1Price = sysJoinSetVO.getPicturePrice(); - Float photo2Price = sysJoinSetVO.getPicture2Price(); - Float photo3Price = sysJoinSetVO.getPicture3Price(); - - if(mjonMsgVO.getMsgType().equals("4")) { //단문 금액 - - mjonMsgVO.setTotPrice(shortPrice.toString()); //총금액 - mjonMsgVO.setEachPrice(shortPrice.toString()); //한건 금액 - - }else if(mjonMsgVO.getMsgType().equals("6")){ - - if(fileCount == 0) {//장문 금액 - - mjonMsgVO.setTotPrice(longPrice.toString()); - mjonMsgVO.setEachPrice(longPrice.toString()); - - }else if(fileCount == 1) {//그림 1장 금액 - - mjonMsgVO.setTotPrice(photo1Price.toString()); - mjonMsgVO.setEachPrice(photo1Price.toString()); - - }else if(fileCount == 2) {//그림 2장 금액 - - mjonMsgVO.setTotPrice(photo2Price.toString()); - mjonMsgVO.setEachPrice(photo2Price.toString()); - - }else if(fileCount == 3) {//그림 3장 금액 - - mjonMsgVO.setTotPrice(photo3Price.toString()); - mjonMsgVO.setEachPrice(photo3Price.toString()); - - } - } - - //문자온 법인폰으로 전송하는 것이기에 현재시간으로 즉시 발송하도록 함. - Date now = new Date(); - SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - mjonMsgVO.setReqDate(sdFormat.format(now)); - - //문자 발송 처리 - mjonMsgDataService.insertAdmToMberMsgDataInfo(mjonMsgVO); - - } catch (Exception e) { - throw new Exception("+++++++++++++++++++++++++++++ getAdminPhoneSendMsgData Function Error !!!" + e); - } - - return true; - } - - - -} diff --git a/src/main/java/itn/let/mjo/tax/web/TaxController.java b/src/main/java/itn/let/mjo/tax/web/TaxController.java index ced3880..6d457ed 100644 --- a/src/main/java/itn/let/mjo/tax/web/TaxController.java +++ b/src/main/java/itn/let/mjo/tax/web/TaxController.java @@ -66,9 +66,6 @@ public class TaxController { @Resource(name="EgovFileMngService") private EgovFileMngService fileMngService; - @Resource(name = "EgovFileMngService") - private EgovFileMngService fileService; - /** 사업자번호 */ @Value("#{globalSettings['Globals.Business.number']}") private String businessNumber; @@ -261,28 +258,6 @@ public class TaxController { return redirectUrlMaker.getRedirectUrl(); } - //세금계산서, 현금영수증 발행 - 사용자 결제내역 화면 - @RequestMapping("/web/let/mjo/tax/insertTaxBill.do") - public String insertCashBill(TaxVO taxVO, RedirectAttributes redirectAttributes) throws Exception{ - //주민등록번호 암호화 - 개인회원 세금계산서(후보자) - if("p".equals(taxVO.getDept()) && "9".equals(taxVO.getRcptType()) && "C".equals(taxVO.getTaxTrgt())) { - taxVO.setRegNo(egovCryptoUtil.encrypt(taxVO.getRegNo())); - } - - // Step 1. 세금계산서, 현금영수증 발행 - TaxVO taxVO2 = new TaxVO(); - taxVO2.setMoid(taxVO.getMoid()); - taxVO2.setRcptType("3"); - taxService.deleteReceiptInfo(taxVO2); - - // Step 2. 세금계산서, 현금영수증 발행 - taxService.insertCashBill(taxVO); - - redirectAttributes.addFlashAttribute("message", "발행신청 완료하였습니다."); - RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/member/pay/PayList.do"); - return redirectUrlMaker.getRedirectUrl(); - } - //세금계산서, 현금영수증 발행 - 관리자 결제리스트 화면 @RequestMapping("/let/mjo/tax/insertTaxBillAdm.do") public String insertTaxBillAdm(TaxVO taxVO, RedirectAttributes redirectAttributes) throws Exception{ @@ -769,7 +744,7 @@ public class TaxController { TaxVO info = taxService.selectTaxInfo(taxVO); FileVO fileVO = new FileVO(); fileVO.setAtchFileId(info.getAtchFileId()); - List fileList = fileService.selectFileInfs(fileVO); + List fileList = fileMngService.selectFileInfs(fileVO); model.addAttribute("fileList", fileList); diff --git a/src/main/java/itn/let/mjo/test/web/TestController.java b/src/main/java/itn/let/mjo/test/web/TestController.java index 57859b6..bc52800 100644 --- a/src/main/java/itn/let/mjo/test/web/TestController.java +++ b/src/main/java/itn/let/mjo/test/web/TestController.java @@ -118,3380 +118,4 @@ import itn.let.utl.user.service.CheckNoServiceCommon; public class TestController { - @Resource(name = "mjonMsgService") - private MjonMsgService mjonMsgService; - - @Resource(name = "mjonPayService") - private MjonPayService mjonPayService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Resource(name = "LetterService") - private LetterService letterService; - - @Resource(name = "mjonSymbolService") - private MjonSymbolService mjonSymbolService; - - /** mberManageService */ - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource (name = "AddrService") - private AddrService addrService; - - @Resource (name = "AddrGroupService") - private AddrGroupService addrGroupService; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - @Resource(name = "SchdlrManageService") - private SchdlrManageService schdlrManageService; - - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; - - @Resource(name = "egovMjonCashIdGnrService") - private EgovIdGnrService idgenMjonCashId; - - @Resource(name = "CmmnDetailCodeManageService") - private EgovCcmCmmnDetailCodeManageService cmmnDetailCodeManageService; - - /** 첨부파일 저장경로 */ - @Value("#{globalSettings['Globals.file.saveDir']}") - private String fileSaveDir; - - - @Resource(name = "MjonEventService") - private MjonEventService mjonEventService; - - @Resource(name = "mjonSpamMsgService") - private MjonSpamMsgService mjonSpamMsgService; - - //로그인 처리 - @Resource(name = "checkLoginUtil") - private CheckLoginUtil checkLoginUtil; - - //첨부파일 체크 - @Resource(name = "checkFileUtil") - private CheckFileUtil checkFileUtil; - - //가상계좌원장 - @Resource(name="vacsVactService") - private VacsVactService vacsVactService; - - //파일 체크 & 관리 - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil egovFileMngUtil; - - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - @Autowired - KakaoApiProfile kakaoApiProfile; - - @Autowired - KakaoApiProfileCategory kakaoApiProfileCategory; - - @Autowired - CheckNoServiceCommon checkNoServiceCommon; - - @Autowired - MjonHolidayApi mjonHolidayApi; - - @Resource(name = "egovSiteManagerService") - private EgovSiteManagerService egovSiteManagerService; - - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - - //api key 정보 - @Resource(name = "apiKeyMngService") - private ApiKeyMngService apiKeyMngService; - - /* - //파일 정보 관리 - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - */ - - /** 후불제 자동 충전 서비스 */ - @Resource (name = "userManageService") - private EgovUserManageService egovUserManageService; - - @Resource(name = "MsgHolidayService") - private MsgHolidayService msgHolidayService; - - @Resource(name="MjonMsgDataDAO") - private MjonMsgDataDAO mjonMsgDataDAO; - - @Autowired - private MjonCommon mjonCommon; - - private static final Logger logger = LoggerFactory.getLogger(TestController.class); - - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // USER - // - // - - - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // ADMIN - // - // - - /*@RequestMapping(value= {"/web/mjon/test/selectSendTestView.do"}) - public String selectSendTestView(ModelMap model) throws Exception { - - // 결제방식 코드조회 - ComDefaultCodeVO vo = new ComDefaultCodeVO(); - vo.setCodeId("BIZ01"); - List bizList= cmmUseService.selectCmmCodeDetail(vo); - model.addAttribute("bizList", bizList); - - return "/uss/ion/test/TestSandKakao"; - }*/ - - /*@RequestMapping(value= {"/web/mjon/test/kakaoApiProfileTokenSendAjax.do"}) - public ModelAndView kakaoApiProfileTokenSendAjax(KakaoVO kakaoVO - , ModelAndView modelAndView - ) throws Exception { - //json 알림 - modelAndView.setViewName("jsonView"); - try { - - - KakaoVO kakaoInfo = new KakaoVO(); - - String tempUrl = kakaoVO.getBizUrl(); - - if(!tempUrl.equals("") && tempUrl != null) { - - if(tempUrl.contains("profile/category/all")) { - //발신프로필 카테고리 전체 내역 조회하기 - kakaoApiProfileCategory.kakaoApiProfileCategoryAll(kakaoVO); - }else if(tempUrl.contains("profile/category")) { - //발신프로필 카테고리 코드 정보 조회하기 - kakaoApiProfileCategory.kakaoApiProfileCategoryCode(kakaoVO); - }else if(tempUrl.contains("profile/token")) { - //발신프로필 인증 토큰 요처하기 - kakaoInfo = kakaoApiProfile.kakaoApiProfileToken(kakaoVO); - } - - }else{//요청 정보가 없으면 오류 반환 - - modelAndView.addObject("message", "요청 URL이 없습니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - - } - - modelAndView.addObject("kakaoInfo", kakaoInfo); - modelAndView.addObject("result", "success"); - - }catch(Exception ex){ - ex.printStackTrace(); - - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - - } - - return modelAndView; - }*/ - - @RequestMapping(value= {"/web/mjon/test/insertJsonTestAjax.do"}) - public ModelAndView insertJsonTestAjax(KakaoVO kakaoVO - , ModelAndView modelAndView - ) throws Exception { - //json 알림 - modelAndView.setViewName("jsonView"); - try { - -// kakaoService.kakaoBizJson(kakaoVO); - - modelAndView.addObject("result", "success"); - - }catch(Exception ex){ - ex.printStackTrace(); - - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - } - - return modelAndView; - } - - /** - * egov sample list 페이지 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - - @RequestMapping(value= {"/uss/ion/test/selectTestList.do"}) - public String selectTestList( - HttpServletRequest request - , @ModelAttribute("searchVO") VacsVactVO vacsVactVO - , ModelMap model - , RedirectAttributes redirectAttributes - ) throws Exception { - - - //관리자 로그인 여부 체크 - String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes); - if (!"Y".equals(isLogin)) return isLogin; - - - //로그인 정보 획득 - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - - //login 정보 - model.addAttribute("loginVO", loginVO); - - - //ajax를 위한 현재 URL 정보 받기 - vacsVactVO.setUrl(request.getRequestURI()); - return "/uss/ion/test/TestList"; - - } - - /** - * 주소록 입력 대행(무료) 관리 리스트 ajax 부분 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - - @RequestMapping(value= { - "/uss/ion/test/selectTestListAjax.do" - }) - public String selectTestListAjax( - HttpServletRequest request - , @ModelAttribute("searchVO") VacsVactVO vacsVactVO - , ModelMap model - , RedirectAttributes redirectAttributes - ) throws Exception { - - System.out.println("1111111111111"); - System.out.println("selectTestListAjax"); - System.out.println(vacsVactVO.toString()); - - //return "/uss/ion/payva/VirtualAccountListAjax"; - - //관리자 로그인 여부 체크 - String isLogin = checkLoginUtil.isLoginCheck4JsonPage(redirectAttributes); - if ("N".equals(isLogin)) return "/uss/ion/test/TestListAjax"; - - - // pageing step1 - PaginationInfo paginationInfo = this.setPagingStep1(vacsVactVO); - - - // pageing step2 - vacsVactVO = this.setPagingStep2(vacsVactVO, paginationInfo); - - - //대상 리스트 가져오기 - //관리자 리스트는 30일 마감에 대한 제한을 없애기 위해서 해당 값을 넣어준다. - List vacsVactList = vacsVactService.selectList(vacsVactVO); - - - // pageing step3 - paginationInfo = this.setPagingStep3(vacsVactList, paginationInfo); - - - //대상 리스트, 페이징 정보 전달 - model.addAttribute("resultList", vacsVactList); - model.addAttribute("paginationInfo", paginationInfo); - - - return "/uss/ion/test/TestListAjax"; - - - } - - - - - /** - * egov ec:code sample 페이지 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - - @RequestMapping(value= { - "/uss/ion/test/selectTestEcList.do" - }) - public String selectTestEcList( - ) throws Exception { - - - - return "/uss/ion/test/TestEcList"; - - } - - - /** - * egov file 업로드시 사용자 제약 관리 페이지 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - - @RequestMapping(value= { - "/uss/ion/test/selectTestFileList.do" - }) - public String selectTestFileList( - ) throws Exception { - - - - return "/uss/ion/test/TestFileList"; - - } - - /** - *egov file 업로드시 사용자 제약 관리 페이지 - * - * @param boardVO - * @param board - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= - { - "/uss/ion/test/insertTestFileAjax.do" - } - ) - public ModelAndView insertTestFileList( - HttpServletRequest request - , final MultipartHttpServletRequest multiRequest - //, ModelMap model - , ModelAndView modelAndView - , RedirectAttributes redirectAttributes - ) throws Exception { - - //json 알림 - modelAndView.setViewName("jsonView"); - - - //사용자 로그인 여부 체크 for json - String isLogin = checkLoginUtil.isLoginCheck4JsonAction(modelAndView); - if ("N".equals(isLogin)) return modelAndView; - - //파일 정상 처리 여부와 첨부 파일 정보 - DB 저장 없이 업로드 파일명받기어서 배열로 처리 - //DB 저장인 경우는 대표 파일 ID를 받으므로 하나의 ID만 넘겨 받는다.(file저장은 master-defail 구조) - String[] atchFileIds = this.readFiles(multiRequest, modelAndView, "txt|xls|xlsx|png|jpg", 10, 3); //MB size and ea - //String atchFileId = this.readFile(multiRequest, modelAndView, "txt|xls|xlsx", 10, 1); //size and ea - - for(int i=0;i result = null; - String atchFileId = ""; - String isThumbFile = ""; - //String isThumbFile = "thumbFile"; //"thumbFile" - 썸네일을 생성한다. - - final Map files = p_multiRequest.getFileMap(); - if (!files.isEmpty()) { - System.out.println("isnotempty"); - result = egovFileMngUtil.parseFileInf(files, "ADDRAGENCY_", 0, "", "", isThumbFile); - - - //관리자에서 게시판 설정시 업로드 파일 사이즈와 수량 체크용 - //사용자 설정용 업로드 파일 사이즈 & 파일 수량 & 확장자 체크용 - if(!checkFileUtil.isPosblAtchFileMvWithUserSetting(result, p_modelAndView, 0, p_exts, p_i_file_size, p_i_file_count)) { - // 공통코드 Set - //setBBSCommCd(model, bmVO); - - //model.addAttribute("bdMstr", bmVO); - //return "web/cop/bbs/EgovNoticeRegist"; - //modelAndView.addObject("bdMstr", bmVO); - p_modelAndView.addObject("result", "fail"); - - in_bool = false; - - }else { - //atchFileId = fileMngService.insertFileInfs(result); //첨부 파일 - for(int i=0;i p_vacsVactList - , PaginationInfo p_paginationInfo - )throws Exception{ - // pageing step3 - int totCnt = 0; - if(p_vacsVactList.size() > 0) totCnt = p_vacsVactList.get(0).getTotCnt(); - p_paginationInfo.setTotalRecordCount(totCnt); - - return p_paginationInfo; - } - - /* - @RequestMapping(value= {"/web/mjon/test/checkBizNoTestAjax.do"}) - public ModelAndView checkBizNoTestAjax(KakaoVO kakaoVO - , HttpServletRequest request - , ModelAndView modelAndView - ) throws Exception { - //json 알림 - modelAndView.setViewName("jsonView"); - - System.out.println("bizId " ); - System.out.println("Kakao " ); - //System.out.println(request.getParameter("b_no") ); - - - try { - //String s_b_no = request.getParameter("b_no"); - String s_b_no = request.getParameter("b_no").replaceAll("-", ""); //사업자등록번호 - String s_b_nm = request.getParameter("b_nm"); //업체명 - String s_p_nm = request.getParameter("p_nm"); //대표자명 - - - //KakaoVO kakaoInfo = checkNoServiceCommon.BizNoCheckApi(kakaoVO); - KakaoVO kakaoInfo = checkNoServiceCommon.BizNoCheckApiEx2( - kakaoVO - , s_b_no - , s_b_nm - , s_p_nm - ); - - modelAndView.addObject("kakaoInfo", kakaoInfo); - modelAndView.addObject("result", kakaoInfo.getBizReturnCode()); - - }catch(Exception ex){ - ex.printStackTrace(); - - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - } - - return modelAndView; - } - */ - - /* - @RequestMapping(value= {"/uss/umt/user/checkBizNoTaxAjax.do"}) - public ModelAndView checkBizNoTaxAjax(KakaoVO kakaoVO - , HttpServletRequest request - , ModelAndView modelAndView - ) throws Exception { - //json 알림 - modelAndView.setViewName("jsonView"); - - System.out.println("bizId " ); - System.out.println("Kakao " ); - //System.out.println(request.getParameter("b_no") ); - - - try { - //String s_b_no = request.getParameter("b_no"); - String s_b_no = request.getParameter("b_no").replaceAll("-", ""); //사업자등록번호 - String s_b_nm = request.getParameter("b_nm"); //업체명 - String s_p_nm = request.getParameter("p_nm"); //대표자명 - String s_start_dt = request.getParameter("start_dt").replaceAll("-", ""); //설립일자 - - System.out.println("s_start_dt"); - System.out.println(s_start_dt); - System.out.println(s_start_dt); - - //KakaoVO kakaoInfo = checkNoServiceCommon.BizNoCheckApi(kakaoVO); - KakaoVO kakaoInfo = checkNoServiceCommon.BizNoCheckApiEx3( - kakaoVO - , s_b_no - , s_b_nm - , s_p_nm - , s_start_dt - ); - - modelAndView.addObject("msg", kakaoInfo.getBizReturnMsg()); - modelAndView.addObject("result", kakaoInfo.getBizReturnCode()); - - }catch(Exception ex){ - ex.printStackTrace(); - - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - } - - return modelAndView; - } - */ - - // 회원가입 2뎁스 - 약관 동의 - @RequestMapping(value = "/web/user/login/test_checkTerms.do") - public String checkTerms(HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes, - @ModelAttribute("mberManageVO") MberManageVO mberManageVO, TermsVO termsVO, ModelMap model) - throws Exception { - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - if (isAuthenticated) - return "redirect:/"; - //URL을 이용한 비정상적인 접근 차단 - /* - if("".equals(mberManageVO.getDept()) || mberManageVO.getDept() == null) { - redirectAttributes.addFlashAttribute("message", "잘못된 경로로 접속하여 메인화면으로 이동됩니다"); - return "redirect:/web/main/mainPage.do"; - } - */ - // 본인인증 방식 선택 정보 불러오기 - JoinSettingVO joinSettingVO = egovSiteManagerService.selectJoinCertTypeDetail(); - model.addAttribute("joinSettingVO", joinSettingVO); - // 약관 사용메뉴 - 01:회원가입 - termsVO.setMenuNm("01"); - List termsList = new ArrayList(); - termsList = egovSiteManagerService.selectTermsMenu(termsVO); - - model.addAttribute("termsList", termsList); - - // 나이스 본인인증 - /* - * String referer = (String) request.getHeader("REFERER"); - * - * URL newURL = new URL(referer); - * - * String protocol = newURL.getProtocol() + "://"; String host = - * newURL.getHost(); - * - * String succUrl = protocol + host + "/web/user/login/niceCheckAjax.do"; // 성공시 - * 이동할 URL - String failUrl = protocol + host + - * "/web/user/login/selectUserDept.do"; - * - * mberManageVO.setNiceSuccUrl(succUrl); mberManageVO.setNiceFailUrl(failUrl); - */ - model.addAttribute("mberManageVO", mberManageVO); - - // KMC 본인인증 데이터 불러오기 - // 핸드폰인증만 사용할 시 - if (joinSettingVO.getJoinCertType().equals("M")) { - - KmcCertChecker kmcCertCheck = new KmcCertChecker(); - - // kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://219.240.88.15:8095"; - }else if(request.getRequestURL().toString().contains("www.")){ - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } - else { - serverNm = request.getScheme() + "://munjaon.co.kr"; - } - - AuthCertVO certVO = kmcCertCheck.authCertCheck(serverNm + "/web/cop/kmc/authRequestAjax.do"); - - model.addAttribute("tr_cert", certVO.getTr_cert()); - model.addAttribute("tr_url", certVO.getTr_url()); - model.addAttribute("tr_add", certVO.getTr_add()); - - } - - return "web/login/test_usrCheckTerms"; - } - - // 회원가입 3뎁스 - 정보입력 - @RequestMapping(value = "/web/user/login/test_insertUsrView.do") - public String insertUsrView(HttpServletRequest request, HttpServletResponse response, - @ModelAttribute("mberManageVO") MberManageVO mberManageVO, TermsVO termsVO, ModelMap model, - HttpSession session, JoinSettingVO joinSettingVO, RedirectAttributes redirectAttributes) throws Exception { - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - if (isAuthenticated) - return "redirect:/cmm/main/mainPage.do"; - - //URL을 이용한 비정상적인 접근 차단 - if("".equals(mberManageVO.getDept()) || mberManageVO.getDept() == null || "".equals(mberManageVO.getMblDn()) || mberManageVO.getMblDn() == null) { - redirectAttributes.addFlashAttribute("message", "잘못된 경로로 접속하여 메인화면으로 이동됩니다"); - return "redirect:/web/main/mainPage.do"; - } - - System.out.println("++++++++++++ 세션체크 ::: " + (MberManageVO) session.getAttribute("mberSession")); - if (null == session.getAttribute("mberSession")) { // 세션이 없을 시 메인화면으로 팅김 - redirectAttributes.addFlashAttribute("message", "쿠키 설정을 확인하세요."); - return "redirect:/"; - } - - // 이메일 코드조회 - ComDefaultCodeVO voComCode = new ComDefaultCodeVO(); - voComCode.setCodeId("ITN031"); - model.addAttribute("emailCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - // 방문경로 코드조회 - voComCode.setCodeId("ITN025"); - model.addAttribute("visitRoute", cmmUseService.selectCmmCodeDetail(voComCode)); - - // 기업유형 코드조회 - voComCode.setCodeId("ITN033"); - model.addAttribute("bizTypeCode", cmmUseService.selectCmmCodeDetail(voComCode)); - - // 본인인증 방식 선택 정보 불러오기 - JoinSettingVO joinCertType = egovSiteManagerService.selectJoinCertTypeDetail(); - String joinType = joinCertType.getJoinCertType(); - model.addAttribute("joinType", joinType); - - // 본인인증 - // 회원타입(개인,기업) 담아둔 세션 조회 - session = request.getSession(); - MberManageVO mberSessionVO = (MberManageVO) session.getAttribute("mberSession"); - - if (joinType.equals("M") || joinType.equals("A")) { - - // 크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 - // samesite 보안을 none처리 - /* - * response.setHeader("Set-Cookie", - * "AuthKmcCertVO=AuthKmcCertVO; Secure; SameSite=None"); //KMC 문자 본인인증 세션 정보 - * 받아오기 AuthCertVO certKmcVO = (AuthCertVO) - * session.getAttribute("AuthKmcCertVO"); - * - * if(certKmcVO != null) { - * - * mberManageVO.setNiceNm(certKmcVO.getCertName()); //본인인증 이름 - * mberManageVO.setMoblphonNo(certKmcVO.getCertPhone()); //본인인증 핸드폰 - * mberManageVO.setMblDn(certKmcVO.getCertDi()); //본인인증 중복가입방지 번호 - * mberManageVO.setNationality(certKmcVO.getCertNation()); - * mberManageVO.setBirthDay(certKmcVO.getBirthDay()); - * mberManageVO.setSexdstnCode(certKmcVO.getSexdstnCode()); - * - * } - */ - - } else { - - // ARS 전화 본인인증 세션 정보 받아오기 - AuthCertVO certArsVO = (AuthCertVO) session.getAttribute("AuthARSCertVO"); - - if (certArsVO != null) { - - mberManageVO.setMoblphonNo(certArsVO.getCertPhone()); // 본인인증 핸드폰 - - } - - } - - model.addAttribute("mberSessionVO", mberSessionVO); - - // 나이스 본인인증을 했을때 세션처리 후 데이터 저장해주기. - /* - * MberManageVO VO = new MberManageVO(); if (null != - * request.getSession().getAttribute("userSearchVO")) { // 세션체크 VO = - * ((MberManageVO) request.getSession().getAttribute("userSearchVO")); - * mberManageVO.setNiceNm(VO.getNiceNm()); // 이름 - * mberManageVO.setSexdstnCode(VO.getSexdstnCode()); // 성별 - * mberManageVO.setMoblphonNo(VO.getMoblphonNo()); // 핸드폰번호 - * mberManageVO.setBirthDay(VO.getBirthDay()); // 생년월일 - * mberManageVO.setMblDn(VO.getMblDn()); // 모바일 인증키 - * session.removeAttribute("userSearchVO"); } - */ - model.addAttribute("mberManageVO", mberManageVO); - - return "web/login/test_usrInsertView"; - } - - - - @RequestMapping(value= {"/web/user/login/apiRequestTest.do"}) - public ResponseEntity faxApiTest() throws Exception{ - - - try { - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "요청 성공!!!", LocalDateTime.now())); -// return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "임시 성공.", LocalDateTime.now())); - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - } - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "발송 요청 중 오류가 발생하였습니다.", LocalDateTime.now())); - } - - - - - - - @RequestMapping(value= {"/web/user/login/returnTest.do"}) - public ModelAndView returnTest(@RequestBody MjonMsgVO mjonMsgVO, -// public ResponseEntity returnTest(@RequestBody MjonMsgVO mjonMsgVO, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView("jsonView"); - System.out.println("mjonMsgVO.getSmsTxt() : "+ mjonMsgVO.getSmsTxt()); -// return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "발송 요청 중 오류가 발생하였습니다.", LocalDateTime.now())); - modelAndView.addObject("result", "OK"); - modelAndView.addObject("message", "요청 성공!"); - return modelAndView; - - } - - - -// ======================================================================================================== - - @RequestMapping(value= {"/web/user/login/selectSpamTxtChkAjax.do"}) - public ModelAndView selectSpamTxtChkAjax(@RequestBody MjonMsgVO mjonMsgVO) { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - - //회원 정보 중 금지어 예외 항목에 대해서 스팸 필터링 처리 유무 적용 - 20240820 우영두 - MberManageVO mberManageVO = new MberManageVO(); - - //회원정보 불러오기 - mberManageVO = mberManageService.selectMber(mjonMsgVO.getMberId()); - - //스팸 필터링 예외처리 여부 값 - (온: Y, 오프 : N) 온 일때 스미싱의심 예외 되도록 적용 - String exceptSpamYn = mberManageVO.getExceptSpamYn(); - - if(exceptSpamYn.equals("Y")) {//스팸 필터링 예외 온 일 경우 리턴 처리 - - modelAndView.addObject("result", "clear"); - return modelAndView; - - } - - List resultSpamTxt = mjonMsgDataService.selectSpamKeywordList(); - String spmFilterTxt = ""; - if(resultSpamTxt == null) {//스팸 체크리스트가 없는 경우 - - modelAndView.addObject("result", "listEmpty"); - return modelAndView; - - }else { - - - - String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 - - /* - * 치환문자에 스팸문구가 있을수 있어서 첫번째 치환데이터만 변환 적용 해서 스팸문구가 있는지 체크하도록 함. - * 차후에 전체 치환 데이터에 대한 체크를 할지를 검토하겠음. - * - * */ - - String txtReplYn = mjonMsgVO.getTxtReplYn(); - if(txtReplYn.equals("Y")) { - - String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //이름, 휴대폰, 치환문자 데이터가 없으면 취소 처리 - if((nameList.length == 0 || nameList == null) - && (rep1.length == 0 || rep1 == null) - && (rep2.length == 0 || rep2 == null) - && (rep3.length == 0 || rep3 == null) - && (rep4.length == 0 || rep4 == null)) { - - //modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다."); - //modelAndView.addObject("result", "fail"); - return modelAndView; - - } - - - if (smsTxt.indexOf("[*이름*]") > -1) { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[0].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", ""); - } - - if (smsTxt.indexOf("[*1*]") > -1) { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[0].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", ""); - } - - if (smsTxt.indexOf("[*2*]") > -1) { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[0].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", ""); - } - - if (smsTxt.indexOf("[*3*]") > -1) { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[0].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", ""); - } - - if (smsTxt.indexOf("[*4*]") > -1) { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[0].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", ""); - } - - } - - //입력 문장에 대해서 우회 문장 또는 특수 기호 입력 제거 등 문장 재구성 처리, 한글 자모음 분리 및 재조함도 함께 처리함. - String resultParser = ComGetSpamStringParser.getSpamTextParse(smsTxt).trim(); - //List jasoList = HangulParser.disassemble(resultParser); - //String assembleStr = HangulParser.assemble(jasoList); - - System.out.println("++++++++++++++ spam resultParser ::: "+resultParser); - - /* - //형태소 분석기 처리 - KomoranUtils komoran = new KomoranUtils(); - String resultKomoran = komoran.parseKomoranTextByString(assembleStr);*/ - - //System.out.println(resultKomoran); - - //한글, 영문, 숫자, 띄어쓰기를 제외한 다른 단어들을 삭제함. - //String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9 ]", ""); - - //데이터베이스에 등록된 스팸문구와 일치하는 단어/문구가 있는지 체크함. - int spmCnt = 0; - for(String spmTxt : resultSpamTxt) { - - String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim(); - - if(resultParser.contains(parserStr)) { - - //스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌. - spmFilterTxt += spmTxt + ","; - spmCnt++; - - } - - } - - if(spmCnt > 0) {//스팸문자가 포함되어 있으면 문자열 끝 , 단어 삭제 처리 - - if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) { - // 처음부터 idx 만큼 잘라낸 나머지 글자 - spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1); - - } - - System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt); - - modelAndView.addObject("result", "spams"); -// modelAndView.addObject("spmFilterTxt", spmFilterTxt); - return modelAndView; - - } - - } - - - }catch(Exception e) { - - logger.error(e.getMessage(), e); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - return modelAndView; - - } -// modelAndView.addObject("message", "test "); - - return modelAndView; - } - - @RequestMapping(value= {"/web/user/login/sendMsgDataAjax.do"}) - public ModelAndView sendMsgData(@RequestBody MjonMsgVO mjonMsgVO, - RedirectAttributes redirectAttributes, - HttpServletRequest request, - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - String resultSts = "0"; - String resultBlockSts = "0"; - String userId = ""; - - try { - -// LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; -// userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - userId = mjonMsgVO.getMberId(); - if(userId.equals("")) { - - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("resultSts", resultSts); - return modelAndView; - - }else { - - mjonMsgVO.setUserId(userId); - - /** - * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 - * 현재 로그인 세션도 만료 처리함 - * */ - boolean mberSttus = userManageService.selectUserStatusInfo(userId); - - if(!mberSttus) { - - modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 문자를 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); - modelAndView.addObject("result", "statusFail"); - modelAndView.addObject("resultSts", resultSts); - - request.getSession().invalidate(); - - return modelAndView; - - } - - } - - //회원정보에서 스미싱 회원 여부 정보 조회 - UserManageVO userManageVO = new UserManageVO(); - - userManageVO.setMberId(userId); - UserManageVO resultUserVO = userManageService.selectSmishingYnUserInfo(userManageVO); - String smishingYn = resultUserVO.getSmishingYn(); - mjonMsgVO.setSmishingYn(smishingYn); - - //문자열 길이 체크 해주기 - String charset = "euc-kr"; //문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산 - String smsCont = mjonMsgVO.getSmsTxt().replace("\r\n", "\n"); - int FrBytes = smsCont.getBytes(charset).length; - - if(FrBytes > 2000) { - - modelAndView.addObject("message", "문자 내용은 2000Byte를 넘을 수 없습니다."); - modelAndView.addObject("result", "smsLengFail"); - return modelAndView; - - } - - System.out.println("mjonMsgVO.getMsgType1() ::: "+mjonMsgVO.getMsgType()); - - String msgType = mjonMsgVO.getMsgType(); - - //내문자저장함에 저장후 문자를 발송하는경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함- 20220520 우영두 - if(msgType.equals("P") || msgType.equals("L")) { - msgType = "6"; - }else if(msgType.equals("S")) { - - msgType = "4"; - } - - //메세지 타입이 단문이면 진짜 단문인지 한번더 확인해 준다. - if(msgType.equals("4")) { - - //메세지 길이가 90Byte를초과 하거나, 그림 이미지가 있는경우 메세지 타입을 6으로 변경해준다. - if(FrBytes > 90 || mjonMsgVO.getImgFilePath().length > 0) { - - msgType = "6"; - - } - - } - - mjonMsgVO.setMsgType(msgType); - - //장문 메세지일 경우 - int fileCount = 0; - if(msgType.equals("6")) { - - //그림 이미지가 첨부된 경우 - if(mjonMsgVO.getImgFilePath() != null || mjonMsgVO.getImgFilePath().length > 0) { - - String[] path = mjonMsgVO.getImgFilePath(); - String[] fileId = mjonMsgVO.getImgFileId(); - String[] templateYn = mjonMsgVO.getTemplateYn(); - - for(int i=0; i 0) { - - if(mjonMsgVO.getFileName1() == null && mjonMsgVO.getFileName2() == null && mjonMsgVO.getFileName3() == null) { - - modelAndView.addObject("message", "문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다."); - modelAndView.addObject("result", "imgSourceFail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - } - - - /* - * 화면에서 넘어오는 단가 금액 및 총 결제 캐시 금액 체크 해주기 - * 검증을 위해서 시스템 단가, 회원 협의 단가, 이벤트 단가 정보 조회 - * 조회 단가를 이용하여 총 결제 캐시 금액 계산 - * 파라미터로 넘어온 개별단가(eachPrice), 총 결제캐시(totPrice)를 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌. - */ - MjonEventVO mjonEventVO = new MjonEventVO(); - mjonEventVO.setMberId(userId); - MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO); - - //1.시스템 기본 단가 정보 불러오기 - JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo(); - - - //2.사용자 개인 단가 정보 불러오기 - MberManageVO mberManageVO = new MberManageVO(); - mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); - - //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 - Float shortPrice = mberManageVO.getShortPrice(); - Float longPrice = mberManageVO.getLongPrice(); - Float picturePrice = mberManageVO.getPicturePrice(); - Float picture2Price = mberManageVO.getPicture2Price(); - Float picture3Price = mberManageVO.getPicture3Price(); - - //기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함 20220623 - boolean compareEndDate = false; - float eventRemainCash = 0; - float paramEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - - if(eventMberInfo != null) { - - String eventEndDate = eventMberInfo.getEventEndDate(); - - if(eventEndDate != null) { - compareEndDate = MJUtil.getCompareDate(eventEndDate); - eventRemainCash = (float) eventMberInfo.getEventRemainCash(); - - //이벤트 금액 및 기간 체크 - if(!compareEndDate || eventRemainCash < paramEachPrice) { - - if(!eventMberInfo.getEventStatus().equals("E")) { - - //이벤트 상태값을 종료로 변경한다. - mjonEventVO.setEventInfoId(eventMberInfo.getEventInfoId()); - mjonEventVO.setEventStatus("E"); - mjonEventVO.setEventMemo("발송 최소 금액("+ paramEachPrice +") 부족 혹은 이벤트 종료일 초과되어 이벤트 종료 시킴"); - mjonEventVO.setEventRemainCash(eventRemainCash); - mjonEventService.updateEventEndStatus(mjonEventVO); - eventMberInfo.setEventStatus("E"); - - } - - } - - } - } - - //이벤트 진행 회원의 발송 단가 처리해주기 - if(eventMberInfo != null && eventMberInfo.getEventStatus().equals("Y") && compareEndDate) { - - shortPrice = Float.parseFloat(eventMberInfo.getEventShortPrice()); - longPrice = Float.parseFloat(eventMberInfo.getEventLongPrice()); - picturePrice = Float.parseFloat(eventMberInfo.getEventPicturePrice()); - picture2Price = Float.parseFloat(eventMberInfo.getEventPicture2Price()); - picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price()); - - }else if(shortPrice < 1 || longPrice < 1 || picturePrice < 1) {//협의 단가가 없는 경우 시스템 단가 적용해 주기 - - shortPrice = (float) sysJoinSetVO.getShortPrice(); - longPrice = (float) sysJoinSetVO.getLongPrice(); - picturePrice = (float) sysJoinSetVO.getPicturePrice(); - picture2Price = (float) sysJoinSetVO.getPicture2Price(); - picture3Price = (float) sysJoinSetVO.getPicture3Price(); - - } - - // 토탈금액 "," 리플레이스 처리 - mjonMsgVO.setTotPrice(mjonMsgVO.getTotPrice().replaceAll(",", "")); - - float tmpOrgEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice()); - float tmpOrgTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - - System.out.println("mjonMsgVO.getMsgType2() ::: "+mjonMsgVO.getMsgType()); - - //각 문자 종류별 단가 셋팅해주기 - float tmpEachPrice = 0; - if(mjonMsgVO.getMsgType().equals("4")) { - mjonMsgVO.setEachPrice(shortPrice.toString()); - tmpEachPrice = shortPrice; - }else if(mjonMsgVO.getMsgType().equals("6")) { - - if(mjonMsgVO.getFileName3() != null) { - mjonMsgVO.setEachPrice(picture3Price.toString()); - tmpEachPrice = picture3Price; - }else if(mjonMsgVO.getFileName2() != null) { - mjonMsgVO.setEachPrice(picture2Price.toString()); - tmpEachPrice = picture2Price; - }else if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setEachPrice(picturePrice.toString()); - tmpEachPrice = picturePrice; - }else { - mjonMsgVO.setEachPrice(longPrice.toString()); - tmpEachPrice = longPrice; - } - - } - - //수신자 총 수 * 단가 를 통해 총 결제 금액 계산 - int tmpTotCallCnt = mjonMsgVO.getCallToList().length; - float tmpTotPrice = tmpTotCallCnt * tmpEachPrice; - - - //화면에서 넘어온 파라미터 개별 단가와 컨트롤러에서 계산한 단가를 비교하여 맞지 않으면 컨트롤러 계산 단가 입력 - if(tmpOrgEachPrice != tmpEachPrice) { - mjonMsgVO.setEachPrice(Float.toString(tmpEachPrice)); - - System.out.println("화면 : tmpOrgEachPrice ::: "+tmpOrgEachPrice); - System.out.println("컨트롤러 : tmpEachPrice ::: "+tmpEachPrice); - }else { - System.out.println("tmpOrgEachPrice ::: "+tmpOrgEachPrice); - } - - if(tmpOrgTotPrice != tmpTotPrice ) { - mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice)); - - System.out.println("화면 : tmpOrgTotPrice ::: "+tmpOrgTotPrice); - System.out.println("컨트롤러 : tmpTotPrice ::: "+tmpTotPrice); - }else { - System.out.println("tmpOrgTotPrice ::: "+tmpOrgTotPrice); - } - - /* - * 개별단가 및 총결제 캐시 금액 체크 로직 종료 - * - * */ - - - // 치환문자가 있는경우 - String txtReplYn = mjonMsgVO.getTxtReplYn(); - if(txtReplYn.equals("Y")) { - - //치환문자 체크 처리 - int totListCnt = mjonMsgVO.getCallToList().length; - String[] nameList = mjonMsgVO.getNameList(); //치환 이름 리스트 - String[] phone = mjonMsgVO.getCallToList(); //수신자 휴대폰 번호 - String[] rep1 = mjonMsgVO.getRep1List(); //치환 문자1 리스트 - String[] rep2 = mjonMsgVO.getRep2List(); //치환 문자2 리스트 - String[] rep3 = mjonMsgVO.getRep3List(); //치환 문자3 리스트 - String[] rep4 = mjonMsgVO.getRep4List(); //치환 문자4 리스트 - - //이름, 휴대폰, 치환문자 데이터가 없으면 취소 처리 - if((nameList.length == 0 || nameList == null) - && (rep1.length == 0 || rep1 == null) - && (rep2.length == 0 || rep2 == null) - && (rep3.length == 0 || rep3 == null) - && (rep4.length == 0 || rep4 == null)) { - - modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - - } - - // 치환문자 전체 필수체크 Start - boolean isRepCountOk = true; - if (mjonMsgVO.getSmsTxt().indexOf("[*이름*]") > -1) { - if(nameList.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*1*]") > -1) { - if(rep1.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*2*]") > -1) { - if(rep2.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*3*]") > -1) { - if(rep3.length != phone.length) { - isRepCountOk = false; - } - } - if (mjonMsgVO.getSmsTxt().indexOf("[*4*]") > -1) { - if(rep4.length != phone.length) { - isRepCountOk = false; - } - } - - if (isRepCountOk == false) { - modelAndView.addObject("message", "특정문구 일괄변환 치환문자 데이터가 없습니다"); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - // End - - //--------------------------------------------------------------------------------------------------------------- - - //단문, 장문 분리해서 전달하기 위해서 동일한 VO를 생성해 준다. - MjonMsgVO shortMsgVO = new MjonMsgVO(); - MjonMsgVO longMsgVO = new MjonMsgVO(); - MjonMsgVO imgMsgVO = new MjonMsgVO(); - - shortMsgVO = mjonMsgVO; - longMsgVO = mjonMsgVO; - imgMsgVO = mjonMsgVO; - - int shortMsgCnt = Integer.parseInt(mjonMsgVO.getShortMsgCnt()); - int longMsgCnt = Integer.parseInt(mjonMsgVO.getLongMsgCnt()); - int imgMsgCnt = mjonMsgVO.getCallToList().length; - - int tmpFileCnt = Integer.parseInt(mjonMsgVO.getFileCnt()); - int tmpPhoMsgCnt = mjonMsgVO.getCallToList().length; - - /*if(tmpFileCnt > 0) { - - shortMsgCnt = tmpPhoMsgCnt; - longMsgCnt = tmpPhoMsgCnt; - - }*/ - - String[] shortNameList = new String[shortMsgCnt]; //단문 치환 이름 리스트 - String[] shortPhone = new String[shortMsgCnt]; //단문 수신자 휴대폰 번호 - String[] shortRep1 = new String[shortMsgCnt]; //단문 치환 문자1 리스트 - String[] shortRep2 = new String[shortMsgCnt]; //단문 치환 문자2 리스트 - String[] shortRep3 = new String[shortMsgCnt]; //단문 치환 문자3 리스트 - String[] shortRep4 = new String[shortMsgCnt]; //단문 치환 문자4 리스트 - - String[] longNameList = new String[longMsgCnt]; //장문 치환 이름 리스트 - String[] longPhone = new String[longMsgCnt]; //장문 수신자 휴대폰 번호 - String[] longRep1 = new String[longMsgCnt]; //장문 치환 문자1 리스트 - String[] longRep2 = new String[longMsgCnt]; //장문 치환 문자2 리스트 - String[] longRep3 = new String[longMsgCnt]; //장문 치환 문자3 리스트 - String[] longRep4 = new String[longMsgCnt]; //장문 치환 문자4 리스트 - - String[] imgNameList = new String[imgMsgCnt]; //이미지 치환 이름 리스트 - String[] imgPhone = new String[imgMsgCnt]; //이미지 수신자 휴대폰 번호 - String[] imgRep1 = new String[imgMsgCnt]; //이미지 치환 문자1 리스트 - String[] imgRep2 = new String[imgMsgCnt]; //이미지 치환 문자2 리스트 - String[] imgRep3 = new String[imgMsgCnt]; //이미지 치환 문자3 리스트 - String[] imgRep4 = new String[imgMsgCnt]; //이미지 치환 문자4 리스트 - - int shortCnt = 0; - int longCnt = 0; - int imgCnt = 0; - - Map returnImgMap = new HashMap(); - Map returnShortMap = new HashMap(); - Map returnLongMap = new HashMap(); - - for(int i=0; i < totListCnt; i ++) { - - String smsTxt = mjonMsgVO.getSmsTxt(); //발송 문자 내용 - - //본문 내용 - 치환 처리 - - smsTxt = smsTxt.replaceAll(String.valueOf((char)13), ""); - if (smsTxt.indexOf("[*이름*]") > -1) { - if(nameList.length > i && StringUtil.isNotEmpty(nameList[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", StringUtil.getString(nameList[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*이름\\*\\]", ""); - } - } - if (smsTxt.indexOf("[*1*]") > -1) { - if(rep1.length > i && StringUtil.isNotEmpty(rep1[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", StringUtil.getString(rep1[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*1\\*\\]", ""); - } - } - if (smsTxt.indexOf("[*2*]") > -1) { - if(rep2.length > i && StringUtil.isNotEmpty(rep2[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", StringUtil.getString(rep2[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*2\\*\\]", ""); - } - } - if (smsTxt.indexOf("[*3*]") > -1) { - if(rep3.length > i && StringUtil.isNotEmpty(rep3[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", StringUtil.getString(rep3[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*3\\*\\]", ""); - } - } - if (smsTxt.indexOf("[*4*]") > -1) { - if(rep4.length > i && StringUtil.isNotEmpty(rep4[i])) { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", StringUtil.getString(rep4[i].replaceAll("§", ","))); - }else { - smsTxt = smsTxt.replaceAll("\\[\\*4\\*\\]", ""); - } - } - - //문자열 바이트 수 구하기(한글 2Byte로 계산) - // 한글 3Byte로 하기 위해서는 StandardCharsets.UTF_8 로 변경하면 된다. - int bytes = smsTxt.getBytes(charset).length; - - //단문문자 리스트 만들기 - if(bytes < 2000) { - - if(fileCount > 0) { - - if(nameList.length > i && !"".equals(nameList[i]) && nameList[i] != null) { - imgNameList[imgCnt] = StringUtil.getString(nameList[i].replaceAll("§", ",")); //장문 치환 이름 리스트 - }else { - imgNameList[imgCnt] = " "; - } - - if(phone.length > i && !"".equals(phone[i]) && phone[i] != null) { - imgPhone[imgCnt] = StringUtil.getString(phone[i].replaceAll("§", ",")); //장문 수신자 휴대폰 번호 - } - - if(rep1.length > i && !"".equals(rep1[i]) && rep1[i] != null) { - imgRep1[imgCnt] = StringUtil.getString(rep1[i].replaceAll("§", ",")); //장문 치환 문자1 리스트 - }else { - imgRep1[imgCnt] = " "; - } - - if(rep2.length > i && !"".equals(rep2[i]) && rep2[i] != null) { - imgRep2[imgCnt] = StringUtil.getString(rep2[i].replaceAll("§", ",")); //장문 치환 문자2 리스트 - }else { - imgRep2[imgCnt] = " "; - } - - if(rep3.length > i && !"".equals(rep3[i]) && rep3[i] != null) { - imgRep3[imgCnt] = StringUtil.getString(rep3[i].replaceAll("§", ",")); //장문 치환 문자3 리스트 - }else { - imgRep3[imgCnt] = " "; - } - - if(rep4.length > i && !"".equals(rep4[i]) && rep4[i] != null) { - imgRep4[imgCnt] = StringUtil.getString(rep4[i].replaceAll("§", ",")); //장문 치환 문자4 리스트 - }else { - imgRep4[imgCnt] = " "; - } - - imgCnt++; - - }else if(bytes > 90) {//장문문자 리스트 만들기 - //shortMsgListVO.add(mjonMsgVO.get) - - /** - * - * 치환 리스트 중 데이터가 없는 경우 데이터 밀림방지를 위하여 공백 하나를 추가해줌 - * 공백처리를 안하는 경우 데이터가 밀려서 치환되는 오류가 있어서 처리해줌 - * - * */ - - if(nameList.length > i && !"".equals(nameList[i]) && nameList[i] != null) { - longNameList[longCnt] = StringUtil.getString(nameList[i].replaceAll("§", ",")); //장문 치환 이름 리스트 - }else { - longNameList[longCnt] = " "; - } - - if(phone.length > i && !"".equals(phone[i]) && phone[i] != null) { - longPhone[longCnt] = StringUtil.getString(phone[i].replaceAll("§", ",")); //장문 수신자 휴대폰 번호 - } - - if(rep1.length > i && !"".equals(rep1[i]) && rep1[i] != null) { - longRep1[longCnt] = StringUtil.getString(rep1[i].replaceAll("§", ",")); //장문 치환 문자1 리스트 - }else { - longRep1[longCnt] = " "; - } - - if(rep2.length > i && !"".equals(rep2[i]) && rep2[i] != null) { - longRep2[longCnt] = StringUtil.getString(rep2[i].replaceAll("§", ",")); //장문 치환 문자2 리스트 - }else { - longRep2[longCnt] = " "; - } - - if(rep3.length > i && !"".equals(rep3[i]) && rep3[i] != null) { - longRep3[longCnt] = StringUtil.getString(rep3[i].replaceAll("§", ",")); //장문 치환 문자3 리스트 - }else { - longRep3[longCnt] = " "; - } - - if(rep4.length > i && !"".equals(rep4[i]) && rep4[i] != null) { - longRep4[longCnt] = StringUtil.getString(rep4[i].replaceAll("§", ",")); //장문 치환 문자4 리스트 - }else { - longRep4[longCnt] = " "; - } - - longCnt++; - - } else {//단문문자 리스트 만들기 - - /** - * - * 치환 리스트 중 데이터가 없는 경우 데이터 밀림방지를 위하여 공백 하나를 추가해줌 - * 공백처리를 안하는 경우 데이터가 밀려서 치환되는 오류가 있어서 처리해줌 - * - * */ - - if(nameList.length > i && !"".equals(nameList[i]) && nameList[i] != null) { - shortNameList[shortCnt] = StringUtil.getString(nameList[i].replaceAll("§", ",")); //단문 치환 이름 리스트 - }else { - shortNameList[shortCnt] = " "; - } - - if(phone.length > i && !"".equals(phone[i]) && phone[i] != null) { - shortPhone[shortCnt] = StringUtil.getString(phone[i].replaceAll("§", ",")); //단문 수신자 휴대폰 번호 - } - - if(rep1.length > i && !"".equals(rep1[i]) && rep1[i] != null) { - shortRep1[shortCnt] = StringUtil.getString(rep1[i].replaceAll("§", ",")); //단문 치환 문자1 리스트 - }else { - shortRep1[shortCnt] = " "; - } - - if(rep2.length > i && !"".equals(rep2[i]) && rep2[i] != null) { - shortRep2[shortCnt] = StringUtil.getString(rep2[i].replaceAll("§", ",")); //단문 치환 문자2 리스트 - }else { - shortRep2[shortCnt] = " "; - } - - if(rep3.length > i && !"".equals(rep3[i]) && rep3[i] != null) { - shortRep3[shortCnt] = StringUtil.getString(rep3[i].replaceAll("§", ",")); //단문 치환 문자3 리스트 - }else { - shortRep3[shortCnt] = " "; - } - - if(rep4.length > i && !"".equals(rep4[i]) && rep4[i] != null) { - shortRep4[shortCnt] = StringUtil.getString(rep4[i].replaceAll("§", ",")); //단문 치환 문자4 리스트 - }else { - shortRep4[shortCnt] = " "; - } - - shortCnt++; - - } - - }else { - - modelAndView.addObject("message", "문자 치환 후 전송 문자 길이를 초과하였습니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - } - - - if(imgCnt > 0) {//그림문자 전송 이름, 전화번호, 변환문자 입력해주기 - - imgMsgVO.setNameList(imgNameList); - imgMsgVO.setCallToList(imgPhone); - imgMsgVO.setRep1List(imgRep1); - imgMsgVO.setRep2List(imgRep2); - imgMsgVO.setRep3List(imgRep3); - imgMsgVO.setRep4List(imgRep4); - - //개별단가 계산하기 - String eachPrice = imgMsgVO.getPPrice(); - - //api 서버에서 pPrice 값이 없는 경우가 있어서 오류 방지를위해서 추가 - if(eachPrice == null) { - - eachPrice = imgMsgVO.getEachPrice(); - - } - - /** - * 그림문자에 치환 내용이 포함되어 있는 경우 단가 계산하기. - * 그림문자의 경우 이로직을 타지 않지만 혹시 몰라서 추가해놓음 - * */ - - if(fileCount > 2) {//그림 이미지가 3개 - - eachPrice = mjonMsgVO.getP3Price(); - - }else if(fileCount > 1) {//그림 이미지가 2개 - - eachPrice = mjonMsgVO.getP2Price(); - - }else if(fileCount == 1) {//그림 이미지가 1개 - eachPrice = mjonMsgVO.getPPrice(); - - } - - imgMsgVO.setEachPrice(eachPrice); - - //문자 종류 선택 - imgMsgVO.setMsgType("6"); - - //총금액 계산하기 - Float sTotPrice = Float.parseFloat(imgMsgVO.getEachPrice()) * imgCnt; - imgMsgVO.setTotPrice(sTotPrice.toString()); - - //그림문자 발송 처리 - returnImgMap = fncSendMsgRtnMap(imgMsgVO); - - } - - if(shortCnt > 0) {//단문문자 전송 이름, 전화번호, 변환문자 입력해주기 - - shortMsgVO.setNameList(shortNameList); - shortMsgVO.setCallToList(shortPhone); - shortMsgVO.setRep1List(shortRep1); - shortMsgVO.setRep2List(shortRep2); - shortMsgVO.setRep3List(shortRep3); - shortMsgVO.setRep4List(shortRep4); - - //개별단가 계산하기 - String eachPrice = shortMsgVO.getSPrice(); - - //api 서버에서 sPrice 값이 없는 경우가 있어서 오류 방지를위해서 추가 - if(eachPrice == null) { - - eachPrice = shortMsgVO.getEachPrice(); - - } - - /** - * 그림문자에 치환 내용이 포함되어 있는 경우 단가 계산하기. - * 그림문자의 경우 이로직을 타지 않지만 혹시 몰라서 추가해놓음 - * */ - - if(fileCount > 2) {//그림 이미지가 3개 - - eachPrice = mjonMsgVO.getP3Price(); - - }else if(fileCount > 1) {//그림 이미지가 2개 - - eachPrice = mjonMsgVO.getP2Price(); - - }else if(fileCount == 1) {//그림 이미지가 1개 - eachPrice = mjonMsgVO.getPPrice(); - - } - - shortMsgVO.setEachPrice(eachPrice); - - //문자 종류 선택 - if(fileCount > 0) {//그림문자인 경우 문자타임 지정 - shortMsgVO.setMsgType("6"); - }else { - shortMsgVO.setMsgType("4"); - } - - //총금액 계산하기 - Float sTotPrice = Float.parseFloat(shortMsgVO.getEachPrice()) * shortCnt; - shortMsgVO.setTotPrice(sTotPrice.toString()); - - //단문문자 발송 처리 - returnShortMap = fncSendMsgRtnMap(shortMsgVO); - - } - - if(longCnt > 0) {//장문문자 전송 이름, 전화번호, 변환문자 입력해주기 - - longMsgVO.setNameList(longNameList); - longMsgVO.setCallToList(longPhone); - longMsgVO.setRep1List(longRep1); - longMsgVO.setRep2List(longRep2); - longMsgVO.setRep3List(longRep3); - longMsgVO.setRep4List(longRep4); - - /** - * 그림문자에 치환 내용이 포함되어 있는 경우 단가 계산하기. - * 그림문자의 경우 이로직을 타지 않지만 혹시 몰라서 추가해놓음 - * */ - - String eachPrice = longMsgVO.getMPrice(); - - //api 서버에서 mPrice 값이 없는 경우가 있어서 오류 방지를위해서 추가 - if(eachPrice == null) { - - eachPrice = longMsgVO.getEachPrice(); - - } - - if(fileCount > 2) {//그림 이미지가 3개 - - eachPrice = mjonMsgVO.getP3Price(); - - }else if(fileCount > 1) {//그림 이미지가 2개 - - eachPrice = mjonMsgVO.getP2Price(); - - }else if(fileCount == 1) {//그림 이미지가 1개 - eachPrice = mjonMsgVO.getPPrice(); - - } - - longMsgVO.setEachPrice(eachPrice); - - //문자 종류 선택 - longMsgVO.setMsgType("6"); - - //총금액 계산하기 - Float mTotPrice = Float.parseFloat(longMsgVO.getEachPrice()) * longCnt; - longMsgVO.setTotPrice(mTotPrice.toString()); - - //장문문자 발송 - returnLongMap = fncSendMsgRtnMap(longMsgVO); - } - - //일괄변환에 의한 단문, 장문 별개로 전송을 했기 때문에 각각 전송 결과 건수를 합쳐준 후 결과를 modelAndView로 리턴해준다. - String returnMessage = ""; - String returnStatus = ""; - String msgGroupIdListComma = ""; - String msgTypeListComma = ""; - - //그림 결과 내용 - if(!returnImgMap.isEmpty()) { - - if(!returnImgMap.get("result").contains("fail")) { - - //발송건수 계산 - int sendCnt = Integer.parseInt(resultSts) + Integer.parseInt(returnImgMap.get("resultSts")); - resultSts = Integer.toString(sendCnt); - - //수신거부 건수 계산 - int sendBlockCnt = Integer.parseInt(resultBlockSts) + Integer.parseInt(returnImgMap.get("resultBlockSts")); - resultBlockSts = Integer.toString(sendBlockCnt); - - returnMessage = returnImgMap.get("message"); - returnStatus = returnImgMap.get("result"); - msgGroupIdListComma = returnImgMap.get("msgGroupId"); - - }else { - returnMessage = returnImgMap.get("message"); - returnStatus = returnImgMap.get("result"); - - modelAndView.addObject("message", returnMessage); - modelAndView.addObject("result", returnStatus); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - } - - } - - //장문발송 결과 내용 - if(!returnLongMap.isEmpty()) { - - if(!returnLongMap.get("result").contains("fail")) { - - //발송건수 계산 - int sendCnt = Integer.parseInt(resultSts) + Integer.parseInt(returnLongMap.get("resultSts")); - resultSts = Integer.toString(sendCnt); - - //수신거부 건수 계산 - int sendBlockCnt = Integer.parseInt(resultBlockSts) + Integer.parseInt(returnLongMap.get("resultBlockSts")); - resultBlockSts = Integer.toString(sendBlockCnt); - - returnMessage = returnLongMap.get("message"); - returnStatus = returnLongMap.get("result"); - msgGroupIdListComma = StringUtils.isNotEmpty(msgGroupIdListComma) - ? msgGroupIdListComma+","+returnLongMap.get("msgGroupId") - : returnLongMap.get("msgGroupId"); - msgTypeListComma = StringUtils.isNotEmpty(msgTypeListComma) - ? msgTypeListComma+","+"6" - : "6"; - - }else { - returnMessage = returnLongMap.get("message"); - returnStatus = returnLongMap.get("result"); - - modelAndView.addObject("message", returnMessage); - modelAndView.addObject("result", returnStatus); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - } - - } - - //단문발송 결과 내용 - if(!returnShortMap.isEmpty()) { - - if(!returnShortMap.get("result").contains("fail")) { - - //발송건수 계산 - int sendCnt = Integer.parseInt(resultSts) + Integer.parseInt(returnShortMap.get("resultSts")); - resultSts = Integer.toString(sendCnt); - - //수신거부 건수 계산 - int sendBlockCnt = Integer.parseInt(resultBlockSts) + Integer.parseInt(returnShortMap.get("resultBlockSts")); - resultBlockSts = Integer.toString(sendBlockCnt); - - returnMessage = returnShortMap.get("message"); - returnStatus = returnShortMap.get("result"); - msgGroupIdListComma = StringUtils.isNotEmpty(msgGroupIdListComma) - ? msgGroupIdListComma+","+returnShortMap.get("msgGroupId") - : returnShortMap.get("msgGroupId"); - msgTypeListComma = StringUtils.isNotEmpty(msgTypeListComma) - ? msgTypeListComma+","+"4" - : "4"; - - }else { - returnMessage = returnShortMap.get("message"); - returnStatus = returnShortMap.get("result"); - - modelAndView.addObject("message", returnMessage); - modelAndView.addObject("result", returnStatus); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - } - - } - - modelAndView.addObject("msgType", msgTypeListComma); - modelAndView.addObject("msgGroupId", msgGroupIdListComma); - modelAndView.addObject("message", returnMessage); - modelAndView.addObject("result", returnStatus); - modelAndView.addObject("resultSts", resultSts); - modelAndView.addObject("resultBlockSts", resultBlockSts); - - }else { - - //문자발송 함수 호출 - 일괄변환이 없거나, 그림문자 일괄변환의 경우 한번에 전송 처리 - modelAndView = fncSendMsg(mjonMsgVO); - - } - - }catch(Exception e) { - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ 일반문자 ==> 기타 시스템 오류 !!! : " + e.getMessage()); - System.out.println("========================================================================="); - - //logger.error(e.getMessage(), e); - e.printStackTrace(); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - return modelAndView; - - } - - - /** - * 사용자가 보낸 문자를 문자온 법인폰으로도 하나 전송하는 기능 시작 - * - * */ - - try { - - - String adminSmsNoticeYn = "Y"; - String smishingYn = "N"; - String spamStatus = mjonMsgVO.getSpamStatus(); //스미싱 의심으로 체크된 문자 정보 - - UserManageVO userManageVO = new UserManageVO(); - userManageVO.setMberId(userId); - - - if(!userId.equals("")) { - userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO); - adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); - smishingYn = userManageVO.getSmishingYn(); - } - - //법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송 - if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y") || smishingYn.equals("Y")) { - - if(spamStatus.equals("Y")) { - - mjonMsgVO.setDelayYn("Y"); - - }else if(smishingYn.equals("Y")) { - - mjonMsgVO.setSmishingYn("Y"); - } - - - // 법인폰 알람여부 체크 - JoinSettingVO joinSettingVO = new JoinSettingVO(); - joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - - String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); - - //야간 스미싱의심 알림이 활성화 되어있는 경우 - if(holiSmishingNoti.equals("Y")) { - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); - - List resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO); - - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); - - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - - List resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO); - - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); - - if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송 - /* - MjonCommon comm = new MjonCommon(); - comm.getAdminMsgSandSlack(mjonMsgVO); - */ - mjonCommon.getAdminMsgSandSlack(mjonMsgVO); - } - - //Slack으로 메세지 전송 처리 - /*MjonCommon comm = new MjonCommon(); - System.out.println("slack noti"); - comm.getAdminMsgSandSlack(mjonMsgVO);*/ - } - } - /*else {//야간스미싱 알림 비활성화인 경우 - 알림일정에 포함되지 않으면 슬랙 발송 처리(알림일정에 포함되면 슬랙발송 X - 알림 비활성화이기 때문에 발송X) - - MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); - - msgAlarmSetVO.setUseYn("Y"); - msgAlarmSetVO.setFirstIndex(0); - - List resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO); - - Calendar calendar = Calendar.getInstance(); - int year = calendar.get(Calendar.YEAR); - - MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); - msgHolidayVO.setFirstIndex(0); - msgHolidayVO.setRecordCountPerPage(100); - msgHolidayVO.setSearchHoliYear(Integer.toString(year)); - - List resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO); - - MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); - - boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); - - if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송 - - MjonCommon comm = new MjonCommon(); - comm.getAdminMsgSandSlack(mjonMsgVO); - - } - - }*/ - } - - - } catch (Exception e) { - throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e); - } - - return modelAndView; - } - /** - * 문자발송시 치환문자가 있거나 단문, 장문 일경우 타는 로직 - * param : MjonMsgVO - * return : ModelAndView - * - * */ - public Map fncSendMsgRtnMap(MjonMsgVO mjonMsgVO) { - Map returnMap = new HashMap(); - - //String resultSts = "0"; //발송결과 건수 - //String resultBlockSts = "0"; //수신거부 등록번호로 발송을 안한 건수 - - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 - - try { - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - String totPrice = mjonMsgVO.getTotPrice(); - - BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN); - - - //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - //BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice, - - //문자 발송 처리 - //MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - //현재 보유 캐쉬금액 셋팅 - mjonMsgVO.setBefCash(befCash.toString()); - - //문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열 - String[] tempNameList = new String[200]; //임시 이름 리스트 저장용 배열 - String[] tempRep1List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep2List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep3List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - String[] tempRep4List = new String[200]; //임시 치환문자1 리스트 저장용 배열 - - String[] phoneList = mjonMsgVO.getCallToList(); - String[] nameList = mjonMsgVO.getNameList(); - String[] rep1List = mjonMsgVO.getRep1List(); - String[] rep2List = mjonMsgVO.getRep2List(); - String[] rep3List = mjonMsgVO.getRep3List(); - String[] rep4List = mjonMsgVO.getRep4List(); - - - int callToListCnt = mjonMsgVO.getCallToList().length; - mjonMsgVO.setTotalCallCnt(callToListCnt); - - /** 예약 문자인 경우 시간 및 분할 시간 셋팅 해주기 */ - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - int turmMin = 0; - int totalCallCnt = 0; // 수신자 전체 갯수 - int divideCnt = 0; - int count = 1; //분할 카운트 - - - if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - - } - - //분할 예약 시간 저장 리스트 생성 - List dividDayList = new ArrayList(); - - //서비스 단으로 특정 문자 건수 이상으로 한번에 보내지 않기 위해서 처리함 - if(callToListCnt > 200) { - - int sendCnt = 0; - for(int i=0; i< callToListCnt; i++) { - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - if((i < callToListCnt -1) && sendCnt == 199) { - - //sendCnt 4번째 값을 추가해준다. - tempPhoneList[sendCnt] = phoneList[i]; - tempNameList[sendCnt] = nameList[i]; - tempRep1List[sendCnt] = rep1List[i]; - tempRep2List[sendCnt] = rep2List[i]; - tempRep3List[sendCnt] = rep3List[i]; - tempRep4List[sendCnt] = rep4List[i]; - - List arrPhoneList = new ArrayList(); - List arrNameList = new ArrayList(); - List arrRep1List = new ArrayList(); - List arrRep2List = new ArrayList(); - List arrRep3List = new ArrayList(); - List arrRep4List = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList.add(temp); - - } - - } - - for(String tmpName : tempNameList) { - - if(tmpName != null) { - - arrNameList.add(tmpName); - - } - - } - - for(String tmpRep1 : tempRep1List) { - - if(tmpRep1 != null) { - - arrRep1List.add(tmpRep1); - - } - - } - - for(String tmpRep2 : tempRep2List) { - - if(tmpRep2 != null) { - - arrRep2List.add(tmpRep2); - - } - - } - - for(String tmpRep3 : tempRep3List) { - - if(tmpRep3 != null) { - - arrRep3List.add(tmpRep3); - - } - - } - - for(String tmpRep4 : tempRep4List) { - - if(tmpRep4 != null) { - - arrRep4List.add(tmpRep4); - - } - - } - - String[] sendPhoneList = new String[arrPhoneList.size()]; - String[] sendNameList = new String[arrNameList.size()]; - String[] sendRep1List = new String[arrRep1List.size()]; - String[] sendRep2List = new String[arrRep2List.size()]; - String[] sendRep3List = new String[arrRep3List.size()]; - String[] sendRep4List = new String[arrRep4List.size()]; - - for(int j=0; j< arrPhoneList.size(); j++) { - - sendPhoneList[j] = arrPhoneList.get(j); - - } - - for(int k=0; k< arrNameList.size(); k++) { - - sendNameList[k] = arrNameList.get(k); - - } - - for(int k=0; k< arrRep1List.size(); k++) { - - sendRep1List[k] = arrRep1List.get(k); - - } - - for(int k=0; k< arrRep2List.size(); k++) { - - sendRep2List[k] = arrRep2List.get(k); - - } - - for(int k=0; k< arrRep3List.size(); k++) { - - sendRep3List[k] = arrRep3List.get(k); - - } - - for(int k=0; k< arrRep4List.size(); k++) { - - sendRep4List[k] = arrRep4List.get(k); - - } - - mjonMsgVO.setCallToList(sendPhoneList); - mjonMsgVO.setNameList(sendNameList); - mjonMsgVO.setRep1List(sendRep1List); - mjonMsgVO.setRep2List(sendRep2List); - mjonMsgVO.setRep3List(sendRep3List); - mjonMsgVO.setRep4List(sendRep4List); - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - //발송 처리후 배열 초기화 - Arrays.fill(tempPhoneList, null); - dividDayList.clear(); - - - }else if((i == callToListCnt -1) && sendCnt < 200){//200개의 마지막일 경우 처리 - - //마지막 리스트의 수신번호를 추가해 준다. - tempPhoneList[sendCnt] = phoneList[i]; - tempNameList[sendCnt] = nameList[i]; - tempRep1List[sendCnt] = rep1List[i]; - tempRep2List[sendCnt] = rep2List[i]; - tempRep3List[sendCnt] = rep3List[i]; - tempRep4List[sendCnt] = rep4List[i]; - - List arrPhoneList2 = new ArrayList(); - List arrNameList2 = new ArrayList(); - List arrRep1List2 = new ArrayList(); - List arrRep2List2 = new ArrayList(); - List arrRep3List2 = new ArrayList(); - List arrRep4List2 = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList2.add(temp); - - } - - } - - for(String tmpName : tempNameList) { - - if(tmpName != null) { - - arrNameList2.add(tmpName); - - } - - } - - for(String tmpRep1 : tempRep1List) { - - if(tmpRep1 != null) { - - arrRep1List2.add(tmpRep1); - - } - - } - - for(String tmpRep2 : tempRep2List) { - - if(tmpRep2 != null) { - - arrRep2List2.add(tmpRep2); - - } - - } - - for(String tmpRep3 : tempRep3List) { - - if(tmpRep3 != null) { - - arrRep3List2.add(tmpRep3); - - } - - } - - for(String tmpRep4 : tempRep4List) { - - if(tmpRep4 != null) { - - arrRep4List2.add(tmpRep4); - - } - - } - - String[] sendPhoneList2 = new String[arrPhoneList2.size()]; - String[] sendNameList2 = new String[arrNameList2.size()]; - String[] sendRep1List2 = new String[arrRep1List2.size()]; - String[] sendRep2List2 = new String[arrRep2List2.size()]; - String[] sendRep3List2 = new String[arrRep3List2.size()]; - String[] sendRep4List2 = new String[arrRep4List2.size()]; - - for(int j=0; j< arrPhoneList2.size(); j++) { - - sendPhoneList2[j] = arrPhoneList2.get(j); - - } - - for(int j=0; j< arrNameList2.size(); j++) { - - sendNameList2[j] = arrNameList2.get(j); - - } - - for(int k=0; k< arrRep1List2.size(); k++) { - - sendRep1List2[k] = arrRep1List2.get(k); - - } - - for(int k=0; k< arrRep2List2.size(); k++) { - - sendRep2List2[k] = arrRep2List2.get(k); - - } - - for(int k=0; k< arrRep3List2.size(); k++) { - - sendRep3List2[k] = arrRep3List2.get(k); - - } - - for(int k=0; k< arrRep4List2.size(); k++) { - - sendRep4List2[k] = arrRep4List2.get(k); - - } - - mjonMsgVO.setCallToList(sendPhoneList2); - mjonMsgVO.setNameList(sendNameList2); - mjonMsgVO.setRep1List(sendRep1List2); - mjonMsgVO.setRep2List(sendRep2List2); - mjonMsgVO.setRep3List(sendRep3List2); - mjonMsgVO.setRep4List(sendRep4List2); - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - }else {//198개가 될때까지 배열에 데이터를 쌓는다 - - tempPhoneList[sendCnt] = phoneList[i]; - - if(nameList.length > 0) {//이름 치환문자가 있는 경우 - tempNameList[sendCnt] = nameList[i]; - } - - if(rep1List.length > 0) {//치환1 문자가 있는 경우 - tempRep1List[sendCnt] = rep1List[i]; - } - - if(rep2List.length > 0) {//치환2 문자가 있는 경우 - tempRep2List[sendCnt] = rep2List[i]; - } - - if(rep3List.length > 0) {//치환3 문자가 있는 경우 - tempRep3List[sendCnt] = rep3List[i]; - } - - if(rep4List.length > 0) {//치환4 문자가 있는 경우 - tempRep4List[sendCnt] = rep4List[i]; - } - - sendCnt++; - - } - - } - - }else { - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - for(int i=0; i< callToListCnt; i++) { - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - } - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - } - - System.out.println("========================================================================="); - System.out.println(" 25xx +++++++++++++++++++++++++++++++++++++++++++ resultSts ::: " + resultSts); - System.out.println("========================================================================="); - - try { - - //문자 발송 캐시 차감 해주기 - serviceImple에서 처리하도록 변경 함 - /*MjonPayVO mjonPayVO = new MjonPayVO(); - - if(resultSts > 0 && resultBlockSts > 0) { - - Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * resultBlockSts; - Float resultTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - Float endPrice = resultTotPrice - blockPrice; - - mjonMsgVO.setTotPrice(Float.toString(endPrice)); - - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. - int groupCnt = resultSts; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - - } - - //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. - if(resultSts > 0) { - mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); - mjonPayVO.setUserId(mjonMsgVO.getUserId()); - mjonPayVO.setCash(-Float.parseFloat(mjonMsgVO.getTotPrice())); - mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); - mjonPayVO.setMemo("SMS 문자 " + resultSts + "건 발송"); - mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - - mjonPayService.insertCash(mjonPayVO); //캐시차감 - mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 - } - - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - if(resultSts > 0) { - - // 문자 전송 그룹 테이블에 정보 입력 - int groupCnt = resultSts; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - mjonMsgService.insertGroupMsgData(mjonMsgVO); - - //이벤트 회원 남은 캐시 업데이트 - fnUpdateEventRemainCash(mjonPayVO); - - }*/ - - //스팸문구 포함된 문자 발송의 경우 스팸 문구 내용도 별도 저장함. - String spamStatus = mjonMsgVO.getSpamStatus(); - - if(spamStatus == null) { - - spamStatus = "N"; - mjonMsgVO.setSpamStatus("N"); - - } - - if(spamStatus.equals("Y")) { - - int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO); - - System.out.println("+++++++++++++스팸문구 발송 내용 등록 +++++++++++++++++++++ "+resultCnt); - - } - - } catch (Exception e) { - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ fncSendMsgRtnMap() MJ_MSG_GROUP && CASH INSER ERROR !!! : " + e.getMessage()); - System.out.println("========================================================================="); - } - - }else { - - returnMap.put("message", "문자 발송에 필요한 보유 잔액이 부족 합니다."); - returnMap.put("result", "fail"); - returnMap.put("resultSts", "0"); - returnMap.put("resultBlockSts", "0"); - - return returnMap; - - } - - //문자 발송 후 남은 보유 캐시 정보 불러오기 - String afterCash = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - returnMap.put("afterCash", afterCash); - - }catch(Exception e) { - - logger.error(e.getMessage(), e); - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++ 기타 시스템 오류 : " + e.getMessage()); - System.out.println("========================================================================="); - returnMap.put("result", "fail"); - returnMap.put("message", "기타 시스템 오류 : " + e.getMessage()); - - } - - returnMap.put("message", "문자 전송이 완료되었습니다."); - returnMap.put("result", "success"); - returnMap.put("msgGroupId", mjonMsgVO.getMsgGroupId()); - returnMap.put("resultSts", Integer.toString(resultSts)); - returnMap.put("resultSts", Integer.toString(resultSts)); - returnMap.put("resultBlockSts", Integer.toString(resultBlockSts)); - return returnMap; - } - - - /** - * 문자발송시 치환문자가 없거나 그림문자일 경우 타는 로직 - * param : MjonMsgVO - * return : ModelAndView - * - * */ - public ModelAndView fncSendMsg(MjonMsgVO mjonMsgVO) { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - int resultSts = 0; //발송결과 건수 - int resultBlockSts = 0; //수신거부 등록번호로 발송을 안한 건수 - - try { - - //문자열 길이 체크 해주기 - String charset = "euc-kr"; - String smsCont = mjonMsgVO.getSmsTxt().replace("\r\n", "\n"); - int bytes = smsCont.getBytes(charset).length; //발송 문자 길이 - - if(mjonMsgVO.getFileName1() != null) { - mjonMsgVO.setMsgType("6"); - }else { - if(bytes < 2000) { - if(bytes > 90) {// 90Byte 초과시 장문 - mjonMsgVO.setMsgType("6"); - }else {// 그외 단문 - mjonMsgVO.setMsgType("4"); - } - }else { //최대 문자길이 초과시 - - modelAndView.addObject("message", "문자 치환 후 전송 문자 길이를 초과하였습니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - } - } - - - //현재 고객의 보유 캐시가 문자 발송이 가능한 금액인지 체크 - String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO); - mjonMsgVO.setBefPoint(userPoint); //현재 보유 포인트 정보 저장 - String totPrice = mjonMsgVO.getTotPrice(); - - BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(totPrice).setScale(2, RoundingMode.HALF_EVEN); - - - // 현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - // BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice, - - mjonMsgVO.setBefCash(userMoney); - // 문자 전송 그룹아이디 생성 - mjonMsgVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); - - //문자 발송 처리 - //MjonMsgReturnVO returnVO = new MjonMsgReturnVO(); - String[] tempPhoneList = new String[200]; //임시 수신번호 리스트 저장용 배열 - String[] phoneList = mjonMsgVO.getCallToList(); - - int callToListCnt = mjonMsgVO.getCallToList().length; - mjonMsgVO.setTotalCallCnt(callToListCnt); - - /** - * 예약 문자인 경우 시간 및 분할 시간 셋팅 해주기 - * - * - * */ - - //분할문자 시간에 간격시간 더해주기 - String dividDay = null; - Calendar cal = Calendar.getInstance(); - - //예약시간 변환 - SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - - int turmMin = 0; - int totalCallCnt = 0; - int divideCnt = 0; - int count = 1; //분할 카운트 - - - if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 - - Date toDate = transFormat.parse(mjonMsgVO.getReqDate()); - cal.setTime(toDate); //예약 시간 캘린터 변수에 입력 - - //String 타입 시간 Int로 변환 - turmMin = Integer.parseInt(mjonMsgVO.getDivideTime()); //분할발송 시간 간격 - dividDay = transFormat.format(cal.getTime()); - - totalCallCnt = mjonMsgVO.getCallToList().length; // 수신자 전체 갯수 - divideCnt = Integer.parseInt(mjonMsgVO.getDivideCnt()); //분할 발송 갯수 - - } - - //분할 예약 시간 저장 리스트 생성 - List dividDayList = new ArrayList(); - - //서비스 단으로 특정 문자 건수 이상으로 한번에 보내지 않기 위해서 처리함 - if(callToListCnt > 200) { - - int sendCnt = 0; - for(int i=0; i< callToListCnt; i++) { - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - if((i < callToListCnt -1) && sendCnt == 199) { - - //sendCnt 4번째 값을 추가해준다. - tempPhoneList[sendCnt] = phoneList[i]; - - List arrPhoneList = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList.add(temp); - - } - - } - - - String[] sendPhoneList = new String[arrPhoneList.size()]; - - for(int j=0; j< arrPhoneList.size(); j++) { - - sendPhoneList[j] = arrPhoneList.get(j); - - } - - - mjonMsgVO.setCallToList(sendPhoneList); - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - //발송 처리후 배열 초기화 - Arrays.fill(tempPhoneList, null); - dividDayList.clear(); - - }else if((i == callToListCnt -1) && sendCnt < 200){ - - //마지막 리스트의 수신번호를 추가해 준다. - tempPhoneList[sendCnt] = phoneList[i]; - - List arrPhoneList2 = new ArrayList(); - - for(String temp : tempPhoneList) { - - if(temp != null) { - - arrPhoneList2.add(temp); - - } - - } - - - String[] sendPhoneList2 = new String[arrPhoneList2.size()]; - - for(int j=0; j< arrPhoneList2.size(); j++) { - - sendPhoneList2[j] = arrPhoneList2.get(j); - - } - - - mjonMsgVO.setCallToList(sendPhoneList2); - sendCnt = 0; - - mjonMsgVO.setDividDay(dividDayList); - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = resultBlockSts + Integer.parseInt(returnVO.getSendMsgBlockCnt()); - - }else { - - tempPhoneList[sendCnt] = phoneList[i]; - sendCnt++; - - } - - } - - }else { - - //분할 발송을 체크 한 경우 - if(mjonMsgVO.getDivideChk() != null) { - for(int i=0; i< callToListCnt; i++) { - if(count > divideCnt) { - - count = 1; - - //분할 시간 간격을 증가시켜 준다. - cal.add(Calendar.MINUTE, turmMin); - dividDay = transFormat.format(cal.getTime()); - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - }else { - - dividDayList.add(dividDay); - //tempVO.setReqDate(dividDay); //분할 문자 예약 시간 입력해주기 - count++; - - } - - } - - } - - mjonMsgVO.setDividDay(dividDayList); - - - MjonMsgReturnVO returnVO = mjonMsgDataService.insertMsgDataInfo(mjonMsgVO); - mjonMsgVO.setAgentCode(returnVO.getAgentCode()); - resultSts = Integer.parseInt(returnVO.getSendMsgCnt()); - resultBlockSts = Integer.parseInt(returnVO.getSendMsgBlockCnt()); - System.out.println("======================================== totPrice ::: "+mjonMsgVO.getTotPrice()); - - } - - System.out.println("========================================================================="); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++ resultSts ::: " + resultSts); - System.out.println("+++++++++++++++++++++++++++++++++++++++++++ resultBlockSts ::: " + resultBlockSts); - System.out.println("========================================================================="); - - try { - - //문자 발송 캐시 차감 해주기 - serviceImple에서 처리하도록 변경 함 - /*MjonPayVO mjonPayVO = new MjonPayVO(); - - if(resultSts > 0 && resultBlockSts > 0) { - - Float blockPrice = Float.parseFloat(mjonMsgVO.getEachPrice()) * resultBlockSts; - Float resultTotPrice = Float.parseFloat(mjonMsgVO.getTotPrice()); - Float endPrice = resultTotPrice - blockPrice; - - mjonMsgVO.setTotPrice(Float.toString(endPrice)); - - //수신거부가 있는 경우 총 건수에서 수신거부 건수를 차감 후 그룹 테이블에 업데이트 해준다. - int groupCnt = resultSts; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - - } - - //1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다. - if(resultSts > 0) { - - mjonPayVO.setCashId(idgenMjonCashId.getNextStringId()); - mjonPayVO.setUserId(mjonMsgVO.getUserId()); - mjonPayVO.setCash(-Float.parseFloat(mjonMsgVO.getTotPrice())); - mjonPayVO.setFrstRegisterId(mjonMsgVO.getUserId()); - mjonPayVO.setMemo("SMS 문자 " + resultSts + "건 발송"); - mjonPayVO.setMsgGroupId(mjonMsgVO.getMsgGroupId()); - - //mjonPayService.insertCash(mjonPayVO); //캐시차감 - //mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트 - - } - - //문자 발송 테이블에 입력 데이터가 있는 경우 그룹 테이블에도 입력 해 준다. - if(resultSts > 0) { - - // 문자 전송 그룹 테이블에 정보 입력 - int groupCnt = resultSts; - mjonMsgVO.setMsgGroupCnt(Integer.toString(groupCnt)); - mjonMsgService.insertGroupMsgData(mjonMsgVO); - - //이벤트 회원 남은 캐시 업데이트 - fnUpdateEventRemainCash(mjonPayVO); - - }*/ - - //스팸문구 포함된 문자 발송의 경우 스팸 문구 내용도 별도 저장함. - String spamStatus = mjonMsgVO.getSpamStatus(); - - if(spamStatus == null) { - - spamStatus = "N"; - mjonMsgVO.setSpamStatus("N"); - - } - - if(spamStatus.equals("Y")) { - - int resultCnt = mjonSpamMsgService.insertSpamKeyWordMsgData(mjonMsgVO); - - System.out.println("+++++++++++++스팸문구 발송 내용 등록 +++++++++++++++++++++ "+resultCnt); - - } - - } catch (Exception e) { - System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); - System.out.println("====================================== fncSendMsg MJ_MSG_GROUP && CASH ERROR !!! ::: " + e.getMessage()); - System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); - } - - }else { - - modelAndView.addObject("message", "문자 발송에 필요한 보유 잔액이 부족 합니다."); - modelAndView.addObject("result", "fail"); - modelAndView.addObject("resultSts", "0"); - modelAndView.addObject("resultBlockSts", "0"); - - return modelAndView; - - } - - //문자 발송 후 남은 보유 캐시 정보 불러오기 - String afterCash = mjonMsgDataService.selectBeforeCashData(mjonMsgVO); - System.out.println("afterCash :: "+ afterCash); - modelAndView.addObject("afterCash", afterCash); - - }catch(Exception e) { - - logger.error(e.getMessage(), e); - e.printStackTrace(); - - System.out.println("========================================================================="); - System.out.println("++++++++++++++++++++++++++++++++++++++++++++기타 시스템 오류 : " + e.getMessage()); - System.out.println("========================================================================="); - - modelAndView.addObject("result", "fail"); - modelAndView.addObject("message", "기타 시스템 오류 : " + e.getMessage()); - - } - - - modelAndView.addObject("message", "문자 전송이 완료되었습니다."); - modelAndView.addObject("result", "success"); - - - //TODO 기존 로직에 추가해야함 - modelAndView.addObject("msgType", mjonMsgVO.getMsgType()); - modelAndView.addObject("msgGroupId", mjonMsgVO.getMsgGroupId()); - modelAndView.addObject("resultSts", resultSts); - modelAndView.addObject("resultBlockSts", resultBlockSts); - - - -// return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "성공", LocalDateTime.now())); - - return modelAndView; - } - - - - - - @RequestMapping(value= {"/web/user/login/fileTest.do"}) - public void downloadAndSaveFile() throws Exception { - - String downloadUrl = "http://192.168.0.11:5000/converHWPtoPDF"; - String filePath = "D:\\Development\\test_dev"; - String fileNm = "저작권분쟁조정규칙(20220516)"; -// String fileNm = "testFileName(20220516)"; - String fileExt = ".pdf"; - String cnvtfileExt = ".jpg"; - - - - byte[] fileData = fileSendAnddownloadFile(downloadUrl, filePath + File.separator + fileNm + ".hwp"); -// byte[] fileData = downloadFile(downloadUrl, fileNm); - this.saveFile(fileData, filePath, fileNm+fileExt); - this.pdfToJpg(filePath, fileNm, fileExt, cnvtfileExt); - } - - /** - * @methodName : fileSendAnddownloadFile - * @author : 이호영 - * @date : 2023.08.04 - * @description : 파일을 보내서 PFD로 변환한 파일을 받는다 - * @param downloadUrl - * @param filePathNm - * @return - * @throws IOException - */ - public byte[] fileSendAnddownloadFile(String downloadUrl, String filePathNm) throws IOException { - RestTemplate restTemplate = new RestTemplate(); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.MULTIPART_FORM_DATA); - - // Create a ByteArrayResource to wrap the file content without relying on the file system - FileSystemResource fileResource = new FileSystemResource(filePathNm); - - // To ensure correct encoding for non-ASCII characters - String encodedFilename = UriUtils.encode(fileResource.getFilename(), "UTF-8"); - - // Create a new HttpEntity for file and use encoded filename - MultiValueMap body = new LinkedMultiValueMap<>(); - body.add("file", new ByteArrayResource(Files.readAllBytes(fileResource.getFile().toPath())) { - @Override - public String getFilename() { - return encodedFilename; - } - }); - - - - HttpEntity> entity = new HttpEntity<>(body, headers); - - ResponseEntity responseEntity = restTemplate.exchange(downloadUrl, HttpMethod.POST, entity, byte[].class); - - if (responseEntity.getStatusCodeValue() == 200) { - return responseEntity.getBody(); - } else { - throw new RuntimeException("Failed to download file from " + downloadUrl); - } - } - - /** - * @methodName : downloadFile - * @author : 이호영 - * @date : 2023.08.04 - * @description : 서버에 파일을 요청해서 받는 형식 - * @param downloadUrl - * @param fileNm - * @return - public byte[] downloadFile(String downloadUrl, String fileNm) { - RestTemplate restTemplate = new RestTemplate(); - - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.MULTIPART_FORM_DATA); - - MultiValueMap body = new LinkedMultiValueMap<>(); - body.add("fileNm", fileNm); - HttpEntity> entity = new HttpEntity<>(body, headers); - - - ResponseEntity responseEntity = restTemplate.exchange(downloadUrl, HttpMethod.POST, entity, byte[].class); - -// System.out.println("responseEntity :: "+ responseEntity); - if (responseEntity.getStatusCodeValue() == 200) { - return responseEntity.getBody(); - } else { - throw new RuntimeException("Failed to download file from " + downloadUrl); - } - } - */ - - - /** - * @methodName : saveFile - * @author : 이호영 - * @date : 2023.08.04 - * @description : 파일 저장 - * @param fileData - * @param filePath - * @param fileNm - */ - public void saveFile(byte[] fileData, String filePath, String fileNm) { - Path path = Paths.get(filePath, fileNm); - - try { - Files.write(path, fileData); - } catch (IOException e) { - throw new RuntimeException("Failed to save file to " + filePath, e); - } - } - - - /** - * @methodName : pdfToJpg - * @author : 이호영 - * @date : 2023.08.04 - * @description : 저장한 파일을 불러와서 파일명의 폴더를 생성하여 jpg로 저장 - * @param filePath - * @param fileNm - * @param oriFileExt - * @param cnvtfileExt - * @throws Exception - */ - public void pdfToJpg(String filePath, String fileNm, String oriFileExt, String cnvtfileExt) throws Exception { - - File file = new File(filePath + File.separator + fileNm + oriFileExt); - PDDocument document = PDDocument.load(file); - try { - - int pageCount = document.getNumberOfPages(); - PDFRenderer pdfRenderer = new PDFRenderer(document); - - System.out.println("pageCount : "+ pageCount); - - String saveFilePath = this.filePathChk(filePath + File.separator +fileNm); - - if(StringUtils.isNotEmpty(saveFilePath)) - { - - for (int i = 0; i < pageCount; i++) { - - BufferedImage imageObj = pdfRenderer.renderImageWithDPI(i, 100, ImageType.RGB); - File outputfile = new File(saveFilePath + File.separator + fileNm + i + cnvtfileExt); - ImageIO.write(imageObj, "jpg", outputfile); - } - } - - - } catch (Exception e) { - e.printStackTrace(); - // TODO: handle exception - }finally { - if (document != null) { - document.close(); - } - } - - } - - /** - * @methodName : filePathChk - * @author : 이호영 - * @date : 2023.08.04 - * @description : jpg 파일 저장할 디렉토리 생성 - * @param filePath - * @return - */ - private String filePathChk(String filePath) { - // TODO Auto-generated method stub - String directoryPath = filePath; - - Path path = Paths.get(directoryPath); - - if (!Files.exists(path)) { - try { - - Files.createDirectories(path); - System.out.println("Directory created"); - return directoryPath; - } catch (IOException e) { - throw new RuntimeException("Failed to create directory!", e); - } - } else { - System.out.println("Directory already exists"); - } - - return null; - - } - - - @RequestMapping(value="/web/mjon/test/insertAfterPayCashChargeSchedulerAjax.do") - public void testAfterPayCashCharge() throws Exception{ - - System.out.println("=================================testAfterPayCashCharge Start=========================================="); - - try { - - egovUserManageService.updateUserCashByAutoCash(); - - } catch (Exception e) { - System.out.println("++++++++++++++ testAfterPayCashCharge Error!!! "+e); - } - - } - - @RequestMapping(value = "/web/mjon/test/ajaxTest.do") - public ResponseEntity ajaxTest( - @RequestParam String isSuccess, - @RequestParam String s_msg, - @RequestParam String f_msg, - @RequestParam int sleep, - HttpServletRequest request, - ModelMap model) throws Exception { - - System.out.println("sleep :: "+ sleep); - - int s = sleep*1000; - try { - // 3초 지연 - Thread.sleep(s); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - if("Y".equals(isSuccess)) { - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, s_msg, "")); - - }else { - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, f_msg, "")); - - } - - } - - @RequestMapping(value = "/web/mjon/test/refundTest.do") - public ResponseEntity refundTest( - @RequestParam String p_type, - HttpServletRequest request, - ModelMap model) throws Exception { - System.out.println(" p_type :: "+p_type); - - long startTime = System.nanoTime(); // 시작 시간 기록 - try { - // 문자 환불 - if ("ONE".equals(p_type)) { //하루에 한번만 31일 대상으로 실행 - schdlrManageService.msgFailPayBackOneByDay(); - - }else { - // 10분 마다 1주일 데이터에서 환불 대상을 찾아서 환불 한다. - //어플리케이션 트랜잭션 문제가 있어 Util 단으로 DB 호출을 가져옴 - 2024-03-14 - //schdlrManageService.msgFailPayBack(); - - long forBeforeTime = System.currentTimeMillis(); // 코드 실행 전 시간 - List msgFailList = mjonMsgDataDAO.selectMsgSentFailList(); - - - long forAfterTime1 = System.currentTimeMillis(); // 코드 실행 후 시간 - long forSecDiffTime1 = (forAfterTime1 - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) - System.out.println("==PayBack list =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime1 +"초"); - - // 리스트가 비어있는 경우 종료 - if (msgFailList == null || msgFailList.isEmpty()) { - System.out.println("No messages to process."); - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "데이터 없음", "")); - } - - - // TEST - - // 필요한 필드만 DTO로 매핑 - List dtoList = msgFailList.stream() -// .limit(10) - .map(msg -> - new RefundDTO( - msg.getUserId() - , msg.getMsgGroupId() - , msg.getUserData() - , Integer.parseInt(msg.getUserData()) - , msg.getEachPrice()) - ) - .collect(Collectors.toList()); - System.out.println("== dtoList =============> : "+ dtoList.size()); - // JSON 변환 - ObjectMapper objectMapper = new ObjectMapper(); - String msgFailListJson = objectMapper.writeValueAsString(dtoList); - - mjonMsgDataDAO.updateMsgSentFailPayBackBatch(msgFailListJson); - - - long forAfterTime = System.currentTimeMillis(); // 코드 실행 후 시간 - long forSecDiffTime = (forAfterTime - forBeforeTime)/1000; // 코드 실행 전후 시간 차이 계산(초 단위) - System.out.println("==PayBack for 2 =============> 수량 : "+msgFailList.size()+" ===== " + forSecDiffTime +"초"); - } - - }catch(Exception ex) { - ex.printStackTrace(); - } - long endTime = System.nanoTime(); // 종료 시간 기록 - long executionTimeInSeconds = (endTime - startTime) / 1_000_000_000; // 실행 시간 (초) - - // 분과 초로 변환 - long minutes = executionTimeInSeconds / 60; // 분 - long seconds = executionTimeInSeconds % 60; // 초 - - System.out.println("Execution time: " + minutes + " minutes " + seconds + " seconds"); - - -// return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "", "")); - return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "테스트", "")); - - } - } diff --git a/src/main/java/itn/let/mjo/test/web/TestCrawlerController.java b/src/main/java/itn/let/mjo/test/web/TestCrawlerController.java deleted file mode 100644 index 24e80b5..0000000 --- a/src/main/java/itn/let/mjo/test/web/TestCrawlerController.java +++ /dev/null @@ -1,462 +0,0 @@ -package itn.let.mjo.test.web; - -import java.io.OutputStream; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Font; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.select.Elements; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.let.mjo.payva.service.VacsVactService; -import itn.let.mjo.payva.service.VacsVactVO; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.utl.user.service.CheckFileUtil; -import itn.let.utl.user.service.CheckLoginUtil; - -@Controller -public class TestCrawlerController { - - //로그인 처리 - @Resource(name = "checkLoginUtil") - private CheckLoginUtil checkLoginUtil; - - //첨부파일 체크 - @Resource(name = "checkFileUtil") - private CheckFileUtil checkFileUtil; - - //가상계좌원장 - @Resource(name="vacsVactService") - private VacsVactService vacsVactService; - - //파일 체크 & 관리 - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil egovFileMngUtil; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - /* - - - //파일 정보 관리 - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - */ - - - private static final Logger logger = LoggerFactory.getLogger(TestController.class); - - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // USER - // - // - - - ///////////////////////////////////////////////////////////////////////////////////////// - // - // - // ADMIN - // - // - - /** - * egov sample list 페이지 - * @param addrVO - * @param model - * @return - * @throws Exception - */ - - @RequestMapping(value= { - "/uss/ion/test/TestCrawlerList.do" - }) - public String selectTestList( - HttpServletRequest request - , @ModelAttribute("searchVO") VacsVactVO vacsVactVO - , ModelMap model - , RedirectAttributes redirectAttributes - ) throws Exception { - - - //관리자 로그인 여부 체크 - String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes); - if (!"Y".equals(isLogin)) return isLogin; - - - //로그인 정보 획득 - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - - //login 정보 - model.addAttribute("loginVO", loginVO); - - - //ajax를 위한 현재 URL 정보 받기 - vacsVactVO.setUrl(request.getRequestURI()); - return "/uss/ion/test/TestCrawlerList"; - - } - - - /** - *egov file 업로드시 사용자 제약 관리 페이지 - * - * @param boardVO - * @param board - * @param model - * @return - * @throws Exception - */ - @RequestMapping(value= - { - "/uss/ion/test/insertTestCrawlerAjax.do" - } - ) - public void insertTestFileList( - HttpServletRequest request - , HttpServletResponse response - //, final MultipartHttpServletRequest multiRequest - //, ModelMap model - , ModelAndView modelAndView - , RedirectAttributes redirectAttributes - ) throws Exception { - - String p_url = request.getParameter("url"); - - String p_page_start = request.getParameter("page_start"); - String p_page_end = request.getParameter("page_end"); - - int i_start = Integer.parseInt(p_page_start); - int i_end = Integer.parseInt(p_page_end); - - - String p_param0 = request.getParameter("param0"); - String p_param1 = request.getParameter("param1"); - String p_param2 = request.getParameter("param2"); - String p_param3 = request.getParameter("param3"); - String p_param4 = request.getParameter("param4"); - String p_param5 = request.getParameter("param5"); - - String p_pre_detailPage = request.getParameter("pre_detailPage"); - String p_detailPage = request.getParameter("detailPage"); - String p_detailPageAttr = request.getParameter("detailPageAttr"); - - String p_target1 = request.getParameter("target1"); - String p_target2 = request.getParameter("target2"); - String p_target3 = request.getParameter("target3"); - String p_target4 = request.getParameter("target4"); - String p_target5 = request.getParameter("target5"); - String p_target6 = request.getParameter("target6"); - String p_target7 = request.getParameter("target7"); - String p_target8 = request.getParameter("target8"); - String p_target9 = request.getParameter("target9"); - String p_target10 = request.getParameter("target10"); - - String p_target1attr = request.getParameter("target1attr"); - String p_target2attr = request.getParameter("target2attr"); - String p_target3attr = request.getParameter("target3attr"); - String p_target4attr = request.getParameter("target4attr"); - String p_target5attr = request.getParameter("target5attr"); - String p_target6attr = request.getParameter("target6attr"); - String p_target7attr = request.getParameter("target7attr"); - String p_target8attr = request.getParameter("target8attr"); - String p_target9attr = request.getParameter("target9attr"); - String p_target10attr = request.getParameter("target10attr"); - - //상세 url 가져오기 - List l_infoUrl = new ArrayList(); - - List l_target1 = new ArrayList(); - List l_target2 = new ArrayList(); - List l_target3 = new ArrayList(); - List l_target4 = new ArrayList(); - List l_target5 = new ArrayList(); - List l_target6 = new ArrayList(); - List l_target7 = new ArrayList(); - List l_target8 = new ArrayList(); - List l_target9 = new ArrayList(); - List l_target10 = new ArrayList(); - - { - String s_url = p_url+"?"; - Document doc = null; //Document에는 페이지의 전체 소스가 저장된다 - - - - - if (!"".equals(p_param1)) s_url = s_url + p_param1 + "&"; - if (!"".equals(p_param2)) s_url = s_url + p_param2 + "&"; - if (!"".equals(p_param3)) s_url = s_url + p_param3 + "&"; - if (!"".equals(p_param4)) s_url = s_url + p_param4 + "&"; - if (!"".equals(p_param5)) s_url = s_url + p_param5 + "&"; - - - - for (int i=i_start;i<=i_end;i++) { - String s_in_url = ""; - - if (!"".equals(p_param0)) s_in_url = s_url + p_param0 + "=" + Integer.toString(i); - - //2.페이지 호출 - doc = Jsoup.connect(s_in_url).get(); - - //3.상세 url 추출 - Elements element = doc.select(p_detailPage); - - for (int j=0;j extractData( - Document p_doc - , String p_target1 - , String p_target1attr - , List l_target1 - ) throws Exception{ - - //Document doc = null; //Document에는 페이지의 전체 소스가 저장된다 - //doc = Jsoup.connect(p_call_url).get(); - - //System.out.println(p_call_url); - - - //attr 값이 있으면 attr로 추출하고 아니면 text 값을 추출한다. - if (!"".equals(p_target1attr)) l_target1.add(p_doc.select(p_target1).get(0).attr(p_target1attr)); - else l_target1.add(p_doc.select(p_target1).get(0).text()); - - - - return l_target1; - - - } - - private void makeExcelData( - int i_cell_size - , Row p_row - , CellStyle p_style - , String p_val - ) throws Exception{ - Cell cell = p_row.createCell(i_cell_size++); - cell.setCellStyle(p_style); - cell.setCellValue(p_val); //번호 - } -} diff --git a/src/main/java/itn/let/mjo/test/web/TestKakaoController.java b/src/main/java/itn/let/mjo/test/web/TestKakaoController.java deleted file mode 100644 index 074404d..0000000 --- a/src/main/java/itn/let/mjo/test/web/TestKakaoController.java +++ /dev/null @@ -1,1107 +0,0 @@ -package itn.let.mjo.test.web; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.net.URLEncoder; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import javax.annotation.Resource; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.xssf.streaming.SXSSFWorkbook; -import org.apache.poi.xssf.usermodel.XSSFDataFormat; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -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.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; -import org.springframework.web.servlet.ModelAndView; -import org.springframework.web.servlet.mvc.support.RedirectAttributes; - -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.ComDefaultCodeVO; -import itn.com.cmm.EgovMessageSource; -import itn.com.cmm.LoginVO; -import itn.com.cmm.service.EgovCmmUseService; -import itn.com.cmm.service.EgovFileMngService; -import itn.com.cmm.service.EgovFileMngUtil; -import itn.com.cmm.web.EgovFileDownloadController; -import itn.com.utl.fcc.service.EgovStringUtil; -import itn.let.kakao.kakaoComm.KakaoReturnVO; -import itn.let.kakao.kakaoComm.KakaoSendUtil; -import itn.let.kakao.kakaoComm.KakaoVO; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiImageUpload; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfileCategory; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; -import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplateCategory; -import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; -import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; -import itn.let.mjo.msgdata.service.MjonMsgDataService; -import itn.let.mjo.msgdata.service.MjonMsgReturnVO; -import itn.let.uss.umt.service.EgovMberManageService; -import itn.let.utl.user.service.CheckLoginUtil; - -@Controller -public class TestKakaoController { - - private static final Logger LOGGER = LoggerFactory.getLogger(EgovFileDownloadController.class); - - //로그인 처리 - @Resource(name = "checkLoginUtil") - private CheckLoginUtil checkLoginUtil; - - /** mberManageService */ - @Resource(name = "mberManageService") - private EgovMberManageService mberManageService; - - @Resource(name = "EgovCmmUseService") - private EgovCmmUseService cmmUseService; - - @Resource(name = "kakaoApiService") - private KakaoApiService kakaoApiService; - - @Resource(name = "MjonMsgDataService") - private MjonMsgDataService mjonMsgDataService; - - @Autowired - KakaoApiProfile kakaoApiProfile; - - @Autowired - KakaoApiProfileCategory kakaoApiProfileCategory; - - @Autowired - KakaoApiTemplateCategory kakaoApiTemplateCategory; - - @Autowired - KakaoApiTemplate kakaoApiTemplate; - - @Autowired - KakaoApiImageUpload kakaoApiImageUpload; - - @Autowired - KakaoApiJsonSave kakaoApiJsonSave; - - @Autowired - KakaoSendUtil kakaoSendUtil; - - /** EgovMessageSource */ - @Resource(name="egovMessageSource") - EgovMessageSource egovMessageSource; - - @Resource(name="EgovFileMngUtil") - private EgovFileMngUtil fileUtil; - - @Resource(name="EgovFileMngService") - private EgovFileMngService fileMngService; - - - @Resource(name="kakaoAlimTalkService") - private KakaoAlimTalkService kakaoAlimTalkService; - - @Resource(name = "egovMjonMsgGroupIdGnrService") - private EgovIdGnrService idgenMjonMsgGroupId; - - /** 카카오 카테고리 시작----------------------------------------------------------------------*/ - - // 카카오 카테고리 등록 페이지 - @RequestMapping(value= {"/web/mjon/test/selectSendCategoryView.do"}) - public String selectSendCategoryView(ModelMap model) throws Exception { - - // BIZ 공통코드 조회 - ComDefaultCodeVO vo = new ComDefaultCodeVO(); - vo.setCodeId("BIZ01"); - List bizList= cmmUseService.selectCmmCodeDetail(vo); - model.addAttribute("bizList", bizList); - - KakaoVO kakaoVO = new KakaoVO(); - kakaoVO.setCategoryDepth("1"); - kakaoVO.setCategoryType("P"); - List profileCatagoryfirstList = kakaoApiService.selectKakaoCategory(kakaoVO); - model.addAttribute("profileCatagoryfirstList", profileCatagoryfirstList); - - kakaoVO = new KakaoVO(); - kakaoVO.setCategoryDepth("1"); - kakaoVO.setCategoryType("T"); - List templateCatagoryfirstList = kakaoApiService.selectKakaoCategory(kakaoVO); - model.addAttribute("templateCatagoryfirstList", templateCatagoryfirstList); - - return "/uss/ion/test/TestKakaoCategory"; - } - - // 카카오 카테고리 등록 - @RequestMapping(value= {"/web/mjon/test/kakaoApiCategoryAjax.do"}) - public ModelAndView kakaoApiCategoryAjax( - KakaoVO kakaoVO - , ModelAndView modelAndView - ) throws Exception { - //json 알림 - modelAndView.setViewName("jsonView"); - try { - - KakaoVO kakaoInfo = new KakaoVO(); - - String tempUrl = kakaoVO.getBizUrl(); - - if(!tempUrl.equals("") && tempUrl != null) { - - if(tempUrl.contains("profile/category/all")) { - //발신프로필 카테고리 전체 내역 조회하기 - kakaoApiProfileCategory.kakaoApiProfileCategoryAll(kakaoVO); - }else if(tempUrl.contains("profile/category")) { - //발신프로필 카테고리 코드 정보 조회하기 - kakaoApiProfileCategory.kakaoApiProfileCategoryCode(kakaoVO); - }else if(tempUrl.contains("template/category/all")) { - kakaoApiTemplateCategory.kakaoApiProfileCategoryAll(kakaoVO); - } - - }else{//요청 정보가 없으면 오류 반환 - - modelAndView.addObject("message", "요청 URL이 없습니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - - } - - modelAndView.addObject("kakaoInfo", kakaoInfo); - modelAndView.addObject("result", "success"); - - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - // 발신프로필 카테고리 선택 조회 - @RequestMapping(value= {"/web/mjon/test/selectKakaoProfileCategoryAjax.do"}) - public ModelAndView selectKakaoProfileCategoryAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - kakaoVO.setCategoryType("P"); - List selectCatagoryList = kakaoApiService.selectKakaoCategory(kakaoVO); - modelAndView.addObject("selectCatagoryList", selectCatagoryList); - - return modelAndView; - } - - // 카카오 템플릿 카테고리 선책 조회 - @RequestMapping(value= {"/web/mjon/test/selectKakaoTemplateCategoryAjax.do"}) - public ModelAndView selectKakaoTemplateCategoryAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - kakaoVO.setCategoryType("T"); - List selectCatagoryList = kakaoApiService.selectKakaoCategory(kakaoVO); - modelAndView.addObject("selectCatagoryList", selectCatagoryList); - - return modelAndView; - } - /** 카카오 카테고리 끝----------------------------------------------------------------------- */ - - /** 카카오 프로필 시작----------------------------------------------------------------------*/ - // 카카오 발신 프로필 등록 페이지 - @RequestMapping(value= {"/web/mjon/test/selectSendTestView.do"}) - public String selectSendTestView(ModelMap model) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - - KakaoVO kakaoVO = new KakaoVO(); - kakaoVO.setUserId(userId); - kakaoVO.setCategoryDepth("1"); - kakaoVO.setCategoryType("P"); - List firstCatagoryList = kakaoApiService.selectKakaoCategory(kakaoVO); - model.addAttribute("firstCatagoryList", firstCatagoryList); - - //사용자 등록 발신프로필 정보 조회해오기 - List resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("resultProfileList", resultProfileList); - - return "/uss/ion/test/TestSandKakao"; - } - - // 카카오 발신 프로필 인증토큰 요청 - @RequestMapping(value= {"/web/mjon/test/kakaoApiProfileTokenSendAjax.do"}) - public ModelAndView kakaoApiProfileTokenSendAjax( - KakaoVO kakaoVO - , ModelAndView modelAndView - ) throws Exception { - //json 알림 - modelAndView.setViewName("jsonView"); - try { - - KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileToken(kakaoVO); //발신프로필 인증 토큰 요처하기 - - modelAndView.addObject("kakaoInfo", kakaoInfo); - modelAndView.addObject("result", "success"); - - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - // 카카오 발신 프로필 카테고리 등록 - @RequestMapping(value= {"/web/mjon/test/kakaoApiProfileCreateAjax.do"}) - public ModelAndView kakaoApiProfileCreateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - kakaoVO.setUserId(userId); - kakaoVO.setFrstRegisterId(userId); - kakaoVO.setLastUpdusrId(userId); - KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileCreate(kakaoVO); - - modelAndView.addObject("kakaoInfo", kakaoInfo); - modelAndView.addObject("result", "success"); - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - /** 카카오 프로필 끝----------------------------------------------------------------------- */ - - /** 카카오 템플릿 시작----------------------------------------------------------------------- */ - // 카카오 템플릿 등록 페이지 - @RequestMapping(value= {"/web/mjon/test/selectTemplateView.do"}) - public String selectTemplateView(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - - // 사용자 아이디를 이용한 발신프로필 조회 - kakaoVO.setUserId(userId); - List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("kakaoProfileList", selectKakaoProfileList); - - kakaoVO = new KakaoVO(); - kakaoVO.setCategoryDepth("1"); - kakaoVO.setCategoryType("T"); - List templateCatagoryfirstList = kakaoApiService.selectKakaoCategory(kakaoVO); - model.addAttribute("templateCatagoryfirstList", templateCatagoryfirstList); - - - - return "/uss/ion/test/TestTemplaKakao"; - } - - // 카카오 템플릿 등록 - @RequestMapping(value= {"/web/mjon/test/insertKakaoApiTemplateAjax.do"}) - public ModelAndView insertKakaoApiTemplateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - KakaoReturnVO kakaoTemplateInfo = kakaoApiTemplate.insertKakaoApiTemplate(kakaoVO); - modelAndView.addObject("kakaoTemplateInfo", kakaoTemplateInfo); - modelAndView.addObject("result", "success"); - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - // 카카오 템플릿 목록 조회 - @RequestMapping(value= {"/web/mjon/test/selectKakaoApiTemplateAjax.do"}) - public ModelAndView selectKakaoApiTemplateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - KakaoReturnVO kakaoTemplateList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO); - - System.out.println("++++++++++++++"+kakaoTemplateList.getBizReturnCode()+"-----------------------"); - - modelAndView.addObject("kakaoTemplateList", kakaoTemplateList); - modelAndView.addObject("result", "success"); - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - // 카카오 템플릿 목록 조회 load용 - @RequestMapping(value= {"/web/mjon/test/selectKakaoApiTemplateLoadAjax.do"}) - public String selectKakaoApiTemplateLoadAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO, ModelMap model, HttpServletResponse response - ) throws Exception { - - kakaoVO.setCount("10"); //페이지 별 템플릿 개수 디폴트:30 - KakaoReturnVO kakaoTemplateList = kakaoApiTemplate.selectKakaoApiTemplate(kakaoVO); - - System.out.println("++++++++++++++"+kakaoTemplateList.getBizReturnCode()+"-----------------------"); - - model.addAttribute("kakaoTemplateList", kakaoTemplateList); //카카오 API 조회 정보 - model.addAttribute("templatList", kakaoTemplateList.getTemplatList()); //카카오 API 템플릿 조회 정보 - - //템플릿 페이징 처리 - 결과가 있는 경우(코드 200) - if("200".equals(kakaoTemplateList.getBizReturnCode())) { - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(Integer.parseInt(kakaoTemplateList.getCurrentPage())); //현재페이지 - paginationInfo.setRecordCountPerPage(Integer.parseInt(kakaoVO.getCount())); //한 페이지당 게시되는 템플릿 개수 - paginationInfo.setPageSize(10); //페이지 건수 - paginationInfo.setTotalRecordCount(Integer.parseInt(kakaoTemplateList.getTotalCount()));//전체 템플릿 수 - - model.addAttribute("paginationInfo", paginationInfo); - } - return "/uss/ion/test/TestTemplaKakaoLoadListAjax"; - } - - // 카카오 템플릿 상세 조회 - @RequestMapping(value= {"/web/mjon/test/selectKakaoApiTemplateInfoAjax.do"}) - public ModelAndView selectKakaoApiTemplateInfoAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); - modelAndView.addObject("kakaoTemplateInfo", kakaoTemplateInfo); - modelAndView.addObject("result", "success"); - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - // 카카오 템플릿 검수 요청 - @RequestMapping(value= {"/web/mjon/test/requestKakaoApiTemplateAjax.do"}) - public ModelAndView requestKakaoApiTemplateAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - String[] arrTemplateCode = kakaoVO.getArrTemplateCode(); - int resultCnt = 0; - for(String tmpCode : arrTemplateCode) { - - kakaoVO.setTemplateCode(tmpCode); - System.out.println(kakaoVO.getTemplateCode()); - KakaoReturnVO requestKakaoTemplate = kakaoApiTemplate.requestKakaoApiTemplate(kakaoVO); - - String resultCode = requestKakaoTemplate.getBizReturnCode(); - - if(resultCode.equals("200")) { - resultCnt = resultCnt + 1; - } - - } - - //KakaoReturnVO requestKakaoTemplate = kakaoApiTemplate.requestKakaoApiTemplate(kakaoVO); - //modelAndView.addObject("requestKakaoTemplate", requestKakaoTemplate); - - if(resultCnt > 0) { - - modelAndView.addObject("result", "success"); - modelAndView.addObject("message", "템플릿 심사요청이 완료되었습니다."); - - } - - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - // 카카오 템플릿 상세정보 요청 - @RequestMapping(value= {"/web/mjon/test/requestKakaoApiTemplateDetailAjax.do"}) - public ModelAndView requestKakaoApiTemplateDetailAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "notLogin"); - return modelAndView; - }else { - - KakaoReturnVO requestKakaoTemplateDetail = kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); - - modelAndView.addObject("requestKakaoTemplateDetail", requestKakaoTemplateDetail); - modelAndView.addObject("result", "success"); - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - return modelAndView; - } - - /** 카카오 템플릿 끝----------------------------------------------------------------------- */ - - - /** 카카오 친구톡 이미지 등록 시작----------------------------------------------------------------------- */ - // 카카오 발신 프로필 조회 페이지 - @RequestMapping(value= {"/web/mjon/test/selectKakaoImageView.do"}) - public String selectKakaoImageView(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - - // 사용자 아이디를 이용한 발신프로필 조회 - kakaoVO.setUserId(userId); - List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("kakaoProfileList", selectKakaoProfileList); - - - return "/uss/ion/test/TestKakaoImage"; - } - - // 카카오 친구톡 이미지 등록요청 - @RequestMapping(value= {"/web/mjon/test/sendKakaoImageUploadAjax.do"}) - public ModelAndView sendKakaoImageUploadAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , final MultipartHttpServletRequest multiRequest - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("result", "loginFail"); - return modelAndView; - }else { - - final Map files = multiRequest.getFileMap(); - if (!files.isEmpty()){ - - Map resultMap = kakaoApiImageUpload.kakaoApiImageUpload(kakaoVO, files, 0); - - //테스트 용 - System.out.println(resultMap.get("code")); - System.out.println(resultMap.get("msg")); - System.out.println(resultMap.get("imgUrl")); - modelAndView.addObject("code", resultMap.get("code")); - modelAndView.addObject("msg", resultMap.get("msg")); - modelAndView.addObject("imgUrl", resultMap.get("imgUrl")); - } - - modelAndView.addObject("result", "success"); - } - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - /** 카카오 친구톡 이미지 등록 끝----------------------------------------------------------------------- */ - - /** 카카오 알림톡 발송 시작----------------------------------------------------------------------- */ - // 카카오 템플릿 등록 페이지 - @RequestMapping(value= {"/web/mjon/test/kakaoApiNotityTalkView.do"}) - public String kakaoApiNotityTalkView(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - - // 사용자 아이디를 이용한 발신프로필 조회 - kakaoVO.setUserId(userId); - List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("kakaoProfileList", selectKakaoProfileList); - - return "/uss/ion/test/TestKakaoNotityTalk"; - } - - // 카카오 알림톡 전송 - @RequestMapping(value= {"/web/mjon/test/kakaoNotityTalkSendAjax.do"}) - public ModelAndView kakaoNotityTalkSendAjax( - @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , final MultipartHttpServletRequest multiRequest - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - - if(userId == "") { - modelAndView.addObject("message", "로그인 후 이용이 가능합니다."); - modelAndView.addObject("result", "loginFail"); - return modelAndView; - } - -/**카카오톡 전송 기본 설정 --------------------------------------------*/ - kakaoVO.setUserId(userId); - kakaoVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId()); // 문자 그룹ID 설정 - - -/**카카오톡 전송 메세지 설정 ---------- -------------------------------*/ - - KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoSendMsg(kakaoVO); - kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList()); - -/**전송금액 설정 --------------------------------------------------*/ - KakaoVO priceSet = kakaoSendUtil.kakaoSendPrice(kakaoVO); - BigDecimal befCash = new BigDecimal(priceSet.getBefCash()).setScale(2, RoundingMode.HALF_EVEN); - BigDecimal totMsgPrice = new BigDecimal(priceSet.getTotPrice()).setScale(2, RoundingMode.HALF_EVEN); - - kakaoVO.setEachPrice(priceSet.getEachPrice()); - kakaoVO.setBefCash(befCash.toString()); - kakaoVO.setTotPrice(totMsgPrice.toString()); - - //현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송 - //BigDecimal 비교 연산 - // befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송 - if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice, - -/**json 파일 설정 -----------------------------------------------*/ - // json파일 생성 여부 확인 후 json파일 생성 - /*if(kakaoVO.getBizJsonYn().equals("Y")) { - String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO); - kakaoVO.setBizJsonName(jsonFileName); //json 파일명 - }*/ - -/**카카오톡 발송 ----------------------------------------------*/ - MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoAtSandAjax(kakaoVO); - - - - - - // 환불 (대체문자 있는 고객중 성공한 고객만 뽑아서 차액 환불) - // 환불 (대체문자 실패시 대체문자 가격 환불) - - - }else { - modelAndView.addObject("message", "알림톡 발송에 필요한 보유 잔액이 부족 합니다."); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - modelAndView.addObject("result", "success"); - modelAndView.addObject("message", "알림톡 전송이 완료되었습니다."); - - }catch(Exception ex){ - ex.printStackTrace(); - modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); - modelAndView.addObject("result", "fail"); - return modelAndView; - } - - return modelAndView; - } - - /** 카카오 알림톡 발송 끝----------------------------------------------------------------------- */ - - /** 카카오 알림톡 발송 시 샘플 엑셀 다운로드, 엑셀 업로드 테스트 메뉴 화면----------------------------------------------------------------------- */ - // 카카오 템플릿 등록 페이지 - @RequestMapping(value= {"/web/mjon/test/kakaoApiNotityTalkViewWithExcel.do"}) - public String kakaoApiNotityTalkViewWithExcel(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if(userId == "") { - return "redirect:/web/user/login/login.do"; - } - - // 사용자 아이디를 이용한 발신프로필 조회 - kakaoVO.setUserId(userId); - List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); - model.addAttribute("kakaoProfileList", selectKakaoProfileList); - - return "/uss/ion/test/TestKakaoNotityTalkWithExcel"; - } - /** 카카오 알림톡 발송 시 샘플 엑셀 다운로드, 엑셀 업로드 테스트 메뉴 화면 끝----------------------------------------------------------------------- */ - - /** 카카오 알림톡 발송 시 샘플 엑셀 다운로드 테스트 메뉴----------------------------------------------------------------------- */ - @RequestMapping(value= {"/web/mjon/test/kakaoApiNotityTalkSampleExcelDownload.do"}) - public void kakaoApiNotityTalkSampleExcelDownload(ModelMap model - , @RequestParam(value = "excelVarNmList", required = false) String[] varNmList - , HttpServletResponse response - ) throws Exception { - - Map aaa = new HashMap(); - - //받아온 변수 리스트 중복 제거하기 - List varListDistinct = Arrays.asList(varNmList).stream().distinct().collect(Collectors.toList()); - - SXSSFWorkbook wb = new SXSSFWorkbook(100); - CellStyle style = wb.createCellStyle(); - //텍스트 서식 처리 - 수신번호 010 입력 시 0 제거를 방지 - XSSFDataFormat format = (XSSFDataFormat)wb.createDataFormat(); - style.setDataFormat(format.getFormat("@")); //@ 텍스트 서식 - - Cell cell = null; - Row row = null; - - String fileName ="전송하기 업로드 양식"; - - String sheetTitle = "전송하기 업로드 양식"; - try{ - - // row, cell 개수 순서대로 증가용 필드 - int rowNumber = 0; - int celNumber = 0; - // 엑셀 시트명 설정 - Sheet sheet = wb.createSheet(sheetTitle); - sheet.setDefaultColumnStyle(0, style); //텍스트 서식 처리 - 수신번호 010 입력 시 0 제거를 방지 - sheet.setColumnWidth(0, 7000); - for(int i = 1 ; i <= varListDistinct.size(); i++){ - sheet.setColumnWidth(i, 4000); - sheet.setDefaultColumnStyle(i, style); - } - - row = sheet.createRow(rowNumber++); - - cell = row.createCell(celNumber++); - cell.setCellValue("메시지 수신 휴대폰 번호"); - cell.setCellStyle(style); - - for(String field : varListDistinct) { - cell = row.createCell(celNumber++); - cell.setCellValue("#{"+field+"}"); - cell.setCellStyle(style); - } - - response.setHeader("Set-Cookie", "fileDownload=true; path=/"); - SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyy_MM_dd", Locale.KOREA ); - Date currentTime = new Date (); - String mTime = mSimpleDateFormat.format ( currentTime ); - fileName = fileName+"("+mTime+")"; - - response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx")); - wb.write(response.getOutputStream()); - - }catch(Exception e) { - e.printStackTrace(); - response.setHeader("Set-Cookie", "fileDownload=false; path=/"); - response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - response.setHeader("Content-Type","text/html; charset=utf-8"); - OutputStream out = null; - try { - out = response.getOutputStream(); - byte[] data = new String("fail..").getBytes(); - out.write(data, 0, data.length); - } catch(Exception ignore) { - ignore.printStackTrace(); - } finally { - if(out != null) try { out.close(); } catch(Exception ignore) {} - } - }finally { - // 디스크 적었던 임시파일을 제거합니다. - wb.dispose(); - try { wb.close(); } catch(Exception ignore) {} - } - } - - @RequestMapping(value= {"/web/mjon/test/kakaoApiAlimtalkMsgSendAjax.do"}) - @ResponseBody - public ModelAndView kakaoApiAlimtalkMsgSendAjax( - KakaoVO kakaoVO -// String VarNmList -// , @RequestParam(value="VarValList[]") ArrayList VarValList - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - -// for(String varNm : kakaoVO.getVarNmList()) -// { -// System.out.println("varNm : "+ varNm ); -// } -// -// // value 값 -// List varValList = kakaoVO.varValPaser(kakaoVO.getVarValList()); -// -// try { -// -// -// String[] name = kakaoVO.getVarNmList(); -// for(int j=0; j < name.length; j++) { -// System.out.print(name[j]+" "); -// } -// System.out.println(); -// for(int i=0; i < varValList.size(); i++) { -// for(int j=0; j < varValList.get(i).length; j++) { -// System.out.print(varValList.get(i)[j]+" "); -// } -// System.out.println(); -// } -// -// String[] call = kakaoVO.getCallToList(); -// for(int i=0; i < call.length; i++) { -// System.out.println(call[i]); -// } -// -// }catch(Exception ex){ -// ex.printStackTrace(); -// modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update")); -// modelAndView.addObject("result", "fail"); -// return modelAndView; -// } - return modelAndView; - } - /** 카카오 알림톡 발송 시 샘플 엑셀 다운로드, 엑셀 업로드 테스트 메뉴 끝----------------------------------------------------------------------- */ - /* - @RequestMapping(value= {"/web/mjon/test/selectCallNumDownFileView.do"}) - public String selectCallNumDownFile(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO - ) throws Exception { - - kakaoVO.setPhmType("01"); - List resultList = kakaoApiService.selectCallNumList(kakaoVO); - model.addAttribute("totCut01", resultList.get(0).getTotCnt()); - - kakaoVO.setPhmType("03"); - resultList = kakaoApiService.selectCallNumList(kakaoVO); - model.addAttribute("totCut03", resultList.get(0).getTotCnt()); - - - return "/uss/ion/test/TestCallNumDownFile"; - } - - @RequestMapping(value= {"/web/mjon/test/selectCallNumDownFile.do"}) - public void selectCallNumDownFile(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , HttpServletResponse response - , HttpServletRequest request - ) throws Exception { - - List resultList = kakaoApiService.selectCallNumList(kakaoVO); - - String zipFile = "test.zip"; - String downloadFileName = "result"; - - for(int i=0; i < resultList.size(); i++) { - System.out.println("첨부파일 : @@"+resultList.get(i).getAtchFileId()+"@@"); - if(resultList.get(i).getAtchFileId() != null && !resultList.get(i).getAtchFileId().equals("")) { - - KakaoVO fileVO = new KakaoVO(); - - fileVO.setAtchFileId(resultList.get(i).getAtchFileId()); - List fileInfo = kakaoApiService.selectCallNumInfo(kakaoVO); - for(int j=0; j < fileInfo.size(); j++) { - - } - } - } - } - */ - @RequestMapping(value= {"/uss/ion/msg/selectDownFileView.do"}) - public String selectDownFileView(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , RedirectAttributes redirectAttributes - - ) throws Exception { - - //관리자 로그인 여부 체크 - String isLogin = checkLoginUtil.isAdminLogin4PageMove(redirectAttributes); - if (!"Y".equals(isLogin)) return isLogin; - - List resultList = kakaoApiService.selectFileList(kakaoVO); - model.addAttribute("totCut", resultList.get(0).getTotCnt()); - - - - return "/uss/ion/test/TestDownFile"; - } - - @RequestMapping(value= {"/uss/ion/msg/selectDownFile.do"}) - public void selectDownFile(ModelMap model - , @ModelAttribute("kakaoVO") KakaoVO kakaoVO - , HttpServletResponse response - , HttpServletRequest request - ) throws Exception { - List resultList = kakaoApiService.selectFileList(kakaoVO); - - String zipFile = "test.zip"; - String downloadFileName = "result"; - - - FileOutputStream fout = new FileOutputStream(zipFile); - ZipOutputStream zout = new ZipOutputStream(fout); - - System.out.println("사용자 수량 !! "+resultList.size()); - - for(int i=0; i < resultList.size(); i++) { - - System.out.println("사업자등록증 : @@"+resultList.get(i).getAtchFileId()+"@@"); - System.out.println("재직증명서 : @@"+ resultList.get(i).getWorkAtchFileId()+"@@"); - if(resultList.get(i).getAtchFileId() != null && !resultList.get(i).getAtchFileId().equals("")) { - KakaoVO fileInfo = new KakaoVO(); - fileInfo.setAtchFileId(resultList.get(i).getAtchFileId()); - KakaoVO fvo = kakaoApiService.selectFileInfo(fileInfo); - - String fileNm = fvo.getStreFileNm(); - String filePath = fvo.getFileStreCours(); - - System.out.println("파일위치 : @@"+filePath); - System.out.println("파일명 : @@"+fileNm); - - - File uFile = new File(filePath, fileNm); - long fSize = uFile.length(); - if (fSize > 0) { - ZipEntry zipEntry = new ZipEntry("/"+resultList.get(i).getUserId()+"/사업자등록증."+fvo.getFileExtsn()); - zout.putNextEntry(zipEntry); - - - FileInputStream fin = new FileInputStream(uFile); - byte[] buffer = new byte[1024]; - int length; - - // input file을 1024바이트로 읽음, zip stream에 읽은 바이트를 씀 - while((length = fin.read(buffer)) > 0){ - zout.write(buffer, 0, length); - } - - zout.closeEntry(); - fin.close(); - } - } - - if(resultList.get(i).getWorkAtchFileId() != null && !resultList.get(i).getWorkAtchFileId().equals("")) { - KakaoVO fileInfo = new KakaoVO(); - fileInfo.setAtchFileId(resultList.get(i).getWorkAtchFileId()); - KakaoVO fvo = kakaoApiService.selectFileInfo(fileInfo); - - String fileNm = fvo.getStreFileNm(); - String filePath = fvo.getFileStreCours(); - - System.out.println("파일위치 : @@"+filePath); - System.out.println("파일명 : @@"+fileNm); - - File uFile = new File(filePath, fileNm); - long fSize = uFile.length(); - if (fSize > 0) { - ZipEntry zipEntry = new ZipEntry("/"+resultList.get(i).getUserId()+"/재직증명서."+fvo.getFileExtsn()); - zout.putNextEntry(zipEntry); - - - FileInputStream fin = new FileInputStream(uFile); - byte[] buffer = new byte[1024]; - int length; - - // input file을 1024바이트로 읽음, zip stream에 읽은 바이트를 씀 - while((length = fin.read(buffer)) > 0){ - zout.write(buffer, 0, length); - } - - zout.closeEntry(); - fin.close(); - } - } - } - - zout.close(); - - response.setContentType("application/zip"); - response.addHeader("Content-Disposition", "attachment; filename=" + downloadFileName + ".zip"); - - FileInputStream fis=new FileInputStream(zipFile); - BufferedInputStream bis=new BufferedInputStream(fis); - ServletOutputStream so=response.getOutputStream(); - BufferedOutputStream bos=new BufferedOutputStream(so); - - byte[] data=new byte[2048]; - int input=0; - - while((input=bis.read(data))!=-1){ - bos.write(data,0,input); - bos.flush(); - } - - if(bos!=null) bos.close(); - if(bis!=null) bis.close(); - if(so!=null) so.close(); - if(fis!=null) fis.close(); - - - } - - private String getBrowser(HttpServletRequest request) { - String header = request.getHeader("User-Agent"); - if (header.indexOf("MSIE") > -1) { - return "MSIE"; - } else if (header.indexOf("Trident") > -1) { // IE11 문자열 깨짐 방지 - return "Trident"; - } else if (header.indexOf("Chrome") > -1) { - return "Chrome"; - } else if (header.indexOf("Opera") > -1) { - return "Opera"; - } - return "Firefox"; - } - - private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws Exception { - String browser = getBrowser(request); - - String dispositionPrefix = "attachment; filename="; - String encodedFilename = null; - - if (browser.equals("MSIE")) { - encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); - } else if (browser.equals("Trident")) { // IE11 문자열 깨짐 방지 - encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20"); - } else if (browser.equals("Firefox")) { - encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; - } else if (browser.equals("Opera")) { - encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\""; - } else if (browser.equals("Chrome")) { - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < filename.length(); i++) { - char c = filename.charAt(i); - if (c > '~') { - sb.append(URLEncoder.encode("" + c, "UTF-8")); - } else { - sb.append(c); - } - } - encodedFilename = sb.toString(); - } else { - //throw new RuntimeException("Not supported browser"); - throw new IOException("Not supported browser"); - } - - response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename); - - if ("Opera".equals(browser)) { - response.setContentType("application/octet-stream;charset=UTF-8"); - } - } -} diff --git a/src/main/java/itn/let/module/base/PriceAndPoint.java b/src/main/java/itn/let/module/base/PriceAndPoint.java index d4f190f..8d24a33 100644 --- a/src/main/java/itn/let/module/base/PriceAndPoint.java +++ b/src/main/java/itn/let/module/base/PriceAndPoint.java @@ -9,9 +9,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import itn.let.mjo.event.service.MjonEventService; -import itn.let.mjo.event.service.MjonEventVO; -import itn.let.mjo.event.service.impl.MjonEventDAO; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; import itn.let.mjo.pay.service.MjonPayVO; @@ -41,9 +38,6 @@ public class PriceAndPoint { @Autowired private MjonPayDAO mjonPayDAO; - @Autowired - private MjonEventService mjonEventService; - @Resource(name = "egovMjonCashIdGnrService") private EgovIdGnrService idgenMjonCashId; diff --git a/src/main/java/itn/let/org/service/LocVO.java b/src/main/java/itn/let/org/service/LocVO.java deleted file mode 100644 index 1979988..0000000 --- a/src/main/java/itn/let/org/service/LocVO.java +++ /dev/null @@ -1,283 +0,0 @@ -package itn.let.org.service; - -import itn.let.sym.ccm.cde.service.CmmnDetailCodeVO; - -public class LocVO extends CmmnDetailCodeVO{ -private static final long serialVersionUID = 1L; - - private String locNm = ""; - - private String locNo = ""; - - private String upperLocNo = ""; - - private String topLocNo = ""; - - private int locOrdr = 0; - - private String locType = ""; - - private String joinTable = ""; - - private String astHdCd = ""; - - private int locDepth = 0; - - private int depth = 0; - - private String useYn = ""; - - private String frstRegistPnttm = ""; - - private String menuNm = ""; - - private int upperMenuId = 0; - - private String nodeIds = ""; - - private String searchNoDepth = ""; - - private String pageType = ""; - - private String astId = ""; - - private String astReId = ""; - - private String ipId = ""; - - private String deptFlag = ""; - - private String path = ""; - - private String openerInputName = ""; - - private String addVar = ""; - - private String sortOver = ""; - - private String locCn ; - - private String partIdx ; - - public String getLocNm() { - return locNm; - } - - public int getDepth() { - return depth; - } - - public void setDepth(int depth) { - this.depth = depth; - } - - public void setLocNm(String locNm) { - this.locNm = locNm; - } - - public String getLocNo() { - return locNo; - } - - public void setLocNo(String locNo) { - this.locNo = locNo; - } - - - - public String getUpperLocNo() { - return upperLocNo; - } - - public void setUpperLocNo(String upperLocNo) { - this.upperLocNo = upperLocNo; - } - - public int getLocOrdr() { - return locOrdr; - } - - public void setLocOrdr(int locOrdr) { - this.locOrdr = locOrdr; - } - - public String getLocType() { - return locType; - } - - public void setLocType(String locType) { - this.locType = locType; - } - - public int getLocDepth() { - return locDepth; - } - - public void setLocDepth(int locDepth) { - this.locDepth = locDepth; - } - - public String getUseYn() { - return useYn; - } - - public void setUseYn(String useYn) { - this.useYn = useYn; - } - - public String getFrstRegistPnttm() { - return frstRegistPnttm; - } - - public void setFrstRegistPnttm(String frstRegistPnttm) { - this.frstRegistPnttm = frstRegistPnttm; - } - - public static long getSerialversionuid() { - return serialVersionUID; - } - - public String getMenuNm() { - return menuNm; - } - - public void setMenuNm(String menuNm) { - this.menuNm = menuNm; - } - - public int getUpperMenuId() { - return upperMenuId; - } - - public void setUpperMenuId(int upperMenuId) { - this.upperMenuId = upperMenuId; - } - - public String getNodeIds() { - return nodeIds; - } - - public void setNodeIds(String nodeIds) { - this.nodeIds = nodeIds; - } - - public String getSearchNoDepth() { - return searchNoDepth; - } - - public void setSearchNoDepth(String searchNoDepth) { - this.searchNoDepth = searchNoDepth; - } - - public String getPageType() { - return pageType; - } - - public void setPageType(String pageType) { - this.pageType = pageType; - } - - public String getAstId() { - return astId; - } - - public void setAstId(String astId) { - this.astId = astId; - } - - public String getDeptFlag() { - return deptFlag; - } - - public void setDeptFlag(String deptFlag) { - this.deptFlag = deptFlag; - } - - public String getIpId() { - return ipId; - } - - public void setIpId(String ipId) { - this.ipId = ipId; - } - - public String getPath() { - return path; - } - - public void setPath(String path) { - this.path = path; - } - - public String getAstHdCd() { - return astHdCd; - } - - public void setAstHdCd(String astHdCd) { - this.astHdCd = astHdCd; - } - - public String getJoinTable() { - return joinTable; - } - - public void setJoinTable(String joinTable) { - this.joinTable = joinTable; - } - - public String getAstReId() { - return astReId; - } - - public void setAstReId(String astReId) { - this.astReId = astReId; - } - - public String getOpenerInputName() { - return openerInputName; - } - - public void setOpenerInputName(String openerInputName) { - this.openerInputName = openerInputName; - } - - public String getAddVar() { - return addVar; - } - - public void setAddVar(String addVar) { - this.addVar = addVar; - } - - public String getTopLocNo() { - return topLocNo; - } - - public void setTopLocNo(String topLocNo) { - this.topLocNo = topLocNo; - } - - public String getSortOver() { - return sortOver; - } - - public void setSortOver(String sortOver) { - this.sortOver = sortOver; - } - - public String getLocCn() { - return locCn; - } - - public void setLocCn(String locCn) { - this.locCn = locCn; - } - - public String getPartIdx() { - return partIdx; - } - - public void setPartIdx(String partIdx) { - this.partIdx = partIdx; - } -} diff --git a/src/main/java/itn/let/org/service/OrgCharVO.java b/src/main/java/itn/let/org/service/OrgCharVO.java deleted file mode 100644 index 62d5337..0000000 --- a/src/main/java/itn/let/org/service/OrgCharVO.java +++ /dev/null @@ -1,168 +0,0 @@ -package itn.let.org.service; - -import itn.let.sym.ccm.cde.service.CmmnDetailCodeVO; - -public class OrgCharVO extends CmmnDetailCodeVO{ - - private static final long serialVersionUID = 1L; - - private String locNm = ""; - - private int locNo = 0; - - private int upperLocNo = 0; - - private int locOrdr = 0; - - private String locType = ""; - - private int locDepth = 0; - - private int depth = 0; - - private String useYn = ""; - - private String frstRegistPnttm = ""; - - private String menuNm = ""; - - private int upperMenuId = 0; - - private String nodeIds = ""; - - private String searchNoDepth = ""; - - private String pageType = ""; - - private String astId = ""; - - private String deptFlag = ""; - - public String getLocNm() { - return locNm; - } - - public void setLocNm(String locNm) { - this.locNm = locNm; - } - - public int getLocNo() { - return locNo; - } - - public void setLocNo(int locNo) { - this.locNo = locNo; - } - - public int getUpperLocNo() { - return upperLocNo; - } - - public void setUpperLocNo(int upperLocNo) { - this.upperLocNo = upperLocNo; - } - - public int getLocOrdr() { - return locOrdr; - } - - public void setLocOrdr(int locOrdr) { - this.locOrdr = locOrdr; - } - - public String getLocType() { - return locType; - } - - public void setLocType(String locType) { - this.locType = locType; - } - - public int getLocDepth() { - return locDepth; - } - - public void setLocDepth(int locDepth) { - this.locDepth = locDepth; - } - - public int getDepth() { - return depth; - } - - public void setDepth(int depth) { - this.depth = depth; - } - - public String getUseYn() { - return useYn; - } - - public void setUseYn(String useYn) { - this.useYn = useYn; - } - - public String getFrstRegistPnttm() { - return frstRegistPnttm; - } - - public void setFrstRegistPnttm(String frstRegistPnttm) { - this.frstRegistPnttm = frstRegistPnttm; - } - - public String getMenuNm() { - return menuNm; - } - - public void setMenuNm(String menuNm) { - this.menuNm = menuNm; - } - - public int getUpperMenuId() { - return upperMenuId; - } - - public void setUpperMenuId(int upperMenuId) { - this.upperMenuId = upperMenuId; - } - - public String getNodeIds() { - return nodeIds; - } - - public void setNodeIds(String nodeIds) { - this.nodeIds = nodeIds; - } - - public String getSearchNoDepth() { - return searchNoDepth; - } - - public void setSearchNoDepth(String searchNoDepth) { - this.searchNoDepth = searchNoDepth; - } - - public String getPageType() { - return pageType; - } - - public void setPageType(String pageType) { - this.pageType = pageType; - } - - public String getAstId() { - return astId; - } - - public void setAstId(String astId) { - this.astId = astId; - } - - public String getDeptFlag() { - return deptFlag; - } - - public void setDeptFlag(String deptFlag) { - this.deptFlag = deptFlag; - } -} diff --git a/src/main/java/itn/let/org/service/OrgChartManageService.java b/src/main/java/itn/let/org/service/OrgChartManageService.java deleted file mode 100644 index 8d5991d..0000000 --- a/src/main/java/itn/let/org/service/OrgChartManageService.java +++ /dev/null @@ -1,52 +0,0 @@ -package itn.let.org.service; - -import java.util.List; - -import itn.let.uss.umt.service.UserManageVO; - -public interface OrgChartManageService { - // 부서 리스트 조회 - public List selectOrgChartListAjax(LocVO locVO) throws Exception; - - // 부서별 Depth 리스트 조회 - public List selectOrgChartDepthListAjax(OrgCharVO orgCharVO) throws Exception; - - // 직원 조회 - public List selectUserListAjax(UserManageVO userManageVO) throws Exception; - - // 직원 상세 조회 - public UserManageVO selectUserInfoAjax(UserManageVO userManageVO) throws Exception; - - // 직원 등록 - public void insertUserInfoAjax(UserManageVO userManageVO) throws Exception; - - // 직원 수정 - public void updateUserInfoAjax(UserManageVO userManageVO) throws Exception; - - // 직원 삭제 - public void deleteUserInfoAjax(String staffId) throws Exception; - - public List selectEquiLevelLocList(String equiLevel) throws Exception; - - public void insertOrgChart(LocVO locVO) throws Exception; - - public void updateOrgChartNm(LocVO locVO) throws Exception; - - public void deleteOrgChart(LocVO locVO) throws Exception; - - public void updateLocDate(LocVO locVO) throws Exception; - - public void resortLoc(LocVO locVO) throws Exception; - - public void updateLocCnSaveAjax(LocVO locVO) throws Exception; - - public LocVO selectLocCnVO(LocVO locVO) throws Exception; - - public List selectLocPath(LocVO locVO) throws Exception; - - public UserManageVO selectUserLocInfoAjax(UserManageVO userManageVO) throws Exception; - - public void deleteUserInfoLocAjax(String locInfoId) throws Exception; - - -} diff --git a/src/main/java/itn/let/org/service/impl/ItsmOrgChartManageDAO.java b/src/main/java/itn/let/org/service/impl/ItsmOrgChartManageDAO.java deleted file mode 100644 index ef39788..0000000 --- a/src/main/java/itn/let/org/service/impl/ItsmOrgChartManageDAO.java +++ /dev/null @@ -1,90 +0,0 @@ -package itn.let.org.service.impl; - -import java.util.List; - -import org.springframework.stereotype.Repository; - -import egovframework.rte.psl.dataaccess.EgovAbstractDAO; -import itn.let.org.service.LocVO; -import itn.let.org.service.OrgCharVO; -import itn.let.uss.umt.service.UserManageVO; - -@Repository("itsmOrgChartManageDAO") -public class ItsmOrgChartManageDAO extends EgovAbstractDAO { - @SuppressWarnings("unchecked") - public List selectOrgChartListAjax(LocVO locVO) throws Exception { - return (List) list("itsmOrgChartManageDAO.selectOrgChartListAjax",locVO); - } - - @SuppressWarnings("unchecked") - public List selectOrgChartDepthListAjax(OrgCharVO orgCharVO) throws Exception { - return (List) list("itsmOrgChartManageDAO.selectOrgChartDepthListAjax",orgCharVO); - } - - @SuppressWarnings("unchecked") - public List selectUserListAjax(UserManageVO userManageVO) throws Exception { - return (List) list("itsmOrgChartManageDAO.selectUserAjax",userManageVO); - } - - public UserManageVO selectUserInfoAjax(UserManageVO userManageVO) throws Exception { return (UserManageVO)select("itsmOrgChartManageDAO.selectUserAjax",userManageVO); - } - - public void insertUserInfoAjax(UserManageVO userManageVO) throws Exception { - insert("itsmOrgChartManageDAO.insertUserInfoAjax",userManageVO); - } - - public void updateUserInfoAjax(UserManageVO userManageVO) throws Exception { - update("itsmOrgChartManageDAO.updateUserInfoAjax",userManageVO); - } - - public void deleteUserInfoAjax(String staffId) throws Exception { - delete("itsmOrgChartManageDAO.deleteUserInfoAjax",staffId); - } - - @SuppressWarnings("unchecked") - public List selectEquiLevelLocList(String equiLevel) throws Exception{ - return (List) list("itsmOrgChartManageDAO.selectEquiLevelLocList",equiLevel); - } - - public void insertOrgChart(LocVO locVO) throws Exception{ - insert("itsmOrgChartManageDAO.insertOrgChart",locVO); - } - - public void updateOrgChartNm(LocVO locVO) throws Exception{ - update("itsmOrgChartManageDAO.updateOrgChartNm",locVO); - } - - public void deleteOrgChart(LocVO locVO) throws Exception{ - delete("itsmOrgChartManageDAO.deleteOrgChart",locVO); - } - - public void updateLocDate(LocVO locVO) throws Exception{ - update("itsmOrgChartManageDAO.updateLocDate",locVO); - } - - public void resortLoc(LocVO locVO) throws Exception{ - update("itsmOrgChartManageDAO.resortLoc",locVO); - } - - public void updateLocCnSaveAjax(LocVO locVO) throws Exception{ - update("itsmOrgChartManageDAO.updateLocCnSaveAjax",locVO); - } - - public LocVO selectLocCnVO(LocVO locVO) throws Exception{ - return (LocVO) select("itsmOrgChartManageDAO.selectLocCnVO",locVO); - } - - @SuppressWarnings("unchecked") - public List selectLocPath(LocVO locVO) throws Exception{ - return (List)list("itsmOrgChartManageDAO.selectLocPath",locVO); - } - - public UserManageVO selectUserLocInfoAjax(UserManageVO userManageVO) throws Exception{ - return (UserManageVO) select("itsmOrgChartManageDAO.selectUserLocInfoAjax",userManageVO); - } - - public void deleteUserInfoLocAjax(String locInfoId) throws Exception{ - delete("itsmOrgChartManageDAO.deleteUserInfoLocAjax",locInfoId); - } - -} diff --git a/src/main/java/itn/let/org/service/impl/OrgChartManageServiceImpl.java b/src/main/java/itn/let/org/service/impl/OrgChartManageServiceImpl.java deleted file mode 100644 index 189571b..0000000 --- a/src/main/java/itn/let/org/service/impl/OrgChartManageServiceImpl.java +++ /dev/null @@ -1,112 +0,0 @@ -package itn.let.org.service.impl; - -import java.util.List; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - -import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; -import itn.let.org.service.LocVO; -import itn.let.org.service.OrgCharVO; -import itn.let.org.service.OrgChartManageService; -import itn.let.uss.umt.service.UserManageVO; - -@Service("orgChartManageService") -public class OrgChartManageServiceImpl extends EgovAbstractServiceImpl implements OrgChartManageService { - @Resource(name="itsmOrgChartManageDAO") - private ItsmOrgChartManageDAO itsmOrgChartManageDAO; - - @Override - public List selectOrgChartListAjax(LocVO locVO) throws Exception { - return itsmOrgChartManageDAO.selectOrgChartListAjax(locVO); - } - - @Override - public List selectOrgChartDepthListAjax(OrgCharVO orgCharVO) throws Exception { - return itsmOrgChartManageDAO.selectOrgChartDepthListAjax(orgCharVO); - } - - @Override - public List selectUserListAjax(UserManageVO userManageVO) throws Exception { - return itsmOrgChartManageDAO.selectUserListAjax(userManageVO); - } - - @Override - public UserManageVO selectUserInfoAjax(UserManageVO userManageVO) throws Exception { - return itsmOrgChartManageDAO.selectUserInfoAjax(userManageVO); - } - - @Override - public void insertUserInfoAjax(UserManageVO userManageVO) throws Exception { - itsmOrgChartManageDAO.insertUserInfoAjax(userManageVO); - } - - @Override - public void updateUserInfoAjax(UserManageVO userManageVO) throws Exception { - itsmOrgChartManageDAO.updateUserInfoAjax(userManageVO); - } - - @Override - public void deleteUserInfoAjax(String staffId) throws Exception { - itsmOrgChartManageDAO.deleteUserInfoAjax(staffId); - } - - @Override - public List selectEquiLevelLocList(String equiLevel) throws Exception { - return itsmOrgChartManageDAO.selectEquiLevelLocList(equiLevel); - } - - @Override - public void insertOrgChart(LocVO locVO) throws Exception { - itsmOrgChartManageDAO.insertOrgChart(locVO); - - } - - @Override - public void updateOrgChartNm(LocVO locVO) throws Exception { - itsmOrgChartManageDAO.updateOrgChartNm(locVO); - } - - @Override - public void deleteOrgChart(LocVO locVO) throws Exception { - itsmOrgChartManageDAO.deleteOrgChart(locVO); - - } - - @Override - public void updateLocDate(LocVO locVO) throws Exception { - itsmOrgChartManageDAO.updateLocDate(locVO); - } - - @Override - public void resortLoc(LocVO locVO) throws Exception { - itsmOrgChartManageDAO.resortLoc(locVO); - } - - @Override - public void updateLocCnSaveAjax(LocVO locVO) throws Exception { - itsmOrgChartManageDAO.updateLocCnSaveAjax(locVO) ; - } - - @Override - public LocVO selectLocCnVO(LocVO locVO) throws Exception { - return itsmOrgChartManageDAO.selectLocCnVO(locVO) ; - } - - @Override - public List selectLocPath(LocVO locVO) throws Exception { - return itsmOrgChartManageDAO.selectLocPath(locVO) ; - } - - @Override - public UserManageVO selectUserLocInfoAjax(UserManageVO userManageVO) throws Exception { - return itsmOrgChartManageDAO.selectUserLocInfoAjax(userManageVO) ; - } - - @Override - public void deleteUserInfoLocAjax(String locInfoId) throws Exception { - itsmOrgChartManageDAO.deleteUserInfoLocAjax(locInfoId); - } - -} diff --git a/src/main/java/itn/let/org/web/OrgChartManageController.java b/src/main/java/itn/let/org/web/OrgChartManageController.java deleted file mode 100644 index b211305..0000000 --- a/src/main/java/itn/let/org/web/OrgChartManageController.java +++ /dev/null @@ -1,510 +0,0 @@ -package itn.let.org.web; - -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.stereotype.Controller; -import org.springframework.transaction.annotation.Transactional; -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.servlet.ModelAndView; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.LoginVO; -import itn.let.org.service.LocVO; -import itn.let.org.service.OrgCharVO; -import itn.let.org.service.OrgChartManageService; -import itn.let.sec.ram.service.AuthorManageVO; -import itn.let.sec.ram.service.EgovAuthorManageService; -import itn.let.sec.rgm.service.EgovAuthorGroupService; -import itn.let.sym.ccm.cde.service.CmmnDetailCodeVO; -import itn.let.sym.mnu.mpm.service.MenuManageJTreeVO; -import itn.let.uss.umt.service.EgovUserManageService; -import itn.let.uss.umt.service.UserManageVO; - -@Controller -public class OrgChartManageController { - /** userManageService */ - @Resource(name = "userManageService") - private EgovUserManageService userManageService; - - @Resource(name = "orgChartManageService") - private OrgChartManageService orgChartManageService; - - @Resource(name = "egovLocInfoIdGnrService") - private EgovIdGnrService idgenLocInfoId; - - @Resource(name = "egovAuthorManageService") - private EgovAuthorManageService egovAuthorManageService; - - @Resource(name = "egovAuthorGroupService") - private EgovAuthorGroupService egovAuthorGroupService; - - private String topLocNo = "1000000" ; //전역 최상위 매뉴번호 - - // 조직도 화면 - @RequestMapping("/uss/orgChart/OrgChartManage.do") - public String selectOrgChartInfo(LocVO locVO, ModelMap model, HttpServletResponse response) throws Exception { - - //권한조회 - AuthorManageVO authorManageVO = new AuthorManageVO(); - authorManageVO.setFirstIndex(0); - authorManageVO.setLastIndex(10); - authorManageVO.setRecordCountPerPage(10); - authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorList(authorManageVO)); - model.addAttribute("authorList", authorManageVO.getAuthorManageList()); - - //selectbox 미리 만들기 - locVO.setTopLocNo(topLocNo); //최상위 매뉴번호 - List orgHiddenList = orgChartManageService.selectOrgChartListAjax(locVO); - model.addAttribute("orgHiddenList", orgHiddenList); - return "/uss/orgchart/OrgChartManage"; - } - - /*부서 최초 트리 리스트 */ - @RequestMapping(value="/uss/orgChart/orgChartInitAjax.do") - public void orgChartInitAjax( - @ModelAttribute("menuManageVO") MenuManageJTreeVO menuManageVO - , LocVO locVO - , ModelMap model, HttpServletResponse response) throws Exception { - - ObjectMapper mapper = new ObjectMapper(); - response.setContentType("application/json"); - PrintWriter out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8")); - - locVO.setTopLocNo(topLocNo); //최상위 매뉴번호 - List resultList = orgChartManageService.selectOrgChartListAjax(locVO); - - LocVO rootNode = new LocVO(); - rootNode.setParent("#"); - rootNode.setId(topLocNo); - rootNode.setText("전체"); - resultList.add(0, rootNode); - mapper.writeValue(out, resultList); - out.flush(); - } - - @RequestMapping(value= {"/uss/orgChart/getOrgChartInitAjax_01.do" , "/uss/orgChart/getOrgChartInit01Ajax.do"}) - public ModelAndView getOrgChartInitAjax_01( - @ModelAttribute("menuManageVO") MenuManageJTreeVO menuManageVO - , @ModelAttribute("searchVO") CmmnDetailCodeVO searchVO - , ModelMap model, HttpServletResponse response) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - OrgCharVO orgCharVO = new OrgCharVO(); - orgCharVO.setLocDepth(2); - List resultList = orgChartManageService.selectOrgChartDepthListAjax(orgCharVO); - - modelAndView.addObject("resultList", resultList); - return modelAndView; - } - - /*검색 select 02 리스트 */ - @RequestMapping(value= {"/uss/orgChart/getOrgChartInitAjax_02.do" , "/uss/orgChart/getOrgChartInit02Ajax.do"}) - public ModelAndView getOrgChartInitAjax_02(@ModelAttribute("menuManageVO") MenuManageJTreeVO menuManageVO, - @ModelAttribute("searchVO") CmmnDetailCodeVO searchVO, - ModelMap model, HttpServletResponse response) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - OrgCharVO orgCharVO = new OrgCharVO(); - orgCharVO.setLocDepth(3); //뎁스3인것만 - if(!searchVO.getSearchCondition_01().equals("")) { - orgCharVO.setUpperLocNo(Integer.parseInt(searchVO.getSearchCondition_01())); - } - List resultList = orgChartManageService.selectOrgChartDepthListAjax(orgCharVO); - modelAndView.addObject("resultList", resultList); - return modelAndView; - } - - /*검색 select 03 리스트 */ - @RequestMapping(value= {"/uss/orgChart/getOrgChartInitAjax_03.do" , "/uss/orgChart/getOrgChartInit03Ajax.do"}) - public ModelAndView getOrgChartInitAjax_03(@ModelAttribute("menuManageVO") MenuManageJTreeVO menuManageVO, - @ModelAttribute("searchVO") CmmnDetailCodeVO searchVO, - ModelMap model, HttpServletResponse response) throws Exception{ - ModelAndView modelAndView = new ModelAndView(); //부서별만 조회 가능 - modelAndView.setViewName("jsonView"); - OrgCharVO orgCharVO = new OrgCharVO(); - orgCharVO.setLocDepth(4); //뎁스3인것만 - if(!searchVO.getSearchCondition_02().equals("")) { - orgCharVO.setUpperLocNo(Integer.parseInt(searchVO.getSearchCondition_02())); - } - List resultList = orgChartManageService.selectOrgChartDepthListAjax(orgCharVO); - modelAndView.addObject("resultList", resultList); - return modelAndView; - } - - // 부서별 직원 정보 보기 - @RequestMapping("/cop/selectUserListAjax.do") - public ModelAndView selectStaffListAjax( - @ModelAttribute("userManageVO") UserManageVO userManageVO - , @ModelAttribute("orgCharVO") OrgCharVO orgCharVO, ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - if ((userManageVO.getPartIdx() != null) && (userManageVO.getPartIdx().equals("DEPT"))) { - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - userManageVO.setPartIdx(loginVO.getOrgnztNo()); - } - - modelAndView.setViewName("jsonView"); - List userList = orgChartManageService.selectUserListAjax(userManageVO); - model.addAttribute("userList", userList); - - LocVO locVO = new LocVO(); - locVO.setLocNo(userManageVO.getPartIdx()); - locVO = orgChartManageService.selectLocCnVO(locVO); - modelAndView.addObject("locVO", locVO); - modelAndView.addObject("status", "success"); - - return modelAndView; - } - - // 직원 정보 조회하기 - @RequestMapping("/cop/selectUserInfoAjax.do") - public ModelAndView selectUserInfoAjax( - @ModelAttribute("userManageVO") UserManageVO userManageVO - , ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - try{ - UserManageVO userInfo = orgChartManageService.selectUserInfoAjax(userManageVO); - //UserManageVO userInfo = orgChartManageService.selectUserLocInfoAjax(userManageVO); - modelAndView.addObject("userInfo", userInfo); - modelAndView.addObject("result", "success"); - }catch(Exception e){ - modelAndView.addObject("result", "fail"); - } - return modelAndView; - } - - // 부서별 직원 수정하기 - @RequestMapping("/uss/orgChart/updateUserInfoAjax.do") - public ModelAndView updateUserInfoAjax( - @ModelAttribute("userManageVO") UserManageVO userManageVO - , ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - try{ - //업무사용자 수정시 히스토리 정보를 등록한다. - //userManageService.insertUserHistory(userManageVO); - //userManageService.updateUser(userManageVO); - if(null== userManageVO.getLocInfoId() || "".equals(userManageVO.getLocInfoId())){ - - String locInfoId = idgenLocInfoId.getNextStringId(); - userManageVO.setLocInfoId(locInfoId); - userManageVO.setUserNm(userManageVO.getEmplyrNm()); - userManageService.insertLocInfo(userManageVO); - - modelAndView.addObject("I", "flag"); - }else { - userManageService.updateLocInfo(userManageVO); - modelAndView.addObject("U", "flag"); - } - modelAndView.addObject("result", "success"); - }catch(Exception e){ - modelAndView.addObject("result", "fail"); - } - return modelAndView; - } - - //부서별 직원 등록하기 - @RequestMapping("/cop/insertUserInfoAjax.do") - public ModelAndView insertUserInfoAjax( - @ModelAttribute("userManageVO") UserManageVO userManageVO - , ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - try{ - userManageService.insertUser(userManageVO); - modelAndView.addObject("result", "success"); - }catch(Exception e){ - modelAndView.addObject("result", "fail"); - } - return modelAndView; - } - - // 부서별 직원 삭제하기 - @RequestMapping("/cop/deleteUserInfoAjax.do") - public ModelAndView deleteStaffInfoAjax( - @ModelAttribute("userManageVO") UserManageVO userManageVO - , @RequestParam("del") String[] del, ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - for(String id:del) { - try{ - orgChartManageService.deleteUserInfoAjax(id); - modelAndView.addObject("result", "success"); - }catch(Exception e){ - modelAndView.addObject("result", "fail"); - } - } - return modelAndView; - } - - // 조직도 화면 - @RequestMapping("/uss/orgChart/OrgChartPopup.do") - public String orgChartPopup(@ModelAttribute("locVO") LocVO locVO, - ModelMap model, - HttpServletResponse response) throws Exception { - - return "/uss/orgChart/OrgChartPopup"; - } - - /** - * 조직도 정보를 등록 - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - @RequestMapping("/uss/orgChart/orgChartInsertAjax.do") - public ModelAndView orgChartInsertAjax(@ModelAttribute("menuManageVO") MenuManageJTreeVO menuManageVO, - @ModelAttribute("cmmnDetailCodeVO") CmmnDetailCodeVO cmmnDetailCodeVO, - ModelMap model, LocVO locVO , - @RequestParam("nodeIds") String[] nodeIds) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - try { - String compareStr = ""; - for(int i=1 ; i < 100 ; i++) { - if(i<10) { - compareStr = "0"+i; - } - if(!Arrays.asList(nodeIds).contains(compareStr)) { - break; - } - } - - locVO.setLocNm("NEW DATA"); //임시 - locVO.setLocNo("9999999"); //임시 - - String equiLevel = (locVO.getUpperMenuId()+"").replaceFirst("0" , "%"); - //List equiLocList = assetManageService.selectEquiLevelLocList(equiLevel); - List equiLocList = orgChartManageService.selectEquiLevelLocList(equiLevel); - - - ArrayList existLocNo = new ArrayList() ; - for(LocVO tempLocVO : equiLocList) { - existLocNo.add(tempLocVO.getLocNo()) ; - } - int insertMenNo ; - if(equiLocList.size() != 0){ - for(int i = 1 ; i < 100 ; i++){ //0~100까지 임의의 매뉴번호 생성후 이전 매뉴가 없는것을 조회 - insertMenNo = Integer.parseInt((locVO.getUpperMenuId()+"").replaceFirst("0" , i+"")) ; - if(!existLocNo.contains(insertMenNo+"")){ //매뉴번호가 없으면 - locVO.setLocNo(insertMenNo+""); - break ; - } - } - }else{ - insertMenNo = Integer.parseInt((locVO.getUpperMenuId()+"").replaceFirst("0" , "1")); - locVO.setLocNo(insertMenNo+""); - } - - locVO.setUpperLocNo(locVO.getUpperMenuId()+""); - locVO.setUseYn("Y"); - locVO.setFrstRegisterId(user.getId()); - locVO.setLocOrdr(nodeIds.length+1); - locVO.setLocDepth(Integer.parseInt(locVO.getNodeDepth())); - orgChartManageService.insertOrgChart(locVO); - modelAndView.addObject("newMenuNo", locVO.getLocNo()); - modelAndView.addObject("status", "success"); - - }catch (Exception e) { - modelAndView.addObject("status", "fail"); - model.addAttribute("menuManageVO", cmmnDetailCodeVO); - } - return modelAndView; - } - - /** - * 조직도 정보 이름 변경 - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @RequestMapping("/uss/orgChart/orgChartNmUpdateAjax.do") - public ModelAndView updateassetSubNmUpdateAjax( - @ModelAttribute("menuManageVO") MenuManageJTreeVO menuManageVO, - @ModelAttribute("searchVO") CmmnDetailCodeVO searchVO, - ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - try{ - LocVO locVO = new LocVO(); - locVO.setLocNm(menuManageVO.getMenuNm()); - locVO.setLocNo(menuManageVO.getMenuNo()); - //assetManageService.updateAssetLocNm(locVO); - orgChartManageService.updateOrgChartNm(locVO); - modelAndView.addObject("status", "success"); - }catch (Exception e) { - modelAndView.addObject("status", "fail"); - } - return modelAndView; - } - - /** - * 부서 정보를 삭제한다.(트리구조에서) - * - * @param partInfVO - * @param model - * @return - * @throws Exception - */ - @Transactional(rollbackFor = Exception.class) - @RequestMapping(value = "/uss/orgChart/orgChartDeleteAjax.do") - public ModelAndView orgChartDeleteAjax(@ModelAttribute("menuManageVO") MenuManageJTreeVO menuManageVO, - @ModelAttribute("cmmnDetailCodeVO") CmmnDetailCodeVO cmmnDetailCodeVO, - LocVO locVO , - ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - try { - locVO.setLocNo(menuManageVO.getMenuNo()); - orgChartManageService.deleteOrgChart(locVO); - modelAndView.addObject("status", "success"); - }catch(Exception e) { - modelAndView.addObject("status", "fail"); - } - return modelAndView; - } - - - /** - * 부서 이동 한다.(트리구조에서) - */ - @Transactional(rollbackFor = Exception.class) - @RequestMapping("/uss/itsm/asset/AssetMoveAjax.do") - public ModelAndView asetMoveAjax( - @ModelAttribute("menuManageVO") MenuManageJTreeVO menuManageVO, - @ModelAttribute("cmmnDetailCodeVO") CmmnDetailCodeVO cmmnDetailCodeVO, - LocVO locVO , - ModelMap model) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - LoginVO user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - try{ - locVO.setLocNo(menuManageVO.getMenuNo()); - locVO.setUpperLocNo(menuManageVO.getUpperMenuId()); - locVO.setLocOrdr(locVO.getSort()); - orgChartManageService.updateLocDate(locVO); - orgChartManageService.resortLoc(locVO); - modelAndView.addObject("status", "success"); - }catch (Exception e) { - modelAndView.addObject("status", "fail"); - } - return modelAndView; - } - - - // 조직도 화면 (사용자) - @RequestMapping("/web/cop/org/selectOrgList.do") - public String selectOrgList(LocVO locVO, ModelMap model, HttpServletResponse response) throws Exception { - - //selectbox 미리 만들기 - locVO.setTopLocNo(topLocNo); //최상위 매뉴번호 - List orgList = orgChartManageService.selectOrgChartListAjax(locVO); - - List headOrgList = new ArrayList<>(); - { - headOrgList.add(orgList.get(0)) ; - headOrgList.add(orgList.get(1)) ; - headOrgList.add(orgList.get(2)) ; - } - model.addAttribute("headOrgList", headOrgList); - { - orgList.remove(0); - orgList.remove(0); - orgList.remove(0); - } - model.addAttribute("orgSubList", orgList); - return "/web/cop/org/selectOrgList"; - } - - - // 조직도 상세 (사용자) - @RequestMapping("/web/cop/org/selectOrgDetail.do") - public String selectOrgDetail(LocVO locVO, ModelMap model, UserManageVO userManageVO, HttpServletResponse response) throws Exception { - - List userList = orgChartManageService.selectUserListAjax(userManageVO); - locVO.setLocNo(userManageVO.getPartIdx()); - LocVO resultLocVO = orgChartManageService.selectLocCnVO(locVO); - model.addAttribute("userList", userList); - model.addAttribute("locVO", resultLocVO); - - List locPathList = orgChartManageService.selectLocPath(locVO); - model.addAttribute("locPathList", locPathList); - /*OrgCharVO orgCharVO = new OrgCharVO(); - orgCharVO.setLocDepth(2); - List resultList = orgChartManageService.selectOrgChartDepthListAjax(orgCharVO);*/ - - - return "/web/cop/org/selectOrgDetail"; - } - - - // 부서 업무 저장하기 - @RequestMapping("/uss/orgChart/updateLocCnSaveAjax.do") - public ModelAndView updateLocCnSaveAjax( - @ModelAttribute("userManageVO") UserManageVO userManageVO, LocVO locVO - , ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - try{ - //업무사용자 수정시 히스토리 정보를 등록한다. - /*userManageService.insertUserHistory(userManageVO); - userManageService.updateUser(userManageVO);*/ - //orgChartManageService.selectOrgChartListAjax(locVO); - orgChartManageService.updateLocCnSaveAjax(locVO); - modelAndView.addObject("result", "success"); - }catch(Exception e){ - modelAndView.addObject("result", "fail"); - } - return modelAndView; - } - - - // 직원 삭제하기 - @RequestMapping("/cop/deleteUserInfoLocAjax.do") - public ModelAndView deleteUserInfoLocAjax( - @ModelAttribute("userManageVO") UserManageVO userManageVO, - ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - try{ - orgChartManageService.deleteUserInfoLocAjax(userManageVO.getEmplyrId()); - modelAndView.addObject("result", "success"); - }catch(Exception e){ - modelAndView.addObject("result", "fail"); - } - return modelAndView; - } - - - - -} diff --git a/src/main/java/itn/let/sym/wordcloud/service/EgovWordCloudService.java b/src/main/java/itn/let/sym/wordcloud/service/EgovWordCloudService.java deleted file mode 100644 index 6cdac5f..0000000 --- a/src/main/java/itn/let/sym/wordcloud/service/EgovWordCloudService.java +++ /dev/null @@ -1,12 +0,0 @@ -package itn.let.sym.wordcloud.service; - -import java.util.List; - -public interface EgovWordCloudService { - - //최근 1개월 동안의 문자 발송 내용 조회 - public List selectWordCloudMsgSmsTxtList(EgovWordCloudVO wordCloudVO) throws Exception; - - //검색어 키워드 내용 조회 - public List selectWordCloudSearchKeywordList(EgovWordCloudVO wordCloudVO) throws Exception; -} diff --git a/src/main/java/itn/let/sym/wordcloud/service/EgovWordCloudVO.java b/src/main/java/itn/let/sym/wordcloud/service/EgovWordCloudVO.java deleted file mode 100644 index bacb4d0..0000000 --- a/src/main/java/itn/let/sym/wordcloud/service/EgovWordCloudVO.java +++ /dev/null @@ -1,50 +0,0 @@ -package itn.let.sym.wordcloud.service; - -public class EgovWordCloudVO { - - private String wordTxt; //검색 문장 - private int wordCnt; //검색 문자 갯수 - private String startDate; //검색 시작일자 - private String endDate; //검색 종료일자 - private int setCountRange = 0; //단어 카운트 기준 수치 - private String mberSttus; //회원 상태값 - - - public String getWordTxt() { - return wordTxt; - } - public void setWordTxt(String wordTxt) { - this.wordTxt = wordTxt; - } - public int getWordCnt() { - return wordCnt; - } - public void setWordCnt(int wordCnt) { - this.wordCnt = wordCnt; - } - public String getStartDate() { - return startDate; - } - public void setStartDate(String startDate) { - this.startDate = startDate; - } - public String getEndDate() { - return endDate; - } - public void setEndDate(String endDate) { - this.endDate = endDate; - } - public int getSetCountRange() { - return setCountRange; - } - public void setSetCountRange(int setCountRange) { - this.setCountRange = setCountRange; - } - public String getMberSttus() { - return mberSttus; - } - public void setMberSttus(String mberSttus) { - this.mberSttus = mberSttus; - } - -} diff --git a/src/main/java/itn/let/sym/wordcloud/service/impl/EgovWordCloudDAO.java b/src/main/java/itn/let/sym/wordcloud/service/impl/EgovWordCloudDAO.java deleted file mode 100644 index 18242b8..0000000 --- a/src/main/java/itn/let/sym/wordcloud/service/impl/EgovWordCloudDAO.java +++ /dev/null @@ -1,50 +0,0 @@ -package itn.let.sym.wordcloud.service.impl; - -import java.util.ArrayList; -import java.util.List; - -import org.springframework.stereotype.Repository; - -import egovframework.rte.psl.dataaccess.EgovAbstractDAO; -import itn.let.sym.wordcloud.service.EgovWordCloudVO; - -@Repository("egovWordCloudDAO") -public class EgovWordCloudDAO extends EgovAbstractDAO{ - - - //최근 1개월 동안의 문자 발송 내용 조회 - @SuppressWarnings("unchecked") - public List selectWordCloudMsgSmsTxtList(EgovWordCloudVO wordCloudVO) throws Exception{ - - List result = new ArrayList(); - - try { - - result = (List) list("egovWordCloudDAO.selectWordCloudMsgSmsTxtList", wordCloudVO); - - } catch (Exception e) { - System.out.println("+++++ selectWordCloudMsgSmsTxtList Error !!! "+e); - } - - return result; - - } - - //검색어 키워드 내용 조회 - @SuppressWarnings("unchecked") - public List selectWordCloudSearchKeywordList(EgovWordCloudVO wordCloudVO) throws Exception{ - - List result = new ArrayList(); - - try { - - result = (List) list("egovWordCloudDAO.selectWordCloudSearchKeywordList", wordCloudVO); - - } catch (Exception e) { - System.out.println("+++++ selectWordCloudSearchKeywordList Error !!! "+e); - } - - return result; - } - -} diff --git a/src/main/java/itn/let/sym/wordcloud/service/impl/EgovWordCloudServiceImpl.java b/src/main/java/itn/let/sym/wordcloud/service/impl/EgovWordCloudServiceImpl.java deleted file mode 100644 index 4ef4a80..0000000 --- a/src/main/java/itn/let/sym/wordcloud/service/impl/EgovWordCloudServiceImpl.java +++ /dev/null @@ -1,55 +0,0 @@ -package itn.let.sym.wordcloud.service.impl; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - -import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; -import itn.let.sym.wordcloud.service.EgovWordCloudService; -import itn.let.sym.wordcloud.service.EgovWordCloudVO; - -@Service("egovWordCloudService") -public class EgovWordCloudServiceImpl extends EgovAbstractServiceImpl implements EgovWordCloudService{ - - @Resource(name="egovWordCloudDAO") - EgovWordCloudDAO egovWordCloudDAO; - - //최근 1개월 동안의 문자 발송 내용 조회 - @Override - public List selectWordCloudMsgSmsTxtList(EgovWordCloudVO wordCloudVO) throws Exception{ - - List result = new ArrayList(); - - try { - - result = egovWordCloudDAO.selectWordCloudMsgSmsTxtList(wordCloudVO); - - } catch (Exception e) { - System.out.println("+++++ selectWordCloudMsgSmsTxtList Error !!! "+e); - } - - return result; - - } - - //검색어 키워드 내용 조회 - @Override - public List selectWordCloudSearchKeywordList(EgovWordCloudVO wordCloudVO) throws Exception{ - - List result = new ArrayList(); - - try { - - result = egovWordCloudDAO.selectWordCloudSearchKeywordList(wordCloudVO); - - } catch (Exception e) { - System.out.println("+++++ selectWordCloudSearchKeywordList Error !!! "+e); - } - - return result; - - } -} diff --git a/src/main/java/itn/let/sym/wordcloud/web/EgovWordCloudController.java b/src/main/java/itn/let/sym/wordcloud/web/EgovWordCloudController.java deleted file mode 100644 index f940192..0000000 --- a/src/main/java/itn/let/sym/wordcloud/web/EgovWordCloudController.java +++ /dev/null @@ -1,305 +0,0 @@ -package itn.let.sym.wordcloud.web; - -import java.net.URLDecoder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; - -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -import org.springframework.ui.ModelMap; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.servlet.ModelAndView; - -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import itn.com.cmm.LoginVO; -import itn.let.komoran.KomoranUtils; -import itn.let.sym.wordcloud.service.EgovWordCloudService; -import itn.let.sym.wordcloud.service.EgovWordCloudVO; - -@Controller -public class EgovWordCloudController { - - /*@Autowired - KomoranUtils komoranUtils;*/ - - @Resource(name = "egovWordCloudService") - private EgovWordCloudService egovWordCloudService; - - /** 비즈 JSON 파일저장 경로*/ - @Value("#{globalSettings['Globals.file.saveDir']}") - private String dicFilePath; - - - //wordCloud 뷰 페이지 - @RequestMapping("/sym/wordcloud/selectWordCloudSearchManagerView.do") - public String selectWordCloudSearchManagerView() throws Exception{ - - //로그인 권한정보 불러오기 - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - if(loginVO == null) { - - return "redirect:/uat/uia/actionLogout.do"; - - } - - return "/sym/wordcloud/wordcloud"; - } - - @SuppressWarnings("unchecked") - @RequestMapping("/sym/wordcloud/selectWordCloudManagerViewAjax.do") - public ModelAndView selectWordCloudManagerView(@ModelAttribute("searchVO") EgovWordCloudVO searchVO, - HttpServletRequest request , - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - if(loginVO == null) { - - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - } - - searchVO.setMberSttus("Y"); - List resultSmsTxt = egovWordCloudService.selectWordCloudMsgSmsTxtList(searchVO); - List totNlpPullStr = new ArrayList(); - - for(String txt : resultSmsTxt) { - - //System.out.println(msgVO.getSmsTxt()); - - String smsTxt = txt; - - //html테그 제거하기 - smsTxt = smsTxt.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", ""); - if(!smsTxt.equals("")) { - - //요약 문장 형태소 분석 요청 - KomoranUtils komoran = new KomoranUtils(); - - List nlpPullStr = komoran.parseKomoranWordCloudNNGByList(smsTxt, dicFilePath); - - for(String str : nlpPullStr) { - - totNlpPullStr.add(str); - } - - } - - } - - int setCountRange = searchVO.getSetCountRange(); - - // ArrayList 원소 빈도수 출력 - Set set = new HashSet(totNlpPullStr); - JSONArray jsonArray = new JSONArray(); - for (String str : set) { - JSONObject informationObject = new JSONObject(); - int wordCnt = Collections.frequency(totNlpPullStr, str); - - System.out.println(str + " : " + wordCnt); - if(wordCnt > setCountRange) { - informationObject.put("x", str); - informationObject.put("value", wordCnt); - jsonArray.add(informationObject); - } - } - - modelAndView.addObject("result", "success"); - modelAndView.addObject("message", "WordCloud 생성이 완료되었습니다."); - modelAndView.addObject("jsonArray", jsonArray); - - } catch (Exception e) { - System.out.println("+++++++++++++ selectWordCloudManagerView Error !!! " + e); - } - - return modelAndView; - - } - - - - - @SuppressWarnings("unchecked") - @RequestMapping("/sym/wordcloud/selectWordCloudMberBlockManagerViewAjax.do") - public ModelAndView selectWordCloudMberBlockManagerView(@ModelAttribute("searchVO") EgovWordCloudVO searchVO, - HttpServletRequest request , - ModelMap model) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - if(loginVO == null) { - - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - } - - searchVO.setMberSttus("B"); - List resultSmsTxt = egovWordCloudService.selectWordCloudMsgSmsTxtList(searchVO); - List totNlpPullStr = new ArrayList(); - - for(String txt : resultSmsTxt) { - - //System.out.println(msgVO.getSmsTxt()); - - String smsTxt = txt; - - //html테그 제거하기 - smsTxt = smsTxt.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", ""); - //smsTxt = ComGetSpamStringParser.getSpamTextParse(smsTxt).trim(); - if(!smsTxt.equals("")) { - - //요약 문장 형태소 분석 요청 - KomoranUtils komoran = new KomoranUtils(); - - List nlpPullStr = komoran.parseKomoranWordCloudNNGByList(smsTxt, dicFilePath); - - for(String str : nlpPullStr) { - - totNlpPullStr.add(str); - } - - } - - } - - int setCountRange = searchVO.getSetCountRange(); - - // ArrayList 원소 빈도수 출력 - Set set = new HashSet(totNlpPullStr); - JSONArray jsonArray = new JSONArray(); - for (String str : set) { - JSONObject informationObject = new JSONObject(); - int wordCnt = Collections.frequency(totNlpPullStr, str); - - System.out.println(str + " : " + wordCnt); - if(wordCnt > setCountRange) { - informationObject.put("x", str); - informationObject.put("value", wordCnt); - jsonArray.add(informationObject); - } - } - - modelAndView.addObject("result", "success"); - modelAndView.addObject("message", "WordCloud 생성이 완료되었습니다."); - modelAndView.addObject("jsonArray", jsonArray); - - } catch (Exception e) { - System.out.println("+++++++++++++ selectWordCloudManagerView Error !!! " + e); - } - - return modelAndView; - - } - - - - @SuppressWarnings("unchecked") - @RequestMapping("/sym/wordcloud/selectWordCloudSearchManagerViewAjax.do") - public ModelAndView selectWordCloudSearchManagerViewAjax(EgovWordCloudVO searchVO, - HttpServletRequest request) throws Exception{ - - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - try { - - LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; - if(loginVO == null) { - - modelAndView.addObject("result", "loginFail"); - modelAndView.addObject("message", "로그인이 필요합니다."); - return modelAndView; - - } - - List resultKeyword = egovWordCloudService.selectWordCloudSearchKeywordList(searchVO); - List totNlpPullStr = new ArrayList(); - - for(String tmpStr : resultKeyword) { - - System.out.println(tmpStr); - String repTmpStr = tmpStr.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9 ]", ""); - //인터셉터에서 걸러지지 않은 URL 인코딩 문자가 있는지 확인 - if(tmpStr.contains("%")) { - - tmpStr = URLDecoder.decode(tmpStr, "UTF-8"); - totNlpPullStr.add(tmpStr); - }else if(repTmpStr.length() > 0) {//한글,영문,숫자를 제외한 특수문자가 있는경우 제외 - - totNlpPullStr.add(tmpStr); - - }else { - - //html테그 제거하기 - //smsTxt = smsTxt.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>", ""); - //smsTxt = ComGetSpamStringParser.getSpamTextParse(smsTxt).trim(); - if(!tmpStr.equals("")) { - - //요약 문장 형태소 분석 요청 - KomoranUtils komoran = new KomoranUtils(); - - List nlpPullStr = komoran.parseKomoranWordCloudNNGByList(tmpStr, dicFilePath); - - for(String str : nlpPullStr) { - - totNlpPullStr.add(str); - } - - } - - } - - } - - int setCountRange = searchVO.getSetCountRange(); - - // ArrayList 원소 빈도수 출력 - Set set = new HashSet(totNlpPullStr); - JSONArray jsonArray = new JSONArray(); - for (String str : set) { - JSONObject informationObject = new JSONObject(); - int wordCnt = Collections.frequency(totNlpPullStr, str); - - System.out.println(str + " : " + wordCnt); - if(wordCnt > setCountRange) { - informationObject.put("x", str); - informationObject.put("value", wordCnt); - jsonArray.add(informationObject); - } - } - - modelAndView.addObject("result", "success"); - modelAndView.addObject("message", "WordCloud 생성이 완료되었습니다."); - modelAndView.addObject("jsonArray", jsonArray); - - } catch (Exception e) { - System.out.println("+++++++++++++ selectWordCloudManagerView Error !!! " + e); - } - - return modelAndView; - - } - - -} diff --git a/src/main/java/itn/let/uat/uia/web/EgovLoginController.java b/src/main/java/itn/let/uat/uia/web/EgovLoginController.java index a7e8974..42f3dd2 100644 --- a/src/main/java/itn/let/uat/uia/web/EgovLoginController.java +++ b/src/main/java/itn/let/uat/uia/web/EgovLoginController.java @@ -96,7 +96,6 @@ import itn.let.mjo.msg.service.MjonMsgService; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msgdata.service.MjonMsgDataService; import itn.let.mjo.msgdata.service.MjonMsgReturnVO; -import itn.let.mjo.msgdata.web.MjonMsgDataController; import itn.let.mjo.msgsent.service.MjonMsgSentService; import itn.let.mjo.msgsent.service.MjonMsgSentVO; import itn.let.mjo.pay.service.KmcVO; @@ -246,7 +245,7 @@ public class EgovLoginController { @Resource(name = "CertIpService") private CertIpService certIpService; - private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class); + private static final Logger logger = LoggerFactory.getLogger(EgovLoginController.class); /* 문자온 사용자 로그인 시작 */ // 회원가입 1뎁스 - 개인/기업 선택 @@ -2770,47 +2769,6 @@ public class EgovLoginController { return "redirect:/"; } - /* 캡차 테스트 */ - @RequestMapping(value = "/captcha/captchaTest.do") - public String captchaTest(@ModelAttribute("userSearchVO") UserDefaultVO userSearchVO, ModelMap model) - throws Exception { - return "cmm/chptcha/captchaTest"; - } - - /* 캡차 이미지 */ - @RequestMapping(value = "/captcha/captchaImg.do") - public String captchaImg1(HttpServletRequest request, HttpServletResponse response, ModelMap model) - throws Exception { - - return "cmm/chptcha/captchaImg"; - } - - /* 캡차 오디오 */ - @RequestMapping(value = "/captcha/captchaAudio.do") - public String captchaAudio1(HttpServletRequest request, HttpServletResponse response, ModelMap model) - throws Exception { - return "cmm/chptcha/captchaAudio"; - } - - /* 캡차 submit */ - @RequestMapping(value = "/captcha/captchaSubmit.do") - public ModelAndView captchaSubmit(@RequestParam Map commandMap, HttpServletRequest request, - HttpServletResponse response) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - - String answer = (String) commandMap.get("answer"); - String captcha = (String) request.getSession().getAttribute("captcha"); - String message = "캡차 입력값이 일치하지 않습니다."; - if (answer != null && !"".equals(answer)) { - if (answer.equals(captcha)) { - message = "캡차 입력값이 일치합니다."; - } - } - modelAndView.addObject("message", message); - return modelAndView; - } - /** * 로그인 후 메인화면으로 들어간다 * diff --git a/src/main/java/itn/let/uss/ion/sign/service/ApprovalVO.java b/src/main/java/itn/let/uss/ion/sign/service/ApprovalVO.java deleted file mode 100644 index 006d870..0000000 --- a/src/main/java/itn/let/uss/ion/sign/service/ApprovalVO.java +++ /dev/null @@ -1,184 +0,0 @@ -package itn.let.uss.ion.sign.service; - -import itn.com.cmm.ComDefaultVO; - -public class ApprovalVO extends ComDefaultVO { - - private static final long serialVersionUID = 1L; - - private String apprId = ""; // 결재ID - private String apprCnd = ""; // 구분(대여/반납/기간변경/IP신청) - private String apprSn = ""; // 결재순번 - private String apprUsrId = ""; // 결재자ID - private String apprUsrNm = ""; // 결재자명 - private String apprYn = ""; // 승인여부 - private String apprCn = ""; // 결재내용 - private String apprStatus = ""; // 결재내용 - private String apprDatetime = ""; // 결재일시 - private String chgBgnDatetime = ""; // 변경 대여시작일시 - private String chgEndDatetime = ""; // 변경 대여종료일시 - private String frstRegistPnttm = ""; // 등록일시 - private String apprDept = ""; // 결제자 조직 code - private String apprDeptText = ""; // 결제자 조직 TEXT - boolean ckApplicantCmt = false; //결제자(자신의 차레) 체크 - private String locNm = ""; // 부서명 - private int apprTotCnt = 0; // 결제자 토탈 카운트 - - private String userTy = ""; // 유저 구분 - - private String[] apprUsrIds = {}; // 결재자IDs - private String[] apprUsrNms = {}; // 결재자명s - private String[] apprCns = {}; // 결재내용s - private String[] apprCnds = {}; // 구분s - - - public static long getSerialversionuid() { - return serialVersionUID; - } - - public String getApprId() { - return apprId; - } - public void setApprId(String apprId) { - this.apprId = apprId; - } - public String getApprCnd() { - return apprCnd; - } - public void setApprCnd(String apprCnd) { - this.apprCnd = apprCnd; - } - public String getApprSn() { - return apprSn; - } - public void setApprSn(String apprSn) { - this.apprSn = apprSn; - } - public String getApprUsrId() { - return apprUsrId; - } - public void setApprUsrId(String apprUsrId) { - this.apprUsrId = apprUsrId; - } - public String getApprUsrNm() { - return apprUsrNm; - } - public void setApprUsrNm(String apprUsrNm) { - this.apprUsrNm = apprUsrNm; - } - public String getApprYn() { - return apprYn; - } - public void setApprYn(String apprYn) { - this.apprYn = apprYn; - } - public String getApprCn() { - return apprCn; - } - public void setApprCn(String apprCn) { - this.apprCn = apprCn; - } - public String getApprDatetime() { - return apprDatetime; - } - public void setApprDatetime(String apprDatetime) { - this.apprDatetime = apprDatetime; - } - public String getChgBgnDatetime() { - return chgBgnDatetime; - } - public void setChgBgnDatetime(String chgBgnDatetime) { - this.chgBgnDatetime = chgBgnDatetime; - } - public String getChgEndDatetime() { - return chgEndDatetime; - } - public void setChgEndDatetime(String chgEndDatetime) { - this.chgEndDatetime = chgEndDatetime; - } - public String[] getApprUsrIds() { - return apprUsrIds; - } - public void setApprUsrIds(String[] apprUsrIds) { - this.apprUsrIds = apprUsrIds; - } - public String[] getApprUsrNms() { - return apprUsrNms; - } - public void setApprUsrNms(String[] apprUsrNms) { - this.apprUsrNms = apprUsrNms; - } - public String[] getApprCns() { - return apprCns; - } - public void setApprCns(String[] apprCns) { - this.apprCns = apprCns; - } - public String getFrstRegistPnttm() { - return frstRegistPnttm; - } - public void setFrstRegistPnttm(String frstRegistPnttm) { - this.frstRegistPnttm = frstRegistPnttm; - } - public String[] getApprCnds() { - return apprCnds; - } - public void setApprCnds(String[] apprCnds) { - this.apprCnds = apprCnds; - } - public String getApprDept() { - return apprDept; - } - public void setApprDept(String apprDept) { - this.apprDept = apprDept; - } - - public String getApprDeptText() { - return apprDeptText; - } - - public void setApprDeptText(String apprDeptText) { - this.apprDeptText = apprDeptText; - } - - public boolean isCkApplicantCmt() { - return ckApplicantCmt; - } - - public void setCkApplicantCmt(boolean ckApplicantCmt) { - this.ckApplicantCmt = ckApplicantCmt; - } - - public String getApprStatus() { - return apprStatus; - } - - public void setApprStatus(String apprStatus) { - this.apprStatus = apprStatus; - } - - public String getLocNm() { - return locNm; - } - - public void setLocNm(String locNm) { - this.locNm = locNm; - } - - public int getApprTotCnt() { - return apprTotCnt; - } - - public void setApprTotCnt(int apprTotCnt) { - this.apprTotCnt = apprTotCnt; - } - - public String getUserTy() { - return userTy; - } - - public void setUserTy(String userTy) { - this.userTy = userTy; - } - -} diff --git a/src/main/java/itn/let/uss/ion/sign/service/SignManageService.java b/src/main/java/itn/let/uss/ion/sign/service/SignManageService.java deleted file mode 100644 index 766546a..0000000 --- a/src/main/java/itn/let/uss/ion/sign/service/SignManageService.java +++ /dev/null @@ -1,29 +0,0 @@ -package itn.let.uss.ion.sign.service; - -import java.util.List; - -public interface SignManageService { - - List selectSignList(SignVO signVO) throws Exception; - - SignVO selectSignVO(SignVO signVO) throws Exception; - - List selectApprovalList(ApprovalVO approvalVO) throws Exception; - - ApprovalVO selectLocNmTxt(ApprovalVO tempLocApprovalVO) throws Exception; - - void updateSign(SignVO signVO) throws Exception; - - void delInsertApproval(SignVO signVO) throws Exception; - - void insertSign(SignVO signVO) throws Exception; - - void insertApproval(SignVO signVO) throws Exception; - - void updateAccept(ApprovalVO approvalVO) throws Exception; - - void deleteSign(String id) throws Exception; - - void updateSignResult(SignVO signVO) throws Exception; - -} diff --git a/src/main/java/itn/let/uss/ion/sign/service/SignVO.java b/src/main/java/itn/let/uss/ion/sign/service/SignVO.java deleted file mode 100644 index 2bbbd85..0000000 --- a/src/main/java/itn/let/uss/ion/sign/service/SignVO.java +++ /dev/null @@ -1,365 +0,0 @@ -package itn.let.uss.ion.sign.service; - -import java.util.List; - -import itn.com.cmm.ComDefaultVO; - -public class SignVO extends ComDefaultVO{ - - private static final long serialVersionUID = 1L; - - private List approvalListVO; //VO객체 - - private String recipId = ""; //IP신청 ID - - private String recipSj = ""; //신청제목 - - private String recipDept = ""; //소속(코드) - - private String recipEqui = ""; //대상장비(코드) - - private String recipNetCode = ""; //회선(내부망/외부망) - - private String recipNetCnt = ""; //회선 갯수 - - private String recipUseStar = ""; //사용기간 시작일 - - private String recipUseEddr = ""; //사용기간 종료일 - - private String recipCn = ""; //신청내용 - - private String recipState = ""; //신청상태(01:신청, 02:반려, 03:완료) - - private String recipDeptTxt = ""; //소속(코드) 텍스트 - - private String recipEquiTxt = ""; //대상장비(코드) 텍스트 - - private String recipNetCodeTxt = ""; //회선(내부망/외부망) 텍스트 - - private String recipStateTxt = ""; //신청상태 텍스트 - - private String recipResult = ""; //IP할당정보 - - private String searchSortCnd = ""; //순서정렬 - - private String searchSortOrd = ""; //순서정렬 - - private String frstRegistPnttm = ""; //최초등록일시 - - private String frstRegisterId = ""; //최초등록자ID - - private String frstRegisterIdTxt = ""; //최초등록자ID - - private String lastUpdtPnttm = ""; //최종수정일시 - - private String lastUpdusrId = ""; //최종수정자ID - - private String locNm = ""; //부서명 - - private String pageType = ""; //페이지 타입(Insert, Update) - - private String searchStartDt = ""; //검색 시작 - - private String searchEndDt = ""; //검색 끝 - - private String searchCn = ""; //내용검색 - - private String searchFrstRegisterIdTxt = ""; //등록자 검색 - - private String siteId = ""; //사이트아이디 - - private int totCnt = 0; // 목록 조회 개수 - - boolean ckApplicant = false; //결제자 체크 - - public String getApprStatus() { - return apprStatus; - } - - public void setApprStatus(String apprStatus) { - this.apprStatus = apprStatus; - } - - boolean ckRegister = false; //신청자 자신인지 체크 - - private String isAppIng = "N"; //결제자 등록가능한지 체크(결제 진행중: Y , 아니면 N ) - - private String apprStatus = ""; // 결재내용 - - public String getRecipId() { - return recipId; - } - - public void setRecipId(String recipId) { - this.recipId = recipId; - } - - public String getRecipDept() { - return recipDept; - } - - public void setRecipDept(String recipDept) { - this.recipDept = recipDept; - } - - public String getRecipEqui() { - return recipEqui; - } - - public void setRecipEqui(String recipEqui) { - this.recipEqui = recipEqui; - } - - public String getRecipNetCode() { - return recipNetCode; - } - - public void setRecipNetCode(String recipNetCode) { - this.recipNetCode = recipNetCode; - } - - public String getRecipNetCnt() { - return recipNetCnt; - } - - public void setRecipNetCnt(String recipNetCnt) { - this.recipNetCnt = recipNetCnt; - } - - public String getRecipUseStar() { - return recipUseStar; - } - - public void setRecipUseStar(String recipUseStar) { - this.recipUseStar = recipUseStar; - } - - public String getRecipUseEddr() { - return recipUseEddr; - } - - public void setRecipUseEddr(String recipUseEddr) { - this.recipUseEddr = recipUseEddr; - } - - public String getRecipCn() { - return recipCn; - } - - public void setRecipCn(String recipCn) { - this.recipCn = recipCn; - } - - public String getRecipState() { - return recipState; - } - - public void setRecipState(String recipState) { - this.recipState = recipState; - } - - public String getRecipDeptTxt() { - return recipDeptTxt; - } - - public void setRecipDeptTxt(String recipDeptTxt) { - this.recipDeptTxt = recipDeptTxt; - } - - public String getRecipEquiTxt() { - return recipEquiTxt; - } - - public void setRecipEquiTxt(String recipEquiTxt) { - this.recipEquiTxt = recipEquiTxt; - } - - public String getRecipNetCodeTxt() { - return recipNetCodeTxt; - } - - public void setRecipNetCodeTxt(String recipNetCodeTxt) { - this.recipNetCodeTxt = recipNetCodeTxt; - } - - public String getRecipStateTxt() { - return recipStateTxt; - } - - public void setRecipStateTxt(String recipStateTxt) { - this.recipStateTxt = recipStateTxt; - } - - public String getSearchSortCnd() { - return searchSortCnd; - } - - public void setSearchSortCnd(String searchSortCnd) { - this.searchSortCnd = searchSortCnd; - } - - public String getSearchSortOrd() { - return searchSortOrd; - } - - public void setSearchSortOrd(String searchSortOrd) { - this.searchSortOrd = searchSortOrd; - } - - public static long getSerialversionuid() { - return serialVersionUID; - } - - public String getFrstRegistPnttm() { - return frstRegistPnttm; - } - - public void setFrstRegistPnttm(String frstRegistPnttm) { - this.frstRegistPnttm = frstRegistPnttm; - } - - public String getFrstRegisterId() { - return frstRegisterId; - } - - public void setFrstRegisterId(String frstRegisterId) { - this.frstRegisterId = frstRegisterId; - } - - public String getFrstRegisterIdTxt() { - return frstRegisterIdTxt; - } - - public void setFrstRegisterIdTxt(String frstRegisterIdTxt) { - this.frstRegisterIdTxt = frstRegisterIdTxt; - } - - public String getLastUpdtPnttm() { - return lastUpdtPnttm; - } - - public void setLastUpdtPnttm(String lastUpdtPnttm) { - this.lastUpdtPnttm = lastUpdtPnttm; - } - - public String getLastUpdusrId() { - return lastUpdusrId; - } - - public void setLastUpdusrId(String lastUpdusrId) { - this.lastUpdusrId = lastUpdusrId; - } - - public int getTotCnt() { - return totCnt; - } - - public void setTotCnt(int totCnt) { - this.totCnt = totCnt; - } - - public String getRecipResult() { - return recipResult; - } - - public void setRecipResult(String recipResult) { - this.recipResult = recipResult; - } - - public String getLocNm() { - return locNm; - } - - public void setLocNm(String locNm) { - this.locNm = locNm; - } - - public String getPageType() { - return pageType; - } - - public void setPageType(String pageType) { - this.pageType = pageType; - } - - public String getRecipSj() { - return recipSj; - } - - public void setRecipSj(String recipSj) { - this.recipSj = recipSj; - } - - public String getSearchStartDt() { - return searchStartDt; - } - - public void setSearchStartDt(String searchStartDt) { - this.searchStartDt = searchStartDt; - } - - public String getSearchEndDt() { - return searchEndDt; - } - - public void setSearchEndDt(String searchEndDt) { - this.searchEndDt = searchEndDt; - } - - public String getSearchCn() { - return searchCn; - } - - public void setSearchCn(String searchCn) { - this.searchCn = searchCn; - } - - public String getSearchFrstRegisterIdTxt() { - return searchFrstRegisterIdTxt; - } - - public void setSearchFrstRegisterIdTxt(String searchFrstRegisterIdTxt) { - this.searchFrstRegisterIdTxt = searchFrstRegisterIdTxt; - } - - public List getApprovalListVO() { - return approvalListVO; - } - - public void setApprovalListVO(List approvalListVO) { - this.approvalListVO = approvalListVO; - } - - public String getIsAppIng() { - return isAppIng; - } - - public void setIsAppIng(String isAppIng) { - this.isAppIng = isAppIng; - } - - public boolean isCkApplicant() { - return ckApplicant; - } - - public void setCkApplicant(boolean ckApplicant) { - this.ckApplicant = ckApplicant; - } - - public boolean isCkRegister() { - return ckRegister; - } - - public void setCkRegister(boolean ckRegister) { - this.ckRegister = ckRegister; - } - - public String getSiteId() { - return siteId; - } - - public void setSiteId(String siteId) { - this.siteId = siteId; - } - -} diff --git a/src/main/java/itn/let/uss/ion/sign/service/impl/SignManageDAO.java b/src/main/java/itn/let/uss/ion/sign/service/impl/SignManageDAO.java deleted file mode 100644 index 94db1d6..0000000 --- a/src/main/java/itn/let/uss/ion/sign/service/impl/SignManageDAO.java +++ /dev/null @@ -1,68 +0,0 @@ -package itn.let.uss.ion.sign.service.impl; - -import java.util.List; - -import org.springframework.stereotype.Repository; - -import egovframework.rte.psl.dataaccess.EgovAbstractDAO; -import itn.let.uss.ion.sign.service.ApprovalVO; -import itn.let.uss.ion.sign.service.SignVO; - -@Repository("signManageDAO") -public class SignManageDAO extends EgovAbstractDAO{ - - @SuppressWarnings("unchecked") - public List selectSignList(SignVO signVO) throws Exception { - return (List)list("signManageDAO.selectSignList", signVO); - } - - public SignVO selectSignVO(SignVO signVO) throws Exception { - return (SignVO)select("signManageDAO.selectSignVO", signVO); - } - - @SuppressWarnings("unchecked") - public List selectApprovalList(ApprovalVO approvalVO) throws Exception { - return (List)list("signManageDAO.selectApprovalList", approvalVO); - } - - public ApprovalVO selectLocNmTxt(ApprovalVO tempLocApprovalVO) throws Exception{ - return (ApprovalVO)select("signManageDAO.selectLocNmTxt", tempLocApprovalVO); - } - - public void updateSign(SignVO signVO) throws Exception{ - update("signManageDAO.updateSign",signVO); - } - - public void insertSign(SignVO signVO) throws Exception{ - insert("signManageDAO.insertSign", signVO); - } - - public void deleteApproval(SignVO signVO) throws Exception{ - delete("signManageDAO.deleteApproval", signVO); - } - - public void insertApproval(ApprovalVO tempApprovalVO) throws Exception{ - insert("signManageDAO.insertApproval", tempApprovalVO); - } - - public void updateRecipState(SignVO signVO) throws Exception{ - update("signManageDAO.updateRecipState",signVO); - } - - public void updateAccept(ApprovalVO approvalVO) throws Exception{ - update("signManageDAO.updateAccept",approvalVO); - } - - public void deleteAccept(String id) throws Exception{ - delete("signManageDAO.deleteAccept", id); - } - - public void deleteSign(String id) throws Exception{ - delete("signManageDAO.deleteSign", id); - } - - public void updateSignResult(SignVO signVO) throws Exception{ - update("signManageDAO.updateSignResult",signVO); - } - -} diff --git a/src/main/java/itn/let/uss/ion/sign/service/impl/SignManageServiceImpl.java b/src/main/java/itn/let/uss/ion/sign/service/impl/SignManageServiceImpl.java deleted file mode 100644 index 435ba9d..0000000 --- a/src/main/java/itn/let/uss/ion/sign/service/impl/SignManageServiceImpl.java +++ /dev/null @@ -1,135 +0,0 @@ -package itn.let.uss.ion.sign.service.impl; - -import java.util.List; - -import javax.annotation.Resource; - -import org.springframework.stereotype.Service; - -import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; -import itn.let.uss.ion.sign.service.ApprovalVO; -import itn.let.uss.ion.sign.service.SignManageService; -import itn.let.uss.ion.sign.service.SignVO; - -@Service("signManageService") -public class SignManageServiceImpl extends EgovAbstractServiceImpl implements SignManageService{ - - /** auditManageDAO */ - @Resource(name="signManageDAO") - private SignManageDAO signManageDAO; - - @Override - public List selectSignList(SignVO signVO) throws Exception{ - return signManageDAO.selectSignList(signVO); - - } - - @Override - public SignVO selectSignVO(SignVO signVO) throws Exception { - return signManageDAO.selectSignVO(signVO); - } - - @Override - public List selectApprovalList(ApprovalVO approvalVO) throws Exception { - return signManageDAO.selectApprovalList(approvalVO); - } - - @Override - public ApprovalVO selectLocNmTxt(ApprovalVO tempLocApprovalVO) throws Exception { - return signManageDAO.selectLocNmTxt(tempLocApprovalVO); - } - - @Override - public void updateSign(SignVO signVO) throws Exception { - signManageDAO.updateSign(signVO); - } - - @Override - public void delInsertApproval(SignVO signVO) throws Exception { - signManageDAO.deleteApproval(signVO); - insertApproval(signVO) ; - } - - @Override - public void insertSign(SignVO signVO) throws Exception { - signManageDAO.insertSign(signVO); - - } - - @Override - public void insertApproval(SignVO signVO) throws Exception { - int index = 0 ; - for(ApprovalVO tempApprovalVO : signVO.getApprovalListVO()){ - tempApprovalVO.setApprCnd("ip"); - if(0==index) { //첫번째 결제자에 R 넣음. - tempApprovalVO.setApprStatus("R"); - } - tempApprovalVO.setApprId(signVO.getRecipId()); - signManageDAO.insertApproval(tempApprovalVO); - index++; - } - } - - @Override - public void updateAccept(ApprovalVO approvalVO) throws Exception { - approvalVO.setApprCnd("ip"); - SignVO signVO = new SignVO(); //IP결제 테이블 - signVO.setRecipId(approvalVO.getApprId()); - if(approvalVO.getApprSn().equals( approvalVO.getApprTotCnt()-1+"" )){ //마지막 결제면 상태 완료로 - if("Y".equals(approvalVO.getApprYn())){ //결제 - signVO.setRecipState("04"); //완료 - approvalVO.setApprStatus(""); //상태 R > "" - }else { - signVO.setRecipState("03"); //반려 - approvalVO.setApprStatus("N"); //반려 - } - signManageDAO.updateRecipState(signVO) ; - signManageDAO.updateAccept(approvalVO); //현제 테이블 변경 - }else { //마지막 결제가 아니면 현제테이블 R > "" , 다음테이블 변경 apprStatus = R로 - if("Y".equals(approvalVO.getApprYn())){ //결제 - signVO.setRecipState("02"); //결제중 - - approvalVO.setApprStatus(""); //상태 R > "" - signManageDAO.updateAccept(approvalVO); //현제 테이블 변경 - - //다음테이블 R로 - approvalVO.setApprSn(Integer.parseInt(approvalVO.getApprSn())+1+""); - approvalVO.setApprYn(""); - approvalVO.setApprStatus("R"); - signManageDAO.updateAccept(approvalVO); - }else { - signVO.setRecipState("03"); //반려 - - approvalVO.setApprStatus("N"); //상태 반려 - signManageDAO.updateAccept(approvalVO); //현제 테이블 변경 - //다음테이블 R로(최대 2개가 마지막임) - { - approvalVO.setApprSn(Integer.parseInt(approvalVO.getApprSn())+1+""); - approvalVO.setApprYn("N"); - approvalVO.setApprStatus("N"); - approvalVO.setApprCn("선 결제자 반려처리"); - signManageDAO.updateAccept(approvalVO); - - approvalVO.setApprSn(Integer.parseInt(approvalVO.getApprSn())+2+""); - approvalVO.setApprYn("N"); - approvalVO.setApprStatus("N"); - signManageDAO.updateAccept(approvalVO); - } - } - signManageDAO.updateRecipState(signVO) ; - } - } - - @Override - public void deleteSign(String id) throws Exception { - signManageDAO.deleteSign(id) ; - signManageDAO.deleteAccept(id) ; - } - - @Override - public void updateSignResult(SignVO signVO) throws Exception { - signManageDAO.updateSignResult(signVO) ; - } - - -} diff --git a/src/main/java/itn/let/uss/ion/sign/web/SignManageController.java b/src/main/java/itn/let/uss/ion/sign/web/SignManageController.java deleted file mode 100644 index d190d37..0000000 --- a/src/main/java/itn/let/uss/ion/sign/web/SignManageController.java +++ /dev/null @@ -1,337 +0,0 @@ -package itn.let.uss.ion.sign.web; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.stereotype.Controller; -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.servlet.ModelAndView; - -import egovframework.rte.fdl.idgnr.EgovIdGnrService; -import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; -import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; -import itn.com.cmm.ComDefaultVO; -import itn.com.cmm.LoginVO; -import itn.let.org.service.LocVO; -import itn.let.org.service.OrgCharVO; -import itn.let.org.service.OrgChartManageService; -import itn.let.uss.ion.sign.service.ApprovalVO; -import itn.let.uss.ion.sign.service.SignManageService; -import itn.let.uss.ion.sign.service.SignVO; -import itn.let.uss.umt.service.UserManageVO; - -@Controller -public class SignManageController { - - /** ipManageService */ - @Resource(name = "signManageService") - private SignManageService signManageService; - - @Resource(name = "orgChartManageService") - private OrgChartManageService orgChartManageService; - - @Resource(name = "egovSignGnrService") - private EgovIdGnrService idgenSignId; - - - //결제 신청 목록 - @RequestMapping(value="/uss/ion/sign/signList.do") - public String selectSignList(@RequestParam Map commandMap, - @ModelAttribute("signVO") SignVO signVO, - ModelMap model) throws Exception { - - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - //관리자의 경우 모두 검색 - List authorities = EgovUserDetailsHelper.getAuthorities(); - boolean isAdmin = false; - for (String authority : authorities) { - if (authority.equals("ROLE_ADMIN")) isAdmin = true; - } - - signVO.setFrstRegisterId(loginVO.getId()); - - if(signVO.getPageUnit() != 10){ - signVO.setPageUnit(signVO.getPageUnit()); - } - - /** pageing */ - PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setCurrentPageNo(signVO.getPageIndex()); - paginationInfo.setRecordCountPerPage(signVO.getPageUnit()); - paginationInfo.setPageSize(signVO.getPageSize()); - - signVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); - signVO.setLastIndex(paginationInfo.getLastRecordIndex()); - signVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); - - if("".equals(signVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - signVO.setSearchSortCnd("recipId"); - signVO.setSearchSortOrd("desc"); - } - - List signVOList = signManageService.selectSignList(signVO) ; - model.addAttribute("ipRecList", signVOList); - - int totCnt = 0; - if (signVOList.size() > 0 ) totCnt = signVOList.get(0).getTotCnt(); - - paginationInfo.setTotalRecordCount(totCnt); - model.addAttribute("paginationInfo", paginationInfo); - return "/uss/ion/sign/SignList"; - } - - //IP신청 등록 팝업 - @RequestMapping(value="/uss/ion/sign/SignPopup.do") - public String selectIpReceivePopup(@ModelAttribute("searchVO") ComDefaultVO searchVO, - @RequestParam Map commandMap, - @ModelAttribute("signVO") SignVO signVO, - ModelMap model) throws Exception { - - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - - //관리자의 경우 모두 검색 - List authorities = EgovUserDetailsHelper.getAuthorities(); - boolean isAdmin = false; - for (String authority : authorities) { - if (authority.equals("ROLE_ADMIN")) isAdmin = true; - } - model.addAttribute("isAdmin", isAdmin); //관리자의 경우 하단 결제란 추가 가능하게 - - if(!isAdmin) signVO.setFrstRegisterId(loginVO.getId()); - - if(signVO.getPageUnit() != 10){ - signVO.setPageUnit(signVO.getPageUnit()); - } - - SignVO signRecResultVO = new SignVO(); - ApprovalVO approvalVO = new ApprovalVO(); - - //결제가 부서정보 가져오기 - ApprovalVO tempLocApprovalVO = new ApprovalVO(); - tempLocApprovalVO.setApprId(loginVO.getId()); - tempLocApprovalVO = signManageService.selectLocNmTxt(tempLocApprovalVO); - - List approvalList = new ArrayList<>(); - if("Modify".equals(signVO.getPageType())){ //수정 - //ipRecResultVO = ipManageService.selectIpRecVO(signVO) ; - signRecResultVO = signManageService.selectSignVO(signVO) ; - if(loginVO.getId().equals(signRecResultVO.getFrstRegisterId())){ //자신이 신청인 - signRecResultVO.setCkRegister(true); - } - - //결제자인 경우 - approvalVO.setApprId(signVO.getRecipId()); - approvalList = signManageService.selectApprovalList(approvalVO) ; - approvalVO.setApprTotCnt( approvalList == null ? 0 : approvalList.size()); - for(ApprovalVO tempApprovalVO : approvalList) { - if(loginVO.getId().equals(tempApprovalVO.getApprUsrId())){ //자신이 신청인이면서 결제차례인경우 - signRecResultVO.setCkApplicant(true); //결제자임 - tempApprovalVO.setCkApplicantCmt(true); //자신의 결제 줄세팅 - approvalVO.setApprSn(tempApprovalVO.getApprSn()); //몇번째인지 - if("R".equals(tempApprovalVO.getApprStatus())){ //자신이 결제할 차례인지 - approvalVO.setApprStatus("R"); - } - } - if(null == tempApprovalVO.getApprYn()) { - tempApprovalVO.setApprYn("N"); - } - } - }else{ //등록 - signRecResultVO.setFrstRegisterIdTxt(loginVO.getName()); //이름 - signRecResultVO.setFrstRegisterId(loginVO.getId()); //아이디 - - signRecResultVO.setCkRegister(true); //신청자가 신청임 - signRecResultVO.setRecipState("01"); // - if(null !=tempLocApprovalVO) { - signRecResultVO.setRecipDeptTxt(tempLocApprovalVO.getApprDeptText()); //소속 TXT - signRecResultVO.setRecipDept(tempLocApprovalVO.getApprDept()); //소속ID - } - - } - //model.addAttribute("ipRecResultVO", ipRecResultVO); - model.addAttribute("signRecResultVO", signRecResultVO); - model.addAttribute("approvalList", approvalList); - model.addAttribute("approvalVO", approvalVO); - - /* 단말유형 - CmmnDetailCodeVO codeVo = new CmmnDetailCodeVO(); - codeVo.setCodeId("IPMA02"); - codeVo.setItsmYn("Y"); - List ipHwCodeList = cmmnDetailCodeManageService.selectCmmnDetailCodeTree(codeVo) ; - model.addAttribute("ipHwCodeList", ipHwCodeList); - - 인터넷망 - codeVo.setCodeId("IPMA04"); - codeVo.setItsmYn("Y"); - codeVo.setUseAt("Y"); - List ipNetCodeList = cmmnDetailCodeManageService.selectCmmnDetailCodeTree(codeVo) ; - model.addAttribute("ipNetCodeList", ipNetCodeList);*/ - - //return "/uss/itsm/ip/IpReceivePopup"; - return "/uss/ion/sign/SignPopup"; - } - - // 조직도 화면 - @RequestMapping("/uss/ion/sign/OrgChartPopup.do") - public String orgChartPopup(@ModelAttribute("locVO") LocVO locVO, - ModelMap model, - HttpServletResponse response) throws Exception { - - //return "/uss/itsm/orgChart/OrgChartPopup"; - return "/uss/ion/sign/OrgChartPopup"; - } - - // 부서별 직원 정보 보기 - @RequestMapping("/uss/ion/sign/selectUserListAjax.do") - public ModelAndView selectStaffListAjax( - @ModelAttribute("userManageVO") UserManageVO userManageVO - , @ModelAttribute("orgCharVO") OrgCharVO orgCharVO, ModelMap model) throws Exception { - - ModelAndView modelAndView = new ModelAndView(); - if ((userManageVO.getPartIdx() != null) && (userManageVO.getPartIdx().equals("DEPT"))) { - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - userManageVO.setPartIdx(loginVO.getOrgnztNo()); - } - modelAndView.setViewName("jsonView"); - - LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); - if(null != loginVO && !"super".equals(loginVO.getSiteId())){ - userManageVO.setSiteId(loginVO.getSiteId()); - } - - - List userList = orgChartManageService.selectUserListAjax(userManageVO); - model.addAttribute("userList", userList); - modelAndView.addObject("status", "success"); - - return modelAndView; - } - - /*등록*/ - @RequestMapping(value = "/uss/ion/sign/SignUpdateAjax.do") - public ModelAndView updateSignUpdateAjax(@RequestParam Map commandMap, - @ModelAttribute("signVO") SignVO signVO, - @ModelAttribute("approvalVO") ApprovalVO approvalVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - if (!isAuthenticated) { - modelAndView.addObject("result", "auth_fail"); //권한없음 팝업창 닫고, 오프너 창 리로드 - return modelAndView; - } - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - try { - signVO.setFrstRegisterId(loginVO.getId()); - signVO.setLastUpdusrId(loginVO.getId()); - if("Modify".equals(signVO.getPageType())) { //수정시 변경내역저장 - //ipManageService.updateRecIp(signVO); //테이블 update - signManageService.updateSign(signVO); //테이블 update - //결제가 시작 안되었을때 - if(null != signVO.getApprovalListVO() && signVO.getApprovalListVO().size() > 0) { //결제 테이블 insert - signManageService.delInsertApproval(signVO); //결제 테이블 모두 삭제 후 다시 insert - } - }else {//등록 - String recipId = idgenSignId.getNextStringId(); - signVO.setRecipId(recipId); - signManageService.insertSign(signVO); //IP신청 테이블 insert - if(signVO.getApprovalListVO()!=null && signVO.getApprovalListVO().size() > 0) { //결제 테이블 insert - signManageService.insertApproval(signVO); - } - } - modelAndView.addObject("result", "success"); - }catch (Exception e) { - modelAndView.addObject("result", "fail"); - } - return modelAndView; - } - - /*승인*/ - @RequestMapping(value = "/uss/ion/sign/SignAcceptAjax.do") - public ModelAndView acceptSignAjax(@RequestParam Map commandMap, - @ModelAttribute("signVO") SignVO signVO, - @ModelAttribute("approvalVO") ApprovalVO approvalVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - if (!isAuthenticated) { - modelAndView.addObject("result", "auth_fail"); //권한없음 팝업창 닫고, 오프너 창 리로드 - return modelAndView; - } - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - try { - signVO.setFrstRegisterId(loginVO.getId()); - signVO.setLastUpdusrId(loginVO.getId()); - signManageService.updateAccept(approvalVO); - - modelAndView.addObject("result", "success"); - }catch (Exception e) { - modelAndView.addObject("result", "fail"); - } - return modelAndView; - } - - /*삭제 */ - @RequestMapping(value = "/uss/ion/sign/SignDeleteAjax.do") - public ModelAndView deleteSign(@RequestParam Map commandMap, - @ModelAttribute("signVO") SignVO signVO, - @ModelAttribute("approvalVO") ApprovalVO approvalVO, - @RequestParam("del") String[] del - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - if (!isAuthenticated) { - modelAndView.addObject("result", "auth_fail"); //권한없음 팝업창 닫고, 오프너 창 리로드 - return modelAndView; - } - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - for(String id:del) { - try { - signManageService.deleteSign(id); //삭제 - modelAndView.addObject("result", "success"); - }catch (Exception e) { - modelAndView.addObject("result", "fail"); - return modelAndView; - } - } - return modelAndView; - } - - /*할당 정보 저장 */ - @RequestMapping(value = "/uss/ion/sign/SignUpdateResultAjax.do") - public ModelAndView updateSignResult(@RequestParam Map commandMap, - @ModelAttribute("signVO") SignVO signVO, - @ModelAttribute("approvalVO") ApprovalVO approvalVO - ) throws Exception { - ModelAndView modelAndView = new ModelAndView(); - modelAndView.setViewName("jsonView"); - Boolean isAuthenticated = EgovUserDetailsHelper.isAuthenticated(); - if (!isAuthenticated) { - modelAndView.addObject("result", "auth_fail"); //권한없음 팝업창 닫고, 오프너 창 리로드 - return modelAndView; - } - LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); - try { - signVO.setFrstRegisterId(loginVO.getId()); - signVO.setLastUpdusrId(loginVO.getId()); - signManageService.updateSignResult(signVO); //할당 정보 컬럼 update - modelAndView.addObject("result", "success"); - }catch (Exception e) { - modelAndView.addObject("result", "fail"); - } - return modelAndView; - } - - - -} diff --git a/src/main/java/itn/let/uss/umt/web/EgovUserManageController.java b/src/main/java/itn/let/uss/umt/web/EgovUserManageController.java index d9ac973..82bbbc3 100644 --- a/src/main/java/itn/let/uss/umt/web/EgovUserManageController.java +++ b/src/main/java/itn/let/uss/umt/web/EgovUserManageController.java @@ -17,7 +17,6 @@ import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.RSAPublicKeySpec; import java.text.SimpleDateFormat; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -33,7 +32,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; @@ -41,8 +39,6 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; @@ -92,7 +88,6 @@ import itn.let.kakao.kakaoComm.KakaoVO; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiProfile; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService; -import itn.let.mail.service.StatusResponse; import itn.let.mjo.addr.service.AddrService; import itn.let.mjo.addr.service.AddrVO; import itn.let.mjo.event.service.MjonEventService; @@ -119,15 +114,12 @@ import itn.let.mjo.pay.service.RefundVO; import itn.let.mjo.payva.service.VacsVactService; import itn.let.mjo.payva.service.VacsVactVO; import itn.let.mjo.reservmsg.service.MjonReservMsgService; -import itn.let.org.service.LocVO; -import itn.let.org.service.OrgChartManageService; import itn.let.sec.ram.service.AuthorManageVO; import itn.let.sec.ram.service.EgovAuthorManageService; import itn.let.sec.rgm.service.AuthorGroup; import itn.let.sec.rgm.service.EgovAuthorGroupService; import itn.let.sym.ccm.cde.service.CateCode; import itn.let.sym.ccm.cde.service.EgovCcmCmmnDetailCodeManageService; - import itn.let.sym.log.user.service.UserLogService; import itn.let.sym.log.user.service.UserLogVO; import itn.let.sym.site.service.EgovSiteManagerService; @@ -202,13 +194,6 @@ public class EgovUserManageController { @Resource(name = "egovAuthorManageService") private EgovAuthorManageService egovAuthorManageService; - /*@Resource(name = "EgovOrgChartManageService") - private EgovOrgChartManageService orgChartManageService;*/ - - @Resource(name = "orgChartManageService") - private OrgChartManageService orgChartManageService; - - @Resource(name = "egovAuthorGroupService") private EgovAuthorGroupService egovAuthorGroupService; @@ -660,12 +645,6 @@ public class EgovUserManageController { vo.setTableNm("LETTNORGNZTINFO"); model.addAttribute("groupId_result", cmmUseService.selectGroupIdDetail(vo)); - //조직도 정보조회 - /*PartInfVO partInfVO = new PartInfVO(); - partInfVO.setDepth(1); - List orgChartDepth1 = orgChartManageService.selectChartDepth(partInfVO); - model.addAttribute("orgChartDepth1", orgChartDepth1);*/ - //권한조회 AuthorManageVO authorManageVO = new AuthorManageVO(); authorManageVO.setFirstIndex(0); @@ -674,30 +653,6 @@ public class EgovUserManageController { authorManageVO.setAuthorManageList(egovAuthorManageService.selectAuthorList(authorManageVO)); model.addAttribute("authorList", authorManageVO.getAuthorManageList()); - - //selectbox 미리 만들기 - LocVO locVO = new LocVO(); - locVO.setTopLocNo(topLocNo); //최상위 매뉴번호 - List orgHiddenList = orgChartManageService.selectOrgChartListAjax(locVO); - String userOneDepth = ""; - String userTwoDepth = ""; - - if(null != userManageVO.getPartIdx() && !"".equals(userManageVO.getPartIdx())) { - for(LocVO tempLocVO : orgHiddenList) { - if(userManageVO.getPartIdx().equals(tempLocVO.getId())){ - if(1==tempLocVO.getDepth()) { //1뎁스면 조회 안함 - userOneDepth = tempLocVO.getId(); - }else { //2뎁스면 - userTwoDepth = tempLocVO.getId() ; - userOneDepth = tempLocVO.getParent() ; - } - } - } - } - model.addAttribute("userOneDepth", userOneDepth); - model.addAttribute("userTwoDepth", userTwoDepth); - model.addAttribute("orgHiddenList", orgHiddenList); - return "cmm/uss/umt/EgovUserInsert"; } @@ -751,11 +706,6 @@ public class EgovUserManageController { //가입방법 - ITN025 vo.setCodeId("ITN025"); model.addAttribute("joinTypeCode", cmmUseService.selectCmmCodeDetail(vo)); - //조직도 정보조회 - /*PartInfVO partInfVO = new PartInfVO(); - partInfVO.setDepth(1); - List orgChartDepth1 = orgChartManageService.selectChartDepth(partInfVO); - model.addAttribute("orgChartDepth1", orgChartDepth1);*/ //권한조회 AuthorManageVO authorManageVO = new AuthorManageVO(); @@ -929,30 +879,6 @@ public class EgovUserManageController { model.addAttribute("isMember", "Y"); } - //selectbox 미리 만들기 - LocVO locVO = new LocVO(); - locVO.setTopLocNo(topLocNo); //최상위 매뉴번호 - List orgHiddenList = orgChartManageService.selectOrgChartListAjax(locVO); - String userOneDepth = ""; - String userTwoDepth = ""; - - if(null != userManageVO.getPartIdx() && !"".equals(userManageVO.getPartIdx())) { - for(LocVO tempLocVO : orgHiddenList) { - if(userManageVO.getPartIdx().equals(tempLocVO.getId())){ - if(1==tempLocVO.getDepth()) { //1뎁스면 조회 안함 - userOneDepth = tempLocVO.getId(); - }else { //2뎁스면 - userTwoDepth = tempLocVO.getId() ; - userOneDepth = tempLocVO.getParent() ; - } - } - } - } - model.addAttribute("userOneDepth", userOneDepth); - model.addAttribute("userTwoDepth", userTwoDepth); - model.addAttribute("orgHiddenList", orgHiddenList); - - //카테고리 미리만들기 selectbox 미리 만들기 List cateCodeList = cmmnDetailCodeManageService.selectCateCodeWithList(cateCode); model.addAttribute("cateCodeList", cateCodeList); diff --git a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cmm.xml b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cmm.xml index c571908..840751f 100644 --- a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cmm.xml +++ b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cmm.xml @@ -6,6 +6,5 @@ - diff --git a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-com.xml b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-com.xml deleted file mode 100644 index 22872ec..0000000 --- a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-com.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-org.xml b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-org.xml deleted file mode 100644 index b5fd6c8..0000000 --- a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-org.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-resve.xml b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-resve.xml deleted file mode 100644 index bc0b9de..0000000 --- a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-resve.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-smt-sim.xml b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-smt-sim.xml deleted file mode 100644 index f6b8e98..0000000 --- a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-cop-smt-sim.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-sym-wordcloud.xml b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-sym-wordcloud.xml deleted file mode 100644 index 0a5c12c..0000000 --- a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-sym-wordcloud.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - diff --git a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-uss-umt.xml b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-uss-umt.xml index 9da2a8f..fe8467c 100644 --- a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-uss-umt.xml +++ b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-uss-umt.xml @@ -4,7 +4,6 @@ - diff --git a/src/main/resources/egovframework/sqlmap/let/cop/com/EgovBBSUse_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/cop/com/EgovBBSUse_SQL_Mysql.xml deleted file mode 100644 index f5461f8..0000000 --- a/src/main/resources/egovframework/sqlmap/let/cop/com/EgovBBSUse_SQL_Mysql.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/egovframework/sqlmap/let/cop/com/EgovTemplate_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/cop/com/EgovTemplate_SQL_Mysql.xml deleted file mode 100644 index 027fc6f..0000000 --- a/src/main/resources/egovframework/sqlmap/let/cop/com/EgovTemplate_SQL_Mysql.xml +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/egovframework/sqlmap/let/cop/org/EgovOrgChart_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/cop/org/EgovOrgChart_SQL_Mysql.xml deleted file mode 100644 index f85b37f..0000000 --- a/src/main/resources/egovframework/sqlmap/let/cop/org/EgovOrgChart_SQL_Mysql.xml +++ /dev/null @@ -1,222 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - = #incrsSortOrd# - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/egovframework/sqlmap/let/cop/resve/ResveManage_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/cop/resve/ResveManage_SQL_Mysql.xml deleted file mode 100644 index 87fd162..0000000 --- a/src/main/resources/egovframework/sqlmap/let/cop/resve/ResveManage_SQL_Mysql.xml +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/egovframework/sqlmap/let/cop/smt/sim/EgovIndvdlSchdulManage_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/cop/smt/sim/EgovIndvdlSchdulManage_SQL_Mysql.xml deleted file mode 100644 index d62a231..0000000 --- a/src/main/resources/egovframework/sqlmap/let/cop/smt/sim/EgovIndvdlSchdulManage_SQL_Mysql.xml +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DELETE FROM LETTNDIARYINFO WHERE SCHDUL_ID = #schdulId#; - - - - - - - - UPDATE LETTNSCHDULINFO - SET - SCHDUL_SE=#schdulSe#, - SCHDUL_DEPT_ID=#schdulDeptId#, - SCHDUL_KND_CODE=#schdulKindCode#, - SCHDUL_BEGINDE=#schdulBgnde#, - SCHDUL_ENDDE=#schdulEndde#, - SCHDUL_NM=#schdulNm#, - SCHDUL_CN=#schdulCn#, - SCHDUL_IPCR_CODE=#schdulIpcrCode#, - SCHDUL_CHARGER_ID=#schdulChargerId#, - ATCH_FILE_ID=#atchFileId#, - REPTIT_SE_CODE=#reptitSeCode#, - LAST_UPDT_PNTTM = sysdate(), - LAST_UPDUSR_ID = #lastUpdusrId# - WHERE SCHDUL_ID = #schdulId# - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/let/orgChart/OrgChartManage_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/orgChart/OrgChartManage_SQL_Mysql.xml deleted file mode 100644 index f58395e..0000000 --- a/src/main/resources/egovframework/sqlmap/let/orgChart/OrgChartManage_SQL_Mysql.xml +++ /dev/null @@ -1,306 +0,0 @@ - - - - - - - - - - - - - - - - - - - INSERT INTO LETTNEMPLYRINFO - ( - EMPLYR_ID - , PART_IDX - , OFCPS_NM - , USER_NM - , OFFM_TELNO - , EMAIL_ADRES - , ESNTL_ID - ) - VALUES - ( - #emplyrId# - , #partIdx# - , #ofcpsNm# - , #userNm# - , #offmTelno# - , #emailAdres# - , #esntlId# - ) - - - - UPDATE LETTNEMPLYRINFO SET - PART_IDX = #partIdx# - , OFCPS_NM = #ofcpsNm# - , USER_NM = #emplyrNm# - , EMPL_NO = #emplNo# - , OFFM_TELNO = #offmTelno# - , EMAIL_ADRES = #emailAdres# - , ESNTL_ID = #esntlId# - , USER_WORK = #userWork# - WHERE - EMPLYR_ID = #emplyrId# - - - - DELETE FROM LETTNEMPLYRINFO - WHERE EMPLYR_ID = #emplyrId# - - - - - - INSERT INTO ITSM_LOC - ( - LOC_NM, - LOC_NO, - UPPER_LOC_NO, - LOC_ORDR, - LOC_DEPTH, - USE_YN - ) - VALUES - ( - #locNm#, - #locNo#, - #upperLocNo#, - #locOrdr#, - #locDepth#, - #useYn# - ) - - - - UPDATE ITSM_LOC - SET - LOC_NM = #locNm# - WHERE LOC_NO = #locNo# - - - - DELETE FROM ITSM_LOC - WHERE LOC_NO = #locNo# - - - - UPDATE ITSM_LOC - SET FRST_REGIST_PNTTM = now(), - LOC_ORDR = #locOrdr#, - UPPER_LOC_NO = #upperMenuId# - WHERE LOC_NO = #locNo# - - - - UPDATE ITSM_LOC A , - (SELECT LOC_NO, ROW_NUMBER() OVER(ORDER BY LOC_ORDR, FRST_REGIST_PNTTM - - DESC - - ) AS SORT1 FROM ITSM_LOC - WHERE UPPER_LOC_NO = #upperLocNo# ORDER BY LOC_ORDR ASC ) B - SET A.LOC_ORDR = B.SORT1 - WHERE A.LOC_NO = B.LOC_NO - - - - UPDATE ITSM_LOC - SET LOC_CN = #locCn# - WHERE LOC_NO = #partIdx# - - - - - - - - - DELETE FROM LOC_INFO - WHERE LOC_INFO_ID = #emplyrId# - - - diff --git a/src/main/resources/egovframework/sqlmap/let/sym/wordcloud/EgovWordCloudManage_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/sym/wordcloud/EgovWordCloudManage_SQL_Mysql.xml deleted file mode 100644 index a1f9e02..0000000 --- a/src/main/resources/egovframework/sqlmap/let/sym/wordcloud/EgovWordCloudManage_SQL_Mysql.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - diff --git a/src/main/resources/egovframework/sqlmap/let/uss/ion/cnf/HomePageConfigManage_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/uss/ion/cnf/HomePageConfigManage_SQL_Mysql.xml index f557288..fcc90e2 100644 --- a/src/main/resources/egovframework/sqlmap/let/uss/ion/cnf/HomePageConfigManage_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/uss/ion/cnf/HomePageConfigManage_SQL_Mysql.xml @@ -12,7 +12,6 @@ - @@ -275,204 +274,6 @@ DELETE FROM TB_SCRIPT_MNG - - - - - - - - - - INSERT - INTO TB_CAPTCHA_MNG( - CAPTCHA_CODE, - - CAPTCHA_KEY, - - CAPTCHA_SJ, - CAPTCHA_CN, - REGISTER_ID, - REGIST_PNTTM - ) - VALUES( - #captchaCode#, - - #captchaKey#, - - #captchaSj#, - #captchaCn#, - #registerId#, - now() - ) - - - - - - - - UPDATE TB_CAPTCHA_MNG - SET CAPTCHA_KEY = #captchaKey#, - CAPTCHA_SJ = #captchaSj#, - CAPTCHA_CN = #captchaCn#, - REGISTER_ID = #registerId#, - UPDT_PNTTM = now() - WHERE CAPTCHA_CODE = #captchaCode# - - - - - DELETE FROM TB_CAPTCHA_MNG - WHERE CAPTCHA_CODE = #captchaCode# - - - - - - - - - - - - - - INSERT - INTO TB_CAPTCHA_SITE( - CAPTCHA_CODE, - CAPTCHA_SJ, - CAPTCHA_KEY, - REGISTER_ID, - REGIST_PNTTM - ) - VALUES( - #captchaCode#, - #captchaSj#, - #captchaKey#, - #registerId#, - now() - ) - - - - - UPDATE TB_CAPTCHA_SITE - SET CAPTCHA_CODE = #captchaCode#, - CAPTCHA_SJ = #captchaSj#, - CAPTCHA_KEY = #captchaKey#, - REGISTER_ID = #registerId#, - UPDT_PNTTM = now() - - - - - DELETE FROM TB_CAPTCHA_SITE - - - - SELECT COUNT(RECIP_ID) OVER() AS totCnt , - - WHERE 1=1 - - - AND (RECIP_SJ LIKE CONCAT ('%', #searchKeyword#,'%') - OR RECIP_CN LIKE CONCAT ('%', #searchKeyword#,'%') - OR C.USER_NM LIKE CONCAT ('%', #searchKeyword#,'%') - ) - - /**제목 */ - AND RECIP_SJ LIKE CONCAT ('%', #searchKeyword#,'%') - - /** 제목+내용 */ - AND (RECIP_CN LIKE CONCAT ('%', #searchKeyword#,'%') - OR RECIP_CN LIKE CONCAT ('%', #searchKeyword#,'%') - ) - - /** 작성자 */ - AND C.USER_NM LIKE CONCAT ('%', #searchKeyword#,'%') - - - - - AND RECIP_CN LIKE CONCAT ('%', #searchCn#,'%') - - - AND B.USER_NM LIKE CONCAT ('%', #searchNm#,'%') - - - AND ( A.FRST_REGIST_PNTTM BETWEEN STR_TO_DATE(CONCAT(#searchStartDt#,'00:00:00'), '%Y-%m-%d %H:%i:%s') - AND STR_TO_DATE(CONCAT(#searchEndDt#,'23:59:59'), '%Y-%m-%d %H:%i:%s') - ) - - /** 자신의 것과 결제자가 등록된것 */ - - AND ( FRST_REGISTER_ID = #frstRegisterId# - OR RECIP_ID IN ( - SELECT APPR_ID FROM ITSM_APPROVAL B - WHERE B.APPR_USR_ID = #frstRegisterId# - ) - ) - - /**자신이 결제할 차례인 것만 */ - AND ( - RECIP_ID IN ( - SELECT APPR_ID FROM ITSM_APPROVAL B - WHERE B.APPR_USR_ID = #frstRegisterId# - AND B.APPR_STATUS = 'R' - ) - ) - - - ORDER BY 1=1 - - ,$searchSortCnd$ - - - $searchSortOrd$ - - LIMIT #recordCountPerPage# OFFSET #firstIndex# - - - - - - - - - - - - - UPDATE ITSM_IP_RECEIVE - SET - RECIP_SJ = #recipSj#, - RECIP_EQUI = #recipEqui#, - RECIP_NET_CODE = #recipNetCode#, - RECIP_CN = #recipCn# - WHERE 1=1 - AND RECIP_ID = #recipId# - - - - INSERT - INTO ITSM_IP_RECEIVE - ( - RECIP_ID, - RECIP_SJ, - RECIP_DEPT, - FRST_REGISTER_ID, - RECIP_EQUI, - RECIP_NET_CODE, - RECIP_CN, - RECIP_RESULT - ) - VALUES - ( - #recipId#, - #recipSj#, - #recipDept#, - #frstRegisterId#, - #recipEqui#, - #recipNetCode#, - #recipCn#, - #recipResult# - ) - - - - DELETE FROM ITSM_APPROVAL - WHERE APPR_ID = #recipId# - - - - INSERT INTO ITSM_APPROVAL - ( - APPR_ID, - APPR_CND, - APPR_SN, - APPR_USR_ID, - APPR_USR_NM, - FRST_REGIST_PNTTM, - APPR_DEPT, - APPR_STATUS - ) - VALUES - ( - #apprId#, - #apprCnd#, - #apprSn#, - #apprUsrId#, - #apprUsrNm#, - now(), - #apprDept#, - #apprStatus# - ) - - - - UPDATE ITSM_IP_RECEIVE - SET - RECIP_STATE = #recipState# - WHERE RECIP_ID = #recipId# - - - - UPDATE ITSM_APPROVAL - SET - - APPR_YN = #apprYn#, - APPR_CN = #apprCn#, - APPR_DATETIME = now(), - - APPR_STATUS = #apprStatus# - WHERE APPR_ID = #apprId# - AND APPR_CND = #apprCnd# - AND APPR_SN = #apprSn# - - - - - - - - - - - - UPDATE ITSM_IP_RECEIVE - SET - RECIP_RESULT = #recipResult# - WHERE RECIP_ID = #recipId# - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jeus-web-dd.xml b/src/main/webapp/WEB-INF/jeus-web-dd.xml deleted file mode 100644 index 4a856b2..0000000 --- a/src/main/webapp/WEB-INF/jeus-web-dd.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - /ebt - - true - true - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaAudio.jsp b/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaAudio.jsp deleted file mode 100644 index de53628..0000000 --- a/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaAudio.jsp +++ /dev/null @@ -1,16 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" - pageEncoding="UTF-8" import="itn.com.cmm.captcha.AudioCaptCha, nl.captcha.Captcha"%> -<% - String getAnswer = request.getParameter("ans"); - if ("y".equals(getAnswer)) { - Captcha captcha = (Captcha) session.getAttribute(Captcha.NAME); - getAnswer = captcha.getAnswer(); - out.print(getAnswer); - return; - - } - - out.clear(); - pageContext.pushBody(); - new AudioCaptCha().getAudioCaptCha(request, response, getAnswer); -%> diff --git a/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaImg.jsp b/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaImg.jsp deleted file mode 100644 index 24d6e64..0000000 --- a/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaImg.jsp +++ /dev/null @@ -1,9 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="itn.com.cmm.captcha.CaptCha"%><% -try{ - out.clear(); - pageContext.pushBody(); - new CaptCha().getCaptCha(request, response); -} catch(Exception e){ - e.printStackTrace(); -} -%> diff --git a/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaTest.jsp b/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaTest.jsp deleted file mode 100644 index ea5fd8a..0000000 --- a/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaTest.jsp +++ /dev/null @@ -1,93 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> - - -
-
- -
-
- 캡차 이미지 - -
- -
- - -
-
-
-
- - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaTest_back.jsp b/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaTest_back.jsp deleted file mode 100644 index e4696ba..0000000 --- a/src/main/webapp/WEB-INF/jsp/cmm/chptcha/captchaTest_back.jsp +++ /dev/null @@ -1,94 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<% -String ctx = request.getContextPath(); //콘텍스트명 얻어오기. -response.setHeader("Pragma-directive", "no-cache"); -response.setHeader("Cache-directive", "no-cache"); -response.setHeader("Pragma", "no-cache"); -response.setHeader("Cache-Control", "no-cache"); -response.setDateHeader("Expires",0); -%> - - - -CaptCha 예제3 - - - - - - - - - - -
- - - - -
- - - - diff --git a/src/main/webapp/WEB-INF/jsp/cop/bbs/EgovNoticeList.jsp b/src/main/webapp/WEB-INF/jsp/cop/bbs/EgovNoticeList.jsp index 62e9bdc..aab8e17 100644 --- a/src/main/webapp/WEB-INF/jsp/cop/bbs/EgovNoticeList.jsp +++ b/src/main/webapp/WEB-INF/jsp/cop/bbs/EgovNoticeList.jsp @@ -95,41 +95,6 @@ function fn_egov_inqire_notice(bbsId, nttId) { document.frm.submit(); } - // 폴라스토리. 첫번째 개시 이미지 -function fn_egov_update_main_pola_img() { - - var checkField = document.getElementsByName("checkList"); - var returnValue = ""; - var checkCount = 0; - - if(checkField) { - if(checkField.length > 1) { - for(var i=0; i 1) { - alert("폴라스토리 개시물은 1개만 선택 가능합니다."); return; - } - - var tmp = returnValue.split("|"); - if (tmp[2] && tmp[2]< 1) { - alert("폴라스토리 개시물은 첨부파일(이미지)을 추가해야 가능합니다."); return; - } - - if(confirm("메인화면 폴라스토리 첫번째 게시물 등록하시겠습니까?")) { - document.frm.nttIds.value = returnValue; - document.frm.action = ""; - document.frm.method = "post"; - document.frm.submit(); - } -} - function fn_egov_delete_notices() { if(fn_egov_notice_checked()) { diff --git a/src/main/webapp/WEB-INF/jsp/cop/com/EgovBoardUseInfInqire.jsp b/src/main/webapp/WEB-INF/jsp/cop/com/EgovBoardUseInfInqire.jsp deleted file mode 100644 index 694be93..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/com/EgovBoardUseInfInqire.jsp +++ /dev/null @@ -1,147 +0,0 @@ -<%-- - Class Name : EgovBoardUseInfInqire.jsp - Description : 게시판 사용정보 조회화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.04.02 이삼섭 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.04.02 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ 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" %> - - - - - - - - -게시판 사용정보 상세조회 및 수정 - - - - - - -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 내부서비스관리
  • -
  • >
  • -
  • 내부업무개시판관리
  • -
  • >
  • -
  • 게시판사용관리
  • -
-
-
- -
-

게시판 사용정보 수정

-
-
-
- - - - -
- - - - - - - - - - - - - - - - - - - - - - -
게시판명 - -
커뮤니티/ 동호회명 - - - - - - - - (시스템 활용) - -
- - required - - : checked="checked">  - : checked="checked"> -
-
제공 URL - " target="_blank"> - - -
-
- - -
- - - - - - - -
- 저장 - - 목록 -
-
- -
- -
- - - diff --git a/src/main/webapp/WEB-INF/jsp/cop/com/EgovBoardUseInfList.jsp b/src/main/webapp/WEB-INF/jsp/cop/com/EgovBoardUseInfList.jsp deleted file mode 100644 index 33df742..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/com/EgovBoardUseInfList.jsp +++ /dev/null @@ -1,187 +0,0 @@ -<%-- - Class Name : EgovBoardUseInfList.jsp - Description : 게시판 사용정보 목록화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.04.02 이삼섭 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.04.02 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> - - - - -게시판 사용정보 조회 - - - - - - - - - -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 내부서비스관리
  • -
  • >
  • -
  • 내부업무개시판관리
  • -
  • >
  • -
  • 게시판사용관리
  • -
-
-
- -
-

게시판 사용정보 조회

-
-
- - - - -
조건정보 영역 -
-
    -
  • - -
  • -
  • - -
  • -
- -
-
-
-
- - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
사용자목록관리
번호게시판명사용 커뮤니티 명사용 동호회 명등록일시사용여부
- - - "> - "> - - - - - - - - -
-
- -
-
    - -
-
- -
- - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cop/com/EgovBoardUseInfRegist.jsp b/src/main/webapp/WEB-INF/jsp/cop/com/EgovBoardUseInfRegist.jsp deleted file mode 100644 index c7e731f..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/com/EgovBoardUseInfRegist.jsp +++ /dev/null @@ -1,199 +0,0 @@ -<%-- - Class Name : EgovBoardUseInfRegist.jsp - Description : 게시판 사용정보 등록화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.04.02 이삼섭 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.04.02 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ 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" %> - - - - - -게시판 사용등록 - - - - - - - - - - -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 내부서비스관리
  • -
  • >
  • -
  • 내부업무개시판관리
  • -
  • >
  • -
  • 게시판사용관리
  • -
-
-
- -
-

게시판 사용등록

-
- -
- - - -
- - - - - - - - - -
required - - - -  새창 -
-
- - required - - - - -
-
-
- - - -
- - - - - - - -
- -
-
- -
- -
- - - - diff --git a/src/main/webapp/WEB-INF/jsp/cop/com/EgovModalPopupFrame.jsp b/src/main/webapp/WEB-INF/jsp/cop/com/EgovModalPopupFrame.jsp deleted file mode 100644 index 1c2a0b7..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/com/EgovModalPopupFrame.jsp +++ /dev/null @@ -1,49 +0,0 @@ -<%-- - Class Name : EgovModalPopupFrame.jsp - Description : 모달 팝업을 위한 외부 프레임 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.04.06 이삼섭 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.04.06 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> - - - - - - - -선택 목록 - - - - - - - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateInqirePopup.jsp b/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateInqirePopup.jsp deleted file mode 100644 index 405987f..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateInqirePopup.jsp +++ /dev/null @@ -1,165 +0,0 @@ -<%-- - Class Name : EgovTemplateInqirePop.jsp - Description : 템플릿 목록 조회 팝업화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.03.18 이삼섭 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.03.18 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> - - - - - - - - -템플릿 목록 - - - - - - -
- - - - -
-

템플릿 목록

-
조건정보 영역 -
-
    -
  • - -
  • -
  • - -
  • -
- -
-
-
- - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
사용자목록관리
번호템플릿명템플릿구분템플릿경로사용여부등록일자선택
- - - - - ','')" /> - -
-
- - -
-
    - -
-
- - - - - - - -
-
- - - - -
닫기
-
-
- - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateList.jsp b/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateList.jsp deleted file mode 100644 index 50fdb48..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateList.jsp +++ /dev/null @@ -1,174 +0,0 @@ -<%-- - Class Name : EgovTemplateList.jsp - Description : 템플릿 목록화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.03.18 이삼섭 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.03.18 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ page import="itn.com.cmm.service.EgovProperties" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> - - - - - - - -템플릿 목록 - - - - -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 내부서비스관리
  • -
  • >
  • -
  • 내부업무개시판관리
  • -
  • >
  • -
  • 개시판템플릿관리
  • -
-
-
- -
-

개시판템플릿목록

-
- - - - -
조건정보 영역 -
-
    -
  • - -
  • -
  • - -
  • -
- -
-
-
-
- - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
게시판 템플릿 목록
번호템플릿명템플릿구분템플릿경로사용여부등록일자
- - - - - - -
-
- -
-
    - -
-
- -
- - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateRegist.jsp b/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateRegist.jsp deleted file mode 100644 index 1ae93b3..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateRegist.jsp +++ /dev/null @@ -1,193 +0,0 @@ -<%-- - Class Name : EgovTemplateRegist.jsp - Description : 템플릿 속성 등록화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.03.18 이삼섭 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.03.18 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ 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" %> - - - - - - - - -템플릿 등록 - - - - - - - -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 내부서비스관리
  • -
  • >
  • -
  • 내부업무개시판관리
  • -
  • >
  • -
  • 템플릿 등록
  • -
-
-
- -
-

템플릿 등록

-
- - - -
- - - - - - - - - - - - - - - - - - -
- - required - - -
-
- - required - -     -
-
- - required - - -
-
- - required - - Y :   - N : -
-
-
- - - -
- - - - - - - - - -
- 저장 - - 목록 - - 미리보기 -
-
- -
- -
- - - - diff --git a/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateUpdt.jsp b/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateUpdt.jsp deleted file mode 100644 index 79eb307..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/com/EgovTemplateUpdt.jsp +++ /dev/null @@ -1,194 +0,0 @@ -<%-- - Class Name : EgovTemplateUpdt.jsp - Description : 템플릿 속성 수정화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.03.18 이삼섭 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.03.18 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ 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" %> - - - - - - - - -템플릿 정보수정 - - - - - - - -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 내부서비스관리
  • -
  • >
  • -
  • 내부업무개시판관리
  • -
  • >
  • -
  • 템플릿 정보수정
  • -
-
-
- -
-

템플릿 정보수정

-
- - - - -
- - - - - - - - - - - - - - - - - -
- - -
-
- - required - -     -
-
- - required - - -
-
- - required - - Y : checked="checked" >  - N : checked="checked"> -
-
- - - -
- - - - - - - - - -
- - - - - -
-
- -
- -
- - - - - diff --git a/src/main/webapp/WEB-INF/jsp/cop/org/EgovOrgChartManage.jsp b/src/main/webapp/WEB-INF/jsp/cop/org/EgovOrgChartManage.jsp deleted file mode 100644 index 2e9da0c..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/org/EgovOrgChartManage.jsp +++ /dev/null @@ -1,615 +0,0 @@ -<%-- - Class Name : EgovOrgChartManage.jsp - Description : 조직도 관리 화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2018.06.11 ITN 최초 생성 - - author : ITN - since : 2018.06.11 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ page import="itn.com.cmm.service.EgovProperties"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> - - - - - - - - - - -조직도 관리 - - -
-
-
-

조직도 관리

-
-

-
-
-
- -
- - -
- -
-
- -
-
부서선택
- - - - <%-- - - - - - - - - - --%> - - - - - - - - - - - - - - -
번호직위이름전화번호업무순번수정삭제
- - - -
-

직원 추가등록 상세

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
부서 -
- - -
-
직위 - -
성명 - -
전화번호 - -
담당업무 - -
순번 - -
-
    -
  • -
-
-
-
- -
-
- - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cop/resve/resveManageList.jsp b/src/main/webapp/WEB-INF/jsp/cop/resve/resveManageList.jsp deleted file mode 100644 index 7f0c162..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/resve/resveManageList.jsp +++ /dev/null @@ -1,244 +0,0 @@ -<%-- - Class Name : resveManageList.jsp - Description : 대관신청 목록화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.03.12 이삼섭 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.03.12 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> - - - - -대관관리 목록조회 - - - -
-
-
-

대관관리 목록

-
-

-
-
-
- -
- -
-
-
-
- - - - - -
- - - - <%-- - 삭제포함 - checked="checked" /> - --%> -
-
-
-
-
- - - -
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
번호구분전시명신청자전시장소전시기간상태대관신청일
- - - - - - - ');"> - - - - ** - - - - ~ - - - - -
- -
-
- - - -
-
    - -
-
-
- -
-
- - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cop/resve/resveManageRegist.jsp b/src/main/webapp/WEB-INF/jsp/cop/resve/resveManageRegist.jsp deleted file mode 100644 index a0a1a38..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/resve/resveManageRegist.jsp +++ /dev/null @@ -1,449 +0,0 @@ -<%-- - Class Name : resveManageRegist.jsp - Description : 대관관리 등록 화면 - Modification Information - - 수정일 수정자 수정내용 - ---------- -------- --------------------------- - 2009.03.23 이삼섭 최초 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.03.23 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> -<%@ 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"%> -<% - pageContext.setAttribute("crlf", "\r\n"); -%> - - - - - - - - - - - - -대관관리 등록 - - - -
-
-
-

- 대관관리 등록 -

-
-

-
-
-
- -
- - - - - - - <%--
--%> - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
신청자 정보
* 신청자 구분 - <%-- ${item.codeNm} - - --%> - <%-- --%> - - - - ${userTypeList[j].codeNm} - -
* 이름 - -
-
* 휴대폰번호 - - 선택 - 010 - 016 - 017 - 018 - 019 - - - - - -
- - -
전화번호 - - 선택 - 02 - 031 - 032 - 033 - 041 - 042 - 043 - 044 - 051 - 052 - 053 - 054 - 055 - 061 - 062 - 063 - 064 - - - - - -
- - -
* 이메일 - @ - - - - - - - - - - -
- - -
* 상태변경 - -
신청 정보
* 전시명 - -
-
* 작가명/단체명 - -
-
* 사용희망 시설 - - 제 1전시관 - 제 2전시관 - 제 3전시관 - 제 2, 3전시관 - 제 1, 2, 3전시관 - 교육장 - - - - -
* 대관기간 - - - -
- -
* 대관시간 - -
-
* 전시구성 및 안내내용 - -
-
* 썸네일이미지 - -
-
* 대표이미지 - -
-
* 포트폴리오 - -
-
- - - - -
- - -
- -
-
-
- -
- - - - diff --git a/src/main/webapp/WEB-INF/jsp/cop/resve/resveManageUpdt.jsp b/src/main/webapp/WEB-INF/jsp/cop/resve/resveManageUpdt.jsp deleted file mode 100644 index 8542085..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/resve/resveManageUpdt.jsp +++ /dev/null @@ -1,270 +0,0 @@ -<%-- - Class Name : resveManageUpdt.jsp - Description : 대관관리 조회/수정 화면 - Modification Information - - 수정일 수정자 수정내용 - ---------- -------- --------------------------- - 2009.03.23 이삼섭 최초 생성 - - author : 공통서비스 개발팀 이삼섭 - since : 2009.03.23 ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> -<%@ 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"%> -<% - pageContext.setAttribute("crlf", "\r\n"); -%> - - - - - - -대관관리 상세 - - -
-
-
-

- 대관관리 상세 -

-
-

-
-
-
- -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
신청자 정보
신청자 구분 - ${item.codeNm} - checked="checked" /> - -
이름 - -
회사명(또는 단체명) - -
사업자등록번호 - -
휴대폰번호 - - - - - - - -
전화번호 - - - - - - - -
이메일 - -
상태변경 - -
신청 정보
전시명 - -
작가명/단체명 - -
사용희망 시설 - -
대관기간 - ~ -
대관시간 - - <%-- --%> -
전시구성 및 안내내용 -
- -
-
썸네일이미지 - - - -
대표이미지 - - - -
포트폴리오 - - - -
- - -
- - - -
- -
- -
- -
- - - - diff --git a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageDailyList.jsp b/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageDailyList.jsp deleted file mode 100644 index f968c7b..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageDailyList.jsp +++ /dev/null @@ -1,312 +0,0 @@ -<%-- - Class Name : EgovIndvdlSchdulManageDailyList.jsp - Description : 일정관리 일별 조회 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2008.03.09 장동한 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 장동한 - since : 2009.03.09 - ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ page import="java.util.Map"%> -<%@ page import="java.util.List"%> -<%@ page import="java.util.HashMap"%> -<%@ page import="java.util.ArrayList"%> -<%@ page import="java.util.Calendar"%> -<%@ page import="egovframework.rte.psl.dataaccess.util.EgovMap"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - -<%! - public String DateTypeIntForString(int iInput){ - String sOutput = ""; - if(Integer.toString(iInput).length() == 1){ - sOutput = "0" + Integer.toString(iInput); - }else{ - sOutput = Integer.toString(iInput); - } - - return sOutput; - } -%> - -<% - -String sImgUrl = "images/btn/"; - -int iNowYear = (Integer)request.getAttribute("year"); -int iNowMonth = (Integer)request.getAttribute("month"); -int iNowDay = (Integer)request.getAttribute("day"); - - -java.util.Calendar cal = java.util.Calendar.getInstance(); -//년도/월 셋팅 -cal.set(iNowYear, iNowMonth, 1); - -int iEndDay = cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH); -%> - - - - - -일정 일별 목록 - - - - - - - - -
- -
-
- - -
- -
- - -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 알림마당
  • -
  • >
  • -
  • 오늘의 행사
  • -
-
-
- -
- -
- - -
-

일정관리 일별 목록조회

-
- 조건정보 영역 -
-
    -
  • - -
  • -
  • - - 이전년도로 이동 - - <%=iNowYear%>년 - - 다음년도로 이동 -     - <%if(iNowMonth > 0 ){ %> - - 이전월로 이동 - - <%}%> - <%=iNowMonth+1%>월 - <%if(iNowMonth < 11 ){ %> - - 다음월로 이동 - - <%}%>    - <%if(iNowDay > 0 ){ %> - - 이전날짜로 이동 - - <%}%> - <%=iNowDay%>일 - <%if(iNowDay < iEndDay-1 ){ %> - - 다음날짜로 이동 - - <%}%> -
  • -
-
-
-
- - -
- -
- - - - - - - - - - - - - - - - - - <% - List listResult = (List)request.getAttribute("resultList"); - EgovMap egovMap = new EgovMap(); - if(listResult != null){ - for(int i=0;i < listResult.size(); i++){ - egovMap = (EgovMap)listResult.get(i); - %> - - - - - - <% - } - } - %> - <% - if(listResult.isEmpty()) { - %> - - - - - <% - } - %> - -
일정관리 일별 목록조회 테이블
시간제목담당자
- - <% - out.print(""); - out.print( ((String)egovMap.get("schdulBgnde")).substring(8,10) +"시"); - out.print( ((String)egovMap.get("schdulBgnde")).substring(10,12) +"분~"); - out.print( ((String)egovMap.get("schdulEndde")).substring(8,10) +"시"); - out.print( ((String)egovMap.get("schdulEndde")).substring(10,12) +"분 "); - out.println(""); - %> - - <% - out.print(""); - out.print((String)egovMap.get("schdulNm")); - out.println(""); - %> -
검색된 결과가 없습니다. -
-
-
-
-
- - -
- - - - -
- - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageDetail.jsp b/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageDetail.jsp deleted file mode 100644 index ca7929f..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageDetail.jsp +++ /dev/null @@ -1,234 +0,0 @@ -<%-- - Class Name : EgovIndvdlSchdulManageDetail.jsp - Description : 일정관리 상세보기 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2008.03.09 장동한 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 장동한 - since : 2009.03.09 - ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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="spring" uri="http://www.springframework.org/tags"%> -<%pageContext.setAttribute("crlf", "\r\n"); %> -<% -String sLinkType = request.getParameter("linkType") == null ? "" : (String)request.getParameter("linkType"); -%> - - - - - - - -일정 상세 - - - - - - - - - - - -
- -
- -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 사용자관리
  • -
  • >
  • -
  • 일정관리 상세보기
  • -
-
-
- -
-

일정관리 상세보기

-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
일정구분 - - - - - -
중요도 - - - - - -
부서 - -
일정명 - -
일정 내용 - -
반복구분 - - - - - -
날짜/시간 - ${fn:substring(resultList[0].schdulBgnde, 0, 4)}-${fn:substring(resultList[0].schdulBgnde, 4, 6)}-${fn:substring(resultList[0].schdulBgnde, 6, 8)} ${fn:substring(resultList[0].schdulBgnde, 8, 10)}시 ${fn:substring(resultList[0].schdulBgnde, 10, 12)}분 ~ - ${fn:substring(resultList[0].schdulEndde, 0, 4)}-${fn:substring(resultList[0].schdulEndde, 4, 6)}-${fn:substring(resultList[0].schdulEndde, 6, 8)} ${fn:substring(resultList[0].schdulEndde, 8, 10)}시 ${fn:substring(resultList[0].schdulEndde, 10, 12)}분 -
담당자 - -
파일첨부 - - - -
-
- -
- - - - - - - - - -
- - - <% if(null != session.getAttribute("LoginVO")){ %> - - <% } %> - - <% if(null != session.getAttribute("LoginVO")){ %> - - <% }%> -
-
- - - - -
- -
- -
- - - - -
- - - - diff --git a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageModify.jsp b/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageModify.jsp deleted file mode 100644 index 8ad89cb..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageModify.jsp +++ /dev/null @@ -1,386 +0,0 @@ -<%-- - Class Name : EgovIndvdlSchdulManageModify.jsp - Description : 일정관리 수정 페이지 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2008.03.09 장동한 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 장동한 - since : 2009.03.09 - ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="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" %> - - - - - - -일정 수정 - - - - - - - - - - - - - - -
- -
- -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 사용자관리
  • -
  • >
  • -
  • 일정관리 수정
  • -
-
-
- - -
-

일정관리 수정

-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
일정구분 - - - - -
-
중요도 - - - - -
-
부서 - - -
-
일정명 - -
-
일정 내용 - -
-
반복구분 - 당일 - 반복 - 연속 -
-
날짜/시간 - - - 일정시작달력 - -   ~   - - - 일정종료달력 -   - - - - 시 - - - 분 - ~ - - - 시 - - - 분 -
담당자 - -
- -
첨부파일 목록 - - - -
파일첨부 - - -
-
- - -
- - - - - - - -
- - - -
-
- - - - - - - - - - - - - - - - - - - - - -
- -
-
- - -
- - - - - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageMonthList.jsp b/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageMonthList.jsp deleted file mode 100644 index 0ab9fb5..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageMonthList.jsp +++ /dev/null @@ -1,444 +0,0 @@ -<%-- - Class Name : EgovIndvdlSchdulManageMonthList.jsp - Description : 일정관리 월별 조회 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2008.03.09 장동한 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 장동한 - since : 2009.03.09 - ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> -<%@ page import="java.util.Map"%> -<%@ page import="java.util.List"%> -<%@ page import="java.util.HashMap"%> -<%@ page import="java.util.ArrayList"%> -<%@ page import="egovframework.rte.psl.dataaccess.util.EgovMap"%> -<% - java.util.Calendar cal = java.util.Calendar.getInstance(); - String sImgUrl = "images/btn/"; - - String strYear = request.getParameter("year"); - String strMonth = request.getParameter("month"); - - int year = cal.get(java.util.Calendar.YEAR); - int month = cal.get(java.util.Calendar.MONTH); - int date = cal.get(java.util.Calendar.DATE); - - if(strYear != null) - { - year = Integer.parseInt(strYear); - month = Integer.parseInt(strMonth); - }else{ - - } - //년도/월 셋팅 - cal.set(year, month, 1); - - int startDay = cal.getMinimum(java.util.Calendar.DATE); - int endDay = cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH); - int start = cal.get(java.util.Calendar.DAY_OF_WEEK); - int newLine = 0; -%> - - - -일정 월별 목록 - - - - - - - -
-
-
-
-

일정 등록관리

-
-

- -

-
-
-
- -
- -
-
-
- -
    - - 이전년도로 이동 - - <%=year%>년 - - 다음년도로 이동 - - - <%if(month > 0 ){ %> - - 이전월로 이동 - - <%}%> - <%=month+1%>월 - <%if(month < 11 ){ %> - - 다음월로 이동 - - <%}%> -
-
-
-
- - - -
- - - - - - - - - - - - - - - <% - List listResult = (List)request.getAttribute("resultList"); - EgovMap egovMap = new EgovMap(); - //처음 빈공란 표시 - for(int index = 1; index < start ; index++ ) { - out.println(""); - newLine++; - } - - for(int index = 1; index <= endDay; index++) { - String color = ""; - - if(newLine == 0){ - color = "RED"; - } else if(newLine == 6) { - color = "#529dbc"; - } else { - color = "BLACK"; - } - - String sUseDate = Integer.toString(year); - - sUseDate += Integer.toString(month+1).length() == 1 ? "0" + Integer.toString(month+1) : Integer.toString(month+1); - sUseDate += Integer.toString(index).length() == 1 ? "0" + Integer.toString(index) : Integer.toString(index); - - int iUseDate = Integer.parseInt(sUseDate); - - - // 레이어팝업 - /* out.println(""); - newLine++; - - if(newLine == 7) { - out.println(""); - - if(index <= endDay) { - out.println(""); - } - newLine=0; - } - } - - //마지막 공란 LOOP - while(newLine > 0 && newLine < 7) { - out.println(""); - newLine++; - } - %> - - - -
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
 "); */ - // test - out.println(""); - out.println("레이어"); - - - out.println(""+index+""); - out.println("
"); - - if(listResult != null){ - - for(int i=0;i < listResult.size(); i++){ - egovMap = (EgovMap)listResult.get(i); - - int iBeginDate = Integer.parseInt(((String)egovMap.get("schdulBgnde")).substring(0, 8)); - int iBeginEnd = Integer.parseInt(((String)egovMap.get("schdulEndde")).substring(0, 8)); - - if(iUseDate >= iBeginDate && iUseDate <= iBeginEnd){ - /* out.print("
"); */ - - out.println(""); - } - } - } - - out.println("
 
-
- - -
-
- -
- - -
-
- -
-
- - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageRegist.jsp b/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageRegist.jsp deleted file mode 100644 index 6d5dbde..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageRegist.jsp +++ /dev/null @@ -1,310 +0,0 @@ -<%-- - Class Name : EgovIndvdlSchdulManageRegist.jsp - Description : 일정관리 등록 페이지 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2008.03.09 장동한 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 장동한 - since : 2009.03.09 - ---%> -<%@ page 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" %> - - - - -일정 등록 - - - - - - - - - - - - - - -
- -
- -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 사용자관리
  • -
  • >
  • -
  • 일정관리 등록
  • -
-
-
- -
-

일정관리 등록

-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
일정구분required" width="15" height="15" > - - - - - -
중요도required" width="15" height="15" > - - - - - -
부서required" width="15" height="15" > - - - -
일정명required" width="15" height="15" > - - -
일정 내용required" width="15" height="15" > - - -
반복구분required" width="15" height="15" > - 당일 - 반복 - 연속 - -
날짜/시간required" width="15" height="15" > - - - 일정시작달력 - -   ~   - - - 일정종료달력 -    - - - - 시 - - - 분 - ~ - - - 시 - - - 분 -
담당자required" width="15" height="15" > - - - -
파일첨부 - -
-
-
- -
- - - - - - -
- - - -
-
- - - - - - - - -
- -
- -
- - - - -
- - - - diff --git a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageWeekList.jsp b/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageWeekList.jsp deleted file mode 100644 index c279672..0000000 --- a/src/main/webapp/WEB-INF/jsp/cop/smt/sim/EgovIndvdlSchdulManageWeekList.jsp +++ /dev/null @@ -1,355 +0,0 @@ -<%-- - Class Name : EgovIndvdlSchdulManageWeekList.jsp - Description : 일정관리 주별조회 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2008.03.09 장동한 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 장동한 - since : 2009.03.09 - ---%> -<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ page import="java.util.Map"%> -<%@ page import="java.util.List"%> -<%@ page import="java.util.HashMap"%> -<%@ page import="java.util.ArrayList"%> -<%@ page import="java.util.Calendar"%> -<%@ page import="egovframework.rte.psl.dataaccess.util.EgovMap"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - -<%! - public String DateTypeIntForString(int iInput){ - String sOutput = ""; - if(Integer.toString(iInput).length() == 1){ - sOutput = "0" + Integer.toString(iInput); - }else{ - sOutput = Integer.toString(iInput); - } - - return sOutput; - } -%> - -<% -Calendar calNow = Calendar.getInstance(); -Calendar calBefore = Calendar.getInstance(); -Calendar calNext = Calendar.getInstance(); - -String sImgUrl = "images/btn/"; - -int iNowYear = (Integer)request.getAttribute("year"); -int iNowMonth = (Integer)request.getAttribute("month"); -int iNowWeek = (Integer)request.getAttribute("week"); - -List listWeekGrop = (List)request.getAttribute("listWeekGrop"); - -for(int i=0; i < listWeekGrop.size(); i++){ - -} - -ArrayList listWeek = new ArrayList(); -listWeek = (ArrayList)listWeekGrop.get(iNowWeek); - -//요일설정 -String arrDateTitle[] = new String[7]; - -arrDateTitle[0] = "일요일"; -arrDateTitle[1] = "월요일"; -arrDateTitle[2] = "화요일"; -arrDateTitle[3] = "수요일"; -arrDateTitle[4] = "목요일"; -arrDateTitle[5] = "금요일"; -arrDateTitle[6] = "토요일"; - -%> - - - - - -일정 주별 목록 - - - - - - - - -
- -
-
- - -
- -
- - -
-
-
-
    -
  • HOME
  • -
  • >
  • -
  • 알림마당
  • -
  • >
  • -
  • 금주의행사
  • -
-
-
- -
- -
- - -
-

일정관리 주별 목록조회

-
조건정보 영역 -
-
    -
  • - -
  • -
  • - - 이전년도로 이동 - - <%=iNowYear%>년 - - 다음년도로 이동 -     - <%if(iNowMonth > 0 ){ %> - - 이전월로 이동 - - <%}%> - <%=iNowMonth+1%>월 - <%if(iNowMonth < 11 ){ %> - - 다음월로 이동 - - <%}%>    - <%if(iNowWeek > 0 ){ %> - - 이전주로 이동 - - <%}%> - <%=iNowWeek+1%>주 - <%if(iNowWeek < listWeekGrop.size()-1 ){ %> - - 다음주로 이동 - - <%}%> -
  • -
-
-
-
- - -
- -
- - - - - - - - - - - - - <% - List listResult = (List)request.getAttribute("resultList"); - EgovMap egovMap = new EgovMap(); - - for(int i=0; i < listWeek.size(); i++){ - - String sTmpDate = (String)listWeek.get(i); - int iUseDate = Integer.parseInt(sTmpDate); - - %> - - - - - - - <% - } - %> - -
날짜시간제목담당자
- <%=sTmpDate.substring(0,4)%>년<%=sTmpDate.substring(4,6)%>월<%=sTmpDate.substring(6,8)%>일 <%=arrDateTitle[i] %> - - <% - if(listResult != null){ - - for(int j=0;j < listResult.size(); j++){ - egovMap = (EgovMap)listResult.get(j); - int iBeginDate = Integer.parseInt( ((String)egovMap.get("schdulBgnde")).substring(0, 8) ); - int iBeginEnd = Integer.parseInt( ((String)egovMap.get("schdulEndde")).substring(0, 8) ); - - if(iUseDate >= iBeginDate && iUseDate <= iBeginEnd){ - //out.print("
"); - out.println("
"); - } - } - } - %> -
- <% - if(listResult != null){ - - for(int j=0;j < listResult.size(); j++){ - egovMap = (EgovMap)listResult.get(j); - int iBeginDate = Integer.parseInt(((String)egovMap.get("schdulBgnde")).substring(0, 8)); - int iBeginEnd = Integer.parseInt(((String)egovMap.get("schdulEndde")).substring(0, 8)); - if(iUseDate >= iBeginDate && iUseDate <= iBeginEnd){ - //out.print("
"); - } - } - } - %> -
- -
-
-
-
-
- - -
- - - - -
- - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/layout/adminLayout.jsp b/src/main/webapp/WEB-INF/jsp/layout/adminLayout.jsp index 3b53320..6c1b47b 100644 --- a/src/main/webapp/WEB-INF/jsp/layout/adminLayout.jsp +++ b/src/main/webapp/WEB-INF/jsp/layout/adminLayout.jsp @@ -2,14 +2,12 @@ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %> -<%@ taglib prefix="compress" uri="http://htmlcompressor.googlecode.com/taglib/compressor"%> - - + @@ -17,15 +15,8 @@ - +<%-- --%> - - - - - - - diff --git a/src/main/webapp/WEB-INF/jsp/layout/popLayout.jsp b/src/main/webapp/WEB-INF/jsp/layout/popLayout.jsp index 352d51c..d3906b3 100644 --- a/src/main/webapp/WEB-INF/jsp/layout/popLayout.jsp +++ b/src/main/webapp/WEB-INF/jsp/layout/popLayout.jsp @@ -2,8 +2,6 @@ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %> -<%@ taglib prefix="compress" uri="http://htmlcompressor.googlecode.com/taglib/compressor"%> - diff --git a/src/main/webapp/WEB-INF/jsp/main/EgovMainView.jsp b/src/main/webapp/WEB-INF/jsp/main/EgovMainView.jsp index 4c095fa..216e83d 100644 --- a/src/main/webapp/WEB-INF/jsp/main/EgovMainView.jsp +++ b/src/main/webapp/WEB-INF/jsp/main/EgovMainView.jsp @@ -28,7 +28,7 @@ N-CMS - + @@ -36,34 +36,6 @@ + + + + +
+ +
+ + +
+
+ + + + +
+ +

DASHBOARD

+
+ + + +
+
+

발신번호 통계

+ +
+
+ +
+
+ +
+
+

최근 게시물

+ +
+
+ + + + + + + + <%-- + + + + + + + --%> + + + + + + + + + + + + + + + + + + + + + + +
제목처리등록자일자
] "> + + [] + + "> + + + + + + + + + + + + +
+
+
+ +
+
+

일매출액(VAT 포함)

+ + + + 환불/취소 : + + + 환불/취소 : + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
일자결제환불합계
+ + + + () + + + + + + + + + + + + + +
+
+
+ +
+
+

월매출액(VAT 포함)

+ + 연매출 : + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
일자결제환불합계
+ + + + + + + + + + + + +
+
+
+ +
+
+

일회원가입자수

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
일자개인기업합계(결제율)
+ + + + (%) +
+
+
+ +
+
+

월회원가입자수

+ + ${thisYear}년 누적 결제율 : ${payPctByYear}% + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
일자개인기업합계(결제율)
+ + 월 + + (%) +
+
+
+
+
+

전송사별 문자발송통계

+ + 30분 단위 업데이트 + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분SMSLMSMMS금일당월
합계
+
+
+ +
+
+

접속통계

+ + 30분 단위 업데이트 + + + +
+
+
+
    +
  • PC
  • +
  • 모바일
  • +
  • 전체
  • +
+
+
+ +
+
+
+ +
+
+

관리자 로그관리

+ +
+
+ + + + + + + + + +
+
+
+ + +
+
+

회원 전환률 통계

+ 월전환율 : % + +
+
+ + + + + + + + + + + + + + + + + + + +
일자접속자수가입자수일전환율
%
+
+
+ + + <%-- +
+
+

홈페이지관리

+
+
+
    +
  • +
    + +
    +

    게시판관리

    +

    게시판 추가/변경/삭제 관리페이지입니다.

    +
  • +
  • +
    + +
    +

    매뉴관리

    +

    관리자 및 사용자 메뉴를 추가/변경/삭제할 수 있습니다.

    +
  • +
+
+
+
+
    +
+
+ --%> + + + + + +
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/main/agentSmsStats.jsp b/src/main/webapp/WEB-INF/jsp/main/agentSmsStats.jsp new file mode 100644 index 0000000..42a3845 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main/agentSmsStats.jsp @@ -0,0 +1,55 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
구분SMSLMSMMS금일당월
합계
diff --git a/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncFooter.jsp b/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncFooter.jsp index e862f5c..fa2e2c6 100644 --- a/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncFooter.jsp +++ b/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncFooter.jsp @@ -13,52 +13,14 @@ <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> + + + + + + - + + + +
+
+ 즐겨찾기 매뉴 +
+
+
    + +
  • ${result.menuNm}
  • +
    +
+
+
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncLeftmenu.jsp b/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncLeftmenu.jsp index c0ca00c..b8aca21 100644 --- a/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncLeftmenu.jsp +++ b/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncLeftmenu.jsp @@ -32,7 +32,6 @@ $( document).ready(function() { document.getElementById("link").value="forward:"+baseMenuUrl; var base = undefined == document.menuListForm.baseMenuNo ? "123123" : document.menuListForm.baseMenuNo.value ; - location.href = "/EgovTopPageLink.do?link="+baseMenuUrl+"&baseMenuNo="+base; } diff --git a/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncTopnav.jsp b/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncTopnav.jsp index 24b1c58..a92570e 100644 --- a/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncTopnav.jsp +++ b/src/main/webapp/WEB-INF/jsp/main/inc/EgovIncTopnav.jsp @@ -56,19 +56,7 @@ function sessionExpend(){
- - diff --git a/src/main/webapp/WEB-INF/jsp/main/mainUserPage.jsp b/src/main/webapp/WEB-INF/jsp/main/mainUserPage.jsp deleted file mode 100644 index 1985bc4..0000000 --- a/src/main/webapp/WEB-INF/jsp/main/mainUserPage.jsp +++ /dev/null @@ -1,556 +0,0 @@ -<%-- - Class Name : EgovMainView.jsp - Description : 메인화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2011.08.31 JJY 경량환경 버전 생성 - - author : 실행환경개발팀 JJY - since : 2011.08.31 ---%> -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ page import ="itn.com.cmm.LoginVO" %> - - - - - -경량환경 템플릿 포털사이트 - -" /> - - - - - - - - - - - -
<%-- --%>
- - -
- - - - -
-
- -
- -
-
- -
-
한번에 신청하는 민원
-
자세히 보기
-
-
    -
  • 기술지원 필요 시 유지보수 민원
  • -
  • 구매제품  A/S민원
  • -
-
-
- -
-
홍보물 정보 보기
-
자세히 보기
-
- - - - -
-
- 사이버경고 테스트 - - ----------${ cyberAlerMap.caLevel }---------- - - - - 포털설문참여 - -
- <%-- -
-
    -
  • ${result.qestnrSj}

    - -
  • -
-
-
--%> -
- - -
- -
-
-
    -
  • 공지사항
  • -
  • 입찰정보
  • -
  • 게시물 더보기
  • -
-
- - -
-
- FAQ목록 - - - FAQ더보기 - - -
-
프레임워크 경량화 서비스에 대해 자주 사용하는 질문 등에 대한 일반적인 답변들을 확인할 수 있습니다.
- <%-- -
-
    -
  • -
  • -
-
-
--%> -
-
-
페이스북
-
- - -
-
- - -
- -
-
-
- - 최신게시물 목록 - -
-
    - - -
  1. - - - -
  2. - -
    - - - - -
-
- -
- - - -
- - - - - - -
-
-
- - ${popupListData.nttCn} -
- Close
- 하루동안 창을 열지 않음 -
- -
-
-
-
-
- -
- - - -
- - - -<% - -%> \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/main/mainUserPage_origin.jsp b/src/main/webapp/WEB-INF/jsp/main/mainUserPage_origin.jsp deleted file mode 100644 index 077309e..0000000 --- a/src/main/webapp/WEB-INF/jsp/main/mainUserPage_origin.jsp +++ /dev/null @@ -1,461 +0,0 @@ -<%-- - Class Name : EgovMainView.jsp - Description : 메인화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2011.08.31 JJY 경량환경 버전 생성 - - author : 실행환경개발팀 JJY - since : 2011.08.31 ---%> -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ page import ="itn.com.cmm.LoginVO" %> - - - - - -경량환경 템플릿 포털사이트 - -" /> - - - - - - - - - - -
<%-- --%>
- - -
- - - - -
-
- -
- -
-
- -
-
한번에 신청하는 민원
-
자세히 보기
-
-
    -
  • 기술지원 필요 시 유지보수 민원
  • -
  • 구매제품  A/S민원
  • -
-
-
- -
-
홍보물 정보 보기
-
자세히 보기
-
- - - - -
-
- - 포털설문참여 - -
- <%-- -
-
    -
  • ${result.qestnrSj}

    - -
  • -
-
-
--%> -
- - -
- -
-
-
    -
  • 공지사항
  • -
  • 묻고답하기
  • -
  • 게시물 더보기
  • -
-
- - -
-
- FAQ목록 - - - FAQ더보기 - - -
-
프레임워크 경량화 서비스에 대해 자주 사용하는 질문 등에 대한 일반적인 답변들을 확인할 수 있습니다.
- <%-- -
-
    -
  • -
  • -
-
-
--%> -
-
- -
-
-
- - 최신게시물 목록 - -
-
    - - -
  1. - - - -
  2. - -
    - -
  3. 최신 게시물이 없습니다.
  4. -
    -
-
- -
- - - -
- - - - - - -
-
-
- - ${popupListData.nttCn} -
- Close
- 하루동안 창을 열지 않음 -
- -
-
-
-
-
- -
- - - - - - - -<% - -%> \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/main/memDayChartStats.jsp b/src/main/webapp/WEB-INF/jsp/main/memDayChartStats.jsp new file mode 100644 index 0000000..c4b23d0 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main/memDayChartStats.jsp @@ -0,0 +1,33 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + + + + + + + + + + + + + + + + + + + + +
일자개인기업합계(결제율)
+ + + + + (%) +
diff --git a/src/main/webapp/WEB-INF/jsp/main/memLoginDayChartStats.jsp b/src/main/webapp/WEB-INF/jsp/main/memLoginDayChartStats.jsp new file mode 100644 index 0000000..bb8898e --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main/memLoginDayChartStats.jsp @@ -0,0 +1,27 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + + + + + + + + + + + + + + + + + + + +
일자접속자수가입자수일전환율
%
+ diff --git a/src/main/webapp/WEB-INF/jsp/main/memMonthChartStats.jsp b/src/main/webapp/WEB-INF/jsp/main/memMonthChartStats.jsp new file mode 100644 index 0000000..a188742 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main/memMonthChartStats.jsp @@ -0,0 +1,41 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + +
+

월회원가입자수

+ + ${thisYear}년 누적 결제율 : ${payPctByYear}% + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
일자개인기업합계(결제율)
+ + 월 + + (%) +
+
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/main/memberStats.jsp b/src/main/webapp/WEB-INF/jsp/main/memberStats.jsp new file mode 100644 index 0000000..4c3b4bd --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main/memberStats.jsp @@ -0,0 +1,113 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/main/payDayChartStats.jsp b/src/main/webapp/WEB-INF/jsp/main/payDayChartStats.jsp new file mode 100644 index 0000000..e2f99ca --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main/payDayChartStats.jsp @@ -0,0 +1,36 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + + + + + + + + + + + + + + + + + + + + +
일자결제환불합계
+ + + () + + + + + +
diff --git a/src/main/webapp/WEB-INF/jsp/main/payMonthChartStats.jsp b/src/main/webapp/WEB-INF/jsp/main/payMonthChartStats.jsp new file mode 100644 index 0000000..1e6eab1 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main/payMonthChartStats.jsp @@ -0,0 +1,42 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + +
+

월매출액(VAT 포함)

+ + 연매출 : + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
일자결제환불합계
+ + + + + +
+
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/main/recentBoard.jsp b/src/main/webapp/WEB-INF/jsp/main/recentBoard.jsp new file mode 100644 index 0000000..14939af --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main/recentBoard.jsp @@ -0,0 +1,30 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + + + + [${adminBoardInfo.bbsNm}] ${adminBoardInfo.nttSj} + + + + + ${adminBoardInfo.replyYn eq 'Y' ? '완료' : '대기'} + + + + + ${adminBoardInfo.frstRegisterId} + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/main/sendNumberStats.jsp b/src/main/webapp/WEB-INF/jsp/main/sendNumberStats.jsp new file mode 100644 index 0000000..e330e2f --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main/sendNumberStats.jsp @@ -0,0 +1,50 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/main/visitStats.jsp b/src/main/webapp/WEB-INF/jsp/main/visitStats.jsp new file mode 100644 index 0000000..19d7828 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/main/visitStats.jsp @@ -0,0 +1,153 @@ +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + +
+
    +
  • PC
  • +
  • 모바일
  • +
  • 전체
  • +
+
+
+ +
diff --git a/src/main/webapp/WEB-INF/jsp/sym/log/clg/bannerClickStat.jsp b/src/main/webapp/WEB-INF/jsp/sym/log/clg/bannerClickStat.jsp index 6e2595f..c50a534 100644 --- a/src/main/webapp/WEB-INF/jsp/sym/log/clg/bannerClickStat.jsp +++ b/src/main/webapp/WEB-INF/jsp/sym/log/clg/bannerClickStat.jsp @@ -178,7 +178,7 @@ function fnSetCalMonth(val) { - +
@@ -317,6 +317,6 @@ function fnSetCalMonth(val) {
-
+ diff --git a/src/main/webapp/WEB-INF/jsp/sym/wordcloud/wordcloud.jsp b/src/main/webapp/WEB-INF/jsp/sym/wordcloud/wordcloud.jsp deleted file mode 100644 index 7befd89..0000000 --- a/src/main/webapp/WEB-INF/jsp/sym/wordcloud/wordcloud.jsp +++ /dev/null @@ -1,323 +0,0 @@ -<%-- - Class Name : selectSiteIpList.jsp - Description : selectSiteIpList 화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.02.01 lee.m.j 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 lee.m.j - since : 2009.02.01 ---%> -<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> -<%@ page import="itn.com.cmm.LoginVO"%> - - - - -로그인정책 목록조회 - - - - - - - - -
-
-
-
Loading
-
-
-
-
-
-
-

Word Cloud 관리

-

통합검색어, 문자발송, 이용정지 회원 문자 발송 내용의 주요 키워드 정보 표시

-
-
-
-
- - -
- - -
- ~ -
- - -
-
- - - - -
-
-
-
- - - - - - - - - - - - - - -
- WordCloud -
-
-
-
-
-
-
-
-
-<%--
-
-
-
- - - - -
--%> - - - \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaMngList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaMngList.jsp deleted file mode 100644 index eed2f4d..0000000 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaMngList.jsp +++ /dev/null @@ -1,214 +0,0 @@ -<%-- - Class Name : EgovUserManage.jsp - Description : 사용자관리(조회,삭제) JSP - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.03.03 JJY 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 JJY - since : 2009.03.03 ---%> -<%@ page contentType="text/html; charset=utf-8" pageEncoding="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="double-submit" uri="http://www.egovframe.go.kr/tags/double-submit/jsp" %> - - - - -사용자 목록 - - - -
- - - -
-
-
-

캡차설정관리

-
-

-
-
-
-
-
-
-
- - - - - <%-- --%> - " /> - - -
    style="width: 100px;" > - -
  • -
  • -
  • -
    - - -
  • -
    - -
  • -
    -
    - -
-
-
-
-

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
번호캡차종류제목캡차키등록자등록일
- - - - - - ${codeList.codeNm} - - - - - - -
- - -
-
    - -
-
-
- -
-
-
-
-
- - -
-
- - - - -
- - diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaMngModifyView.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaMngModifyView.jsp deleted file mode 100644 index 4cfd914..0000000 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaMngModifyView.jsp +++ /dev/null @@ -1,178 +0,0 @@ -<%-- - Class Name : EgovLoginPolicyRegist.jsp - Description : EgovLoginPolicyRegist 화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.02.01 lee.m.j 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 lee.m.j - since : 2009.02.01 ---%> -<%@ page 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" %> - - - - -등록 - - - - -
- - - - - -
-
-
-

캡차설정관리

-
-

-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*캡차종류 - - - - - - - - - - - - -
*캡차 제목 - -
*캡차 내용 - -
캡차키 - -
등록자 - -
등록일 - -
수정일 - -
-
-
- - - - - - - - -
-
-
-
-
-
- - - diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaSiteList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaSiteList.jsp deleted file mode 100644 index cf89f4d..0000000 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaSiteList.jsp +++ /dev/null @@ -1,270 +0,0 @@ -<%-- - Class Name : EgovUserManage.jsp - Description : 사용자관리(조회,삭제) JSP - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.03.03 JJY 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 JJY - since : 2009.03.03 ---%> -<%@ page contentType="text/html; charset=utf-8" pageEncoding="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="double-submit" uri="http://www.egovframe.go.kr/tags/double-submit/jsp" %> - - - - - -사용자 목록 - - - -
- - - - " /> - " /> - -
-
-
-

캡차관리

-
-

-
-
-
-
-
-
-
- - - - - " style="width: 350px;" /> - - -
    style="width: 100px;" > - -
  • -
  • -
  • -
    - - -
  • -
    - -
  • -
    -
    - -
-
-
-
-

-

- - -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
번호 -
-
-
-
사이트명 -
-
-
-
캡차종류 -
-
-
-
제목 -
-
-
-
캡차키 -
-
-
-
등록자 -
-
-
-
등록일 -
-
-
- - - - - - - - - - - - - - - - - - - - - ${codeList.codeNm} - - - - - - -
- - -
-
    - -
-
-
- -
-
-
-
-
- - -
-
- - - - - -
- - diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaSiteModifyView.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaSiteModifyView.jsp deleted file mode 100644 index c0f8fb4..0000000 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/cnf/CaptchaSiteModifyView.jsp +++ /dev/null @@ -1,179 +0,0 @@ -<%-- - Class Name : EgovLoginPolicyRegist.jsp - Description : EgovLoginPolicyRegist 화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2009.02.01 lee.m.j 최초 생성 - 2011.08.31 JJY 경량환경 버전 생성 - - author : 공통서비스 개발팀 lee.m.j - since : 2009.02.01 ---%> -<%@ page 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" %> - - - - -등록 - - - - -
- - - - - -
-
-
-

캡차관리

-
-

-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 사이트 - - - - - - - - - - - - -
*캡차종류 - -
*캡차 제목 - -
캡차키 - -
등록자 - -
등록일 - -
수정일 - -
-
-
- - - - - - - - -
-
-
-
-
-
- - - diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemDayChart.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemDayChart.jsp index a120976..17ea739 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemDayChart.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemDayChart.jsp @@ -92,9 +92,6 @@ function fnSetCalMonth(val) { - - -
" /> @@ -195,6 +192,5 @@ function fnSetCalMonth(val) {
-
diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemLoginDayChart.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemLoginDayChart.jsp index 6e2aa48..3cd8775 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemLoginDayChart.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemLoginDayChart.jsp @@ -92,9 +92,6 @@ function fnSetCalMonth(val) { - - -
" /> @@ -194,6 +191,5 @@ function fnSetCalMonth(val) {
-
diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemMonthChart.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemMonthChart.jsp index 669c82f..4e20720 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemMonthChart.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MemMonthChart.jsp @@ -66,9 +66,6 @@ $(document).ready(function(){ - - -
" /> @@ -143,6 +140,5 @@ $(document).ready(function(){
-
diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart.jsp index 80b185e..6c57980 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart.jsp @@ -92,9 +92,6 @@ function fnSetCalMonth(val) { - - -
" /> @@ -192,6 +189,5 @@ function fnSetCalMonth(val) {
-
diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart_230125.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart_230125.jsp index d584861..de31855 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart_230125.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgDayChart_230125.jsp @@ -112,8 +112,6 @@ function fnSetCalMonth(val) { } - -
" /> @@ -266,4 +264,3 @@ function fnSetCalMonth(val) {
-
diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart.jsp index 5d30924..c2510d2 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart.jsp @@ -66,7 +66,7 @@ $(document).ready(function(){ - +
@@ -140,6 +140,6 @@ $(document).ready(function(){
-
+ diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart_230125.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart_230125.jsp index 30ed2bf..2e056b3 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart_230125.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/MsgMonthChart_230125.jsp @@ -72,7 +72,7 @@ function linkPage(){ } - +
@@ -185,4 +185,4 @@ function linkPage(){
-
+ diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayDayChart.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayDayChart.jsp index cde0cf5..5086506 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayDayChart.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayDayChart.jsp @@ -161,7 +161,7 @@ function payDayExcelDownload(){ - +
@@ -364,7 +364,7 @@ function payDayExcelDownload(){
-
+
diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayList.jsp index 7e7d1dd..c3c425f 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayList.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayList.jsp @@ -232,7 +232,7 @@ function fnSmishingUpdate(flag, id) { - + @@ -547,6 +547,6 @@ function fnSmishingUpdate(flag, id) { -
+ diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayMonthChart.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayMonthChart.jsp index 31682a5..5476271 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayMonthChart.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayMonthChart.jsp @@ -151,7 +151,7 @@ function getFLDate(date){ - +
@@ -306,7 +306,7 @@ function getFLDate(date){
-
+
diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayUseList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayUseList.jsp index 4f67edb..b73b610 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayUseList.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/PayUseList.jsp @@ -16,7 +16,6 @@ <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> -<%@ taglib prefix="compress" uri="http://htmlcompressor.googlecode.com/taglib/compressor"%> <% @@ -105,7 +104,7 @@ function test(){ - + @@ -277,6 +276,6 @@ function test(){
-
+ diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundDetailPayDetailAjax.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundDetailPayDetailAjax.jsp index d4723d9..fa6388e 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundDetailPayDetailAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundDetailPayDetailAjax.jsp @@ -17,7 +17,6 @@ <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> -<%@ taglib prefix="compress" uri="http://htmlcompressor.googlecode.com/taglib/compressor"%> diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundDetailPayListAjax.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundDetailPayListAjax.jsp index 767a4d1..987b409 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundDetailPayListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundDetailPayListAjax.jsp @@ -17,7 +17,6 @@ <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> -<%@ taglib prefix="compress" uri="http://htmlcompressor.googlecode.com/taglib/compressor"%> diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundList.jsp index 10b2d65..d5bab10 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundList.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/RefundList.jsp @@ -17,7 +17,6 @@ <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> -<%@ taglib prefix="compress" uri="http://htmlcompressor.googlecode.com/taglib/compressor"%> diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/prePay/PrePayList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/prePay/PrePayList.jsp index 10b29c5..a6b5679 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/prePay/PrePayList.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/prePay/PrePayList.jsp @@ -113,7 +113,7 @@ function fn_Regist(){ - +
@@ -261,6 +261,6 @@ function fn_Regist(){
-
+ diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/prePay/popup/PrePayPopupList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/prePay/popup/PrePayPopupList.jsp index 67fdaac..b045a50 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/pay/prePay/popup/PrePayPopupList.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/pay/prePay/popup/PrePayPopupList.jsp @@ -161,7 +161,7 @@ function fn_RegistPopup(){ - +
@@ -310,6 +310,6 @@ function fn_RegistPopup(){
-
+ diff --git a/src/main/webapp/WEB-INF/jsp/web/main/mainUserPage.jsp b/src/main/webapp/WEB-INF/jsp/web/main/mainUserPage.jsp deleted file mode 100644 index 24adc1d..0000000 --- a/src/main/webapp/WEB-INF/jsp/web/main/mainUserPage.jsp +++ /dev/null @@ -1,555 +0,0 @@ -<%-- - Class Name : EgovMainView.jsp - Description : 메인화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2011.08.31 JJY 경량환경 버전 생성 - - author : 실행환경개발팀 JJY - since : 2011.08.31 ---%> -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ page import ="itn.com.cmm.LoginVO" %> - - - - - -경량환경 템플릿 포털사이트 - -" /> - - - - - - - - - - -
<%-- --%>
- - -
- - - - -
-
- -
- -
-
- -
-
한번에 신청하는 민원
-
자세히 보기
-
-
    -
  • 기술지원 필요 시 유지보수 민원
  • -
  • 구매제품  A/S민원
  • -
-
-
- -
-
홍보물 정보 보기
-
자세히 보기
-
- - - - -
-
- 사이버경고 테스트 - - ----------${ cyberAlerMap.caLevel }---------- - - - - 포털설문참여 - -
- <%-- -
-
    -
  • ${result.qestnrSj}

    - -
  • -
-
-
--%> -
- - -
- -
-
-
    -
  • 공지사항
  • -
  • 입찰정보
  • -
  • 게시물 더보기
  • -
-
- - -
-
- FAQ목록 - - - FAQ더보기 - - -
-
프레임워크 경량화 서비스에 대해 자주 사용하는 질문 등에 대한 일반적인 답변들을 확인할 수 있습니다.
- <%-- -
-
    -
  • -
  • -
-
-
--%> -
-
-
페이스북
-
- - -
-
- - -
- -
-
-
- - 최신게시물 목록 - -
-
    - - -
  1. - - - -
  2. - -
    - - - - -
-
- -
- - - -
- - - - - - -
-
-
- - ${popupListData.nttCn} -
- Close
- 하루동안 창을 열지 않음 -
- -
-
-
-
-
- -
- - - - - - - -<% - -%> \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/main/mainUserPage_origin.jsp b/src/main/webapp/WEB-INF/jsp/web/main/mainUserPage_origin.jsp deleted file mode 100644 index 67d0818..0000000 --- a/src/main/webapp/WEB-INF/jsp/web/main/mainUserPage_origin.jsp +++ /dev/null @@ -1,460 +0,0 @@ -<%-- - Class Name : EgovMainView.jsp - Description : 메인화면 - Modification Information - - 수정일 수정자 수정내용 - ------- -------- --------------------------- - 2011.08.31 JJY 경량환경 버전 생성 - - author : 실행환경개발팀 JJY - since : 2011.08.31 ---%> -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ page import ="itn.com.cmm.LoginVO" %> - - - - - -경량환경 템플릿 포털사이트 - -" /> - - - - - - - - - -
<%-- --%>
- - -
- - - - -
-
- -
- -
-
- -
-
한번에 신청하는 민원
-
자세히 보기
-
-
    -
  • 기술지원 필요 시 유지보수 민원
  • -
  • 구매제품  A/S민원
  • -
-
-
- -
-
홍보물 정보 보기
-
자세히 보기
-
- - - - -
-
- - 포털설문참여 - -
- <%-- -
-
    -
  • ${result.qestnrSj}

    - -
  • -
-
-
--%> -
- - -
- -
-
-
    -
  • 공지사항
  • -
  • 묻고답하기
  • -
  • 게시물 더보기
  • -
-
- - -
-
- FAQ목록 - - - FAQ더보기 - - -
-
프레임워크 경량화 서비스에 대해 자주 사용하는 질문 등에 대한 일반적인 답변들을 확인할 수 있습니다.
- <%-- -
-
    -
  • -
  • -
-
-
--%> -
-
- -
-
-
- - 최신게시물 목록 - -
-
    - - -
  1. - - - -
  2. - -
    - -
  3. 최신 게시물이 없습니다.
  4. -
    -
-
- -
- - - -
- - - - - - -
-
-
- - ${popupListData.nttCn} -
- Close
- 하루동안 창을 열지 않음 -
- -
-
-
-
-
- -
- - - - - - - -<% - -%> \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/lib/google-cloud-vision-1.103.7.jar b/src/main/webapp/WEB-INF/lib/google-cloud-vision-1.103.7.jar deleted file mode 100644 index 91f8d84..0000000 Binary files a/src/main/webapp/WEB-INF/lib/google-cloud-vision-1.103.7.jar and /dev/null differ diff --git a/src/main/webapp/WEB-INF/lib/hjhauth.zip b/src/main/webapp/WEB-INF/lib/hjhauth.zip deleted file mode 100644 index 9bbf02c..0000000 Binary files a/src/main/webapp/WEB-INF/lib/hjhauth.zip and /dev/null differ diff --git a/src/main/webapp/WEB-INF/lib/htmlcompressor-1.5.3.jar b/src/main/webapp/WEB-INF/lib/htmlcompressor-1.5.3.jar deleted file mode 100644 index 2a6196f..0000000 Binary files a/src/main/webapp/WEB-INF/lib/htmlcompressor-1.5.3.jar and /dev/null differ diff --git a/src/main/webapp/WEB-INF/lib/kgm.jar b/src/main/webapp/WEB-INF/lib/kgm.jar deleted file mode 100644 index 23f1dae..0000000 Binary files a/src/main/webapp/WEB-INF/lib/kgm.jar and /dev/null differ diff --git a/src/main/webapp/WEB-INF/lib/log4sql.jar b/src/main/webapp/WEB-INF/lib/log4sql.jar deleted file mode 100644 index d9775e8..0000000 Binary files a/src/main/webapp/WEB-INF/lib/log4sql.jar and /dev/null differ diff --git a/src/main/webapp/WEB-INF/lib/proto-google-cloud-vision-v1-1.8.0.jar b/src/main/webapp/WEB-INF/lib/proto-google-cloud-vision-v1-1.8.0.jar deleted file mode 100644 index b605c09..0000000 Binary files a/src/main/webapp/WEB-INF/lib/proto-google-cloud-vision-v1-1.8.0.jar and /dev/null differ diff --git a/src/main/webapp/WEB-INF/lib/proto-google-common-protos-1.8.0.jar b/src/main/webapp/WEB-INF/lib/proto-google-common-protos-1.8.0.jar deleted file mode 100644 index 2c2491d..0000000 Binary files a/src/main/webapp/WEB-INF/lib/proto-google-common-protos-1.8.0.jar and /dev/null differ diff --git a/src/main/webapp/WEB-INF/lib/protobuf-java-3.5.1.jar b/src/main/webapp/WEB-INF/lib/protobuf-java-3.5.1.jar deleted file mode 100644 index 672550d..0000000 Binary files a/src/main/webapp/WEB-INF/lib/protobuf-java-3.5.1.jar and /dev/null differ diff --git a/src/main/webapp/WEB-INF/lib/simplecaptcha-1.2.1_exp.jar b/src/main/webapp/WEB-INF/lib/simplecaptcha-1.2.1_exp.jar deleted file mode 100644 index d863e3c..0000000 Binary files a/src/main/webapp/WEB-INF/lib/simplecaptcha-1.2.1_exp.jar and /dev/null differ diff --git a/src/main/webapp/css/font-sans.css b/src/main/webapp/css/font-sans.css new file mode 100644 index 0000000..3b1e203 --- /dev/null +++ b/src/main/webapp/css/font-sans.css @@ -0,0 +1,71 @@ +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 300; + src: url('../font/NotoSansKR-Light.woff') format('woff'), + url('../font/NotoSansKR-Light.woff2') format('woff2'), + url('../font/NotoSansKR-Light.ttf') format('truetype'); + font-display: block +} + +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 400; + src: url('../font/NotoSansKR-Regular.woff') format('woff'), + url('../font/NotoSansKR-Regular.woff2') format('woff2'), + url('../font/NotoSansKR-Regular.ttf') format('truetype'); + font-display: block; +} + +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 500; + src: url('../font/NotoSansKR-Medium.woff') format('woff'), + url('../font/NotoSansKR-Medium.woff2') format('woff2'), + url('../font/NotoSansKR-Medium.ttf') format('truetype'); + font-display: block; +} + +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 700; + src: url('../font/NotoSansKR-Bold.woff') format('woff'), + url('../font/NotoSansKR-Bold.woff2') format('woff2'), + url('../font/NotoSansKR-Bold.ttf') format('truetype'); + font-display: block; +} + +@font-face { + font-family: 'Noto Sans KR'; + font-style: normal; + font-weight: 800; + src: url('../font/NotoSansKR-ExtraBold.woff') format('woff'), + url('../font/NotoSansKR-ExtraBold.woff2') format('woff2'), + url('../font/NotoSansKR-ExtraBold.ttf') format('truetype'); + font-display: block; +} + +/* Gmarket Sans */ +@font-face { + font-family: 'GmarketSansBold'; + src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2001@1.1/GmarketSansBold.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'GmarketSansMedium'; + src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2001@1.1/GmarketSansMedium.woff') format('woff'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'GmarketSansLight'; + src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2001@1.1/GmarketSansLight.woff') format('woff'); + font-weight: normal; + font-style: normal; +} \ No newline at end of file diff --git a/src/main/webapp/font/NotoSansKR-Bold.ttf b/src/main/webapp/font/NotoSansKR-Bold.ttf new file mode 100644 index 0000000..b531535 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Bold.ttf differ diff --git a/src/main/webapp/font/NotoSansKR-Bold.woff b/src/main/webapp/font/NotoSansKR-Bold.woff new file mode 100644 index 0000000..1b2f30f Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Bold.woff differ diff --git a/src/main/webapp/font/NotoSansKR-Bold.woff2 b/src/main/webapp/font/NotoSansKR-Bold.woff2 new file mode 100644 index 0000000..095e942 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Bold.woff2 differ diff --git a/src/main/webapp/font/NotoSansKR-ExtraBold.ttf b/src/main/webapp/font/NotoSansKR-ExtraBold.ttf new file mode 100644 index 0000000..2302f53 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-ExtraBold.ttf differ diff --git a/src/main/webapp/font/NotoSansKR-ExtraBold.woff b/src/main/webapp/font/NotoSansKR-ExtraBold.woff new file mode 100644 index 0000000..cf7de89 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-ExtraBold.woff differ diff --git a/src/main/webapp/font/NotoSansKR-ExtraBold.woff2 b/src/main/webapp/font/NotoSansKR-ExtraBold.woff2 new file mode 100644 index 0000000..51737a4 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-ExtraBold.woff2 differ diff --git a/src/main/webapp/font/NotoSansKR-Light.ttf b/src/main/webapp/font/NotoSansKR-Light.ttf new file mode 100644 index 0000000..9b30a79 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Light.ttf differ diff --git a/src/main/webapp/font/NotoSansKR-Light.woff b/src/main/webapp/font/NotoSansKR-Light.woff new file mode 100644 index 0000000..1b3fdc1 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Light.woff differ diff --git a/src/main/webapp/font/NotoSansKR-Light.woff2 b/src/main/webapp/font/NotoSansKR-Light.woff2 new file mode 100644 index 0000000..14f40c8 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Light.woff2 differ diff --git a/src/main/webapp/font/NotoSansKR-Medium.ttf b/src/main/webapp/font/NotoSansKR-Medium.ttf new file mode 100644 index 0000000..4a78d5f Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Medium.ttf differ diff --git a/src/main/webapp/font/NotoSansKR-Medium.woff b/src/main/webapp/font/NotoSansKR-Medium.woff new file mode 100644 index 0000000..2091a39 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Medium.woff differ diff --git a/src/main/webapp/font/NotoSansKR-Medium.woff2 b/src/main/webapp/font/NotoSansKR-Medium.woff2 new file mode 100644 index 0000000..c87dbfa Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Medium.woff2 differ diff --git a/src/main/webapp/font/NotoSansKR-Regular.ttf b/src/main/webapp/font/NotoSansKR-Regular.ttf new file mode 100644 index 0000000..1176147 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Regular.ttf differ diff --git a/src/main/webapp/font/NotoSansKR-Regular.woff b/src/main/webapp/font/NotoSansKR-Regular.woff new file mode 100644 index 0000000..eea5ace Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Regular.woff differ diff --git a/src/main/webapp/font/NotoSansKR-Regular.woff2 b/src/main/webapp/font/NotoSansKR-Regular.woff2 new file mode 100644 index 0000000..ea9bf58 Binary files /dev/null and b/src/main/webapp/font/NotoSansKR-Regular.woff2 differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-300.eot b/src/main/webapp/font/noto-sans-kr-v21-korean-300.eot new file mode 100644 index 0000000..13db9e8 Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-300.eot differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-300.svg b/src/main/webapp/font/noto-sans-kr-v21-korean-300.svg new file mode 100644 index 0000000..b14316f --- /dev/null +++ b/src/main/webapp/font/noto-sans-kr-v21-korean-300.svg @@ -0,0 +1,47 @@ +400: Font family not found

Google Fonts

400: Missing font family

The requested font families are not available.

Requested: Noto Sans KR (style: normal, weight: 300)

For reference, see the Google Fonts API documentation.

\ No newline at end of file diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-300.woff b/src/main/webapp/font/noto-sans-kr-v21-korean-300.woff new file mode 100644 index 0000000..c241409 Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-300.woff differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-300.woff2 b/src/main/webapp/font/noto-sans-kr-v21-korean-300.woff2 new file mode 100644 index 0000000..366d8f3 Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-300.woff2 differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-500.eot b/src/main/webapp/font/noto-sans-kr-v21-korean-500.eot new file mode 100644 index 0000000..18ce4db Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-500.eot differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-500.svg b/src/main/webapp/font/noto-sans-kr-v21-korean-500.svg new file mode 100644 index 0000000..67a420c --- /dev/null +++ b/src/main/webapp/font/noto-sans-kr-v21-korean-500.svg @@ -0,0 +1,47 @@ +400: Font family not found

Google Fonts

400: Missing font family

The requested font families are not available.

Requested: Noto Sans KR (style: normal, weight: 500)

For reference, see the Google Fonts API documentation.

\ No newline at end of file diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-500.woff b/src/main/webapp/font/noto-sans-kr-v21-korean-500.woff new file mode 100644 index 0000000..f7c79be Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-500.woff differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-500.woff2 b/src/main/webapp/font/noto-sans-kr-v21-korean-500.woff2 new file mode 100644 index 0000000..d26691f Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-500.woff2 differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-700.eot b/src/main/webapp/font/noto-sans-kr-v21-korean-700.eot new file mode 100644 index 0000000..32557cd Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-700.eot differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-700.svg b/src/main/webapp/font/noto-sans-kr-v21-korean-700.svg new file mode 100644 index 0000000..723a69f --- /dev/null +++ b/src/main/webapp/font/noto-sans-kr-v21-korean-700.svg @@ -0,0 +1,47 @@ +400: Font family not found

Google Fonts

400: Missing font family

The requested font families are not available.

Requested: Noto Sans KR (style: normal, weight: 700)

For reference, see the Google Fonts API documentation.

\ No newline at end of file diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-700.woff b/src/main/webapp/font/noto-sans-kr-v21-korean-700.woff new file mode 100644 index 0000000..df85e95 Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-700.woff differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-700.woff2 b/src/main/webapp/font/noto-sans-kr-v21-korean-700.woff2 new file mode 100644 index 0000000..52a5020 Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-700.woff2 differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-900.eot b/src/main/webapp/font/noto-sans-kr-v21-korean-900.eot new file mode 100644 index 0000000..d53da36 Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-900.eot differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-900.svg b/src/main/webapp/font/noto-sans-kr-v21-korean-900.svg new file mode 100644 index 0000000..80f20b7 --- /dev/null +++ b/src/main/webapp/font/noto-sans-kr-v21-korean-900.svg @@ -0,0 +1,47 @@ +400: Font family not found

Google Fonts

400: Missing font family

The requested font families are not available.

Requested: Noto Sans KR (style: normal, weight: 900)

For reference, see the Google Fonts API documentation.

\ No newline at end of file diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-900.woff b/src/main/webapp/font/noto-sans-kr-v21-korean-900.woff new file mode 100644 index 0000000..8dc79e2 Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-900.woff differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-900.woff2 b/src/main/webapp/font/noto-sans-kr-v21-korean-900.woff2 new file mode 100644 index 0000000..271dee0 Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-900.woff2 differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-regular.eot b/src/main/webapp/font/noto-sans-kr-v21-korean-regular.eot new file mode 100644 index 0000000..2045b1a Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-regular.eot differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-regular.svg b/src/main/webapp/font/noto-sans-kr-v21-korean-regular.svg new file mode 100644 index 0000000..e37c1d0 --- /dev/null +++ b/src/main/webapp/font/noto-sans-kr-v21-korean-regular.svg @@ -0,0 +1,47 @@ +400: Font family not found

Google Fonts

400: Missing font family

The requested font families are not available.

Requested: Noto Sans KR (style: normal, weight: 400)

For reference, see the Google Fonts API documentation.

\ No newline at end of file diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-regular.woff b/src/main/webapp/font/noto-sans-kr-v21-korean-regular.woff new file mode 100644 index 0000000..65e939c Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-regular.woff differ diff --git a/src/main/webapp/font/noto-sans-kr-v21-korean-regular.woff2 b/src/main/webapp/font/noto-sans-kr-v21-korean-regular.woff2 new file mode 100644 index 0000000..8126492 Binary files /dev/null and b/src/main/webapp/font/noto-sans-kr-v21-korean-regular.woff2 differ diff --git a/src/main/webapp/js/Chart.js b/src/main/webapp/js/Chart.js new file mode 100644 index 0000000..6370857 --- /dev/null +++ b/src/main/webapp/js/Chart.js @@ -0,0 +1,14680 @@ +/*! + * Chart.js v2.8.0 + * https://www.chartjs.org + * (c) 2019 Chart.js Contributors + * Released under the MIT License + */ +(function (global, factory) { +typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function() { try { return require('moment'); } catch(e) { } }()) : +typeof define === 'function' && define.amd ? define(['require'], function(require) { return factory(function() { try { return require('moment'); } catch(e) { } }()); }) : +(global.Chart = factory(global.moment)); +}(this, (function (moment) { 'use strict'; + +moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment; + +/* MIT license */ + +var conversions = { + rgb2hsl: rgb2hsl, + rgb2hsv: rgb2hsv, + rgb2hwb: rgb2hwb, + rgb2cmyk: rgb2cmyk, + rgb2keyword: rgb2keyword, + rgb2xyz: rgb2xyz, + rgb2lab: rgb2lab, + rgb2lch: rgb2lch, + + hsl2rgb: hsl2rgb, + hsl2hsv: hsl2hsv, + hsl2hwb: hsl2hwb, + hsl2cmyk: hsl2cmyk, + hsl2keyword: hsl2keyword, + + hsv2rgb: hsv2rgb, + hsv2hsl: hsv2hsl, + hsv2hwb: hsv2hwb, + hsv2cmyk: hsv2cmyk, + hsv2keyword: hsv2keyword, + + hwb2rgb: hwb2rgb, + hwb2hsl: hwb2hsl, + hwb2hsv: hwb2hsv, + hwb2cmyk: hwb2cmyk, + hwb2keyword: hwb2keyword, + + cmyk2rgb: cmyk2rgb, + cmyk2hsl: cmyk2hsl, + cmyk2hsv: cmyk2hsv, + cmyk2hwb: cmyk2hwb, + cmyk2keyword: cmyk2keyword, + + keyword2rgb: keyword2rgb, + keyword2hsl: keyword2hsl, + keyword2hsv: keyword2hsv, + keyword2hwb: keyword2hwb, + keyword2cmyk: keyword2cmyk, + keyword2lab: keyword2lab, + keyword2xyz: keyword2xyz, + + xyz2rgb: xyz2rgb, + xyz2lab: xyz2lab, + xyz2lch: xyz2lch, + + lab2xyz: lab2xyz, + lab2rgb: lab2rgb, + lab2lch: lab2lch, + + lch2lab: lch2lab, + lch2xyz: lch2xyz, + lch2rgb: lch2rgb +}; + + +function rgb2hsl(rgb) { + var r = rgb[0]/255, + g = rgb[1]/255, + b = rgb[2]/255, + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h, s, l; + + if (max == min) + h = 0; + else if (r == max) + h = (g - b) / delta; + else if (g == max) + h = 2 + (b - r) / delta; + else if (b == max) + h = 4 + (r - g)/ delta; + + h = Math.min(h * 60, 360); + + if (h < 0) + h += 360; + + l = (min + max) / 2; + + if (max == min) + s = 0; + else if (l <= 0.5) + s = delta / (max + min); + else + s = delta / (2 - max - min); + + return [h, s * 100, l * 100]; +} + +function rgb2hsv(rgb) { + var r = rgb[0], + g = rgb[1], + b = rgb[2], + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h, s, v; + + if (max == 0) + s = 0; + else + s = (delta/max * 1000)/10; + + if (max == min) + h = 0; + else if (r == max) + h = (g - b) / delta; + else if (g == max) + h = 2 + (b - r) / delta; + else if (b == max) + h = 4 + (r - g) / delta; + + h = Math.min(h * 60, 360); + + if (h < 0) + h += 360; + + v = ((max / 255) * 1000) / 10; + + return [h, s, v]; +} + +function rgb2hwb(rgb) { + var r = rgb[0], + g = rgb[1], + b = rgb[2], + h = rgb2hsl(rgb)[0], + w = 1/255 * Math.min(r, Math.min(g, b)), + b = 1 - 1/255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +} + +function rgb2cmyk(rgb) { + var r = rgb[0] / 255, + g = rgb[1] / 255, + b = rgb[2] / 255, + c, m, y, k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + return [c * 100, m * 100, y * 100, k * 100]; +} + +function rgb2keyword(rgb) { + return reverseKeywords[JSON.stringify(rgb)]; +} + +function rgb2xyz(rgb) { + var r = rgb[0] / 255, + g = rgb[1] / 255, + b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y *100, z * 100]; +} + +function rgb2lab(rgb) { + var xyz = rgb2xyz(rgb), + x = xyz[0], + y = xyz[1], + z = xyz[2], + l, a, b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +} + +function rgb2lch(args) { + return lab2lch(rgb2lab(args)); +} + +function hsl2rgb(hsl) { + var h = hsl[0] / 360, + s = hsl[1] / 100, + l = hsl[2] / 100, + t1, t2, t3, rgb, val; + + if (s == 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) + t2 = l * (1 + s); + else + t2 = l + s - l * s; + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * - (i - 1); + t3 < 0 && t3++; + t3 > 1 && t3--; + + if (6 * t3 < 1) + val = t1 + (t2 - t1) * 6 * t3; + else if (2 * t3 < 1) + val = t2; + else if (3 * t3 < 2) + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + else + val = t1; + + rgb[i] = val * 255; + } + + return rgb; +} + +function hsl2hsv(hsl) { + var h = hsl[0], + s = hsl[1] / 100, + l = hsl[2] / 100, + sv, v; + + if(l === 0) { + // no need to do calc on black + // also avoids divide by 0 error + return [0, 0, 0]; + } + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + v = (l + s) / 2; + sv = (2 * s) / (l + s); + return [h, sv * 100, v * 100]; +} + +function hsl2hwb(args) { + return rgb2hwb(hsl2rgb(args)); +} + +function hsl2cmyk(args) { + return rgb2cmyk(hsl2rgb(args)); +} + +function hsl2keyword(args) { + return rgb2keyword(hsl2rgb(args)); +} + + +function hsv2rgb(hsv) { + var h = hsv[0] / 60, + s = hsv[1] / 100, + v = hsv[2] / 100, + hi = Math.floor(h) % 6; + + var f = h - Math.floor(h), + p = 255 * v * (1 - s), + q = 255 * v * (1 - (s * f)), + t = 255 * v * (1 - (s * (1 - f))), + v = 255 * v; + + switch(hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +} + +function hsv2hsl(hsv) { + var h = hsv[0], + s = hsv[1] / 100, + v = hsv[2] / 100, + sl, l; + + l = (2 - s) * v; + sl = s * v; + sl /= (l <= 1) ? l : 2 - l; + sl = sl || 0; + l /= 2; + return [h, sl * 100, l * 100]; +} + +function hsv2hwb(args) { + return rgb2hwb(hsv2rgb(args)) +} + +function hsv2cmyk(args) { + return rgb2cmyk(hsv2rgb(args)); +} + +function hsv2keyword(args) { + return rgb2keyword(hsv2rgb(args)); +} + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +function hwb2rgb(hwb) { + var h = hwb[0] / 360, + wh = hwb[1] / 100, + bl = hwb[2] / 100, + ratio = wh + bl, + i, v, f, n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + if ((i & 0x01) != 0) { + f = 1 - f; + } + n = wh + f * (v - wh); // linear interpolation + + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; +} + +function hwb2hsl(args) { + return rgb2hsl(hwb2rgb(args)); +} + +function hwb2hsv(args) { + return rgb2hsv(hwb2rgb(args)); +} + +function hwb2cmyk(args) { + return rgb2cmyk(hwb2rgb(args)); +} + +function hwb2keyword(args) { + return rgb2keyword(hwb2rgb(args)); +} + +function cmyk2rgb(cmyk) { + var c = cmyk[0] / 100, + m = cmyk[1] / 100, + y = cmyk[2] / 100, + k = cmyk[3] / 100, + r, g, b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + return [r * 255, g * 255, b * 255]; +} + +function cmyk2hsl(args) { + return rgb2hsl(cmyk2rgb(args)); +} + +function cmyk2hsv(args) { + return rgb2hsv(cmyk2rgb(args)); +} + +function cmyk2hwb(args) { + return rgb2hwb(cmyk2rgb(args)); +} + +function cmyk2keyword(args) { + return rgb2keyword(cmyk2rgb(args)); +} + + +function xyz2rgb(xyz) { + var x = xyz[0] / 100, + y = xyz[1] / 100, + z = xyz[2] / 100, + r, g, b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r = (r * 12.92); + + g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g = (g * 12.92); + + b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b = (b * 12.92); + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +} + +function xyz2lab(xyz) { + var x = xyz[0], + y = xyz[1], + z = xyz[2], + l, a, b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +} + +function xyz2lch(args) { + return lab2lch(xyz2lab(args)); +} + +function lab2xyz(lab) { + var l = lab[0], + a = lab[1], + b = lab[2], + x, y, z, y2; + + if (l <= 8) { + y = (l * 100) / 903.3; + y2 = (7.787 * (y / 100)) + (16 / 116); + } else { + y = 100 * Math.pow((l + 16) / 116, 3); + y2 = Math.pow(y / 100, 1/3); + } + + x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3); + + z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3); + + return [x, y, z]; +} + +function lab2lch(lab) { + var l = lab[0], + a = lab[1], + b = lab[2], + hr, h, c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + if (h < 0) { + h += 360; + } + c = Math.sqrt(a * a + b * b); + return [l, c, h]; +} + +function lab2rgb(args) { + return xyz2rgb(lab2xyz(args)); +} + +function lch2lab(lch) { + var l = lch[0], + c = lch[1], + h = lch[2], + a, b, hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + return [l, a, b]; +} + +function lch2xyz(args) { + return lab2xyz(lch2lab(args)); +} + +function lch2rgb(args) { + return lab2rgb(lch2lab(args)); +} + +function keyword2rgb(keyword) { + return cssKeywords[keyword]; +} + +function keyword2hsl(args) { + return rgb2hsl(keyword2rgb(args)); +} + +function keyword2hsv(args) { + return rgb2hsv(keyword2rgb(args)); +} + +function keyword2hwb(args) { + return rgb2hwb(keyword2rgb(args)); +} + +function keyword2cmyk(args) { + return rgb2cmyk(keyword2rgb(args)); +} + +function keyword2lab(args) { + return rgb2lab(keyword2rgb(args)); +} + +function keyword2xyz(args) { + return rgb2xyz(keyword2rgb(args)); +} + +var cssKeywords = { + aliceblue: [240,248,255], + antiquewhite: [250,235,215], + aqua: [0,255,255], + aquamarine: [127,255,212], + azure: [240,255,255], + beige: [245,245,220], + bisque: [255,228,196], + black: [0,0,0], + blanchedalmond: [255,235,205], + blue: [0,0,255], + blueviolet: [138,43,226], + brown: [165,42,42], + burlywood: [222,184,135], + cadetblue: [95,158,160], + chartreuse: [127,255,0], + chocolate: [210,105,30], + coral: [255,127,80], + cornflowerblue: [100,149,237], + cornsilk: [255,248,220], + crimson: [220,20,60], + cyan: [0,255,255], + darkblue: [0,0,139], + darkcyan: [0,139,139], + darkgoldenrod: [184,134,11], + darkgray: [169,169,169], + darkgreen: [0,100,0], + darkgrey: [169,169,169], + darkkhaki: [189,183,107], + darkmagenta: [139,0,139], + darkolivegreen: [85,107,47], + darkorange: [255,140,0], + darkorchid: [153,50,204], + darkred: [139,0,0], + darksalmon: [233,150,122], + darkseagreen: [143,188,143], + darkslateblue: [72,61,139], + darkslategray: [47,79,79], + darkslategrey: [47,79,79], + darkturquoise: [0,206,209], + darkviolet: [148,0,211], + deeppink: [255,20,147], + deepskyblue: [0,191,255], + dimgray: [105,105,105], + dimgrey: [105,105,105], + dodgerblue: [30,144,255], + firebrick: [178,34,34], + floralwhite: [255,250,240], + forestgreen: [34,139,34], + fuchsia: [255,0,255], + gainsboro: [220,220,220], + ghostwhite: [248,248,255], + gold: [255,215,0], + goldenrod: [218,165,32], + gray: [128,128,128], + green: [0,128,0], + greenyellow: [173,255,47], + grey: [128,128,128], + honeydew: [240,255,240], + hotpink: [255,105,180], + indianred: [205,92,92], + indigo: [75,0,130], + ivory: [255,255,240], + khaki: [240,230,140], + lavender: [230,230,250], + lavenderblush: [255,240,245], + lawngreen: [124,252,0], + lemonchiffon: [255,250,205], + lightblue: [173,216,230], + lightcoral: [240,128,128], + lightcyan: [224,255,255], + lightgoldenrodyellow: [250,250,210], + lightgray: [211,211,211], + lightgreen: [144,238,144], + lightgrey: [211,211,211], + lightpink: [255,182,193], + lightsalmon: [255,160,122], + lightseagreen: [32,178,170], + lightskyblue: [135,206,250], + lightslategray: [119,136,153], + lightslategrey: [119,136,153], + lightsteelblue: [176,196,222], + lightyellow: [255,255,224], + lime: [0,255,0], + limegreen: [50,205,50], + linen: [250,240,230], + magenta: [255,0,255], + maroon: [128,0,0], + mediumaquamarine: [102,205,170], + mediumblue: [0,0,205], + mediumorchid: [186,85,211], + mediumpurple: [147,112,219], + mediumseagreen: [60,179,113], + mediumslateblue: [123,104,238], + mediumspringgreen: [0,250,154], + mediumturquoise: [72,209,204], + mediumvioletred: [199,21,133], + midnightblue: [25,25,112], + mintcream: [245,255,250], + mistyrose: [255,228,225], + moccasin: [255,228,181], + navajowhite: [255,222,173], + navy: [0,0,128], + oldlace: [253,245,230], + olive: [128,128,0], + olivedrab: [107,142,35], + orange: [255,165,0], + orangered: [255,69,0], + orchid: [218,112,214], + palegoldenrod: [238,232,170], + palegreen: [152,251,152], + paleturquoise: [175,238,238], + palevioletred: [219,112,147], + papayawhip: [255,239,213], + peachpuff: [255,218,185], + peru: [205,133,63], + pink: [255,192,203], + plum: [221,160,221], + powderblue: [176,224,230], + purple: [128,0,128], + rebeccapurple: [102, 51, 153], + red: [255,0,0], + rosybrown: [188,143,143], + royalblue: [65,105,225], + saddlebrown: [139,69,19], + salmon: [250,128,114], + sandybrown: [244,164,96], + seagreen: [46,139,87], + seashell: [255,245,238], + sienna: [160,82,45], + silver: [192,192,192], + skyblue: [135,206,235], + slateblue: [106,90,205], + slategray: [112,128,144], + slategrey: [112,128,144], + snow: [255,250,250], + springgreen: [0,255,127], + steelblue: [70,130,180], + tan: [210,180,140], + teal: [0,128,128], + thistle: [216,191,216], + tomato: [255,99,71], + turquoise: [64,224,208], + violet: [238,130,238], + wheat: [245,222,179], + white: [255,255,255], + whitesmoke: [245,245,245], + yellow: [255,255,0], + yellowgreen: [154,205,50] +}; + +var reverseKeywords = {}; +for (var key in cssKeywords) { + reverseKeywords[JSON.stringify(cssKeywords[key])] = key; +} + +var convert = function() { + return new Converter(); +}; + +for (var func in conversions) { + // export Raw versions + convert[func + "Raw"] = (function(func) { + // accept array or plain args + return function(arg) { + if (typeof arg == "number") + arg = Array.prototype.slice.call(arguments); + return conversions[func](arg); + } + })(func); + + var pair = /(\w+)2(\w+)/.exec(func), + from = pair[1], + to = pair[2]; + + // export rgb2hsl and ["rgb"]["hsl"] + convert[from] = convert[from] || {}; + + convert[from][to] = convert[func] = (function(func) { + return function(arg) { + if (typeof arg == "number") + arg = Array.prototype.slice.call(arguments); + + var val = conversions[func](arg); + if (typeof val == "string" || val === undefined) + return val; // keyword + + for (var i = 0; i < val.length; i++) + val[i] = Math.round(val[i]); + return val; + } + })(func); +} + + +/* Converter does lazy conversion and caching */ +var Converter = function() { + this.convs = {}; +}; + +/* Either get the values for a space or + set the values for a space, depending on args */ +Converter.prototype.routeSpace = function(space, args) { + var values = args[0]; + if (values === undefined) { + // color.rgb() + return this.getValues(space); + } + // color.rgb(10, 10, 10) + if (typeof values == "number") { + values = Array.prototype.slice.call(args); + } + + return this.setValues(space, values); +}; + +/* Set the values for a space, invalidating cache */ +Converter.prototype.setValues = function(space, values) { + this.space = space; + this.convs = {}; + this.convs[space] = values; + return this; +}; + +/* Get the values for a space. If there's already + a conversion for the space, fetch it, otherwise + compute it */ +Converter.prototype.getValues = function(space) { + var vals = this.convs[space]; + if (!vals) { + var fspace = this.space, + from = this.convs[fspace]; + vals = convert[fspace][space](from); + + this.convs[space] = vals; + } + return vals; +}; + +["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function(space) { + Converter.prototype[space] = function(vals) { + return this.routeSpace(space, arguments); + }; +}); + +var colorConvert = convert; + +var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + +/* MIT license */ + + +var colorString = { + getRgba: getRgba, + getHsla: getHsla, + getRgb: getRgb, + getHsl: getHsl, + getHwb: getHwb, + getAlpha: getAlpha, + + hexString: hexString, + rgbString: rgbString, + rgbaString: rgbaString, + percentString: percentString, + percentaString: percentaString, + hslString: hslString, + hslaString: hslaString, + hwbString: hwbString, + keyword: keyword +}; + +function getRgba(string) { + if (!string) { + return; + } + var abbr = /^#([a-fA-F0-9]{3,4})$/i, + hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i, + rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i, + per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i, + keyword = /(\w+)/; + + var rgb = [0, 0, 0], + a = 1, + match = string.match(abbr), + hexAlpha = ""; + if (match) { + match = match[1]; + hexAlpha = match[3]; + for (var i = 0; i < rgb.length; i++) { + rgb[i] = parseInt(match[i] + match[i], 16); + } + if (hexAlpha) { + a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100; + } + } + else if (match = string.match(hex)) { + hexAlpha = match[2]; + match = match[1]; + for (var i = 0; i < rgb.length; i++) { + rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16); + } + if (hexAlpha) { + a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100; + } + } + else if (match = string.match(rgba)) { + for (var i = 0; i < rgb.length; i++) { + rgb[i] = parseInt(match[i + 1]); + } + a = parseFloat(match[4]); + } + else if (match = string.match(per)) { + for (var i = 0; i < rgb.length; i++) { + rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); + } + a = parseFloat(match[4]); + } + else if (match = string.match(keyword)) { + if (match[1] == "transparent") { + return [0, 0, 0, 0]; + } + rgb = colorName[match[1]]; + if (!rgb) { + return; + } + } + + for (var i = 0; i < rgb.length; i++) { + rgb[i] = scale(rgb[i], 0, 255); + } + if (!a && a != 0) { + a = 1; + } + else { + a = scale(a, 0, 1); + } + rgb[3] = a; + return rgb; +} + +function getHsla(string) { + if (!string) { + return; + } + var hsl = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/; + var match = string.match(hsl); + if (match) { + var alpha = parseFloat(match[4]); + var h = scale(parseInt(match[1]), 0, 360), + s = scale(parseFloat(match[2]), 0, 100), + l = scale(parseFloat(match[3]), 0, 100), + a = scale(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, s, l, a]; + } +} + +function getHwb(string) { + if (!string) { + return; + } + var hwb = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/; + var match = string.match(hwb); + if (match) { + var alpha = parseFloat(match[4]); + var h = scale(parseInt(match[1]), 0, 360), + w = scale(parseFloat(match[2]), 0, 100), + b = scale(parseFloat(match[3]), 0, 100), + a = scale(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } +} + +function getRgb(string) { + var rgba = getRgba(string); + return rgba && rgba.slice(0, 3); +} + +function getHsl(string) { + var hsla = getHsla(string); + return hsla && hsla.slice(0, 3); +} + +function getAlpha(string) { + var vals = getRgba(string); + if (vals) { + return vals[3]; + } + else if (vals = getHsla(string)) { + return vals[3]; + } + else if (vals = getHwb(string)) { + return vals[3]; + } +} + +// generators +function hexString(rgba, a) { + var a = (a !== undefined && rgba.length === 3) ? a : rgba[3]; + return "#" + hexDouble(rgba[0]) + + hexDouble(rgba[1]) + + hexDouble(rgba[2]) + + ( + (a >= 0 && a < 1) + ? hexDouble(Math.round(a * 255)) + : "" + ); +} + +function rgbString(rgba, alpha) { + if (alpha < 1 || (rgba[3] && rgba[3] < 1)) { + return rgbaString(rgba, alpha); + } + return "rgb(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ")"; +} + +function rgbaString(rgba, alpha) { + if (alpha === undefined) { + alpha = (rgba[3] !== undefined ? rgba[3] : 1); + } + return "rgba(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + + ", " + alpha + ")"; +} + +function percentString(rgba, alpha) { + if (alpha < 1 || (rgba[3] && rgba[3] < 1)) { + return percentaString(rgba, alpha); + } + var r = Math.round(rgba[0]/255 * 100), + g = Math.round(rgba[1]/255 * 100), + b = Math.round(rgba[2]/255 * 100); + + return "rgb(" + r + "%, " + g + "%, " + b + "%)"; +} + +function percentaString(rgba, alpha) { + var r = Math.round(rgba[0]/255 * 100), + g = Math.round(rgba[1]/255 * 100), + b = Math.round(rgba[2]/255 * 100); + return "rgba(" + r + "%, " + g + "%, " + b + "%, " + (alpha || rgba[3] || 1) + ")"; +} + +function hslString(hsla, alpha) { + if (alpha < 1 || (hsla[3] && hsla[3] < 1)) { + return hslaString(hsla, alpha); + } + return "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)"; +} + +function hslaString(hsla, alpha) { + if (alpha === undefined) { + alpha = (hsla[3] !== undefined ? hsla[3] : 1); + } + return "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, " + + alpha + ")"; +} + +// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax +// (hwb have alpha optional & 1 is default value) +function hwbString(hwb, alpha) { + if (alpha === undefined) { + alpha = (hwb[3] !== undefined ? hwb[3] : 1); + } + return "hwb(" + hwb[0] + ", " + hwb[1] + "%, " + hwb[2] + "%" + + (alpha !== undefined && alpha !== 1 ? ", " + alpha : "") + ")"; +} + +function keyword(rgb) { + return reverseNames[rgb.slice(0, 3)]; +} + +// helpers +function scale(num, min, max) { + return Math.min(Math.max(min, num), max); +} + +function hexDouble(num) { + var str = num.toString(16).toUpperCase(); + return (str.length < 2) ? "0" + str : str; +} + + +//create a list of reverse color names +var reverseNames = {}; +for (var name in colorName) { + reverseNames[colorName[name]] = name; +} + +/* MIT license */ + + + +var Color = function (obj) { + if (obj instanceof Color) { + return obj; + } + if (!(this instanceof Color)) { + return new Color(obj); + } + + this.valid = false; + this.values = { + rgb: [0, 0, 0], + hsl: [0, 0, 0], + hsv: [0, 0, 0], + hwb: [0, 0, 0], + cmyk: [0, 0, 0, 0], + alpha: 1 + }; + + // parse Color() argument + var vals; + if (typeof obj === 'string') { + vals = colorString.getRgba(obj); + if (vals) { + this.setValues('rgb', vals); + } else if (vals = colorString.getHsla(obj)) { + this.setValues('hsl', vals); + } else if (vals = colorString.getHwb(obj)) { + this.setValues('hwb', vals); + } + } else if (typeof obj === 'object') { + vals = obj; + if (vals.r !== undefined || vals.red !== undefined) { + this.setValues('rgb', vals); + } else if (vals.l !== undefined || vals.lightness !== undefined) { + this.setValues('hsl', vals); + } else if (vals.v !== undefined || vals.value !== undefined) { + this.setValues('hsv', vals); + } else if (vals.w !== undefined || vals.whiteness !== undefined) { + this.setValues('hwb', vals); + } else if (vals.c !== undefined || vals.cyan !== undefined) { + this.setValues('cmyk', vals); + } + } +}; + +Color.prototype = { + isValid: function () { + return this.valid; + }, + rgb: function () { + return this.setSpace('rgb', arguments); + }, + hsl: function () { + return this.setSpace('hsl', arguments); + }, + hsv: function () { + return this.setSpace('hsv', arguments); + }, + hwb: function () { + return this.setSpace('hwb', arguments); + }, + cmyk: function () { + return this.setSpace('cmyk', arguments); + }, + + rgbArray: function () { + return this.values.rgb; + }, + hslArray: function () { + return this.values.hsl; + }, + hsvArray: function () { + return this.values.hsv; + }, + hwbArray: function () { + var values = this.values; + if (values.alpha !== 1) { + return values.hwb.concat([values.alpha]); + } + return values.hwb; + }, + cmykArray: function () { + return this.values.cmyk; + }, + rgbaArray: function () { + var values = this.values; + return values.rgb.concat([values.alpha]); + }, + hslaArray: function () { + var values = this.values; + return values.hsl.concat([values.alpha]); + }, + alpha: function (val) { + if (val === undefined) { + return this.values.alpha; + } + this.setValues('alpha', val); + return this; + }, + + red: function (val) { + return this.setChannel('rgb', 0, val); + }, + green: function (val) { + return this.setChannel('rgb', 1, val); + }, + blue: function (val) { + return this.setChannel('rgb', 2, val); + }, + hue: function (val) { + if (val) { + val %= 360; + val = val < 0 ? 360 + val : val; + } + return this.setChannel('hsl', 0, val); + }, + saturation: function (val) { + return this.setChannel('hsl', 1, val); + }, + lightness: function (val) { + return this.setChannel('hsl', 2, val); + }, + saturationv: function (val) { + return this.setChannel('hsv', 1, val); + }, + whiteness: function (val) { + return this.setChannel('hwb', 1, val); + }, + blackness: function (val) { + return this.setChannel('hwb', 2, val); + }, + value: function (val) { + return this.setChannel('hsv', 2, val); + }, + cyan: function (val) { + return this.setChannel('cmyk', 0, val); + }, + magenta: function (val) { + return this.setChannel('cmyk', 1, val); + }, + yellow: function (val) { + return this.setChannel('cmyk', 2, val); + }, + black: function (val) { + return this.setChannel('cmyk', 3, val); + }, + + hexString: function () { + return colorString.hexString(this.values.rgb); + }, + rgbString: function () { + return colorString.rgbString(this.values.rgb, this.values.alpha); + }, + rgbaString: function () { + return colorString.rgbaString(this.values.rgb, this.values.alpha); + }, + percentString: function () { + return colorString.percentString(this.values.rgb, this.values.alpha); + }, + hslString: function () { + return colorString.hslString(this.values.hsl, this.values.alpha); + }, + hslaString: function () { + return colorString.hslaString(this.values.hsl, this.values.alpha); + }, + hwbString: function () { + return colorString.hwbString(this.values.hwb, this.values.alpha); + }, + keyword: function () { + return colorString.keyword(this.values.rgb, this.values.alpha); + }, + + rgbNumber: function () { + var rgb = this.values.rgb; + return (rgb[0] << 16) | (rgb[1] << 8) | rgb[2]; + }, + + luminosity: function () { + // http://www.w3.org/TR/WCAG20/#relativeluminancedef + var rgb = this.values.rgb; + var lum = []; + for (var i = 0; i < rgb.length; i++) { + var chan = rgb[i] / 255; + lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); + } + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + + contrast: function (color2) { + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + var lum1 = this.luminosity(); + var lum2 = color2.luminosity(); + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + return (lum2 + 0.05) / (lum1 + 0.05); + }, + + level: function (color2) { + var contrastRatio = this.contrast(color2); + if (contrastRatio >= 7.1) { + return 'AAA'; + } + + return (contrastRatio >= 4.5) ? 'AA' : ''; + }, + + dark: function () { + // YIQ equation from http://24ways.org/2010/calculating-color-contrast + var rgb = this.values.rgb; + var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; + return yiq < 128; + }, + + light: function () { + return !this.dark(); + }, + + negate: function () { + var rgb = []; + for (var i = 0; i < 3; i++) { + rgb[i] = 255 - this.values.rgb[i]; + } + this.setValues('rgb', rgb); + return this; + }, + + lighten: function (ratio) { + var hsl = this.values.hsl; + hsl[2] += hsl[2] * ratio; + this.setValues('hsl', hsl); + return this; + }, + + darken: function (ratio) { + var hsl = this.values.hsl; + hsl[2] -= hsl[2] * ratio; + this.setValues('hsl', hsl); + return this; + }, + + saturate: function (ratio) { + var hsl = this.values.hsl; + hsl[1] += hsl[1] * ratio; + this.setValues('hsl', hsl); + return this; + }, + + desaturate: function (ratio) { + var hsl = this.values.hsl; + hsl[1] -= hsl[1] * ratio; + this.setValues('hsl', hsl); + return this; + }, + + whiten: function (ratio) { + var hwb = this.values.hwb; + hwb[1] += hwb[1] * ratio; + this.setValues('hwb', hwb); + return this; + }, + + blacken: function (ratio) { + var hwb = this.values.hwb; + hwb[2] += hwb[2] * ratio; + this.setValues('hwb', hwb); + return this; + }, + + greyscale: function () { + var rgb = this.values.rgb; + // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale + var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + this.setValues('rgb', [val, val, val]); + return this; + }, + + clearer: function (ratio) { + var alpha = this.values.alpha; + this.setValues('alpha', alpha - (alpha * ratio)); + return this; + }, + + opaquer: function (ratio) { + var alpha = this.values.alpha; + this.setValues('alpha', alpha + (alpha * ratio)); + return this; + }, + + rotate: function (degrees) { + var hsl = this.values.hsl; + var hue = (hsl[0] + degrees) % 360; + hsl[0] = hue < 0 ? 360 + hue : hue; + this.setValues('hsl', hsl); + return this; + }, + + /** + * Ported from sass implementation in C + * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 + */ + mix: function (mixinColor, weight) { + var color1 = this; + var color2 = mixinColor; + var p = weight === undefined ? 0.5 : weight; + + var w = 2 * p - 1; + var a = color1.alpha() - color2.alpha(); + + var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + var w2 = 1 - w1; + + return this + .rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue() + ) + .alpha(color1.alpha() * p + color2.alpha() * (1 - p)); + }, + + toJSON: function () { + return this.rgb(); + }, + + clone: function () { + // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify, + // making the final build way to big to embed in Chart.js. So let's do it manually, + // assuming that values to clone are 1 dimension arrays containing only numbers, + // except 'alpha' which is a number. + var result = new Color(); + var source = this.values; + var target = result.values; + var value, type; + + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + value = source[prop]; + type = ({}).toString.call(value); + if (type === '[object Array]') { + target[prop] = value.slice(0); + } else if (type === '[object Number]') { + target[prop] = value; + } else { + console.error('unexpected color value:', value); + } + } + } + + return result; + } +}; + +Color.prototype.spaces = { + rgb: ['red', 'green', 'blue'], + hsl: ['hue', 'saturation', 'lightness'], + hsv: ['hue', 'saturation', 'value'], + hwb: ['hue', 'whiteness', 'blackness'], + cmyk: ['cyan', 'magenta', 'yellow', 'black'] +}; + +Color.prototype.maxes = { + rgb: [255, 255, 255], + hsl: [360, 100, 100], + hsv: [360, 100, 100], + hwb: [360, 100, 100], + cmyk: [100, 100, 100, 100] +}; + +Color.prototype.getValues = function (space) { + var values = this.values; + var vals = {}; + + for (var i = 0; i < space.length; i++) { + vals[space.charAt(i)] = values[space][i]; + } + + if (values.alpha !== 1) { + vals.a = values.alpha; + } + + // {r: 255, g: 255, b: 255, a: 0.4} + return vals; +}; + +Color.prototype.setValues = function (space, vals) { + var values = this.values; + var spaces = this.spaces; + var maxes = this.maxes; + var alpha = 1; + var i; + + this.valid = true; + + if (space === 'alpha') { + alpha = vals; + } else if (vals.length) { + // [10, 10, 10] + values[space] = vals.slice(0, space.length); + alpha = vals[space.length]; + } else if (vals[space.charAt(0)] !== undefined) { + // {r: 10, g: 10, b: 10} + for (i = 0; i < space.length; i++) { + values[space][i] = vals[space.charAt(i)]; + } + + alpha = vals.a; + } else if (vals[spaces[space][0]] !== undefined) { + // {red: 10, green: 10, blue: 10} + var chans = spaces[space]; + + for (i = 0; i < space.length; i++) { + values[space][i] = vals[chans[i]]; + } + + alpha = vals.alpha; + } + + values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha))); + + if (space === 'alpha') { + return false; + } + + var capped; + + // cap values of the space prior converting all values + for (i = 0; i < space.length; i++) { + capped = Math.max(0, Math.min(maxes[space][i], values[space][i])); + values[space][i] = Math.round(capped); + } + + // convert to all the other color spaces + for (var sname in spaces) { + if (sname !== space) { + values[sname] = colorConvert[space][sname](values[space]); + } + } + + return true; +}; + +Color.prototype.setSpace = function (space, args) { + var vals = args[0]; + + if (vals === undefined) { + // color.rgb() + return this.getValues(space); + } + + // color.rgb(10, 10, 10) + if (typeof vals === 'number') { + vals = Array.prototype.slice.call(args); + } + + this.setValues(space, vals); + return this; +}; + +Color.prototype.setChannel = function (space, index, val) { + var svalues = this.values[space]; + if (val === undefined) { + // color.red() + return svalues[index]; + } else if (val === svalues[index]) { + // color.red(color.red()) + return this; + } + + // color.red(100) + svalues[index] = val; + this.setValues(space, svalues); + + return this; +}; + +if (typeof window !== 'undefined') { + window.Color = Color; +} + +var chartjsColor = Color; + +/** + * @namespace Chart.helpers + */ +var helpers = { + /** + * An empty function that can be used, for example, for optional callback. + */ + noop: function() {}, + + /** + * Returns a unique id, sequentially generated from a global variable. + * @returns {number} + * @function + */ + uid: (function() { + var id = 0; + return function() { + return id++; + }; + }()), + + /** + * Returns true if `value` is neither null nor undefined, else returns false. + * @param {*} value - The value to test. + * @returns {boolean} + * @since 2.7.0 + */ + isNullOrUndef: function(value) { + return value === null || typeof value === 'undefined'; + }, + + /** + * Returns true if `value` is an array (including typed arrays), else returns false. + * @param {*} value - The value to test. + * @returns {boolean} + * @function + */ + isArray: function(value) { + if (Array.isArray && Array.isArray(value)) { + return true; + } + var type = Object.prototype.toString.call(value); + if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') { + return true; + } + return false; + }, + + /** + * Returns true if `value` is an object (excluding null), else returns false. + * @param {*} value - The value to test. + * @returns {boolean} + * @since 2.7.0 + */ + isObject: function(value) { + return value !== null && Object.prototype.toString.call(value) === '[object Object]'; + }, + + /** + * Returns true if `value` is a finite number, else returns false + * @param {*} value - The value to test. + * @returns {boolean} + */ + isFinite: function(value) { + return (typeof value === 'number' || value instanceof Number) && isFinite(value); + }, + + /** + * Returns `value` if defined, else returns `defaultValue`. + * @param {*} value - The value to return if defined. + * @param {*} defaultValue - The value to return if `value` is undefined. + * @returns {*} + */ + valueOrDefault: function(value, defaultValue) { + return typeof value === 'undefined' ? defaultValue : value; + }, + + /** + * Returns value at the given `index` in array if defined, else returns `defaultValue`. + * @param {Array} value - The array to lookup for value at `index`. + * @param {number} index - The index in `value` to lookup for value. + * @param {*} defaultValue - The value to return if `value[index]` is undefined. + * @returns {*} + */ + valueAtIndexOrDefault: function(value, index, defaultValue) { + return helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue); + }, + + /** + * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the + * value returned by `fn`. If `fn` is not a function, this method returns undefined. + * @param {function} fn - The function to call. + * @param {Array|undefined|null} args - The arguments with which `fn` should be called. + * @param {object} [thisArg] - The value of `this` provided for the call to `fn`. + * @returns {*} + */ + callback: function(fn, args, thisArg) { + if (fn && typeof fn.call === 'function') { + return fn.apply(thisArg, args); + } + }, + + /** + * Note(SB) for performance sake, this method should only be used when loopable type + * is unknown or in none intensive code (not called often and small loopable). Else + * it's preferable to use a regular for() loop and save extra function calls. + * @param {object|Array} loopable - The object or array to be iterated. + * @param {function} fn - The function to call for each item. + * @param {object} [thisArg] - The value of `this` provided for the call to `fn`. + * @param {boolean} [reverse] - If true, iterates backward on the loopable. + */ + each: function(loopable, fn, thisArg, reverse) { + var i, len, keys; + if (helpers.isArray(loopable)) { + len = loopable.length; + if (reverse) { + for (i = len - 1; i >= 0; i--) { + fn.call(thisArg, loopable[i], i); + } + } else { + for (i = 0; i < len; i++) { + fn.call(thisArg, loopable[i], i); + } + } + } else if (helpers.isObject(loopable)) { + keys = Object.keys(loopable); + len = keys.length; + for (i = 0; i < len; i++) { + fn.call(thisArg, loopable[keys[i]], keys[i]); + } + } + }, + + /** + * Returns true if the `a0` and `a1` arrays have the same content, else returns false. + * @see https://stackoverflow.com/a/14853974 + * @param {Array} a0 - The array to compare + * @param {Array} a1 - The array to compare + * @returns {boolean} + */ + arrayEquals: function(a0, a1) { + var i, ilen, v0, v1; + + if (!a0 || !a1 || a0.length !== a1.length) { + return false; + } + + for (i = 0, ilen = a0.length; i < ilen; ++i) { + v0 = a0[i]; + v1 = a1[i]; + + if (v0 instanceof Array && v1 instanceof Array) { + if (!helpers.arrayEquals(v0, v1)) { + return false; + } + } else if (v0 !== v1) { + // NOTE: two different object instances will never be equal: {x:20} != {x:20} + return false; + } + } + + return true; + }, + + /** + * Returns a deep copy of `source` without keeping references on objects and arrays. + * @param {*} source - The value to clone. + * @returns {*} + */ + clone: function(source) { + if (helpers.isArray(source)) { + return source.map(helpers.clone); + } + + if (helpers.isObject(source)) { + var target = {}; + var keys = Object.keys(source); + var klen = keys.length; + var k = 0; + + for (; k < klen; ++k) { + target[keys[k]] = helpers.clone(source[keys[k]]); + } + + return target; + } + + return source; + }, + + /** + * The default merger when Chart.helpers.merge is called without merger option. + * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback. + * @private + */ + _merger: function(key, target, source, options) { + var tval = target[key]; + var sval = source[key]; + + if (helpers.isObject(tval) && helpers.isObject(sval)) { + helpers.merge(tval, sval, options); + } else { + target[key] = helpers.clone(sval); + } + }, + + /** + * Merges source[key] in target[key] only if target[key] is undefined. + * @private + */ + _mergerIf: function(key, target, source) { + var tval = target[key]; + var sval = source[key]; + + if (helpers.isObject(tval) && helpers.isObject(sval)) { + helpers.mergeIf(tval, sval); + } else if (!target.hasOwnProperty(key)) { + target[key] = helpers.clone(sval); + } + }, + + /** + * Recursively deep copies `source` properties into `target` with the given `options`. + * IMPORTANT: `target` is not cloned and will be updated with `source` properties. + * @param {object} target - The target object in which all sources are merged into. + * @param {object|object[]} source - Object(s) to merge into `target`. + * @param {object} [options] - Merging options: + * @param {function} [options.merger] - The merge method (key, target, source, options) + * @returns {object} The `target` object. + */ + merge: function(target, source, options) { + var sources = helpers.isArray(source) ? source : [source]; + var ilen = sources.length; + var merge, i, keys, klen, k; + + if (!helpers.isObject(target)) { + return target; + } + + options = options || {}; + merge = options.merger || helpers._merger; + + for (i = 0; i < ilen; ++i) { + source = sources[i]; + if (!helpers.isObject(source)) { + continue; + } + + keys = Object.keys(source); + for (k = 0, klen = keys.length; k < klen; ++k) { + merge(keys[k], target, source, options); + } + } + + return target; + }, + + /** + * Recursively deep copies `source` properties into `target` *only* if not defined in target. + * IMPORTANT: `target` is not cloned and will be updated with `source` properties. + * @param {object} target - The target object in which all sources are merged into. + * @param {object|object[]} source - Object(s) to merge into `target`. + * @returns {object} The `target` object. + */ + mergeIf: function(target, source) { + return helpers.merge(target, source, {merger: helpers._mergerIf}); + }, + + /** + * Applies the contents of two or more objects together into the first object. + * @param {object} target - The target object in which all objects are merged into. + * @param {object} arg1 - Object containing additional properties to merge in target. + * @param {object} argN - Additional objects containing properties to merge in target. + * @returns {object} The `target` object. + */ + extend: function(target) { + var setFn = function(value, key) { + target[key] = value; + }; + for (var i = 1, ilen = arguments.length; i < ilen; ++i) { + helpers.each(arguments[i], setFn); + } + return target; + }, + + /** + * Basic javascript inheritance based on the model created in Backbone.js + */ + inherits: function(extensions) { + var me = this; + var ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() { + return me.apply(this, arguments); + }; + + var Surrogate = function() { + this.constructor = ChartElement; + }; + + Surrogate.prototype = me.prototype; + ChartElement.prototype = new Surrogate(); + ChartElement.extend = helpers.inherits; + + if (extensions) { + helpers.extend(ChartElement.prototype, extensions); + } + + ChartElement.__super__ = me.prototype; + return ChartElement; + } +}; + +var helpers_core = helpers; + +// DEPRECATIONS + +/** + * Provided for backward compatibility, use Chart.helpers.callback instead. + * @function Chart.helpers.callCallback + * @deprecated since version 2.6.0 + * @todo remove at version 3 + * @private + */ +helpers.callCallback = helpers.callback; + +/** + * Provided for backward compatibility, use Array.prototype.indexOf instead. + * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+ + * @function Chart.helpers.indexOf + * @deprecated since version 2.7.0 + * @todo remove at version 3 + * @private + */ +helpers.indexOf = function(array, item, fromIndex) { + return Array.prototype.indexOf.call(array, item, fromIndex); +}; + +/** + * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead. + * @function Chart.helpers.getValueOrDefault + * @deprecated since version 2.7.0 + * @todo remove at version 3 + * @private + */ +helpers.getValueOrDefault = helpers.valueOrDefault; + +/** + * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead. + * @function Chart.helpers.getValueAtIndexOrDefault + * @deprecated since version 2.7.0 + * @todo remove at version 3 + * @private + */ +helpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault; + +/** + * Easing functions adapted from Robert Penner's easing equations. + * @namespace Chart.helpers.easingEffects + * @see http://www.robertpenner.com/easing/ + */ +var effects = { + linear: function(t) { + return t; + }, + + easeInQuad: function(t) { + return t * t; + }, + + easeOutQuad: function(t) { + return -t * (t - 2); + }, + + easeInOutQuad: function(t) { + if ((t /= 0.5) < 1) { + return 0.5 * t * t; + } + return -0.5 * ((--t) * (t - 2) - 1); + }, + + easeInCubic: function(t) { + return t * t * t; + }, + + easeOutCubic: function(t) { + return (t = t - 1) * t * t + 1; + }, + + easeInOutCubic: function(t) { + if ((t /= 0.5) < 1) { + return 0.5 * t * t * t; + } + return 0.5 * ((t -= 2) * t * t + 2); + }, + + easeInQuart: function(t) { + return t * t * t * t; + }, + + easeOutQuart: function(t) { + return -((t = t - 1) * t * t * t - 1); + }, + + easeInOutQuart: function(t) { + if ((t /= 0.5) < 1) { + return 0.5 * t * t * t * t; + } + return -0.5 * ((t -= 2) * t * t * t - 2); + }, + + easeInQuint: function(t) { + return t * t * t * t * t; + }, + + easeOutQuint: function(t) { + return (t = t - 1) * t * t * t * t + 1; + }, + + easeInOutQuint: function(t) { + if ((t /= 0.5) < 1) { + return 0.5 * t * t * t * t * t; + } + return 0.5 * ((t -= 2) * t * t * t * t + 2); + }, + + easeInSine: function(t) { + return -Math.cos(t * (Math.PI / 2)) + 1; + }, + + easeOutSine: function(t) { + return Math.sin(t * (Math.PI / 2)); + }, + + easeInOutSine: function(t) { + return -0.5 * (Math.cos(Math.PI * t) - 1); + }, + + easeInExpo: function(t) { + return (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)); + }, + + easeOutExpo: function(t) { + return (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1; + }, + + easeInOutExpo: function(t) { + if (t === 0) { + return 0; + } + if (t === 1) { + return 1; + } + if ((t /= 0.5) < 1) { + return 0.5 * Math.pow(2, 10 * (t - 1)); + } + return 0.5 * (-Math.pow(2, -10 * --t) + 2); + }, + + easeInCirc: function(t) { + if (t >= 1) { + return t; + } + return -(Math.sqrt(1 - t * t) - 1); + }, + + easeOutCirc: function(t) { + return Math.sqrt(1 - (t = t - 1) * t); + }, + + easeInOutCirc: function(t) { + if ((t /= 0.5) < 1) { + return -0.5 * (Math.sqrt(1 - t * t) - 1); + } + return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1); + }, + + easeInElastic: function(t) { + var s = 1.70158; + var p = 0; + var a = 1; + if (t === 0) { + return 0; + } + if (t === 1) { + return 1; + } + if (!p) { + p = 0.3; + } + if (a < 1) { + a = 1; + s = p / 4; + } else { + s = p / (2 * Math.PI) * Math.asin(1 / a); + } + return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p)); + }, + + easeOutElastic: function(t) { + var s = 1.70158; + var p = 0; + var a = 1; + if (t === 0) { + return 0; + } + if (t === 1) { + return 1; + } + if (!p) { + p = 0.3; + } + if (a < 1) { + a = 1; + s = p / 4; + } else { + s = p / (2 * Math.PI) * Math.asin(1 / a); + } + return a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1; + }, + + easeInOutElastic: function(t) { + var s = 1.70158; + var p = 0; + var a = 1; + if (t === 0) { + return 0; + } + if ((t /= 0.5) === 2) { + return 1; + } + if (!p) { + p = 0.45; + } + if (a < 1) { + a = 1; + s = p / 4; + } else { + s = p / (2 * Math.PI) * Math.asin(1 / a); + } + if (t < 1) { + return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p)); + } + return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1; + }, + easeInBack: function(t) { + var s = 1.70158; + return t * t * ((s + 1) * t - s); + }, + + easeOutBack: function(t) { + var s = 1.70158; + return (t = t - 1) * t * ((s + 1) * t + s) + 1; + }, + + easeInOutBack: function(t) { + var s = 1.70158; + if ((t /= 0.5) < 1) { + return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s)); + } + return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2); + }, + + easeInBounce: function(t) { + return 1 - effects.easeOutBounce(1 - t); + }, + + easeOutBounce: function(t) { + if (t < (1 / 2.75)) { + return 7.5625 * t * t; + } + if (t < (2 / 2.75)) { + return 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75; + } + if (t < (2.5 / 2.75)) { + return 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375; + } + return 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375; + }, + + easeInOutBounce: function(t) { + if (t < 0.5) { + return effects.easeInBounce(t * 2) * 0.5; + } + return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5; + } +}; + +var helpers_easing = { + effects: effects +}; + +// DEPRECATIONS + +/** + * Provided for backward compatibility, use Chart.helpers.easing.effects instead. + * @function Chart.helpers.easingEffects + * @deprecated since version 2.7.0 + * @todo remove at version 3 + * @private + */ +helpers_core.easingEffects = effects; + +var PI = Math.PI; +var RAD_PER_DEG = PI / 180; +var DOUBLE_PI = PI * 2; +var HALF_PI = PI / 2; +var QUARTER_PI = PI / 4; +var TWO_THIRDS_PI = PI * 2 / 3; + +/** + * @namespace Chart.helpers.canvas + */ +var exports$1 = { + /** + * Clears the entire canvas associated to the given `chart`. + * @param {Chart} chart - The chart for which to clear the canvas. + */ + clear: function(chart) { + chart.ctx.clearRect(0, 0, chart.width, chart.height); + }, + + /** + * Creates a "path" for a rectangle with rounded corners at position (x, y) with a + * given size (width, height) and the same `radius` for all corners. + * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context. + * @param {number} x - The x axis of the coordinate for the rectangle starting point. + * @param {number} y - The y axis of the coordinate for the rectangle starting point. + * @param {number} width - The rectangle's width. + * @param {number} height - The rectangle's height. + * @param {number} radius - The rounded amount (in pixels) for the four corners. + * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object? + */ + roundedRect: function(ctx, x, y, width, height, radius) { + if (radius) { + var r = Math.min(radius, height / 2, width / 2); + var left = x + r; + var top = y + r; + var right = x + width - r; + var bottom = y + height - r; + + ctx.moveTo(x, top); + if (left < right && top < bottom) { + ctx.arc(left, top, r, -PI, -HALF_PI); + ctx.arc(right, top, r, -HALF_PI, 0); + ctx.arc(right, bottom, r, 0, HALF_PI); + ctx.arc(left, bottom, r, HALF_PI, PI); + } else if (left < right) { + ctx.moveTo(left, y); + ctx.arc(right, top, r, -HALF_PI, HALF_PI); + ctx.arc(left, top, r, HALF_PI, PI + HALF_PI); + } else if (top < bottom) { + ctx.arc(left, top, r, -PI, 0); + ctx.arc(left, bottom, r, 0, PI); + } else { + ctx.arc(left, top, r, -PI, PI); + } + ctx.closePath(); + ctx.moveTo(x, y); + } else { + ctx.rect(x, y, width, height); + } + }, + + drawPoint: function(ctx, style, radius, x, y, rotation) { + var type, xOffset, yOffset, size, cornerRadius; + var rad = (rotation || 0) * RAD_PER_DEG; + + if (style && typeof style === 'object') { + type = style.toString(); + if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') { + ctx.drawImage(style, x - style.width / 2, y - style.height / 2, style.width, style.height); + return; + } + } + + if (isNaN(radius) || radius <= 0) { + return; + } + + ctx.beginPath(); + + switch (style) { + // Default includes circle + default: + ctx.arc(x, y, radius, 0, DOUBLE_PI); + ctx.closePath(); + break; + case 'triangle': + ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + rad += TWO_THIRDS_PI; + ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + rad += TWO_THIRDS_PI; + ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius); + ctx.closePath(); + break; + case 'rectRounded': + // NOTE: the rounded rect implementation changed to use `arc` instead of + // `quadraticCurveTo` since it generates better results when rect is + // almost a circle. 0.516 (instead of 0.5) produces results with visually + // closer proportion to the previous impl and it is inscribed in the + // circle with `radius`. For more details, see the following PRs: + // https://github.com/chartjs/Chart.js/issues/5597 + // https://github.com/chartjs/Chart.js/issues/5858 + cornerRadius = radius * 0.516; + size = radius - cornerRadius; + xOffset = Math.cos(rad + QUARTER_PI) * size; + yOffset = Math.sin(rad + QUARTER_PI) * size; + ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI); + ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad); + ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI); + ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI); + ctx.closePath(); + break; + case 'rect': + if (!rotation) { + size = Math.SQRT1_2 * radius; + ctx.rect(x - size, y - size, 2 * size, 2 * size); + break; + } + rad += QUARTER_PI; + /* falls through */ + case 'rectRot': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + yOffset, y - xOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.lineTo(x - yOffset, y + xOffset); + ctx.closePath(); + break; + case 'crossRot': + rad += QUARTER_PI; + /* falls through */ + case 'cross': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.moveTo(x + yOffset, y - xOffset); + ctx.lineTo(x - yOffset, y + xOffset); + break; + case 'star': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.moveTo(x + yOffset, y - xOffset); + ctx.lineTo(x - yOffset, y + xOffset); + rad += QUARTER_PI; + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + ctx.moveTo(x + yOffset, y - xOffset); + ctx.lineTo(x - yOffset, y + xOffset); + break; + case 'line': + xOffset = Math.cos(rad) * radius; + yOffset = Math.sin(rad) * radius; + ctx.moveTo(x - xOffset, y - yOffset); + ctx.lineTo(x + xOffset, y + yOffset); + break; + case 'dash': + ctx.moveTo(x, y); + ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius); + break; + } + + ctx.fill(); + ctx.stroke(); + }, + + /** + * Returns true if the point is inside the rectangle + * @param {object} point - The point to test + * @param {object} area - The rectangle + * @returns {boolean} + * @private + */ + _isPointInArea: function(point, area) { + var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error. + + return point.x > area.left - epsilon && point.x < area.right + epsilon && + point.y > area.top - epsilon && point.y < area.bottom + epsilon; + }, + + clipArea: function(ctx, area) { + ctx.save(); + ctx.beginPath(); + ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top); + ctx.clip(); + }, + + unclipArea: function(ctx) { + ctx.restore(); + }, + + lineTo: function(ctx, previous, target, flip) { + var stepped = target.steppedLine; + if (stepped) { + if (stepped === 'middle') { + var midpoint = (previous.x + target.x) / 2.0; + ctx.lineTo(midpoint, flip ? target.y : previous.y); + ctx.lineTo(midpoint, flip ? previous.y : target.y); + } else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) { + ctx.lineTo(previous.x, target.y); + } else { + ctx.lineTo(target.x, previous.y); + } + ctx.lineTo(target.x, target.y); + return; + } + + if (!target.tension) { + ctx.lineTo(target.x, target.y); + return; + } + + ctx.bezierCurveTo( + flip ? previous.controlPointPreviousX : previous.controlPointNextX, + flip ? previous.controlPointPreviousY : previous.controlPointNextY, + flip ? target.controlPointNextX : target.controlPointPreviousX, + flip ? target.controlPointNextY : target.controlPointPreviousY, + target.x, + target.y); + } +}; + +var helpers_canvas = exports$1; + +// DEPRECATIONS + +/** + * Provided for backward compatibility, use Chart.helpers.canvas.clear instead. + * @namespace Chart.helpers.clear + * @deprecated since version 2.7.0 + * @todo remove at version 3 + * @private + */ +helpers_core.clear = exports$1.clear; + +/** + * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead. + * @namespace Chart.helpers.drawRoundedRectangle + * @deprecated since version 2.7.0 + * @todo remove at version 3 + * @private + */ +helpers_core.drawRoundedRectangle = function(ctx) { + ctx.beginPath(); + exports$1.roundedRect.apply(exports$1, arguments); +}; + +var defaults = { + /** + * @private + */ + _set: function(scope, values) { + return helpers_core.merge(this[scope] || (this[scope] = {}), values); + } +}; + +defaults._set('global', { + defaultColor: 'rgba(0,0,0,0.1)', + defaultFontColor: '#666', + defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", + defaultFontSize: 12, + defaultFontStyle: 'normal', + defaultLineHeight: 1.2, + showLines: true +}); + +var core_defaults = defaults; + +var valueOrDefault = helpers_core.valueOrDefault; + +/** + * Converts the given font object into a CSS font string. + * @param {object} font - A font object. + * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font + * @private + */ +function toFontString(font) { + if (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) { + return null; + } + + return (font.style ? font.style + ' ' : '') + + (font.weight ? font.weight + ' ' : '') + + font.size + 'px ' + + font.family; +} + +/** + * @alias Chart.helpers.options + * @namespace + */ +var helpers_options = { + /** + * Converts the given line height `value` in pixels for a specific font `size`. + * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em'). + * @param {number} size - The font size (in pixels) used to resolve relative `value`. + * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid). + * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height + * @since 2.7.0 + */ + toLineHeight: function(value, size) { + var matches = ('' + value).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/); + if (!matches || matches[1] === 'normal') { + return size * 1.2; + } + + value = +matches[2]; + + switch (matches[3]) { + case 'px': + return value; + case '%': + value /= 100; + break; + default: + break; + } + + return size * value; + }, + + /** + * Converts the given value into a padding object with pre-computed width/height. + * @param {number|object} value - If a number, set the value to all TRBL component, + * else, if and object, use defined properties and sets undefined ones to 0. + * @returns {object} The padding values (top, right, bottom, left, width, height) + * @since 2.7.0 + */ + toPadding: function(value) { + var t, r, b, l; + + if (helpers_core.isObject(value)) { + t = +value.top || 0; + r = +value.right || 0; + b = +value.bottom || 0; + l = +value.left || 0; + } else { + t = r = b = l = +value || 0; + } + + return { + top: t, + right: r, + bottom: b, + left: l, + height: t + b, + width: l + r + }; + }, + + /** + * Parses font options and returns the font object. + * @param {object} options - A object that contains font options to be parsed. + * @return {object} The font object. + * @todo Support font.* options and renamed to toFont(). + * @private + */ + _parseFont: function(options) { + var globalDefaults = core_defaults.global; + var size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize); + var font = { + family: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily), + lineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size), + size: size, + style: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle), + weight: null, + string: '' + }; + + font.string = toFontString(font); + return font; + }, + + /** + * Evaluates the given `inputs` sequentially and returns the first defined value. + * @param {Array} inputs - An array of values, falling back to the last value. + * @param {object} [context] - If defined and the current value is a function, the value + * is called with `context` as first argument and the result becomes the new input. + * @param {number} [index] - If defined and the current value is an array, the value + * at `index` become the new input. + * @since 2.7.0 + */ + resolve: function(inputs, context, index) { + var i, ilen, value; + + for (i = 0, ilen = inputs.length; i < ilen; ++i) { + value = inputs[i]; + if (value === undefined) { + continue; + } + if (context !== undefined && typeof value === 'function') { + value = value(context); + } + if (index !== undefined && helpers_core.isArray(value)) { + value = value[index]; + } + if (value !== undefined) { + return value; + } + } + } +}; + +var helpers$1 = helpers_core; +var easing = helpers_easing; +var canvas = helpers_canvas; +var options = helpers_options; +helpers$1.easing = easing; +helpers$1.canvas = canvas; +helpers$1.options = options; + +function interpolate(start, view, model, ease) { + var keys = Object.keys(model); + var i, ilen, key, actual, origin, target, type, c0, c1; + + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + + target = model[key]; + + // if a value is added to the model after pivot() has been called, the view + // doesn't contain it, so let's initialize the view to the target value. + if (!view.hasOwnProperty(key)) { + view[key] = target; + } + + actual = view[key]; + + if (actual === target || key[0] === '_') { + continue; + } + + if (!start.hasOwnProperty(key)) { + start[key] = actual; + } + + origin = start[key]; + + type = typeof target; + + if (type === typeof origin) { + if (type === 'string') { + c0 = chartjsColor(origin); + if (c0.valid) { + c1 = chartjsColor(target); + if (c1.valid) { + view[key] = c1.mix(c0, ease).rgbString(); + continue; + } + } + } else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) { + view[key] = origin + (target - origin) * ease; + continue; + } + } + + view[key] = target; + } +} + +var Element = function(configuration) { + helpers$1.extend(this, configuration); + this.initialize.apply(this, arguments); +}; + +helpers$1.extend(Element.prototype, { + + initialize: function() { + this.hidden = false; + }, + + pivot: function() { + var me = this; + if (!me._view) { + me._view = helpers$1.clone(me._model); + } + me._start = {}; + return me; + }, + + transition: function(ease) { + var me = this; + var model = me._model; + var start = me._start; + var view = me._view; + + // No animation -> No Transition + if (!model || ease === 1) { + me._view = model; + me._start = null; + return me; + } + + if (!view) { + view = me._view = {}; + } + + if (!start) { + start = me._start = {}; + } + + interpolate(start, view, model, ease); + + return me; + }, + + tooltipPosition: function() { + return { + x: this._model.x, + y: this._model.y + }; + }, + + hasValue: function() { + return helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y); + } +}); + +Element.extend = helpers$1.inherits; + +var core_element = Element; + +var exports$2 = core_element.extend({ + chart: null, // the animation associated chart instance + currentStep: 0, // the current animation step + numSteps: 60, // default number of steps + easing: '', // the easing to use for this animation + render: null, // render function used by the animation service + + onAnimationProgress: null, // user specified callback to fire on each step of the animation + onAnimationComplete: null, // user specified callback to fire when the animation finishes +}); + +var core_animation = exports$2; + +// DEPRECATIONS + +/** + * Provided for backward compatibility, use Chart.Animation instead + * @prop Chart.Animation#animationObject + * @deprecated since version 2.6.0 + * @todo remove at version 3 + */ +Object.defineProperty(exports$2.prototype, 'animationObject', { + get: function() { + return this; + } +}); + +/** + * Provided for backward compatibility, use Chart.Animation#chart instead + * @prop Chart.Animation#chartInstance + * @deprecated since version 2.6.0 + * @todo remove at version 3 + */ +Object.defineProperty(exports$2.prototype, 'chartInstance', { + get: function() { + return this.chart; + }, + set: function(value) { + this.chart = value; + } +}); + +core_defaults._set('global', { + animation: { + duration: 1000, + easing: 'easeOutQuart', + onProgress: helpers$1.noop, + onComplete: helpers$1.noop + } +}); + +var core_animations = { + animations: [], + request: null, + + /** + * @param {Chart} chart - The chart to animate. + * @param {Chart.Animation} animation - The animation that we will animate. + * @param {number} duration - The animation duration in ms. + * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions + */ + addAnimation: function(chart, animation, duration, lazy) { + var animations = this.animations; + var i, ilen; + + animation.chart = chart; + animation.startTime = Date.now(); + animation.duration = duration; + + if (!lazy) { + chart.animating = true; + } + + for (i = 0, ilen = animations.length; i < ilen; ++i) { + if (animations[i].chart === chart) { + animations[i] = animation; + return; + } + } + + animations.push(animation); + + // If there are no animations queued, manually kickstart a digest, for lack of a better word + if (animations.length === 1) { + this.requestAnimationFrame(); + } + }, + + cancelAnimation: function(chart) { + var index = helpers$1.findIndex(this.animations, function(animation) { + return animation.chart === chart; + }); + + if (index !== -1) { + this.animations.splice(index, 1); + chart.animating = false; + } + }, + + requestAnimationFrame: function() { + var me = this; + if (me.request === null) { + // Skip animation frame requests until the active one is executed. + // This can happen when processing mouse events, e.g. 'mousemove' + // and 'mouseout' events will trigger multiple renders. + me.request = helpers$1.requestAnimFrame.call(window, function() { + me.request = null; + me.startDigest(); + }); + } + }, + + /** + * @private + */ + startDigest: function() { + var me = this; + + me.advance(); + + // Do we have more stuff to animate? + if (me.animations.length > 0) { + me.requestAnimationFrame(); + } + }, + + /** + * @private + */ + advance: function() { + var animations = this.animations; + var animation, chart, numSteps, nextStep; + var i = 0; + + // 1 animation per chart, so we are looping charts here + while (i < animations.length) { + animation = animations[i]; + chart = animation.chart; + numSteps = animation.numSteps; + + // Make sure that currentStep starts at 1 + // https://github.com/chartjs/Chart.js/issues/6104 + nextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1; + animation.currentStep = Math.min(nextStep, numSteps); + + helpers$1.callback(animation.render, [chart, animation], chart); + helpers$1.callback(animation.onAnimationProgress, [animation], chart); + + if (animation.currentStep >= numSteps) { + helpers$1.callback(animation.onAnimationComplete, [animation], chart); + chart.animating = false; + animations.splice(i, 1); + } else { + ++i; + } + } + } +}; + +var resolve = helpers$1.options.resolve; + +var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift']; + +/** + * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice', + * 'unshift') and notify the listener AFTER the array has been altered. Listeners are + * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments. + */ +function listenArrayEvents(array, listener) { + if (array._chartjs) { + array._chartjs.listeners.push(listener); + return; + } + + Object.defineProperty(array, '_chartjs', { + configurable: true, + enumerable: false, + value: { + listeners: [listener] + } + }); + + arrayEvents.forEach(function(key) { + var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1); + var base = array[key]; + + Object.defineProperty(array, key, { + configurable: true, + enumerable: false, + value: function() { + var args = Array.prototype.slice.call(arguments); + var res = base.apply(this, args); + + helpers$1.each(array._chartjs.listeners, function(object) { + if (typeof object[method] === 'function') { + object[method].apply(object, args); + } + }); + + return res; + } + }); + }); +} + +/** + * Removes the given array event listener and cleanup extra attached properties (such as + * the _chartjs stub and overridden methods) if array doesn't have any more listeners. + */ +function unlistenArrayEvents(array, listener) { + var stub = array._chartjs; + if (!stub) { + return; + } + + var listeners = stub.listeners; + var index = listeners.indexOf(listener); + if (index !== -1) { + listeners.splice(index, 1); + } + + if (listeners.length > 0) { + return; + } + + arrayEvents.forEach(function(key) { + delete array[key]; + }); + + delete array._chartjs; +} + +// Base class for all dataset controllers (line, bar, etc) +var DatasetController = function(chart, datasetIndex) { + this.initialize(chart, datasetIndex); +}; + +helpers$1.extend(DatasetController.prototype, { + + /** + * Element type used to generate a meta dataset (e.g. Chart.element.Line). + * @type {Chart.core.element} + */ + datasetElementType: null, + + /** + * Element type used to generate a meta data (e.g. Chart.element.Point). + * @type {Chart.core.element} + */ + dataElementType: null, + + initialize: function(chart, datasetIndex) { + var me = this; + me.chart = chart; + me.index = datasetIndex; + me.linkScales(); + me.addElements(); + }, + + updateIndex: function(datasetIndex) { + this.index = datasetIndex; + }, + + linkScales: function() { + var me = this; + var meta = me.getMeta(); + var dataset = me.getDataset(); + + if (meta.xAxisID === null || !(meta.xAxisID in me.chart.scales)) { + meta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id; + } + if (meta.yAxisID === null || !(meta.yAxisID in me.chart.scales)) { + meta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id; + } + }, + + getDataset: function() { + return this.chart.data.datasets[this.index]; + }, + + getMeta: function() { + return this.chart.getDatasetMeta(this.index); + }, + + getScaleForId: function(scaleID) { + return this.chart.scales[scaleID]; + }, + + /** + * @private + */ + _getValueScaleId: function() { + return this.getMeta().yAxisID; + }, + + /** + * @private + */ + _getIndexScaleId: function() { + return this.getMeta().xAxisID; + }, + + /** + * @private + */ + _getValueScale: function() { + return this.getScaleForId(this._getValueScaleId()); + }, + + /** + * @private + */ + _getIndexScale: function() { + return this.getScaleForId(this._getIndexScaleId()); + }, + + reset: function() { + this.update(true); + }, + + /** + * @private + */ + destroy: function() { + if (this._data) { + unlistenArrayEvents(this._data, this); + } + }, + + createMetaDataset: function() { + var me = this; + var type = me.datasetElementType; + return type && new type({ + _chart: me.chart, + _datasetIndex: me.index + }); + }, + + createMetaData: function(index) { + var me = this; + var type = me.dataElementType; + return type && new type({ + _chart: me.chart, + _datasetIndex: me.index, + _index: index + }); + }, + + addElements: function() { + var me = this; + var meta = me.getMeta(); + var data = me.getDataset().data || []; + var metaData = meta.data; + var i, ilen; + + for (i = 0, ilen = data.length; i < ilen; ++i) { + metaData[i] = metaData[i] || me.createMetaData(i); + } + + meta.dataset = meta.dataset || me.createMetaDataset(); + }, + + addElementAndReset: function(index) { + var element = this.createMetaData(index); + this.getMeta().data.splice(index, 0, element); + this.updateElement(element, index, true); + }, + + buildOrUpdateElements: function() { + var me = this; + var dataset = me.getDataset(); + var data = dataset.data || (dataset.data = []); + + // In order to correctly handle data addition/deletion animation (an thus simulate + // real-time charts), we need to monitor these data modifications and synchronize + // the internal meta data accordingly. + if (me._data !== data) { + if (me._data) { + // This case happens when the user replaced the data array instance. + unlistenArrayEvents(me._data, me); + } + + if (data && Object.isExtensible(data)) { + listenArrayEvents(data, me); + } + me._data = data; + } + + // Re-sync meta data in case the user replaced the data array or if we missed + // any updates and so make sure that we handle number of datapoints changing. + me.resyncElements(); + }, + + update: helpers$1.noop, + + transition: function(easingValue) { + var meta = this.getMeta(); + var elements = meta.data || []; + var ilen = elements.length; + var i = 0; + + for (; i < ilen; ++i) { + elements[i].transition(easingValue); + } + + if (meta.dataset) { + meta.dataset.transition(easingValue); + } + }, + + draw: function() { + var meta = this.getMeta(); + var elements = meta.data || []; + var ilen = elements.length; + var i = 0; + + if (meta.dataset) { + meta.dataset.draw(); + } + + for (; i < ilen; ++i) { + elements[i].draw(); + } + }, + + removeHoverStyle: function(element) { + helpers$1.merge(element._model, element.$previousStyle || {}); + delete element.$previousStyle; + }, + + setHoverStyle: function(element) { + var dataset = this.chart.data.datasets[element._datasetIndex]; + var index = element._index; + var custom = element.custom || {}; + var model = element._model; + var getHoverColor = helpers$1.getHoverColor; + + element.$previousStyle = { + backgroundColor: model.backgroundColor, + borderColor: model.borderColor, + borderWidth: model.borderWidth + }; + + model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index); + model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index); + model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index); + }, + + /** + * @private + */ + resyncElements: function() { + var me = this; + var meta = me.getMeta(); + var data = me.getDataset().data; + var numMeta = meta.data.length; + var numData = data.length; + + if (numData < numMeta) { + meta.data.splice(numData, numMeta - numData); + } else if (numData > numMeta) { + me.insertElements(numMeta, numData - numMeta); + } + }, + + /** + * @private + */ + insertElements: function(start, count) { + for (var i = 0; i < count; ++i) { + this.addElementAndReset(start + i); + } + }, + + /** + * @private + */ + onDataPush: function() { + var count = arguments.length; + this.insertElements(this.getDataset().data.length - count, count); + }, + + /** + * @private + */ + onDataPop: function() { + this.getMeta().data.pop(); + }, + + /** + * @private + */ + onDataShift: function() { + this.getMeta().data.shift(); + }, + + /** + * @private + */ + onDataSplice: function(start, count) { + this.getMeta().data.splice(start, count); + this.insertElements(start, arguments.length - 2); + }, + + /** + * @private + */ + onDataUnshift: function() { + this.insertElements(0, arguments.length); + } +}); + +DatasetController.extend = helpers$1.inherits; + +var core_datasetController = DatasetController; + +core_defaults._set('global', { + elements: { + arc: { + backgroundColor: core_defaults.global.defaultColor, + borderColor: '#fff', + borderWidth: 2, + borderAlign: 'center' + } + } +}); + +var element_arc = core_element.extend({ + inLabelRange: function(mouseX) { + var vm = this._view; + + if (vm) { + return (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2)); + } + return false; + }, + + inRange: function(chartX, chartY) { + var vm = this._view; + + if (vm) { + var pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY}); + var angle = pointRelativePosition.angle; + var distance = pointRelativePosition.distance; + + // Sanitise angle range + var startAngle = vm.startAngle; + var endAngle = vm.endAngle; + while (endAngle < startAngle) { + endAngle += 2.0 * Math.PI; + } + while (angle > endAngle) { + angle -= 2.0 * Math.PI; + } + while (angle < startAngle) { + angle += 2.0 * Math.PI; + } + + // Check if within the range of the open/close angle + var betweenAngles = (angle >= startAngle && angle <= endAngle); + var withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius); + + return (betweenAngles && withinRadius); + } + return false; + }, + + getCenterPoint: function() { + var vm = this._view; + var halfAngle = (vm.startAngle + vm.endAngle) / 2; + var halfRadius = (vm.innerRadius + vm.outerRadius) / 2; + return { + x: vm.x + Math.cos(halfAngle) * halfRadius, + y: vm.y + Math.sin(halfAngle) * halfRadius + }; + }, + + getArea: function() { + var vm = this._view; + return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2)); + }, + + tooltipPosition: function() { + var vm = this._view; + var centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2); + var rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius; + + return { + x: vm.x + (Math.cos(centreAngle) * rangeFromCentre), + y: vm.y + (Math.sin(centreAngle) * rangeFromCentre) + }; + }, + + draw: function() { + var ctx = this._chart.ctx; + var vm = this._view; + var sA = vm.startAngle; + var eA = vm.endAngle; + var pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0; + var angleMargin; + + ctx.save(); + + ctx.beginPath(); + ctx.arc(vm.x, vm.y, Math.max(vm.outerRadius - pixelMargin, 0), sA, eA); + ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true); + ctx.closePath(); + + ctx.fillStyle = vm.backgroundColor; + ctx.fill(); + + if (vm.borderWidth) { + if (vm.borderAlign === 'inner') { + // Draw an inner border by cliping the arc and drawing a double-width border + // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders + ctx.beginPath(); + angleMargin = pixelMargin / vm.outerRadius; + ctx.arc(vm.x, vm.y, vm.outerRadius, sA - angleMargin, eA + angleMargin); + if (vm.innerRadius > pixelMargin) { + angleMargin = pixelMargin / vm.innerRadius; + ctx.arc(vm.x, vm.y, vm.innerRadius - pixelMargin, eA + angleMargin, sA - angleMargin, true); + } else { + ctx.arc(vm.x, vm.y, pixelMargin, eA + Math.PI / 2, sA - Math.PI / 2); + } + ctx.closePath(); + ctx.clip(); + + ctx.beginPath(); + ctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA); + ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true); + ctx.closePath(); + + ctx.lineWidth = vm.borderWidth * 2; + ctx.lineJoin = 'round'; + } else { + ctx.lineWidth = vm.borderWidth; + ctx.lineJoin = 'bevel'; + } + + ctx.strokeStyle = vm.borderColor; + ctx.stroke(); + } + + ctx.restore(); + } +}); + +var valueOrDefault$1 = helpers$1.valueOrDefault; + +var defaultColor = core_defaults.global.defaultColor; + +core_defaults._set('global', { + elements: { + line: { + tension: 0.4, + backgroundColor: defaultColor, + borderWidth: 3, + borderColor: defaultColor, + borderCapStyle: 'butt', + borderDash: [], + borderDashOffset: 0.0, + borderJoinStyle: 'miter', + capBezierPoints: true, + fill: true, // do we fill in the area between the line and its base axis + } + } +}); + +var element_line = core_element.extend({ + draw: function() { + var me = this; + var vm = me._view; + var ctx = me._chart.ctx; + var spanGaps = vm.spanGaps; + var points = me._children.slice(); // clone array + var globalDefaults = core_defaults.global; + var globalOptionLineElements = globalDefaults.elements.line; + var lastDrawnIndex = -1; + var index, current, previous, currentVM; + + // If we are looping, adding the first point again + if (me._loop && points.length) { + points.push(points[0]); + } + + ctx.save(); + + // Stroke Line Options + ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle; + + // IE 9 and 10 do not support line dash + if (ctx.setLineDash) { + ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash); + } + + ctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset); + ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle; + ctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth); + ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor; + + // Stroke Line + ctx.beginPath(); + lastDrawnIndex = -1; + + for (index = 0; index < points.length; ++index) { + current = points[index]; + previous = helpers$1.previousItem(points, index); + currentVM = current._view; + + // First point moves to it's starting position no matter what + if (index === 0) { + if (!currentVM.skip) { + ctx.moveTo(currentVM.x, currentVM.y); + lastDrawnIndex = index; + } + } else { + previous = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex]; + + if (!currentVM.skip) { + if ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) { + // There was a gap and this is the first point after the gap + ctx.moveTo(currentVM.x, currentVM.y); + } else { + // Line to next point + helpers$1.canvas.lineTo(ctx, previous._view, current._view); + } + lastDrawnIndex = index; + } + } + } + + ctx.stroke(); + ctx.restore(); + } +}); + +var valueOrDefault$2 = helpers$1.valueOrDefault; + +var defaultColor$1 = core_defaults.global.defaultColor; + +core_defaults._set('global', { + elements: { + point: { + radius: 3, + pointStyle: 'circle', + backgroundColor: defaultColor$1, + borderColor: defaultColor$1, + borderWidth: 1, + // Hover + hitRadius: 1, + hoverRadius: 4, + hoverBorderWidth: 1 + } + } +}); + +function xRange(mouseX) { + var vm = this._view; + return vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false; +} + +function yRange(mouseY) { + var vm = this._view; + return vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false; +} + +var element_point = core_element.extend({ + inRange: function(mouseX, mouseY) { + var vm = this._view; + return vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false; + }, + + inLabelRange: xRange, + inXRange: xRange, + inYRange: yRange, + + getCenterPoint: function() { + var vm = this._view; + return { + x: vm.x, + y: vm.y + }; + }, + + getArea: function() { + return Math.PI * Math.pow(this._view.radius, 2); + }, + + tooltipPosition: function() { + var vm = this._view; + return { + x: vm.x, + y: vm.y, + padding: vm.radius + vm.borderWidth + }; + }, + + draw: function(chartArea) { + var vm = this._view; + var ctx = this._chart.ctx; + var pointStyle = vm.pointStyle; + var rotation = vm.rotation; + var radius = vm.radius; + var x = vm.x; + var y = vm.y; + var globalDefaults = core_defaults.global; + var defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow + + if (vm.skip) { + return; + } + + // Clipping for Points. + if (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) { + ctx.strokeStyle = vm.borderColor || defaultColor; + ctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth); + ctx.fillStyle = vm.backgroundColor || defaultColor; + helpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation); + } + } +}); + +var defaultColor$2 = core_defaults.global.defaultColor; + +core_defaults._set('global', { + elements: { + rectangle: { + backgroundColor: defaultColor$2, + borderColor: defaultColor$2, + borderSkipped: 'bottom', + borderWidth: 0 + } + } +}); + +function isVertical(vm) { + return vm && vm.width !== undefined; +} + +/** + * Helper function to get the bounds of the bar regardless of the orientation + * @param bar {Chart.Element.Rectangle} the bar + * @return {Bounds} bounds of the bar + * @private + */ +function getBarBounds(vm) { + var x1, x2, y1, y2, half; + + if (isVertical(vm)) { + half = vm.width / 2; + x1 = vm.x - half; + x2 = vm.x + half; + y1 = Math.min(vm.y, vm.base); + y2 = Math.max(vm.y, vm.base); + } else { + half = vm.height / 2; + x1 = Math.min(vm.x, vm.base); + x2 = Math.max(vm.x, vm.base); + y1 = vm.y - half; + y2 = vm.y + half; + } + + return { + left: x1, + top: y1, + right: x2, + bottom: y2 + }; +} + +function swap(orig, v1, v2) { + return orig === v1 ? v2 : orig === v2 ? v1 : orig; +} + +function parseBorderSkipped(vm) { + var edge = vm.borderSkipped; + var res = {}; + + if (!edge) { + return res; + } + + if (vm.horizontal) { + if (vm.base > vm.x) { + edge = swap(edge, 'left', 'right'); + } + } else if (vm.base < vm.y) { + edge = swap(edge, 'bottom', 'top'); + } + + res[edge] = true; + return res; +} + +function parseBorderWidth(vm, maxW, maxH) { + var value = vm.borderWidth; + var skip = parseBorderSkipped(vm); + var t, r, b, l; + + if (helpers$1.isObject(value)) { + t = +value.top || 0; + r = +value.right || 0; + b = +value.bottom || 0; + l = +value.left || 0; + } else { + t = r = b = l = +value || 0; + } + + return { + t: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t, + r: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r, + b: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b, + l: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l + }; +} + +function boundingRects(vm) { + var bounds = getBarBounds(vm); + var width = bounds.right - bounds.left; + var height = bounds.bottom - bounds.top; + var border = parseBorderWidth(vm, width / 2, height / 2); + + return { + outer: { + x: bounds.left, + y: bounds.top, + w: width, + h: height + }, + inner: { + x: bounds.left + border.l, + y: bounds.top + border.t, + w: width - border.l - border.r, + h: height - border.t - border.b + } + }; +} + +function inRange(vm, x, y) { + var skipX = x === null; + var skipY = y === null; + var bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm); + + return bounds + && (skipX || x >= bounds.left && x <= bounds.right) + && (skipY || y >= bounds.top && y <= bounds.bottom); +} + +var element_rectangle = core_element.extend({ + draw: function() { + var ctx = this._chart.ctx; + var vm = this._view; + var rects = boundingRects(vm); + var outer = rects.outer; + var inner = rects.inner; + + ctx.fillStyle = vm.backgroundColor; + ctx.fillRect(outer.x, outer.y, outer.w, outer.h); + + if (outer.w === inner.w && outer.h === inner.h) { + return; + } + + ctx.save(); + ctx.beginPath(); + ctx.rect(outer.x, outer.y, outer.w, outer.h); + ctx.clip(); + ctx.fillStyle = vm.borderColor; + ctx.rect(inner.x, inner.y, inner.w, inner.h); + ctx.fill('evenodd'); + ctx.restore(); + }, + + height: function() { + var vm = this._view; + return vm.base - vm.y; + }, + + inRange: function(mouseX, mouseY) { + return inRange(this._view, mouseX, mouseY); + }, + + inLabelRange: function(mouseX, mouseY) { + var vm = this._view; + return isVertical(vm) + ? inRange(vm, mouseX, null) + : inRange(vm, null, mouseY); + }, + + inXRange: function(mouseX) { + return inRange(this._view, mouseX, null); + }, + + inYRange: function(mouseY) { + return inRange(this._view, null, mouseY); + }, + + getCenterPoint: function() { + var vm = this._view; + var x, y; + if (isVertical(vm)) { + x = vm.x; + y = (vm.y + vm.base) / 2; + } else { + x = (vm.x + vm.base) / 2; + y = vm.y; + } + + return {x: x, y: y}; + }, + + getArea: function() { + var vm = this._view; + + return isVertical(vm) + ? vm.width * Math.abs(vm.y - vm.base) + : vm.height * Math.abs(vm.x - vm.base); + }, + + tooltipPosition: function() { + var vm = this._view; + return { + x: vm.x, + y: vm.y + }; + } +}); + +var elements = {}; +var Arc = element_arc; +var Line = element_line; +var Point = element_point; +var Rectangle = element_rectangle; +elements.Arc = Arc; +elements.Line = Line; +elements.Point = Point; +elements.Rectangle = Rectangle; + +var resolve$1 = helpers$1.options.resolve; + +core_defaults._set('bar', { + hover: { + mode: 'label' + }, + + scales: { + xAxes: [{ + type: 'category', + categoryPercentage: 0.8, + barPercentage: 0.9, + offset: true, + gridLines: { + offsetGridLines: true + } + }], + + yAxes: [{ + type: 'linear' + }] + } +}); + +/** + * Computes the "optimal" sample size to maintain bars equally sized while preventing overlap. + * @private + */ +function computeMinSampleSize(scale, pixels) { + var min = scale.isHorizontal() ? scale.width : scale.height; + var ticks = scale.getTicks(); + var prev, curr, i, ilen; + + for (i = 1, ilen = pixels.length; i < ilen; ++i) { + min = Math.min(min, Math.abs(pixels[i] - pixels[i - 1])); + } + + for (i = 0, ilen = ticks.length; i < ilen; ++i) { + curr = scale.getPixelForTick(i); + min = i > 0 ? Math.min(min, curr - prev) : min; + prev = curr; + } + + return min; +} + +/** + * Computes an "ideal" category based on the absolute bar thickness or, if undefined or null, + * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This + * mode currently always generates bars equally sized (until we introduce scriptable options?). + * @private + */ +function computeFitCategoryTraits(index, ruler, options) { + var thickness = options.barThickness; + var count = ruler.stackCount; + var curr = ruler.pixels[index]; + var size, ratio; + + if (helpers$1.isNullOrUndef(thickness)) { + size = ruler.min * options.categoryPercentage; + ratio = options.barPercentage; + } else { + // When bar thickness is enforced, category and bar percentages are ignored. + // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%') + // and deprecate barPercentage since this value is ignored when thickness is absolute. + size = thickness * count; + ratio = 1; + } + + return { + chunk: size / count, + ratio: ratio, + start: curr - (size / 2) + }; +} + +/** + * Computes an "optimal" category that globally arranges bars side by side (no gap when + * percentage options are 1), based on the previous and following categories. This mode + * generates bars with different widths when data are not evenly spaced. + * @private + */ +function computeFlexCategoryTraits(index, ruler, options) { + var pixels = ruler.pixels; + var curr = pixels[index]; + var prev = index > 0 ? pixels[index - 1] : null; + var next = index < pixels.length - 1 ? pixels[index + 1] : null; + var percent = options.categoryPercentage; + var start, size; + + if (prev === null) { + // first data: its size is double based on the next point or, + // if it's also the last data, we use the scale size. + prev = curr - (next === null ? ruler.end - ruler.start : next - curr); + } + + if (next === null) { + // last data: its size is also double based on the previous point. + next = curr + curr - prev; + } + + start = curr - (curr - Math.min(prev, next)) / 2 * percent; + size = Math.abs(next - prev) / 2 * percent; + + return { + chunk: size / ruler.stackCount, + ratio: options.barPercentage, + start: start + }; +} + +var controller_bar = core_datasetController.extend({ + + dataElementType: elements.Rectangle, + + initialize: function() { + var me = this; + var meta; + + core_datasetController.prototype.initialize.apply(me, arguments); + + meta = me.getMeta(); + meta.stack = me.getDataset().stack; + meta.bar = true; + }, + + update: function(reset) { + var me = this; + var rects = me.getMeta().data; + var i, ilen; + + me._ruler = me.getRuler(); + + for (i = 0, ilen = rects.length; i < ilen; ++i) { + me.updateElement(rects[i], i, reset); + } + }, + + updateElement: function(rectangle, index, reset) { + var me = this; + var meta = me.getMeta(); + var dataset = me.getDataset(); + var options = me._resolveElementOptions(rectangle, index); + + rectangle._xScale = me.getScaleForId(meta.xAxisID); + rectangle._yScale = me.getScaleForId(meta.yAxisID); + rectangle._datasetIndex = me.index; + rectangle._index = index; + rectangle._model = { + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderSkipped: options.borderSkipped, + borderWidth: options.borderWidth, + datasetLabel: dataset.label, + label: me.chart.data.labels[index] + }; + + me._updateElementGeometry(rectangle, index, reset); + + rectangle.pivot(); + }, + + /** + * @private + */ + _updateElementGeometry: function(rectangle, index, reset) { + var me = this; + var model = rectangle._model; + var vscale = me._getValueScale(); + var base = vscale.getBasePixel(); + var horizontal = vscale.isHorizontal(); + var ruler = me._ruler || me.getRuler(); + var vpixels = me.calculateBarValuePixels(me.index, index); + var ipixels = me.calculateBarIndexPixels(me.index, index, ruler); + + model.horizontal = horizontal; + model.base = reset ? base : vpixels.base; + model.x = horizontal ? reset ? base : vpixels.head : ipixels.center; + model.y = horizontal ? ipixels.center : reset ? base : vpixels.head; + model.height = horizontal ? ipixels.size : undefined; + model.width = horizontal ? undefined : ipixels.size; + }, + + /** + * Returns the stacks based on groups and bar visibility. + * @param {number} [last] - The dataset index + * @returns {string[]} The list of stack IDs + * @private + */ + _getStacks: function(last) { + var me = this; + var chart = me.chart; + var scale = me._getIndexScale(); + var stacked = scale.options.stacked; + var ilen = last === undefined ? chart.data.datasets.length : last + 1; + var stacks = []; + var i, meta; + + for (i = 0; i < ilen; ++i) { + meta = chart.getDatasetMeta(i); + if (meta.bar && chart.isDatasetVisible(i) && + (stacked === false || + (stacked === true && stacks.indexOf(meta.stack) === -1) || + (stacked === undefined && (meta.stack === undefined || stacks.indexOf(meta.stack) === -1)))) { + stacks.push(meta.stack); + } + } + + return stacks; + }, + + /** + * Returns the effective number of stacks based on groups and bar visibility. + * @private + */ + getStackCount: function() { + return this._getStacks().length; + }, + + /** + * Returns the stack index for the given dataset based on groups and bar visibility. + * @param {number} [datasetIndex] - The dataset index + * @param {string} [name] - The stack name to find + * @returns {number} The stack index + * @private + */ + getStackIndex: function(datasetIndex, name) { + var stacks = this._getStacks(datasetIndex); + var index = (name !== undefined) + ? stacks.indexOf(name) + : -1; // indexOf returns -1 if element is not present + + return (index === -1) + ? stacks.length - 1 + : index; + }, + + /** + * @private + */ + getRuler: function() { + var me = this; + var scale = me._getIndexScale(); + var stackCount = me.getStackCount(); + var datasetIndex = me.index; + var isHorizontal = scale.isHorizontal(); + var start = isHorizontal ? scale.left : scale.top; + var end = start + (isHorizontal ? scale.width : scale.height); + var pixels = []; + var i, ilen, min; + + for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) { + pixels.push(scale.getPixelForValue(null, i, datasetIndex)); + } + + min = helpers$1.isNullOrUndef(scale.options.barThickness) + ? computeMinSampleSize(scale, pixels) + : -1; + + return { + min: min, + pixels: pixels, + start: start, + end: end, + stackCount: stackCount, + scale: scale + }; + }, + + /** + * Note: pixel values are not clamped to the scale area. + * @private + */ + calculateBarValuePixels: function(datasetIndex, index) { + var me = this; + var chart = me.chart; + var meta = me.getMeta(); + var scale = me._getValueScale(); + var isHorizontal = scale.isHorizontal(); + var datasets = chart.data.datasets; + var value = +scale.getRightValue(datasets[datasetIndex].data[index]); + var minBarLength = scale.options.minBarLength; + var stacked = scale.options.stacked; + var stack = meta.stack; + var start = 0; + var i, imeta, ivalue, base, head, size; + + if (stacked || (stacked === undefined && stack !== undefined)) { + for (i = 0; i < datasetIndex; ++i) { + imeta = chart.getDatasetMeta(i); + + if (imeta.bar && + imeta.stack === stack && + imeta.controller._getValueScaleId() === scale.id && + chart.isDatasetVisible(i)) { + + ivalue = +scale.getRightValue(datasets[i].data[index]); + if ((value < 0 && ivalue < 0) || (value >= 0 && ivalue > 0)) { + start += ivalue; + } + } + } + } + + base = scale.getPixelForValue(start); + head = scale.getPixelForValue(start + value); + size = head - base; + + if (minBarLength !== undefined && Math.abs(size) < minBarLength) { + size = minBarLength; + if (value >= 0 && !isHorizontal || value < 0 && isHorizontal) { + head = base - minBarLength; + } else { + head = base + minBarLength; + } + } + + return { + size: size, + base: base, + head: head, + center: head + size / 2 + }; + }, + + /** + * @private + */ + calculateBarIndexPixels: function(datasetIndex, index, ruler) { + var me = this; + var options = ruler.scale.options; + var range = options.barThickness === 'flex' + ? computeFlexCategoryTraits(index, ruler, options) + : computeFitCategoryTraits(index, ruler, options); + + var stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack); + var center = range.start + (range.chunk * stackIndex) + (range.chunk / 2); + var size = Math.min( + helpers$1.valueOrDefault(options.maxBarThickness, Infinity), + range.chunk * range.ratio); + + return { + base: center - size / 2, + head: center + size / 2, + center: center, + size: size + }; + }, + + draw: function() { + var me = this; + var chart = me.chart; + var scale = me._getValueScale(); + var rects = me.getMeta().data; + var dataset = me.getDataset(); + var ilen = rects.length; + var i = 0; + + helpers$1.canvas.clipArea(chart.ctx, chart.chartArea); + + for (; i < ilen; ++i) { + if (!isNaN(scale.getRightValue(dataset.data[i]))) { + rects[i].draw(); + } + } + + helpers$1.canvas.unclipArea(chart.ctx); + }, + + /** + * @private + */ + _resolveElementOptions: function(rectangle, index) { + var me = this; + var chart = me.chart; + var datasets = chart.data.datasets; + var dataset = datasets[me.index]; + var custom = rectangle.custom || {}; + var options = chart.options.elements.rectangle; + var values = {}; + var i, ilen, key; + + // Scriptable options + var context = { + chart: chart, + dataIndex: index, + dataset: dataset, + datasetIndex: me.index + }; + + var keys = [ + 'backgroundColor', + 'borderColor', + 'borderSkipped', + 'borderWidth' + ]; + + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + values[key] = resolve$1([ + custom[key], + dataset[key], + options[key] + ], context, index); + } + + return values; + } +}); + +var valueOrDefault$3 = helpers$1.valueOrDefault; +var resolve$2 = helpers$1.options.resolve; + +core_defaults._set('bubble', { + hover: { + mode: 'single' + }, + + scales: { + xAxes: [{ + type: 'linear', // bubble should probably use a linear scale by default + position: 'bottom', + id: 'x-axis-0' // need an ID so datasets can reference the scale + }], + yAxes: [{ + type: 'linear', + position: 'left', + id: 'y-axis-0' + }] + }, + + tooltips: { + callbacks: { + title: function() { + // Title doesn't make sense for scatter since we format the data as a point + return ''; + }, + label: function(item, data) { + var datasetLabel = data.datasets[item.datasetIndex].label || ''; + var dataPoint = data.datasets[item.datasetIndex].data[item.index]; + return datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')'; + } + } + } +}); + +var controller_bubble = core_datasetController.extend({ + /** + * @protected + */ + dataElementType: elements.Point, + + /** + * @protected + */ + update: function(reset) { + var me = this; + var meta = me.getMeta(); + var points = meta.data; + + // Update Points + helpers$1.each(points, function(point, index) { + me.updateElement(point, index, reset); + }); + }, + + /** + * @protected + */ + updateElement: function(point, index, reset) { + var me = this; + var meta = me.getMeta(); + var custom = point.custom || {}; + var xScale = me.getScaleForId(meta.xAxisID); + var yScale = me.getScaleForId(meta.yAxisID); + var options = me._resolveElementOptions(point, index); + var data = me.getDataset().data[index]; + var dsIndex = me.index; + + var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex); + var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex); + + point._xScale = xScale; + point._yScale = yScale; + point._options = options; + point._datasetIndex = dsIndex; + point._index = index; + point._model = { + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderWidth: options.borderWidth, + hitRadius: options.hitRadius, + pointStyle: options.pointStyle, + rotation: options.rotation, + radius: reset ? 0 : options.radius, + skip: custom.skip || isNaN(x) || isNaN(y), + x: x, + y: y, + }; + + point.pivot(); + }, + + /** + * @protected + */ + setHoverStyle: function(point) { + var model = point._model; + var options = point._options; + var getHoverColor = helpers$1.getHoverColor; + + point.$previousStyle = { + backgroundColor: model.backgroundColor, + borderColor: model.borderColor, + borderWidth: model.borderWidth, + radius: model.radius + }; + + model.backgroundColor = valueOrDefault$3(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); + model.borderColor = valueOrDefault$3(options.hoverBorderColor, getHoverColor(options.borderColor)); + model.borderWidth = valueOrDefault$3(options.hoverBorderWidth, options.borderWidth); + model.radius = options.radius + options.hoverRadius; + }, + + /** + * @private + */ + _resolveElementOptions: function(point, index) { + var me = this; + var chart = me.chart; + var datasets = chart.data.datasets; + var dataset = datasets[me.index]; + var custom = point.custom || {}; + var options = chart.options.elements.point; + var data = dataset.data[index]; + var values = {}; + var i, ilen, key; + + // Scriptable options + var context = { + chart: chart, + dataIndex: index, + dataset: dataset, + datasetIndex: me.index + }; + + var keys = [ + 'backgroundColor', + 'borderColor', + 'borderWidth', + 'hoverBackgroundColor', + 'hoverBorderColor', + 'hoverBorderWidth', + 'hoverRadius', + 'hitRadius', + 'pointStyle', + 'rotation' + ]; + + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + values[key] = resolve$2([ + custom[key], + dataset[key], + options[key] + ], context, index); + } + + // Custom radius resolution + values.radius = resolve$2([ + custom.radius, + data ? data.r : undefined, + dataset.radius, + options.radius + ], context, index); + + return values; + } +}); + +var resolve$3 = helpers$1.options.resolve; +var valueOrDefault$4 = helpers$1.valueOrDefault; + +core_defaults._set('doughnut', { + animation: { + // Boolean - Whether we animate the rotation of the Doughnut + animateRotate: true, + // Boolean - Whether we animate scaling the Doughnut from the centre + animateScale: false + }, + hover: { + mode: 'single' + }, + legendCallback: function(chart) { + var text = []; + text.push('
    '); + + var data = chart.data; + var datasets = data.datasets; + var labels = data.labels; + + if (datasets.length) { + for (var i = 0; i < datasets[0].data.length; ++i) { + text.push('
  • '); + if (labels[i]) { + text.push(labels[i]); + } + text.push('
  • '); + } + } + + text.push('
'); + return text.join(''); + }, + legend: { + labels: { + generateLabels: function(chart) { + var data = chart.data; + if (data.labels.length && data.datasets.length) { + return data.labels.map(function(label, i) { + var meta = chart.getDatasetMeta(0); + var ds = data.datasets[0]; + var arc = meta.data[i]; + var custom = arc && arc.custom || {}; + var arcOpts = chart.options.elements.arc; + var fill = resolve$3([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i); + var stroke = resolve$3([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i); + var bw = resolve$3([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i); + + return { + text: label, + fillStyle: fill, + strokeStyle: stroke, + lineWidth: bw, + hidden: isNaN(ds.data[i]) || meta.data[i].hidden, + + // Extra data used for toggling the correct item + index: i + }; + }); + } + return []; + } + }, + + onClick: function(e, legendItem) { + var index = legendItem.index; + var chart = this.chart; + var i, ilen, meta; + + for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) { + meta = chart.getDatasetMeta(i); + // toggle visibility of index if exists + if (meta.data[index]) { + meta.data[index].hidden = !meta.data[index].hidden; + } + } + + chart.update(); + } + }, + + // The percentage of the chart that we cut out of the middle. + cutoutPercentage: 50, + + // The rotation of the chart, where the first data arc begins. + rotation: Math.PI * -0.5, + + // The total circumference of the chart. + circumference: Math.PI * 2.0, + + // Need to override these to give a nice default + tooltips: { + callbacks: { + title: function() { + return ''; + }, + label: function(tooltipItem, data) { + var dataLabel = data.labels[tooltipItem.index]; + var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]; + + if (helpers$1.isArray(dataLabel)) { + // show value on first line of multiline label + // need to clone because we are changing the value + dataLabel = dataLabel.slice(); + dataLabel[0] += value; + } else { + dataLabel += value; + } + + return dataLabel; + } + } + } +}); + +var controller_doughnut = core_datasetController.extend({ + + dataElementType: elements.Arc, + + linkScales: helpers$1.noop, + + // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly + getRingIndex: function(datasetIndex) { + var ringIndex = 0; + + for (var j = 0; j < datasetIndex; ++j) { + if (this.chart.isDatasetVisible(j)) { + ++ringIndex; + } + } + + return ringIndex; + }, + + update: function(reset) { + var me = this; + var chart = me.chart; + var chartArea = chart.chartArea; + var opts = chart.options; + var availableWidth = chartArea.right - chartArea.left; + var availableHeight = chartArea.bottom - chartArea.top; + var minSize = Math.min(availableWidth, availableHeight); + var offset = {x: 0, y: 0}; + var meta = me.getMeta(); + var arcs = meta.data; + var cutoutPercentage = opts.cutoutPercentage; + var circumference = opts.circumference; + var chartWeight = me._getRingWeight(me.index); + var i, ilen; + + // If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc + if (circumference < Math.PI * 2.0) { + var startAngle = opts.rotation % (Math.PI * 2.0); + startAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0); + var endAngle = startAngle + circumference; + var start = {x: Math.cos(startAngle), y: Math.sin(startAngle)}; + var end = {x: Math.cos(endAngle), y: Math.sin(endAngle)}; + var contains0 = (startAngle <= 0 && endAngle >= 0) || (startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle); + var contains90 = (startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle); + var contains180 = (startAngle <= -Math.PI && -Math.PI <= endAngle) || (startAngle <= Math.PI && Math.PI <= endAngle); + var contains270 = (startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle); + var cutout = cutoutPercentage / 100.0; + var min = {x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))}; + var max = {x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))}; + var size = {width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5}; + minSize = Math.min(availableWidth / size.width, availableHeight / size.height); + offset = {x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5}; + } + + for (i = 0, ilen = arcs.length; i < ilen; ++i) { + arcs[i]._options = me._resolveElementOptions(arcs[i], i); + } + + chart.borderWidth = me.getMaxBorderWidth(); + chart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0); + chart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 0, 0); + chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1); + chart.offsetX = offset.x * chart.outerRadius; + chart.offsetY = offset.y * chart.outerRadius; + + meta.total = me.calculateTotal(); + + me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index); + me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0); + + for (i = 0, ilen = arcs.length; i < ilen; ++i) { + me.updateElement(arcs[i], i, reset); + } + }, + + updateElement: function(arc, index, reset) { + var me = this; + var chart = me.chart; + var chartArea = chart.chartArea; + var opts = chart.options; + var animationOpts = opts.animation; + var centerX = (chartArea.left + chartArea.right) / 2; + var centerY = (chartArea.top + chartArea.bottom) / 2; + var startAngle = opts.rotation; // non reset case handled later + var endAngle = opts.rotation; // non reset case handled later + var dataset = me.getDataset(); + var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI)); + var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius; + var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius; + var options = arc._options || {}; + + helpers$1.extend(arc, { + // Utility + _datasetIndex: me.index, + _index: index, + + // Desired view properties + _model: { + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderWidth: options.borderWidth, + borderAlign: options.borderAlign, + x: centerX + chart.offsetX, + y: centerY + chart.offsetY, + startAngle: startAngle, + endAngle: endAngle, + circumference: circumference, + outerRadius: outerRadius, + innerRadius: innerRadius, + label: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index]) + } + }); + + var model = arc._model; + + // Set correct angles if not resetting + if (!reset || !animationOpts.animateRotate) { + if (index === 0) { + model.startAngle = opts.rotation; + } else { + model.startAngle = me.getMeta().data[index - 1]._model.endAngle; + } + + model.endAngle = model.startAngle + model.circumference; + } + + arc.pivot(); + }, + + calculateTotal: function() { + var dataset = this.getDataset(); + var meta = this.getMeta(); + var total = 0; + var value; + + helpers$1.each(meta.data, function(element, index) { + value = dataset.data[index]; + if (!isNaN(value) && !element.hidden) { + total += Math.abs(value); + } + }); + + /* if (total === 0) { + total = NaN; + }*/ + + return total; + }, + + calculateCircumference: function(value) { + var total = this.getMeta().total; + if (total > 0 && !isNaN(value)) { + return (Math.PI * 2.0) * (Math.abs(value) / total); + } + return 0; + }, + + // gets the max border or hover width to properly scale pie charts + getMaxBorderWidth: function(arcs) { + var me = this; + var max = 0; + var chart = me.chart; + var i, ilen, meta, arc, controller, options, borderWidth, hoverWidth; + + if (!arcs) { + // Find the outmost visible dataset + for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) { + if (chart.isDatasetVisible(i)) { + meta = chart.getDatasetMeta(i); + arcs = meta.data; + if (i !== me.index) { + controller = meta.controller; + } + break; + } + } + } + + if (!arcs) { + return 0; + } + + for (i = 0, ilen = arcs.length; i < ilen; ++i) { + arc = arcs[i]; + options = controller ? controller._resolveElementOptions(arc, i) : arc._options; + if (options.borderAlign !== 'inner') { + borderWidth = options.borderWidth; + hoverWidth = options.hoverBorderWidth; + + max = borderWidth > max ? borderWidth : max; + max = hoverWidth > max ? hoverWidth : max; + } + } + return max; + }, + + /** + * @protected + */ + setHoverStyle: function(arc) { + var model = arc._model; + var options = arc._options; + var getHoverColor = helpers$1.getHoverColor; + + arc.$previousStyle = { + backgroundColor: model.backgroundColor, + borderColor: model.borderColor, + borderWidth: model.borderWidth, + }; + + model.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); + model.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor)); + model.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth); + }, + + /** + * @private + */ + _resolveElementOptions: function(arc, index) { + var me = this; + var chart = me.chart; + var dataset = me.getDataset(); + var custom = arc.custom || {}; + var options = chart.options.elements.arc; + var values = {}; + var i, ilen, key; + + // Scriptable options + var context = { + chart: chart, + dataIndex: index, + dataset: dataset, + datasetIndex: me.index + }; + + var keys = [ + 'backgroundColor', + 'borderColor', + 'borderWidth', + 'borderAlign', + 'hoverBackgroundColor', + 'hoverBorderColor', + 'hoverBorderWidth', + ]; + + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + values[key] = resolve$3([ + custom[key], + dataset[key], + options[key] + ], context, index); + } + + return values; + }, + + /** + * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly + * @private + */ + _getRingWeightOffset: function(datasetIndex) { + var ringWeightOffset = 0; + + for (var i = 0; i < datasetIndex; ++i) { + if (this.chart.isDatasetVisible(i)) { + ringWeightOffset += this._getRingWeight(i); + } + } + + return ringWeightOffset; + }, + + /** + * @private + */ + _getRingWeight: function(dataSetIndex) { + return Math.max(valueOrDefault$4(this.chart.data.datasets[dataSetIndex].weight, 1), 0); + }, + + /** + * Returns the sum of all visibile data set weights. This value can be 0. + * @private + */ + _getVisibleDatasetWeightTotal: function() { + return this._getRingWeightOffset(this.chart.data.datasets.length); + } +}); + +core_defaults._set('horizontalBar', { + hover: { + mode: 'index', + axis: 'y' + }, + + scales: { + xAxes: [{ + type: 'linear', + position: 'bottom' + }], + + yAxes: [{ + type: 'category', + position: 'left', + categoryPercentage: 0.8, + barPercentage: 0.9, + offset: true, + gridLines: { + offsetGridLines: true + } + }] + }, + + elements: { + rectangle: { + borderSkipped: 'left' + } + }, + + tooltips: { + mode: 'index', + axis: 'y' + } +}); + +var controller_horizontalBar = controller_bar.extend({ + /** + * @private + */ + _getValueScaleId: function() { + return this.getMeta().xAxisID; + }, + + /** + * @private + */ + _getIndexScaleId: function() { + return this.getMeta().yAxisID; + } +}); + +var valueOrDefault$5 = helpers$1.valueOrDefault; +var resolve$4 = helpers$1.options.resolve; +var isPointInArea = helpers$1.canvas._isPointInArea; + +core_defaults._set('line', { + showLines: true, + spanGaps: false, + + hover: { + mode: 'label' + }, + + scales: { + xAxes: [{ + type: 'category', + id: 'x-axis-0' + }], + yAxes: [{ + type: 'linear', + id: 'y-axis-0' + }] + } +}); + +function lineEnabled(dataset, options) { + return valueOrDefault$5(dataset.showLine, options.showLines); +} + +var controller_line = core_datasetController.extend({ + + datasetElementType: elements.Line, + + dataElementType: elements.Point, + + update: function(reset) { + var me = this; + var meta = me.getMeta(); + var line = meta.dataset; + var points = meta.data || []; + var scale = me.getScaleForId(meta.yAxisID); + var dataset = me.getDataset(); + var showLine = lineEnabled(dataset, me.chart.options); + var i, ilen; + + // Update Line + if (showLine) { + // Compatibility: If the properties are defined with only the old name, use those values + if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) { + dataset.lineTension = dataset.tension; + } + + // Utility + line._scale = scale; + line._datasetIndex = me.index; + // Data + line._children = points; + // Model + line._model = me._resolveLineOptions(line); + + line.pivot(); + } + + // Update Points + for (i = 0, ilen = points.length; i < ilen; ++i) { + me.updateElement(points[i], i, reset); + } + + if (showLine && line._model.tension !== 0) { + me.updateBezierControlPoints(); + } + + // Now pivot the point for animation + for (i = 0, ilen = points.length; i < ilen; ++i) { + points[i].pivot(); + } + }, + + updateElement: function(point, index, reset) { + var me = this; + var meta = me.getMeta(); + var custom = point.custom || {}; + var dataset = me.getDataset(); + var datasetIndex = me.index; + var value = dataset.data[index]; + var yScale = me.getScaleForId(meta.yAxisID); + var xScale = me.getScaleForId(meta.xAxisID); + var lineModel = meta.dataset._model; + var x, y; + + var options = me._resolvePointOptions(point, index); + + x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex); + y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex); + + // Utility + point._xScale = xScale; + point._yScale = yScale; + point._options = options; + point._datasetIndex = datasetIndex; + point._index = index; + + // Desired view properties + point._model = { + x: x, + y: y, + skip: custom.skip || isNaN(x) || isNaN(y), + // Appearance + radius: options.radius, + pointStyle: options.pointStyle, + rotation: options.rotation, + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderWidth: options.borderWidth, + tension: valueOrDefault$5(custom.tension, lineModel ? lineModel.tension : 0), + steppedLine: lineModel ? lineModel.steppedLine : false, + // Tooltip + hitRadius: options.hitRadius + }; + }, + + /** + * @private + */ + _resolvePointOptions: function(element, index) { + var me = this; + var chart = me.chart; + var dataset = chart.data.datasets[me.index]; + var custom = element.custom || {}; + var options = chart.options.elements.point; + var values = {}; + var i, ilen, key; + + // Scriptable options + var context = { + chart: chart, + dataIndex: index, + dataset: dataset, + datasetIndex: me.index + }; + + var ELEMENT_OPTIONS = { + backgroundColor: 'pointBackgroundColor', + borderColor: 'pointBorderColor', + borderWidth: 'pointBorderWidth', + hitRadius: 'pointHitRadius', + hoverBackgroundColor: 'pointHoverBackgroundColor', + hoverBorderColor: 'pointHoverBorderColor', + hoverBorderWidth: 'pointHoverBorderWidth', + hoverRadius: 'pointHoverRadius', + pointStyle: 'pointStyle', + radius: 'pointRadius', + rotation: 'pointRotation' + }; + var keys = Object.keys(ELEMENT_OPTIONS); + + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + values[key] = resolve$4([ + custom[key], + dataset[ELEMENT_OPTIONS[key]], + dataset[key], + options[key] + ], context, index); + } + + return values; + }, + + /** + * @private + */ + _resolveLineOptions: function(element) { + var me = this; + var chart = me.chart; + var dataset = chart.data.datasets[me.index]; + var custom = element.custom || {}; + var options = chart.options; + var elementOptions = options.elements.line; + var values = {}; + var i, ilen, key; + + var keys = [ + 'backgroundColor', + 'borderWidth', + 'borderColor', + 'borderCapStyle', + 'borderDash', + 'borderDashOffset', + 'borderJoinStyle', + 'fill', + 'cubicInterpolationMode' + ]; + + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + values[key] = resolve$4([ + custom[key], + dataset[key], + elementOptions[key] + ]); + } + + // The default behavior of lines is to break at null values, according + // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158 + // This option gives lines the ability to span gaps + values.spanGaps = valueOrDefault$5(dataset.spanGaps, options.spanGaps); + values.tension = valueOrDefault$5(dataset.lineTension, elementOptions.tension); + values.steppedLine = resolve$4([custom.steppedLine, dataset.steppedLine, elementOptions.stepped]); + + return values; + }, + + calculatePointY: function(value, index, datasetIndex) { + var me = this; + var chart = me.chart; + var meta = me.getMeta(); + var yScale = me.getScaleForId(meta.yAxisID); + var sumPos = 0; + var sumNeg = 0; + var i, ds, dsMeta; + + if (yScale.options.stacked) { + for (i = 0; i < datasetIndex; i++) { + ds = chart.data.datasets[i]; + dsMeta = chart.getDatasetMeta(i); + if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) { + var stackedRightValue = Number(yScale.getRightValue(ds.data[index])); + if (stackedRightValue < 0) { + sumNeg += stackedRightValue || 0; + } else { + sumPos += stackedRightValue || 0; + } + } + } + + var rightValue = Number(yScale.getRightValue(value)); + if (rightValue < 0) { + return yScale.getPixelForValue(sumNeg + rightValue); + } + return yScale.getPixelForValue(sumPos + rightValue); + } + + return yScale.getPixelForValue(value); + }, + + updateBezierControlPoints: function() { + var me = this; + var chart = me.chart; + var meta = me.getMeta(); + var lineModel = meta.dataset._model; + var area = chart.chartArea; + var points = meta.data || []; + var i, ilen, model, controlPoints; + + // Only consider points that are drawn in case the spanGaps option is used + if (lineModel.spanGaps) { + points = points.filter(function(pt) { + return !pt._model.skip; + }); + } + + function capControlPoint(pt, min, max) { + return Math.max(Math.min(pt, max), min); + } + + if (lineModel.cubicInterpolationMode === 'monotone') { + helpers$1.splineCurveMonotone(points); + } else { + for (i = 0, ilen = points.length; i < ilen; ++i) { + model = points[i]._model; + controlPoints = helpers$1.splineCurve( + helpers$1.previousItem(points, i)._model, + model, + helpers$1.nextItem(points, i)._model, + lineModel.tension + ); + model.controlPointPreviousX = controlPoints.previous.x; + model.controlPointPreviousY = controlPoints.previous.y; + model.controlPointNextX = controlPoints.next.x; + model.controlPointNextY = controlPoints.next.y; + } + } + + if (chart.options.elements.line.capBezierPoints) { + for (i = 0, ilen = points.length; i < ilen; ++i) { + model = points[i]._model; + if (isPointInArea(model, area)) { + if (i > 0 && isPointInArea(points[i - 1]._model, area)) { + model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right); + model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom); + } + if (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) { + model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right); + model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom); + } + } + } + } + }, + + draw: function() { + var me = this; + var chart = me.chart; + var meta = me.getMeta(); + var points = meta.data || []; + var area = chart.chartArea; + var ilen = points.length; + var halfBorderWidth; + var i = 0; + + if (lineEnabled(me.getDataset(), chart.options)) { + halfBorderWidth = (meta.dataset._model.borderWidth || 0) / 2; + + helpers$1.canvas.clipArea(chart.ctx, { + left: area.left, + right: area.right, + top: area.top - halfBorderWidth, + bottom: area.bottom + halfBorderWidth + }); + + meta.dataset.draw(); + + helpers$1.canvas.unclipArea(chart.ctx); + } + + // Draw the points + for (; i < ilen; ++i) { + points[i].draw(area); + } + }, + + /** + * @protected + */ + setHoverStyle: function(point) { + var model = point._model; + var options = point._options; + var getHoverColor = helpers$1.getHoverColor; + + point.$previousStyle = { + backgroundColor: model.backgroundColor, + borderColor: model.borderColor, + borderWidth: model.borderWidth, + radius: model.radius + }; + + model.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); + model.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor)); + model.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth); + model.radius = valueOrDefault$5(options.hoverRadius, options.radius); + }, +}); + +var resolve$5 = helpers$1.options.resolve; + +core_defaults._set('polarArea', { + scale: { + type: 'radialLinear', + angleLines: { + display: false + }, + gridLines: { + circular: true + }, + pointLabels: { + display: false + }, + ticks: { + beginAtZero: true + } + }, + + // Boolean - Whether to animate the rotation of the chart + animation: { + animateRotate: true, + animateScale: true + }, + + startAngle: -0.5 * Math.PI, + legendCallback: function(chart) { + var text = []; + text.push('
    '); + + var data = chart.data; + var datasets = data.datasets; + var labels = data.labels; + + if (datasets.length) { + for (var i = 0; i < datasets[0].data.length; ++i) { + text.push('
  • '); + if (labels[i]) { + text.push(labels[i]); + } + text.push('
  • '); + } + } + + text.push('
'); + return text.join(''); + }, + legend: { + labels: { + generateLabels: function(chart) { + var data = chart.data; + if (data.labels.length && data.datasets.length) { + return data.labels.map(function(label, i) { + var meta = chart.getDatasetMeta(0); + var ds = data.datasets[0]; + var arc = meta.data[i]; + var custom = arc.custom || {}; + var arcOpts = chart.options.elements.arc; + var fill = resolve$5([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i); + var stroke = resolve$5([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i); + var bw = resolve$5([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i); + + return { + text: label, + fillStyle: fill, + strokeStyle: stroke, + lineWidth: bw, + hidden: isNaN(ds.data[i]) || meta.data[i].hidden, + + // Extra data used for toggling the correct item + index: i + }; + }); + } + return []; + } + }, + + onClick: function(e, legendItem) { + var index = legendItem.index; + var chart = this.chart; + var i, ilen, meta; + + for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) { + meta = chart.getDatasetMeta(i); + meta.data[index].hidden = !meta.data[index].hidden; + } + + chart.update(); + } + }, + + // Need to override these to give a nice default + tooltips: { + callbacks: { + title: function() { + return ''; + }, + label: function(item, data) { + return data.labels[item.index] + ': ' + item.yLabel; + } + } + } +}); + +var controller_polarArea = core_datasetController.extend({ + + dataElementType: elements.Arc, + + linkScales: helpers$1.noop, + + update: function(reset) { + var me = this; + var dataset = me.getDataset(); + var meta = me.getMeta(); + var start = me.chart.options.startAngle || 0; + var starts = me._starts = []; + var angles = me._angles = []; + var arcs = meta.data; + var i, ilen, angle; + + me._updateRadius(); + + meta.count = me.countVisibleElements(); + + for (i = 0, ilen = dataset.data.length; i < ilen; i++) { + starts[i] = start; + angle = me._computeAngle(i); + angles[i] = angle; + start += angle; + } + + for (i = 0, ilen = arcs.length; i < ilen; ++i) { + arcs[i]._options = me._resolveElementOptions(arcs[i], i); + me.updateElement(arcs[i], i, reset); + } + }, + + /** + * @private + */ + _updateRadius: function() { + var me = this; + var chart = me.chart; + var chartArea = chart.chartArea; + var opts = chart.options; + var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top); + + chart.outerRadius = Math.max(minSize / 2, 0); + chart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0); + chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount(); + + me.outerRadius = chart.outerRadius - (chart.radiusLength * me.index); + me.innerRadius = me.outerRadius - chart.radiusLength; + }, + + updateElement: function(arc, index, reset) { + var me = this; + var chart = me.chart; + var dataset = me.getDataset(); + var opts = chart.options; + var animationOpts = opts.animation; + var scale = chart.scale; + var labels = chart.data.labels; + + var centerX = scale.xCenter; + var centerY = scale.yCenter; + + // var negHalfPI = -0.5 * Math.PI; + var datasetStartAngle = opts.startAngle; + var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); + var startAngle = me._starts[index]; + var endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]); + + var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); + var options = arc._options || {}; + + helpers$1.extend(arc, { + // Utility + _datasetIndex: me.index, + _index: index, + _scale: scale, + + // Desired view properties + _model: { + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderWidth: options.borderWidth, + borderAlign: options.borderAlign, + x: centerX, + y: centerY, + innerRadius: 0, + outerRadius: reset ? resetRadius : distance, + startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle, + endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle, + label: helpers$1.valueAtIndexOrDefault(labels, index, labels[index]) + } + }); + + arc.pivot(); + }, + + countVisibleElements: function() { + var dataset = this.getDataset(); + var meta = this.getMeta(); + var count = 0; + + helpers$1.each(meta.data, function(element, index) { + if (!isNaN(dataset.data[index]) && !element.hidden) { + count++; + } + }); + + return count; + }, + + /** + * @protected + */ + setHoverStyle: function(arc) { + var model = arc._model; + var options = arc._options; + var getHoverColor = helpers$1.getHoverColor; + var valueOrDefault = helpers$1.valueOrDefault; + + arc.$previousStyle = { + backgroundColor: model.backgroundColor, + borderColor: model.borderColor, + borderWidth: model.borderWidth, + }; + + model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); + model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor)); + model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth); + }, + + /** + * @private + */ + _resolveElementOptions: function(arc, index) { + var me = this; + var chart = me.chart; + var dataset = me.getDataset(); + var custom = arc.custom || {}; + var options = chart.options.elements.arc; + var values = {}; + var i, ilen, key; + + // Scriptable options + var context = { + chart: chart, + dataIndex: index, + dataset: dataset, + datasetIndex: me.index + }; + + var keys = [ + 'backgroundColor', + 'borderColor', + 'borderWidth', + 'borderAlign', + 'hoverBackgroundColor', + 'hoverBorderColor', + 'hoverBorderWidth', + ]; + + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + values[key] = resolve$5([ + custom[key], + dataset[key], + options[key] + ], context, index); + } + + return values; + }, + + /** + * @private + */ + _computeAngle: function(index) { + var me = this; + var count = this.getMeta().count; + var dataset = me.getDataset(); + var meta = me.getMeta(); + + if (isNaN(dataset.data[index]) || meta.data[index].hidden) { + return 0; + } + + // Scriptable options + var context = { + chart: me.chart, + dataIndex: index, + dataset: dataset, + datasetIndex: me.index + }; + + return resolve$5([ + me.chart.options.elements.arc.angle, + (2 * Math.PI) / count + ], context, index); + } +}); + +core_defaults._set('pie', helpers$1.clone(core_defaults.doughnut)); +core_defaults._set('pie', { + cutoutPercentage: 0 +}); + +// Pie charts are Doughnut chart with different defaults +var controller_pie = controller_doughnut; + +var valueOrDefault$6 = helpers$1.valueOrDefault; +var resolve$6 = helpers$1.options.resolve; + +core_defaults._set('radar', { + scale: { + type: 'radialLinear' + }, + elements: { + line: { + tension: 0 // no bezier in radar + } + } +}); + +var controller_radar = core_datasetController.extend({ + + datasetElementType: elements.Line, + + dataElementType: elements.Point, + + linkScales: helpers$1.noop, + + update: function(reset) { + var me = this; + var meta = me.getMeta(); + var line = meta.dataset; + var points = meta.data || []; + var scale = me.chart.scale; + var dataset = me.getDataset(); + var i, ilen; + + // Compatibility: If the properties are defined with only the old name, use those values + if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) { + dataset.lineTension = dataset.tension; + } + + // Utility + line._scale = scale; + line._datasetIndex = me.index; + // Data + line._children = points; + line._loop = true; + // Model + line._model = me._resolveLineOptions(line); + + line.pivot(); + + // Update Points + for (i = 0, ilen = points.length; i < ilen; ++i) { + me.updateElement(points[i], i, reset); + } + + // Update bezier control points + me.updateBezierControlPoints(); + + // Now pivot the point for animation + for (i = 0, ilen = points.length; i < ilen; ++i) { + points[i].pivot(); + } + }, + + updateElement: function(point, index, reset) { + var me = this; + var custom = point.custom || {}; + var dataset = me.getDataset(); + var scale = me.chart.scale; + var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]); + var options = me._resolvePointOptions(point, index); + var lineModel = me.getMeta().dataset._model; + var x = reset ? scale.xCenter : pointPosition.x; + var y = reset ? scale.yCenter : pointPosition.y; + + // Utility + point._scale = scale; + point._options = options; + point._datasetIndex = me.index; + point._index = index; + + // Desired view properties + point._model = { + x: x, // value not used in dataset scale, but we want a consistent API between scales + y: y, + skip: custom.skip || isNaN(x) || isNaN(y), + // Appearance + radius: options.radius, + pointStyle: options.pointStyle, + rotation: options.rotation, + backgroundColor: options.backgroundColor, + borderColor: options.borderColor, + borderWidth: options.borderWidth, + tension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0), + + // Tooltip + hitRadius: options.hitRadius + }; + }, + + /** + * @private + */ + _resolvePointOptions: function(element, index) { + var me = this; + var chart = me.chart; + var dataset = chart.data.datasets[me.index]; + var custom = element.custom || {}; + var options = chart.options.elements.point; + var values = {}; + var i, ilen, key; + + // Scriptable options + var context = { + chart: chart, + dataIndex: index, + dataset: dataset, + datasetIndex: me.index + }; + + var ELEMENT_OPTIONS = { + backgroundColor: 'pointBackgroundColor', + borderColor: 'pointBorderColor', + borderWidth: 'pointBorderWidth', + hitRadius: 'pointHitRadius', + hoverBackgroundColor: 'pointHoverBackgroundColor', + hoverBorderColor: 'pointHoverBorderColor', + hoverBorderWidth: 'pointHoverBorderWidth', + hoverRadius: 'pointHoverRadius', + pointStyle: 'pointStyle', + radius: 'pointRadius', + rotation: 'pointRotation' + }; + var keys = Object.keys(ELEMENT_OPTIONS); + + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + values[key] = resolve$6([ + custom[key], + dataset[ELEMENT_OPTIONS[key]], + dataset[key], + options[key] + ], context, index); + } + + return values; + }, + + /** + * @private + */ + _resolveLineOptions: function(element) { + var me = this; + var chart = me.chart; + var dataset = chart.data.datasets[me.index]; + var custom = element.custom || {}; + var options = chart.options.elements.line; + var values = {}; + var i, ilen, key; + + var keys = [ + 'backgroundColor', + 'borderWidth', + 'borderColor', + 'borderCapStyle', + 'borderDash', + 'borderDashOffset', + 'borderJoinStyle', + 'fill' + ]; + + for (i = 0, ilen = keys.length; i < ilen; ++i) { + key = keys[i]; + values[key] = resolve$6([ + custom[key], + dataset[key], + options[key] + ]); + } + + values.tension = valueOrDefault$6(dataset.lineTension, options.tension); + + return values; + }, + + updateBezierControlPoints: function() { + var me = this; + var meta = me.getMeta(); + var area = me.chart.chartArea; + var points = meta.data || []; + var i, ilen, model, controlPoints; + + function capControlPoint(pt, min, max) { + return Math.max(Math.min(pt, max), min); + } + + for (i = 0, ilen = points.length; i < ilen; ++i) { + model = points[i]._model; + controlPoints = helpers$1.splineCurve( + helpers$1.previousItem(points, i, true)._model, + model, + helpers$1.nextItem(points, i, true)._model, + model.tension + ); + + // Prevent the bezier going outside of the bounds of the graph + model.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right); + model.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom); + model.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right); + model.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom); + } + }, + + setHoverStyle: function(point) { + var model = point._model; + var options = point._options; + var getHoverColor = helpers$1.getHoverColor; + + point.$previousStyle = { + backgroundColor: model.backgroundColor, + borderColor: model.borderColor, + borderWidth: model.borderWidth, + radius: model.radius + }; + + model.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor)); + model.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor)); + model.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth); + model.radius = valueOrDefault$6(options.hoverRadius, options.radius); + } +}); + +core_defaults._set('scatter', { + hover: { + mode: 'single' + }, + + scales: { + xAxes: [{ + id: 'x-axis-1', // need an ID so datasets can reference the scale + type: 'linear', // scatter should not use a category axis + position: 'bottom' + }], + yAxes: [{ + id: 'y-axis-1', + type: 'linear', + position: 'left' + }] + }, + + showLines: false, + + tooltips: { + callbacks: { + title: function() { + return ''; // doesn't make sense for scatter since data are formatted as a point + }, + label: function(item) { + return '(' + item.xLabel + ', ' + item.yLabel + ')'; + } + } + } +}); + +// Scatter charts use line controllers +var controller_scatter = controller_line; + +// NOTE export a map in which the key represents the controller type, not +// the class, and so must be CamelCase in order to be correctly retrieved +// by the controller in core.controller.js (`controllers[meta.type]`). + +var controllers = { + bar: controller_bar, + bubble: controller_bubble, + doughnut: controller_doughnut, + horizontalBar: controller_horizontalBar, + line: controller_line, + polarArea: controller_polarArea, + pie: controller_pie, + radar: controller_radar, + scatter: controller_scatter +}; + +/** + * Helper function to get relative position for an event + * @param {Event|IEvent} event - The event to get the position for + * @param {Chart} chart - The chart + * @returns {object} the event position + */ +function getRelativePosition(e, chart) { + if (e.native) { + return { + x: e.x, + y: e.y + }; + } + + return helpers$1.getRelativePosition(e, chart); +} + +/** + * Helper function to traverse all of the visible elements in the chart + * @param {Chart} chart - the chart + * @param {function} handler - the callback to execute for each visible item + */ +function parseVisibleItems(chart, handler) { + var datasets = chart.data.datasets; + var meta, i, j, ilen, jlen; + + for (i = 0, ilen = datasets.length; i < ilen; ++i) { + if (!chart.isDatasetVisible(i)) { + continue; + } + + meta = chart.getDatasetMeta(i); + for (j = 0, jlen = meta.data.length; j < jlen; ++j) { + var element = meta.data[j]; + if (!element._view.skip) { + handler(element); + } + } + } +} + +/** + * Helper function to get the items that intersect the event position + * @param {ChartElement[]} items - elements to filter + * @param {object} position - the point to be nearest to + * @return {ChartElement[]} the nearest items + */ +function getIntersectItems(chart, position) { + var elements = []; + + parseVisibleItems(chart, function(element) { + if (element.inRange(position.x, position.y)) { + elements.push(element); + } + }); + + return elements; +} + +/** + * Helper function to get the items nearest to the event position considering all visible items in teh chart + * @param {Chart} chart - the chart to look at elements from + * @param {object} position - the point to be nearest to + * @param {boolean} intersect - if true, only consider items that intersect the position + * @param {function} distanceMetric - function to provide the distance between points + * @return {ChartElement[]} the nearest items + */ +function getNearestItems(chart, position, intersect, distanceMetric) { + var minDistance = Number.POSITIVE_INFINITY; + var nearestItems = []; + + parseVisibleItems(chart, function(element) { + if (intersect && !element.inRange(position.x, position.y)) { + return; + } + + var center = element.getCenterPoint(); + var distance = distanceMetric(position, center); + if (distance < minDistance) { + nearestItems = [element]; + minDistance = distance; + } else if (distance === minDistance) { + // Can have multiple items at the same distance in which case we sort by size + nearestItems.push(element); + } + }); + + return nearestItems; +} + +/** + * Get a distance metric function for two points based on the + * axis mode setting + * @param {string} axis - the axis mode. x|y|xy + */ +function getDistanceMetricForAxis(axis) { + var useX = axis.indexOf('x') !== -1; + var useY = axis.indexOf('y') !== -1; + + return function(pt1, pt2) { + var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0; + var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0; + return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2)); + }; +} + +function indexMode(chart, e, options) { + var position = getRelativePosition(e, chart); + // Default axis for index mode is 'x' to match old behaviour + options.axis = options.axis || 'x'; + var distanceMetric = getDistanceMetricForAxis(options.axis); + var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric); + var elements = []; + + if (!items.length) { + return []; + } + + chart.data.datasets.forEach(function(dataset, datasetIndex) { + if (chart.isDatasetVisible(datasetIndex)) { + var meta = chart.getDatasetMeta(datasetIndex); + var element = meta.data[items[0]._index]; + + // don't count items that are skipped (null data) + if (element && !element._view.skip) { + elements.push(element); + } + } + }); + + return elements; +} + +/** + * @interface IInteractionOptions + */ +/** + * If true, only consider items that intersect the point + * @name IInterfaceOptions#boolean + * @type Boolean + */ + +/** + * Contains interaction related functions + * @namespace Chart.Interaction + */ +var core_interaction = { + // Helper function for different modes + modes: { + single: function(chart, e) { + var position = getRelativePosition(e, chart); + var elements = []; + + parseVisibleItems(chart, function(element) { + if (element.inRange(position.x, position.y)) { + elements.push(element); + return elements; + } + }); + + return elements.slice(0, 1); + }, + + /** + * @function Chart.Interaction.modes.label + * @deprecated since version 2.4.0 + * @todo remove at version 3 + * @private + */ + label: indexMode, + + /** + * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something + * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item + * @function Chart.Interaction.modes.index + * @since v2.4.0 + * @param {Chart} chart - the chart we are returning items from + * @param {Event} e - the event we are find things at + * @param {IInteractionOptions} options - options to use during interaction + * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned + */ + index: indexMode, + + /** + * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something + * If the options.intersect is false, we find the nearest item and return the items in that dataset + * @function Chart.Interaction.modes.dataset + * @param {Chart} chart - the chart we are returning items from + * @param {Event} e - the event we are find things at + * @param {IInteractionOptions} options - options to use during interaction + * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned + */ + dataset: function(chart, e, options) { + var position = getRelativePosition(e, chart); + options.axis = options.axis || 'xy'; + var distanceMetric = getDistanceMetricForAxis(options.axis); + var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric); + + if (items.length > 0) { + items = chart.getDatasetMeta(items[0]._datasetIndex).data; + } + + return items; + }, + + /** + * @function Chart.Interaction.modes.x-axis + * @deprecated since version 2.4.0. Use index mode and intersect == true + * @todo remove at version 3 + * @private + */ + 'x-axis': function(chart, e) { + return indexMode(chart, e, {intersect: false}); + }, + + /** + * Point mode returns all elements that hit test based on the event position + * of the event + * @function Chart.Interaction.modes.intersect + * @param {Chart} chart - the chart we are returning items from + * @param {Event} e - the event we are find things at + * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned + */ + point: function(chart, e) { + var position = getRelativePosition(e, chart); + return getIntersectItems(chart, position); + }, + + /** + * nearest mode returns the element closest to the point + * @function Chart.Interaction.modes.intersect + * @param {Chart} chart - the chart we are returning items from + * @param {Event} e - the event we are find things at + * @param {IInteractionOptions} options - options to use + * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned + */ + nearest: function(chart, e, options) { + var position = getRelativePosition(e, chart); + options.axis = options.axis || 'xy'; + var distanceMetric = getDistanceMetricForAxis(options.axis); + return getNearestItems(chart, position, options.intersect, distanceMetric); + }, + + /** + * x mode returns the elements that hit-test at the current x coordinate + * @function Chart.Interaction.modes.x + * @param {Chart} chart - the chart we are returning items from + * @param {Event} e - the event we are find things at + * @param {IInteractionOptions} options - options to use + * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned + */ + x: function(chart, e, options) { + var position = getRelativePosition(e, chart); + var items = []; + var intersectsItem = false; + + parseVisibleItems(chart, function(element) { + if (element.inXRange(position.x)) { + items.push(element); + } + + if (element.inRange(position.x, position.y)) { + intersectsItem = true; + } + }); + + // If we want to trigger on an intersect and we don't have any items + // that intersect the position, return nothing + if (options.intersect && !intersectsItem) { + items = []; + } + return items; + }, + + /** + * y mode returns the elements that hit-test at the current y coordinate + * @function Chart.Interaction.modes.y + * @param {Chart} chart - the chart we are returning items from + * @param {Event} e - the event we are find things at + * @param {IInteractionOptions} options - options to use + * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned + */ + y: function(chart, e, options) { + var position = getRelativePosition(e, chart); + var items = []; + var intersectsItem = false; + + parseVisibleItems(chart, function(element) { + if (element.inYRange(position.y)) { + items.push(element); + } + + if (element.inRange(position.x, position.y)) { + intersectsItem = true; + } + }); + + // If we want to trigger on an intersect and we don't have any items + // that intersect the position, return nothing + if (options.intersect && !intersectsItem) { + items = []; + } + return items; + } + } +}; + +function filterByPosition(array, position) { + return helpers$1.where(array, function(v) { + return v.position === position; + }); +} + +function sortByWeight(array, reverse) { + array.forEach(function(v, i) { + v._tmpIndex_ = i; + return v; + }); + array.sort(function(a, b) { + var v0 = reverse ? b : a; + var v1 = reverse ? a : b; + return v0.weight === v1.weight ? + v0._tmpIndex_ - v1._tmpIndex_ : + v0.weight - v1.weight; + }); + array.forEach(function(v) { + delete v._tmpIndex_; + }); +} + +function findMaxPadding(boxes) { + var top = 0; + var left = 0; + var bottom = 0; + var right = 0; + helpers$1.each(boxes, function(box) { + if (box.getPadding) { + var boxPadding = box.getPadding(); + top = Math.max(top, boxPadding.top); + left = Math.max(left, boxPadding.left); + bottom = Math.max(bottom, boxPadding.bottom); + right = Math.max(right, boxPadding.right); + } + }); + return { + top: top, + left: left, + bottom: bottom, + right: right + }; +} + +function addSizeByPosition(boxes, size) { + helpers$1.each(boxes, function(box) { + size[box.position] += box.isHorizontal() ? box.height : box.width; + }); +} + +core_defaults._set('global', { + layout: { + padding: { + top: 0, + right: 0, + bottom: 0, + left: 0 + } + } +}); + +/** + * @interface ILayoutItem + * @prop {string} position - The position of the item in the chart layout. Possible values are + * 'left', 'top', 'right', 'bottom', and 'chartArea' + * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area + * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down + * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom) + * @prop {function} update - Takes two parameters: width and height. Returns size of item + * @prop {function} getPadding - Returns an object with padding on the edges + * @prop {number} width - Width of item. Must be valid after update() + * @prop {number} height - Height of item. Must be valid after update() + * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update + * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update + * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update + * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update + */ + +// The layout service is very self explanatory. It's responsible for the layout within a chart. +// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need +// It is this service's responsibility of carrying out that layout. +var core_layouts = { + defaults: {}, + + /** + * Register a box to a chart. + * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title. + * @param {Chart} chart - the chart to use + * @param {ILayoutItem} item - the item to add to be layed out + */ + addBox: function(chart, item) { + if (!chart.boxes) { + chart.boxes = []; + } + + // initialize item with default values + item.fullWidth = item.fullWidth || false; + item.position = item.position || 'top'; + item.weight = item.weight || 0; + + chart.boxes.push(item); + }, + + /** + * Remove a layoutItem from a chart + * @param {Chart} chart - the chart to remove the box from + * @param {ILayoutItem} layoutItem - the item to remove from the layout + */ + removeBox: function(chart, layoutItem) { + var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1; + if (index !== -1) { + chart.boxes.splice(index, 1); + } + }, + + /** + * Sets (or updates) options on the given `item`. + * @param {Chart} chart - the chart in which the item lives (or will be added to) + * @param {ILayoutItem} item - the item to configure with the given options + * @param {object} options - the new item options. + */ + configure: function(chart, item, options) { + var props = ['fullWidth', 'position', 'weight']; + var ilen = props.length; + var i = 0; + var prop; + + for (; i < ilen; ++i) { + prop = props[i]; + if (options.hasOwnProperty(prop)) { + item[prop] = options[prop]; + } + } + }, + + /** + * Fits boxes of the given chart into the given size by having each box measure itself + * then running a fitting algorithm + * @param {Chart} chart - the chart + * @param {number} width - the width to fit into + * @param {number} height - the height to fit into + */ + update: function(chart, width, height) { + if (!chart) { + return; + } + + var layoutOptions = chart.options.layout || {}; + var padding = helpers$1.options.toPadding(layoutOptions.padding); + var leftPadding = padding.left; + var rightPadding = padding.right; + var topPadding = padding.top; + var bottomPadding = padding.bottom; + + var leftBoxes = filterByPosition(chart.boxes, 'left'); + var rightBoxes = filterByPosition(chart.boxes, 'right'); + var topBoxes = filterByPosition(chart.boxes, 'top'); + var bottomBoxes = filterByPosition(chart.boxes, 'bottom'); + var chartAreaBoxes = filterByPosition(chart.boxes, 'chartArea'); + + // Sort boxes by weight. A higher weight is further away from the chart area + sortByWeight(leftBoxes, true); + sortByWeight(rightBoxes, false); + sortByWeight(topBoxes, true); + sortByWeight(bottomBoxes, false); + + var verticalBoxes = leftBoxes.concat(rightBoxes); + var horizontalBoxes = topBoxes.concat(bottomBoxes); + var outerBoxes = verticalBoxes.concat(horizontalBoxes); + + // Essentially we now have any number of boxes on each of the 4 sides. + // Our canvas looks like the following. + // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and + // B1 is the bottom axis + // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays + // These locations are single-box locations only, when trying to register a chartArea location that is already taken, + // an error will be thrown. + // + // |----------------------------------------------------| + // | T1 (Full Width) | + // |----------------------------------------------------| + // | | | T2 | | + // | |----|-------------------------------------|----| + // | | | C1 | | C2 | | + // | | |----| |----| | + // | | | | | + // | L1 | L2 | ChartArea (C0) | R1 | + // | | | | | + // | | |----| |----| | + // | | | C3 | | C4 | | + // | |----|-------------------------------------|----| + // | | | B1 | | + // |----------------------------------------------------| + // | B2 (Full Width) | + // |----------------------------------------------------| + // + // What we do to find the best sizing, we do the following + // 1. Determine the minimum size of the chart area. + // 2. Split the remaining width equally between each vertical axis + // 3. Split the remaining height equally between each horizontal axis + // 4. Give each layout the maximum size it can be. The layout will return it's minimum size + // 5. Adjust the sizes of each axis based on it's minimum reported size. + // 6. Refit each axis + // 7. Position each axis in the final location + // 8. Tell the chart the final location of the chart area + // 9. Tell any axes that overlay the chart area the positions of the chart area + + // Step 1 + var chartWidth = width - leftPadding - rightPadding; + var chartHeight = height - topPadding - bottomPadding; + var chartAreaWidth = chartWidth / 2; // min 50% + + // Step 2 + var verticalBoxWidth = (width - chartAreaWidth) / verticalBoxes.length; + + // Step 3 + // TODO re-limit horizontal axis height (this limit has affected only padding calculation since PR 1837) + // var horizontalBoxHeight = (height - chartAreaHeight) / horizontalBoxes.length; + + // Step 4 + var maxChartAreaWidth = chartWidth; + var maxChartAreaHeight = chartHeight; + var outerBoxSizes = {top: topPadding, left: leftPadding, bottom: bottomPadding, right: rightPadding}; + var minBoxSizes = []; + var maxPadding; + + function getMinimumBoxSize(box) { + var minSize; + var isHorizontal = box.isHorizontal(); + + if (isHorizontal) { + minSize = box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2); + maxChartAreaHeight -= minSize.height; + } else { + minSize = box.update(verticalBoxWidth, maxChartAreaHeight); + maxChartAreaWidth -= minSize.width; + } + + minBoxSizes.push({ + horizontal: isHorizontal, + width: minSize.width, + box: box, + }); + } + + helpers$1.each(outerBoxes, getMinimumBoxSize); + + // If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478) + maxPadding = findMaxPadding(outerBoxes); + + // At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could + // be if the axes are drawn at their minimum sizes. + // Steps 5 & 6 + + // Function to fit a box + function fitBox(box) { + var minBoxSize = helpers$1.findNextWhere(minBoxSizes, function(minBox) { + return minBox.box === box; + }); + + if (minBoxSize) { + if (minBoxSize.horizontal) { + var scaleMargin = { + left: Math.max(outerBoxSizes.left, maxPadding.left), + right: Math.max(outerBoxSizes.right, maxPadding.right), + top: 0, + bottom: 0 + }; + + // Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends + // on the margin. Sometimes they need to increase in size slightly + box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin); + } else { + box.update(minBoxSize.width, maxChartAreaHeight); + } + } + } + + // Update, and calculate the left and right margins for the horizontal boxes + helpers$1.each(verticalBoxes, fitBox); + addSizeByPosition(verticalBoxes, outerBoxSizes); + + // Set the Left and Right margins for the horizontal boxes + helpers$1.each(horizontalBoxes, fitBox); + addSizeByPosition(horizontalBoxes, outerBoxSizes); + + function finalFitVerticalBox(box) { + var minBoxSize = helpers$1.findNextWhere(minBoxSizes, function(minSize) { + return minSize.box === box; + }); + + var scaleMargin = { + left: 0, + right: 0, + top: outerBoxSizes.top, + bottom: outerBoxSizes.bottom + }; + + if (minBoxSize) { + box.update(minBoxSize.width, maxChartAreaHeight, scaleMargin); + } + } + + // Let the left layout know the final margin + helpers$1.each(verticalBoxes, finalFitVerticalBox); + + // Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance) + outerBoxSizes = {top: topPadding, left: leftPadding, bottom: bottomPadding, right: rightPadding}; + addSizeByPosition(outerBoxes, outerBoxSizes); + + // We may be adding some padding to account for rotated x axis labels + var leftPaddingAddition = Math.max(maxPadding.left - outerBoxSizes.left, 0); + outerBoxSizes.left += leftPaddingAddition; + outerBoxSizes.right += Math.max(maxPadding.right - outerBoxSizes.right, 0); + + var topPaddingAddition = Math.max(maxPadding.top - outerBoxSizes.top, 0); + outerBoxSizes.top += topPaddingAddition; + outerBoxSizes.bottom += Math.max(maxPadding.bottom - outerBoxSizes.bottom, 0); + + // Figure out if our chart area changed. This would occur if the dataset layout label rotation + // changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do + // without calling `fit` again + var newMaxChartAreaHeight = height - outerBoxSizes.top - outerBoxSizes.bottom; + var newMaxChartAreaWidth = width - outerBoxSizes.left - outerBoxSizes.right; + + if (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) { + helpers$1.each(verticalBoxes, function(box) { + box.height = newMaxChartAreaHeight; + }); + + helpers$1.each(horizontalBoxes, function(box) { + if (!box.fullWidth) { + box.width = newMaxChartAreaWidth; + } + }); + + maxChartAreaHeight = newMaxChartAreaHeight; + maxChartAreaWidth = newMaxChartAreaWidth; + } + + // Step 7 - Position the boxes + var left = leftPadding + leftPaddingAddition; + var top = topPadding + topPaddingAddition; + + function placeBox(box) { + if (box.isHorizontal()) { + box.left = box.fullWidth ? leftPadding : outerBoxSizes.left; + box.right = box.fullWidth ? width - rightPadding : outerBoxSizes.left + maxChartAreaWidth; + box.top = top; + box.bottom = top + box.height; + + // Move to next point + top = box.bottom; + + } else { + + box.left = left; + box.right = left + box.width; + box.top = outerBoxSizes.top; + box.bottom = outerBoxSizes.top + maxChartAreaHeight; + + // Move to next point + left = box.right; + } + } + + helpers$1.each(leftBoxes.concat(topBoxes), placeBox); + + // Account for chart width and height + left += maxChartAreaWidth; + top += maxChartAreaHeight; + + helpers$1.each(rightBoxes, placeBox); + helpers$1.each(bottomBoxes, placeBox); + + // Step 8 + chart.chartArea = { + left: outerBoxSizes.left, + top: outerBoxSizes.top, + right: outerBoxSizes.left + maxChartAreaWidth, + bottom: outerBoxSizes.top + maxChartAreaHeight + }; + + // Step 9 + helpers$1.each(chartAreaBoxes, function(box) { + box.left = chart.chartArea.left; + box.top = chart.chartArea.top; + box.right = chart.chartArea.right; + box.bottom = chart.chartArea.bottom; + + box.update(maxChartAreaWidth, maxChartAreaHeight); + }); + } +}; + +/** + * Platform fallback implementation (minimal). + * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939 + */ + +var platform_basic = { + acquireContext: function(item) { + if (item && item.canvas) { + // Support for any object associated to a canvas (including a context2d) + item = item.canvas; + } + + return item && item.getContext('2d') || null; + } +}; + +var platform_dom = "/*\n * DOM element rendering detection\n * https://davidwalsh.name/detect-node-insertion\n */\n@keyframes chartjs-render-animation {\n\tfrom { opacity: 0.99; }\n\tto { opacity: 1; }\n}\n\n.chartjs-render-monitor {\n\tanimation: chartjs-render-animation 0.001s;\n}\n\n/*\n * DOM element resizing detection\n * https://github.com/marcj/css-element-queries\n */\n.chartjs-size-monitor,\n.chartjs-size-monitor-expand,\n.chartjs-size-monitor-shrink {\n\tposition: absolute;\n\tdirection: ltr;\n\tleft: 0;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n\tvisibility: hidden;\n\tz-index: -1;\n}\n\n.chartjs-size-monitor-expand > div {\n\tposition: absolute;\n\twidth: 1000000px;\n\theight: 1000000px;\n\tleft: 0;\n\ttop: 0;\n}\n\n.chartjs-size-monitor-shrink > div {\n\tposition: absolute;\n\twidth: 200%;\n\theight: 200%;\n\tleft: 0;\n\ttop: 0;\n}\n"; + +var platform_dom$1 = /*#__PURE__*/Object.freeze({ +default: platform_dom +}); + +function getCjsExportFromNamespace (n) { + return n && n.default || n; +} + +var stylesheet = getCjsExportFromNamespace(platform_dom$1); + +var EXPANDO_KEY = '$chartjs'; +var CSS_PREFIX = 'chartjs-'; +var CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor'; +var CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor'; +var CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation'; +var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart']; + +/** + * DOM event types -> Chart.js event types. + * Note: only events with different types are mapped. + * @see https://developer.mozilla.org/en-US/docs/Web/Events + */ +var EVENT_TYPES = { + touchstart: 'mousedown', + touchmove: 'mousemove', + touchend: 'mouseup', + pointerenter: 'mouseenter', + pointerdown: 'mousedown', + pointermove: 'mousemove', + pointerup: 'mouseup', + pointerleave: 'mouseout', + pointerout: 'mouseout' +}; + +/** + * The "used" size is the final value of a dimension property after all calculations have + * been performed. This method uses the computed style of `element` but returns undefined + * if the computed style is not expressed in pixels. That can happen in some cases where + * `element` has a size relative to its parent and this last one is not yet displayed, + * for example because of `display: none` on a parent node. + * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value + * @returns {number} Size in pixels or undefined if unknown. + */ +function readUsedSize(element, property) { + var value = helpers$1.getStyle(element, property); + var matches = value && value.match(/^(\d+)(\.\d+)?px$/); + return matches ? Number(matches[1]) : undefined; +} + +/** + * Initializes the canvas style and render size without modifying the canvas display size, + * since responsiveness is handled by the controller.resize() method. The config is used + * to determine the aspect ratio to apply in case no explicit height has been specified. + */ +function initCanvas(canvas, config) { + var style = canvas.style; + + // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it + // returns null or '' if no explicit value has been set to the canvas attribute. + var renderHeight = canvas.getAttribute('height'); + var renderWidth = canvas.getAttribute('width'); + + // Chart.js modifies some canvas values that we want to restore on destroy + canvas[EXPANDO_KEY] = { + initial: { + height: renderHeight, + width: renderWidth, + style: { + display: style.display, + height: style.height, + width: style.width + } + } + }; + + // Force canvas to display as block to avoid extra space caused by inline + // elements, which would interfere with the responsive resize process. + // https://github.com/chartjs/Chart.js/issues/2538 + style.display = style.display || 'block'; + + if (renderWidth === null || renderWidth === '') { + var displayWidth = readUsedSize(canvas, 'width'); + if (displayWidth !== undefined) { + canvas.width = displayWidth; + } + } + + if (renderHeight === null || renderHeight === '') { + if (canvas.style.height === '') { + // If no explicit render height and style height, let's apply the aspect ratio, + // which one can be specified by the user but also by charts as default option + // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2. + canvas.height = canvas.width / (config.options.aspectRatio || 2); + } else { + var displayHeight = readUsedSize(canvas, 'height'); + if (displayWidth !== undefined) { + canvas.height = displayHeight; + } + } + } + + return canvas; +} + +/** + * Detects support for options object argument in addEventListener. + * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support + * @private + */ +var supportsEventListenerOptions = (function() { + var supports = false; + try { + var options = Object.defineProperty({}, 'passive', { + // eslint-disable-next-line getter-return + get: function() { + supports = true; + } + }); + window.addEventListener('e', null, options); + } catch (e) { + // continue regardless of error + } + return supports; +}()); + +// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events. +// https://github.com/chartjs/Chart.js/issues/4287 +var eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false; + +function addListener(node, type, listener) { + node.addEventListener(type, listener, eventListenerOptions); +} + +function removeListener(node, type, listener) { + node.removeEventListener(type, listener, eventListenerOptions); +} + +function createEvent(type, chart, x, y, nativeEvent) { + return { + type: type, + chart: chart, + native: nativeEvent || null, + x: x !== undefined ? x : null, + y: y !== undefined ? y : null, + }; +} + +function fromNativeEvent(event, chart) { + var type = EVENT_TYPES[event.type] || event.type; + var pos = helpers$1.getRelativePosition(event, chart); + return createEvent(type, chart, pos.x, pos.y, event); +} + +function throttled(fn, thisArg) { + var ticking = false; + var args = []; + + return function() { + args = Array.prototype.slice.call(arguments); + thisArg = thisArg || this; + + if (!ticking) { + ticking = true; + helpers$1.requestAnimFrame.call(window, function() { + ticking = false; + fn.apply(thisArg, args); + }); + } + }; +} + +function createDiv(cls) { + var el = document.createElement('div'); + el.className = cls || ''; + return el; +} + +// Implementation based on https://github.com/marcj/css-element-queries +function createResizer(handler) { + var maxSize = 1000000; + + // NOTE(SB) Don't use innerHTML because it could be considered unsafe. + // https://github.com/chartjs/Chart.js/issues/5902 + var resizer = createDiv(CSS_SIZE_MONITOR); + var expand = createDiv(CSS_SIZE_MONITOR + '-expand'); + var shrink = createDiv(CSS_SIZE_MONITOR + '-shrink'); + + expand.appendChild(createDiv()); + shrink.appendChild(createDiv()); + + resizer.appendChild(expand); + resizer.appendChild(shrink); + resizer._reset = function() { + expand.scrollLeft = maxSize; + expand.scrollTop = maxSize; + shrink.scrollLeft = maxSize; + shrink.scrollTop = maxSize; + }; + + var onScroll = function() { + resizer._reset(); + handler(); + }; + + addListener(expand, 'scroll', onScroll.bind(expand, 'expand')); + addListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink')); + + return resizer; +} + +// https://davidwalsh.name/detect-node-insertion +function watchForRender(node, handler) { + var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {}); + var proxy = expando.renderProxy = function(e) { + if (e.animationName === CSS_RENDER_ANIMATION) { + handler(); + } + }; + + helpers$1.each(ANIMATION_START_EVENTS, function(type) { + addListener(node, type, proxy); + }); + + // #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class + // is removed then added back immediately (same animation frame?). Accessing the + // `offsetParent` property will force a reflow and re-evaluate the CSS animation. + // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics + // https://github.com/chartjs/Chart.js/issues/4737 + expando.reflow = !!node.offsetParent; + + node.classList.add(CSS_RENDER_MONITOR); +} + +function unwatchForRender(node) { + var expando = node[EXPANDO_KEY] || {}; + var proxy = expando.renderProxy; + + if (proxy) { + helpers$1.each(ANIMATION_START_EVENTS, function(type) { + removeListener(node, type, proxy); + }); + + delete expando.renderProxy; + } + + node.classList.remove(CSS_RENDER_MONITOR); +} + +function addResizeListener(node, listener, chart) { + var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {}); + + // Let's keep track of this added resizer and thus avoid DOM query when removing it. + var resizer = expando.resizer = createResizer(throttled(function() { + if (expando.resizer) { + var container = chart.options.maintainAspectRatio && node.parentNode; + var w = container ? container.clientWidth : 0; + listener(createEvent('resize', chart)); + if (container && container.clientWidth < w && chart.canvas) { + // If the container size shrank during chart resize, let's assume + // scrollbar appeared. So we resize again with the scrollbar visible - + // effectively making chart smaller and the scrollbar hidden again. + // Because we are inside `throttled`, and currently `ticking`, scroll + // events are ignored during this whole 2 resize process. + // If we assumed wrong and something else happened, we are resizing + // twice in a frame (potential performance issue) + listener(createEvent('resize', chart)); + } + } + })); + + // The resizer needs to be attached to the node parent, so we first need to be + // sure that `node` is attached to the DOM before injecting the resizer element. + watchForRender(node, function() { + if (expando.resizer) { + var container = node.parentNode; + if (container && container !== resizer.parentNode) { + container.insertBefore(resizer, container.firstChild); + } + + // The container size might have changed, let's reset the resizer state. + resizer._reset(); + } + }); +} + +function removeResizeListener(node) { + var expando = node[EXPANDO_KEY] || {}; + var resizer = expando.resizer; + + delete expando.resizer; + unwatchForRender(node); + + if (resizer && resizer.parentNode) { + resizer.parentNode.removeChild(resizer); + } +} + +function injectCSS(platform, css) { + // https://stackoverflow.com/q/3922139 + var style = platform._style || document.createElement('style'); + if (!platform._style) { + platform._style = style; + css = '/* Chart.js */\n' + css; + style.setAttribute('type', 'text/css'); + document.getElementsByTagName('head')[0].appendChild(style); + } + + style.appendChild(document.createTextNode(css)); +} + +var platform_dom$2 = { + /** + * When `true`, prevents the automatic injection of the stylesheet required to + * correctly detect when the chart is added to the DOM and then resized. This + * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`) + * to be manually imported to make this library compatible with any CSP. + * See https://github.com/chartjs/Chart.js/issues/5208 + */ + disableCSSInjection: false, + + /** + * This property holds whether this platform is enabled for the current environment. + * Currently used by platform.js to select the proper implementation. + * @private + */ + _enabled: typeof window !== 'undefined' && typeof document !== 'undefined', + + /** + * @private + */ + _ensureLoaded: function() { + if (this._loaded) { + return; + } + + this._loaded = true; + + // https://github.com/chartjs/Chart.js/issues/5208 + if (!this.disableCSSInjection) { + injectCSS(this, stylesheet); + } + }, + + acquireContext: function(item, config) { + if (typeof item === 'string') { + item = document.getElementById(item); + } else if (item.length) { + // Support for array based queries (such as jQuery) + item = item[0]; + } + + if (item && item.canvas) { + // Support for any object associated to a canvas (including a context2d) + item = item.canvas; + } + + // To prevent canvas fingerprinting, some add-ons undefine the getContext + // method, for example: https://github.com/kkapsner/CanvasBlocker + // https://github.com/chartjs/Chart.js/issues/2807 + var context = item && item.getContext && item.getContext('2d'); + + // Load platform resources on first chart creation, to make possible to change + // platform options after importing the library (e.g. `disableCSSInjection`). + this._ensureLoaded(); + + // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is + // inside an iframe or when running in a protected environment. We could guess the + // types from their toString() value but let's keep things flexible and assume it's + // a sufficient condition if the item has a context2D which has item as `canvas`. + // https://github.com/chartjs/Chart.js/issues/3887 + // https://github.com/chartjs/Chart.js/issues/4102 + // https://github.com/chartjs/Chart.js/issues/4152 + if (context && context.canvas === item) { + initCanvas(item, config); + return context; + } + + return null; + }, + + releaseContext: function(context) { + var canvas = context.canvas; + if (!canvas[EXPANDO_KEY]) { + return; + } + + var initial = canvas[EXPANDO_KEY].initial; + ['height', 'width'].forEach(function(prop) { + var value = initial[prop]; + if (helpers$1.isNullOrUndef(value)) { + canvas.removeAttribute(prop); + } else { + canvas.setAttribute(prop, value); + } + }); + + helpers$1.each(initial.style || {}, function(value, key) { + canvas.style[key] = value; + }); + + // The canvas render size might have been changed (and thus the state stack discarded), + // we can't use save() and restore() to restore the initial state. So make sure that at + // least the canvas context is reset to the default state by setting the canvas width. + // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html + // eslint-disable-next-line no-self-assign + canvas.width = canvas.width; + + delete canvas[EXPANDO_KEY]; + }, + + addEventListener: function(chart, type, listener) { + var canvas = chart.canvas; + if (type === 'resize') { + // Note: the resize event is not supported on all browsers. + addResizeListener(canvas, listener, chart); + return; + } + + var expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {}); + var proxies = expando.proxies || (expando.proxies = {}); + var proxy = proxies[chart.id + '_' + type] = function(event) { + listener(fromNativeEvent(event, chart)); + }; + + addListener(canvas, type, proxy); + }, + + removeEventListener: function(chart, type, listener) { + var canvas = chart.canvas; + if (type === 'resize') { + // Note: the resize event is not supported on all browsers. + removeResizeListener(canvas); + return; + } + + var expando = listener[EXPANDO_KEY] || {}; + var proxies = expando.proxies || {}; + var proxy = proxies[chart.id + '_' + type]; + if (!proxy) { + return; + } + + removeListener(canvas, type, proxy); + } +}; + +// DEPRECATIONS + +/** + * Provided for backward compatibility, use EventTarget.addEventListener instead. + * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+ + * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener + * @function Chart.helpers.addEvent + * @deprecated since version 2.7.0 + * @todo remove at version 3 + * @private + */ +helpers$1.addEvent = addListener; + +/** + * Provided for backward compatibility, use EventTarget.removeEventListener instead. + * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+ + * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener + * @function Chart.helpers.removeEvent + * @deprecated since version 2.7.0 + * @todo remove at version 3 + * @private + */ +helpers$1.removeEvent = removeListener; + +// @TODO Make possible to select another platform at build time. +var implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic; + +/** + * @namespace Chart.platform + * @see https://chartjs.gitbooks.io/proposals/content/Platform.html + * @since 2.4.0 + */ +var platform = helpers$1.extend({ + /** + * @since 2.7.0 + */ + initialize: function() {}, + + /** + * Called at chart construction time, returns a context2d instance implementing + * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}. + * @param {*} item - The native item from which to acquire context (platform specific) + * @param {object} options - The chart options + * @returns {CanvasRenderingContext2D} context2d instance + */ + acquireContext: function() {}, + + /** + * Called at chart destruction time, releases any resources associated to the context + * previously returned by the acquireContext() method. + * @param {CanvasRenderingContext2D} context - The context2d instance + * @returns {boolean} true if the method succeeded, else false + */ + releaseContext: function() {}, + + /** + * Registers the specified listener on the given chart. + * @param {Chart} chart - Chart from which to listen for event + * @param {string} type - The ({@link IEvent}) type to listen for + * @param {function} listener - Receives a notification (an object that implements + * the {@link IEvent} interface) when an event of the specified type occurs. + */ + addEventListener: function() {}, + + /** + * Removes the specified listener previously registered with addEventListener. + * @param {Chart} chart - Chart from which to remove the listener + * @param {string} type - The ({@link IEvent}) type to remove + * @param {function} listener - The listener function to remove from the event target. + */ + removeEventListener: function() {} + +}, implementation); + +core_defaults._set('global', { + plugins: {} +}); + +/** + * The plugin service singleton + * @namespace Chart.plugins + * @since 2.1.0 + */ +var core_plugins = { + /** + * Globally registered plugins. + * @private + */ + _plugins: [], + + /** + * This identifier is used to invalidate the descriptors cache attached to each chart + * when a global plugin is registered or unregistered. In this case, the cache ID is + * incremented and descriptors are regenerated during following API calls. + * @private + */ + _cacheId: 0, + + /** + * Registers the given plugin(s) if not already registered. + * @param {IPlugin[]|IPlugin} plugins plugin instance(s). + */ + register: function(plugins) { + var p = this._plugins; + ([]).concat(plugins).forEach(function(plugin) { + if (p.indexOf(plugin) === -1) { + p.push(plugin); + } + }); + + this._cacheId++; + }, + + /** + * Unregisters the given plugin(s) only if registered. + * @param {IPlugin[]|IPlugin} plugins plugin instance(s). + */ + unregister: function(plugins) { + var p = this._plugins; + ([]).concat(plugins).forEach(function(plugin) { + var idx = p.indexOf(plugin); + if (idx !== -1) { + p.splice(idx, 1); + } + }); + + this._cacheId++; + }, + + /** + * Remove all registered plugins. + * @since 2.1.5 + */ + clear: function() { + this._plugins = []; + this._cacheId++; + }, + + /** + * Returns the number of registered plugins? + * @returns {number} + * @since 2.1.5 + */ + count: function() { + return this._plugins.length; + }, + + /** + * Returns all registered plugin instances. + * @returns {IPlugin[]} array of plugin objects. + * @since 2.1.5 + */ + getAll: function() { + return this._plugins; + }, + + /** + * Calls enabled plugins for `chart` on the specified hook and with the given args. + * This method immediately returns as soon as a plugin explicitly returns false. The + * returned value can be used, for instance, to interrupt the current action. + * @param {Chart} chart - The chart instance for which plugins should be called. + * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate'). + * @param {Array} [args] - Extra arguments to apply to the hook call. + * @returns {boolean} false if any of the plugins return false, else returns true. + */ + notify: function(chart, hook, args) { + var descriptors = this.descriptors(chart); + var ilen = descriptors.length; + var i, descriptor, plugin, params, method; + + for (i = 0; i < ilen; ++i) { + descriptor = descriptors[i]; + plugin = descriptor.plugin; + method = plugin[hook]; + if (typeof method === 'function') { + params = [chart].concat(args || []); + params.push(descriptor.options); + if (method.apply(plugin, params) === false) { + return false; + } + } + } + + return true; + }, + + /** + * Returns descriptors of enabled plugins for the given chart. + * @returns {object[]} [{ plugin, options }] + * @private + */ + descriptors: function(chart) { + var cache = chart.$plugins || (chart.$plugins = {}); + if (cache.id === this._cacheId) { + return cache.descriptors; + } + + var plugins = []; + var descriptors = []; + var config = (chart && chart.config) || {}; + var options = (config.options && config.options.plugins) || {}; + + this._plugins.concat(config.plugins || []).forEach(function(plugin) { + var idx = plugins.indexOf(plugin); + if (idx !== -1) { + return; + } + + var id = plugin.id; + var opts = options[id]; + if (opts === false) { + return; + } + + if (opts === true) { + opts = helpers$1.clone(core_defaults.global.plugins[id]); + } + + plugins.push(plugin); + descriptors.push({ + plugin: plugin, + options: opts || {} + }); + }); + + cache.descriptors = descriptors; + cache.id = this._cacheId; + return descriptors; + }, + + /** + * Invalidates cache for the given chart: descriptors hold a reference on plugin option, + * but in some cases, this reference can be changed by the user when updating options. + * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167 + * @private + */ + _invalidate: function(chart) { + delete chart.$plugins; + } +}; + +var core_scaleService = { + // Scale registration object. Extensions can register new scale types (such as log or DB scales) and then + // use the new chart options to grab the correct scale + constructors: {}, + // Use a registration function so that we can move to an ES6 map when we no longer need to support + // old browsers + + // Scale config defaults + defaults: {}, + registerScaleType: function(type, scaleConstructor, scaleDefaults) { + this.constructors[type] = scaleConstructor; + this.defaults[type] = helpers$1.clone(scaleDefaults); + }, + getScaleConstructor: function(type) { + return this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined; + }, + getScaleDefaults: function(type) { + // Return the scale defaults merged with the global settings so that we always use the latest ones + return this.defaults.hasOwnProperty(type) ? helpers$1.merge({}, [core_defaults.scale, this.defaults[type]]) : {}; + }, + updateScaleDefaults: function(type, additions) { + var me = this; + if (me.defaults.hasOwnProperty(type)) { + me.defaults[type] = helpers$1.extend(me.defaults[type], additions); + } + }, + addScalesToLayout: function(chart) { + // Adds each scale to the chart.boxes array to be sized accordingly + helpers$1.each(chart.scales, function(scale) { + // Set ILayoutItem parameters for backwards compatibility + scale.fullWidth = scale.options.fullWidth; + scale.position = scale.options.position; + scale.weight = scale.options.weight; + core_layouts.addBox(chart, scale); + }); + } +}; + +var valueOrDefault$7 = helpers$1.valueOrDefault; + +core_defaults._set('global', { + tooltips: { + enabled: true, + custom: null, + mode: 'nearest', + position: 'average', + intersect: true, + backgroundColor: 'rgba(0,0,0,0.8)', + titleFontStyle: 'bold', + titleSpacing: 2, + titleMarginBottom: 6, + titleFontColor: '#fff', + titleAlign: 'left', + bodySpacing: 2, + bodyFontColor: '#fff', + bodyAlign: 'left', + footerFontStyle: 'bold', + footerSpacing: 2, + footerMarginTop: 6, + footerFontColor: '#fff', + footerAlign: 'left', + yPadding: 6, + xPadding: 6, + caretPadding: 2, + caretSize: 5, + cornerRadius: 6, + multiKeyBackground: '#fff', + displayColors: true, + borderColor: 'rgba(0,0,0,0)', + borderWidth: 0, + callbacks: { + // Args are: (tooltipItems, data) + beforeTitle: helpers$1.noop, + title: function(tooltipItems, data) { + var title = ''; + var labels = data.labels; + var labelCount = labels ? labels.length : 0; + + if (tooltipItems.length > 0) { + var item = tooltipItems[0]; + if (item.label) { + title = item.label; + } else if (item.xLabel) { + title = item.xLabel; + } else if (labelCount > 0 && item.index < labelCount) { + title = labels[item.index]; + } + } + + return title; + }, + afterTitle: helpers$1.noop, + + // Args are: (tooltipItems, data) + beforeBody: helpers$1.noop, + + // Args are: (tooltipItem, data) + beforeLabel: helpers$1.noop, + label: function(tooltipItem, data) { + var label = data.datasets[tooltipItem.datasetIndex].label || ''; + + if (label) { + label += ': '; + } + if (!helpers$1.isNullOrUndef(tooltipItem.value)) { + label += tooltipItem.value; + } else { + label += tooltipItem.yLabel; + } + return label; + }, + labelColor: function(tooltipItem, chart) { + var meta = chart.getDatasetMeta(tooltipItem.datasetIndex); + var activeElement = meta.data[tooltipItem.index]; + var view = activeElement._view; + return { + borderColor: view.borderColor, + backgroundColor: view.backgroundColor + }; + }, + labelTextColor: function() { + return this._options.bodyFontColor; + }, + afterLabel: helpers$1.noop, + + // Args are: (tooltipItems, data) + afterBody: helpers$1.noop, + + // Args are: (tooltipItems, data) + beforeFooter: helpers$1.noop, + footer: helpers$1.noop, + afterFooter: helpers$1.noop + } + } +}); + +var positioners = { + /** + * Average mode places the tooltip at the average position of the elements shown + * @function Chart.Tooltip.positioners.average + * @param elements {ChartElement[]} the elements being displayed in the tooltip + * @returns {object} tooltip position + */ + average: function(elements) { + if (!elements.length) { + return false; + } + + var i, len; + var x = 0; + var y = 0; + var count = 0; + + for (i = 0, len = elements.length; i < len; ++i) { + var el = elements[i]; + if (el && el.hasValue()) { + var pos = el.tooltipPosition(); + x += pos.x; + y += pos.y; + ++count; + } + } + + return { + x: x / count, + y: y / count + }; + }, + + /** + * Gets the tooltip position nearest of the item nearest to the event position + * @function Chart.Tooltip.positioners.nearest + * @param elements {Chart.Element[]} the tooltip elements + * @param eventPosition {object} the position of the event in canvas coordinates + * @returns {object} the tooltip position + */ + nearest: function(elements, eventPosition) { + var x = eventPosition.x; + var y = eventPosition.y; + var minDistance = Number.POSITIVE_INFINITY; + var i, len, nearestElement; + + for (i = 0, len = elements.length; i < len; ++i) { + var el = elements[i]; + if (el && el.hasValue()) { + var center = el.getCenterPoint(); + var d = helpers$1.distanceBetweenPoints(eventPosition, center); + + if (d < minDistance) { + minDistance = d; + nearestElement = el; + } + } + } + + if (nearestElement) { + var tp = nearestElement.tooltipPosition(); + x = tp.x; + y = tp.y; + } + + return { + x: x, + y: y + }; + } +}; + +// Helper to push or concat based on if the 2nd parameter is an array or not +function pushOrConcat(base, toPush) { + if (toPush) { + if (helpers$1.isArray(toPush)) { + // base = base.concat(toPush); + Array.prototype.push.apply(base, toPush); + } else { + base.push(toPush); + } + } + + return base; +} + +/** + * Returns array of strings split by newline + * @param {string} value - The value to split by newline. + * @returns {string[]} value if newline present - Returned from String split() method + * @function + */ +function splitNewlines(str) { + if ((typeof str === 'string' || str instanceof String) && str.indexOf('\n') > -1) { + return str.split('\n'); + } + return str; +} + + +/** + * Private helper to create a tooltip item model + * @param element - the chart element (point, arc, bar) to create the tooltip item for + * @return new tooltip item + */ +function createTooltipItem(element) { + var xScale = element._xScale; + var yScale = element._yScale || element._scale; // handle radar || polarArea charts + var index = element._index; + var datasetIndex = element._datasetIndex; + var controller = element._chart.getDatasetMeta(datasetIndex).controller; + var indexScale = controller._getIndexScale(); + var valueScale = controller._getValueScale(); + + return { + xLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '', + yLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '', + label: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '', + value: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '', + index: index, + datasetIndex: datasetIndex, + x: element._model.x, + y: element._model.y + }; +} + +/** + * Helper to get the reset model for the tooltip + * @param tooltipOpts {object} the tooltip options + */ +function getBaseModel(tooltipOpts) { + var globalDefaults = core_defaults.global; + + return { + // Positioning + xPadding: tooltipOpts.xPadding, + yPadding: tooltipOpts.yPadding, + xAlign: tooltipOpts.xAlign, + yAlign: tooltipOpts.yAlign, + + // Body + bodyFontColor: tooltipOpts.bodyFontColor, + _bodyFontFamily: valueOrDefault$7(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily), + _bodyFontStyle: valueOrDefault$7(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle), + _bodyAlign: tooltipOpts.bodyAlign, + bodyFontSize: valueOrDefault$7(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize), + bodySpacing: tooltipOpts.bodySpacing, + + // Title + titleFontColor: tooltipOpts.titleFontColor, + _titleFontFamily: valueOrDefault$7(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily), + _titleFontStyle: valueOrDefault$7(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle), + titleFontSize: valueOrDefault$7(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize), + _titleAlign: tooltipOpts.titleAlign, + titleSpacing: tooltipOpts.titleSpacing, + titleMarginBottom: tooltipOpts.titleMarginBottom, + + // Footer + footerFontColor: tooltipOpts.footerFontColor, + _footerFontFamily: valueOrDefault$7(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily), + _footerFontStyle: valueOrDefault$7(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle), + footerFontSize: valueOrDefault$7(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize), + _footerAlign: tooltipOpts.footerAlign, + footerSpacing: tooltipOpts.footerSpacing, + footerMarginTop: tooltipOpts.footerMarginTop, + + // Appearance + caretSize: tooltipOpts.caretSize, + cornerRadius: tooltipOpts.cornerRadius, + backgroundColor: tooltipOpts.backgroundColor, + opacity: 0, + legendColorBackground: tooltipOpts.multiKeyBackground, + displayColors: tooltipOpts.displayColors, + borderColor: tooltipOpts.borderColor, + borderWidth: tooltipOpts.borderWidth + }; +} + +/** + * Get the size of the tooltip + */ +function getTooltipSize(tooltip, model) { + var ctx = tooltip._chart.ctx; + + var height = model.yPadding * 2; // Tooltip Padding + var width = 0; + + // Count of all lines in the body + var body = model.body; + var combinedBodyLength = body.reduce(function(count, bodyItem) { + return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length; + }, 0); + combinedBodyLength += model.beforeBody.length + model.afterBody.length; + + var titleLineCount = model.title.length; + var footerLineCount = model.footer.length; + var titleFontSize = model.titleFontSize; + var bodyFontSize = model.bodyFontSize; + var footerFontSize = model.footerFontSize; + + height += titleLineCount * titleFontSize; // Title Lines + height += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing + height += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin + height += combinedBodyLength * bodyFontSize; // Body Lines + height += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing + height += footerLineCount ? model.footerMarginTop : 0; // Footer Margin + height += footerLineCount * (footerFontSize); // Footer Lines + height += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing + + // Title width + var widthPadding = 0; + var maxLineWidth = function(line) { + width = Math.max(width, ctx.measureText(line).width + widthPadding); + }; + + ctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily); + helpers$1.each(model.title, maxLineWidth); + + // Body width + ctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily); + helpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth); + + // Body lines may include some extra width due to the color box + widthPadding = model.displayColors ? (bodyFontSize + 2) : 0; + helpers$1.each(body, function(bodyItem) { + helpers$1.each(bodyItem.before, maxLineWidth); + helpers$1.each(bodyItem.lines, maxLineWidth); + helpers$1.each(bodyItem.after, maxLineWidth); + }); + + // Reset back to 0 + widthPadding = 0; + + // Footer width + ctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily); + helpers$1.each(model.footer, maxLineWidth); + + // Add padding + width += 2 * model.xPadding; + + return { + width: width, + height: height + }; +} + +/** + * Helper to get the alignment of a tooltip given the size + */ +function determineAlignment(tooltip, size) { + var model = tooltip._model; + var chart = tooltip._chart; + var chartArea = tooltip._chart.chartArea; + var xAlign = 'center'; + var yAlign = 'center'; + + if (model.y < size.height) { + yAlign = 'top'; + } else if (model.y > (chart.height - size.height)) { + yAlign = 'bottom'; + } + + var lf, rf; // functions to determine left, right alignment + var olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart + var yf; // function to get the y alignment if the tooltip goes outside of the left or right edges + var midX = (chartArea.left + chartArea.right) / 2; + var midY = (chartArea.top + chartArea.bottom) / 2; + + if (yAlign === 'center') { + lf = function(x) { + return x <= midX; + }; + rf = function(x) { + return x > midX; + }; + } else { + lf = function(x) { + return x <= (size.width / 2); + }; + rf = function(x) { + return x >= (chart.width - (size.width / 2)); + }; + } + + olf = function(x) { + return x + size.width + model.caretSize + model.caretPadding > chart.width; + }; + orf = function(x) { + return x - size.width - model.caretSize - model.caretPadding < 0; + }; + yf = function(y) { + return y <= midY ? 'top' : 'bottom'; + }; + + if (lf(model.x)) { + xAlign = 'left'; + + // Is tooltip too wide and goes over the right side of the chart.? + if (olf(model.x)) { + xAlign = 'center'; + yAlign = yf(model.y); + } + } else if (rf(model.x)) { + xAlign = 'right'; + + // Is tooltip too wide and goes outside left edge of canvas? + if (orf(model.x)) { + xAlign = 'center'; + yAlign = yf(model.y); + } + } + + var opts = tooltip._options; + return { + xAlign: opts.xAlign ? opts.xAlign : xAlign, + yAlign: opts.yAlign ? opts.yAlign : yAlign + }; +} + +/** + * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment + */ +function getBackgroundPoint(vm, size, alignment, chart) { + // Background Position + var x = vm.x; + var y = vm.y; + + var caretSize = vm.caretSize; + var caretPadding = vm.caretPadding; + var cornerRadius = vm.cornerRadius; + var xAlign = alignment.xAlign; + var yAlign = alignment.yAlign; + var paddingAndSize = caretSize + caretPadding; + var radiusAndPadding = cornerRadius + caretPadding; + + if (xAlign === 'right') { + x -= size.width; + } else if (xAlign === 'center') { + x -= (size.width / 2); + if (x + size.width > chart.width) { + x = chart.width - size.width; + } + if (x < 0) { + x = 0; + } + } + + if (yAlign === 'top') { + y += paddingAndSize; + } else if (yAlign === 'bottom') { + y -= size.height + paddingAndSize; + } else { + y -= (size.height / 2); + } + + if (yAlign === 'center') { + if (xAlign === 'left') { + x += paddingAndSize; + } else if (xAlign === 'right') { + x -= paddingAndSize; + } + } else if (xAlign === 'left') { + x -= radiusAndPadding; + } else if (xAlign === 'right') { + x += radiusAndPadding; + } + + return { + x: x, + y: y + }; +} + +function getAlignedX(vm, align) { + return align === 'center' + ? vm.x + vm.width / 2 + : align === 'right' + ? vm.x + vm.width - vm.xPadding + : vm.x + vm.xPadding; +} + +/** + * Helper to build before and after body lines + */ +function getBeforeAfterBodyLines(callback) { + return pushOrConcat([], splitNewlines(callback)); +} + +var exports$3 = core_element.extend({ + initialize: function() { + this._model = getBaseModel(this._options); + this._lastActive = []; + }, + + // Get the title + // Args are: (tooltipItem, data) + getTitle: function() { + var me = this; + var opts = me._options; + var callbacks = opts.callbacks; + + var beforeTitle = callbacks.beforeTitle.apply(me, arguments); + var title = callbacks.title.apply(me, arguments); + var afterTitle = callbacks.afterTitle.apply(me, arguments); + + var lines = []; + lines = pushOrConcat(lines, splitNewlines(beforeTitle)); + lines = pushOrConcat(lines, splitNewlines(title)); + lines = pushOrConcat(lines, splitNewlines(afterTitle)); + + return lines; + }, + + // Args are: (tooltipItem, data) + getBeforeBody: function() { + return getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments)); + }, + + // Args are: (tooltipItem, data) + getBody: function(tooltipItems, data) { + var me = this; + var callbacks = me._options.callbacks; + var bodyItems = []; + + helpers$1.each(tooltipItems, function(tooltipItem) { + var bodyItem = { + before: [], + lines: [], + after: [] + }; + pushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data))); + pushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data)); + pushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data))); + + bodyItems.push(bodyItem); + }); + + return bodyItems; + }, + + // Args are: (tooltipItem, data) + getAfterBody: function() { + return getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments)); + }, + + // Get the footer and beforeFooter and afterFooter lines + // Args are: (tooltipItem, data) + getFooter: function() { + var me = this; + var callbacks = me._options.callbacks; + + var beforeFooter = callbacks.beforeFooter.apply(me, arguments); + var footer = callbacks.footer.apply(me, arguments); + var afterFooter = callbacks.afterFooter.apply(me, arguments); + + var lines = []; + lines = pushOrConcat(lines, splitNewlines(beforeFooter)); + lines = pushOrConcat(lines, splitNewlines(footer)); + lines = pushOrConcat(lines, splitNewlines(afterFooter)); + + return lines; + }, + + update: function(changed) { + var me = this; + var opts = me._options; + + // Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition + // that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time + // which breaks any animations. + var existingModel = me._model; + var model = me._model = getBaseModel(opts); + var active = me._active; + + var data = me._data; + + // In the case where active.length === 0 we need to keep these at existing values for good animations + var alignment = { + xAlign: existingModel.xAlign, + yAlign: existingModel.yAlign + }; + var backgroundPoint = { + x: existingModel.x, + y: existingModel.y + }; + var tooltipSize = { + width: existingModel.width, + height: existingModel.height + }; + var tooltipPosition = { + x: existingModel.caretX, + y: existingModel.caretY + }; + + var i, len; + + if (active.length) { + model.opacity = 1; + + var labelColors = []; + var labelTextColors = []; + tooltipPosition = positioners[opts.position].call(me, active, me._eventPosition); + + var tooltipItems = []; + for (i = 0, len = active.length; i < len; ++i) { + tooltipItems.push(createTooltipItem(active[i])); + } + + // If the user provided a filter function, use it to modify the tooltip items + if (opts.filter) { + tooltipItems = tooltipItems.filter(function(a) { + return opts.filter(a, data); + }); + } + + // If the user provided a sorting function, use it to modify the tooltip items + if (opts.itemSort) { + tooltipItems = tooltipItems.sort(function(a, b) { + return opts.itemSort(a, b, data); + }); + } + + // Determine colors for boxes + helpers$1.each(tooltipItems, function(tooltipItem) { + labelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart)); + labelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart)); + }); + + + // Build the Text Lines + model.title = me.getTitle(tooltipItems, data); + model.beforeBody = me.getBeforeBody(tooltipItems, data); + model.body = me.getBody(tooltipItems, data); + model.afterBody = me.getAfterBody(tooltipItems, data); + model.footer = me.getFooter(tooltipItems, data); + + // Initial positioning and colors + model.x = tooltipPosition.x; + model.y = tooltipPosition.y; + model.caretPadding = opts.caretPadding; + model.labelColors = labelColors; + model.labelTextColors = labelTextColors; + + // data points + model.dataPoints = tooltipItems; + + // We need to determine alignment of the tooltip + tooltipSize = getTooltipSize(this, model); + alignment = determineAlignment(this, tooltipSize); + // Final Size and Position + backgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart); + } else { + model.opacity = 0; + } + + model.xAlign = alignment.xAlign; + model.yAlign = alignment.yAlign; + model.x = backgroundPoint.x; + model.y = backgroundPoint.y; + model.width = tooltipSize.width; + model.height = tooltipSize.height; + + // Point where the caret on the tooltip points to + model.caretX = tooltipPosition.x; + model.caretY = tooltipPosition.y; + + me._model = model; + + if (changed && opts.custom) { + opts.custom.call(me, model); + } + + return me; + }, + + drawCaret: function(tooltipPoint, size) { + var ctx = this._chart.ctx; + var vm = this._view; + var caretPosition = this.getCaretPosition(tooltipPoint, size, vm); + + ctx.lineTo(caretPosition.x1, caretPosition.y1); + ctx.lineTo(caretPosition.x2, caretPosition.y2); + ctx.lineTo(caretPosition.x3, caretPosition.y3); + }, + getCaretPosition: function(tooltipPoint, size, vm) { + var x1, x2, x3, y1, y2, y3; + var caretSize = vm.caretSize; + var cornerRadius = vm.cornerRadius; + var xAlign = vm.xAlign; + var yAlign = vm.yAlign; + var ptX = tooltipPoint.x; + var ptY = tooltipPoint.y; + var width = size.width; + var height = size.height; + + if (yAlign === 'center') { + y2 = ptY + (height / 2); + + if (xAlign === 'left') { + x1 = ptX; + x2 = x1 - caretSize; + x3 = x1; + + y1 = y2 + caretSize; + y3 = y2 - caretSize; + } else { + x1 = ptX + width; + x2 = x1 + caretSize; + x3 = x1; + + y1 = y2 - caretSize; + y3 = y2 + caretSize; + } + } else { + if (xAlign === 'left') { + x2 = ptX + cornerRadius + (caretSize); + x1 = x2 - caretSize; + x3 = x2 + caretSize; + } else if (xAlign === 'right') { + x2 = ptX + width - cornerRadius - caretSize; + x1 = x2 - caretSize; + x3 = x2 + caretSize; + } else { + x2 = vm.caretX; + x1 = x2 - caretSize; + x3 = x2 + caretSize; + } + if (yAlign === 'top') { + y1 = ptY; + y2 = y1 - caretSize; + y3 = y1; + } else { + y1 = ptY + height; + y2 = y1 + caretSize; + y3 = y1; + // invert drawing order + var tmp = x3; + x3 = x1; + x1 = tmp; + } + } + return {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3}; + }, + + drawTitle: function(pt, vm, ctx) { + var title = vm.title; + + if (title.length) { + pt.x = getAlignedX(vm, vm._titleAlign); + + ctx.textAlign = vm._titleAlign; + ctx.textBaseline = 'top'; + + var titleFontSize = vm.titleFontSize; + var titleSpacing = vm.titleSpacing; + + ctx.fillStyle = vm.titleFontColor; + ctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily); + + var i, len; + for (i = 0, len = title.length; i < len; ++i) { + ctx.fillText(title[i], pt.x, pt.y); + pt.y += titleFontSize + titleSpacing; // Line Height and spacing + + if (i + 1 === title.length) { + pt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing + } + } + } + }, + + drawBody: function(pt, vm, ctx) { + var bodyFontSize = vm.bodyFontSize; + var bodySpacing = vm.bodySpacing; + var bodyAlign = vm._bodyAlign; + var body = vm.body; + var drawColorBoxes = vm.displayColors; + var labelColors = vm.labelColors; + var xLinePadding = 0; + var colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0; + var textColor; + + ctx.textAlign = bodyAlign; + ctx.textBaseline = 'top'; + ctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily); + + pt.x = getAlignedX(vm, bodyAlign); + + // Before Body + var fillLineOfText = function(line) { + ctx.fillText(line, pt.x + xLinePadding, pt.y); + pt.y += bodyFontSize + bodySpacing; + }; + + // Before body lines + ctx.fillStyle = vm.bodyFontColor; + helpers$1.each(vm.beforeBody, fillLineOfText); + + xLinePadding = drawColorBoxes && bodyAlign !== 'right' + ? bodyAlign === 'center' ? (bodyFontSize / 2 + 1) : (bodyFontSize + 2) + : 0; + + // Draw body lines now + helpers$1.each(body, function(bodyItem, i) { + textColor = vm.labelTextColors[i]; + ctx.fillStyle = textColor; + helpers$1.each(bodyItem.before, fillLineOfText); + + helpers$1.each(bodyItem.lines, function(line) { + // Draw Legend-like boxes if needed + if (drawColorBoxes) { + // Fill a white rect so that colours merge nicely if the opacity is < 1 + ctx.fillStyle = vm.legendColorBackground; + ctx.fillRect(colorX, pt.y, bodyFontSize, bodyFontSize); + + // Border + ctx.lineWidth = 1; + ctx.strokeStyle = labelColors[i].borderColor; + ctx.strokeRect(colorX, pt.y, bodyFontSize, bodyFontSize); + + // Inner square + ctx.fillStyle = labelColors[i].backgroundColor; + ctx.fillRect(colorX + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2); + ctx.fillStyle = textColor; + } + + fillLineOfText(line); + }); + + helpers$1.each(bodyItem.after, fillLineOfText); + }); + + // Reset back to 0 for after body + xLinePadding = 0; + + // After body lines + helpers$1.each(vm.afterBody, fillLineOfText); + pt.y -= bodySpacing; // Remove last body spacing + }, + + drawFooter: function(pt, vm, ctx) { + var footer = vm.footer; + + if (footer.length) { + pt.x = getAlignedX(vm, vm._footerAlign); + pt.y += vm.footerMarginTop; + + ctx.textAlign = vm._footerAlign; + ctx.textBaseline = 'top'; + + ctx.fillStyle = vm.footerFontColor; + ctx.font = helpers$1.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily); + + helpers$1.each(footer, function(line) { + ctx.fillText(line, pt.x, pt.y); + pt.y += vm.footerFontSize + vm.footerSpacing; + }); + } + }, + + drawBackground: function(pt, vm, ctx, tooltipSize) { + ctx.fillStyle = vm.backgroundColor; + ctx.strokeStyle = vm.borderColor; + ctx.lineWidth = vm.borderWidth; + var xAlign = vm.xAlign; + var yAlign = vm.yAlign; + var x = pt.x; + var y = pt.y; + var width = tooltipSize.width; + var height = tooltipSize.height; + var radius = vm.cornerRadius; + + ctx.beginPath(); + ctx.moveTo(x + radius, y); + if (yAlign === 'top') { + this.drawCaret(pt, tooltipSize); + } + ctx.lineTo(x + width - radius, y); + ctx.quadraticCurveTo(x + width, y, x + width, y + radius); + if (yAlign === 'center' && xAlign === 'right') { + this.drawCaret(pt, tooltipSize); + } + ctx.lineTo(x + width, y + height - radius); + ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height); + if (yAlign === 'bottom') { + this.drawCaret(pt, tooltipSize); + } + ctx.lineTo(x + radius, y + height); + ctx.quadraticCurveTo(x, y + height, x, y + height - radius); + if (yAlign === 'center' && xAlign === 'left') { + this.drawCaret(pt, tooltipSize); + } + ctx.lineTo(x, y + radius); + ctx.quadraticCurveTo(x, y, x + radius, y); + ctx.closePath(); + + ctx.fill(); + + if (vm.borderWidth > 0) { + ctx.stroke(); + } + }, + + draw: function() { + var ctx = this._chart.ctx; + var vm = this._view; + + if (vm.opacity === 0) { + return; + } + + var tooltipSize = { + width: vm.width, + height: vm.height + }; + var pt = { + x: vm.x, + y: vm.y + }; + + // IE11/Edge does not like very small opacities, so snap to 0 + var opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity; + + // Truthy/falsey value for empty tooltip + var hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length; + + if (this._options.enabled && hasTooltipContent) { + ctx.save(); + ctx.globalAlpha = opacity; + + // Draw Background + this.drawBackground(pt, vm, ctx, tooltipSize); + + // Draw Title, Body, and Footer + pt.y += vm.yPadding; + + // Titles + this.drawTitle(pt, vm, ctx); + + // Body + this.drawBody(pt, vm, ctx); + + // Footer + this.drawFooter(pt, vm, ctx); + + ctx.restore(); + } + }, + + /** + * Handle an event + * @private + * @param {IEvent} event - The event to handle + * @returns {boolean} true if the tooltip changed + */ + handleEvent: function(e) { + var me = this; + var options = me._options; + var changed = false; + + me._lastActive = me._lastActive || []; + + // Find Active Elements for tooltips + if (e.type === 'mouseout') { + me._active = []; + } else { + me._active = me._chart.getElementsAtEventForMode(e, options.mode, options); + } + + // Remember Last Actives + changed = !helpers$1.arrayEquals(me._active, me._lastActive); + + // Only handle target event on tooltip change + if (changed) { + me._lastActive = me._active; + + if (options.enabled || options.custom) { + me._eventPosition = { + x: e.x, + y: e.y + }; + + me.update(true); + me.pivot(); + } + } + + return changed; + } +}); + +/** + * @namespace Chart.Tooltip.positioners + */ +var positioners_1 = positioners; + +var core_tooltip = exports$3; +core_tooltip.positioners = positioners_1; + +var valueOrDefault$8 = helpers$1.valueOrDefault; + +core_defaults._set('global', { + elements: {}, + events: [ + 'mousemove', + 'mouseout', + 'click', + 'touchstart', + 'touchmove' + ], + hover: { + onHover: null, + mode: 'nearest', + intersect: true, + animationDuration: 400 + }, + onClick: null, + maintainAspectRatio: true, + responsive: true, + responsiveAnimationDuration: 0 +}); + +/** + * Recursively merge the given config objects representing the `scales` option + * by incorporating scale defaults in `xAxes` and `yAxes` array items, then + * returns a deep copy of the result, thus doesn't alter inputs. + */ +function mergeScaleConfig(/* config objects ... */) { + return helpers$1.merge({}, [].slice.call(arguments), { + merger: function(key, target, source, options) { + if (key === 'xAxes' || key === 'yAxes') { + var slen = source[key].length; + var i, type, scale; + + if (!target[key]) { + target[key] = []; + } + + for (i = 0; i < slen; ++i) { + scale = source[key][i]; + type = valueOrDefault$8(scale.type, key === 'xAxes' ? 'category' : 'linear'); + + if (i >= target[key].length) { + target[key].push({}); + } + + if (!target[key][i].type || (scale.type && scale.type !== target[key][i].type)) { + // new/untyped scale or type changed: let's apply the new defaults + // then merge source scale to correctly overwrite the defaults. + helpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]); + } else { + // scales type are the same + helpers$1.merge(target[key][i], scale); + } + } + } else { + helpers$1._merger(key, target, source, options); + } + } + }); +} + +/** + * Recursively merge the given config objects as the root options by handling + * default scale options for the `scales` and `scale` properties, then returns + * a deep copy of the result, thus doesn't alter inputs. + */ +function mergeConfig(/* config objects ... */) { + return helpers$1.merge({}, [].slice.call(arguments), { + merger: function(key, target, source, options) { + var tval = target[key] || {}; + var sval = source[key]; + + if (key === 'scales') { + // scale config merging is complex. Add our own function here for that + target[key] = mergeScaleConfig(tval, sval); + } else if (key === 'scale') { + // used in polar area & radar charts since there is only one scale + target[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]); + } else { + helpers$1._merger(key, target, source, options); + } + } + }); +} + +function initConfig(config) { + config = config || {}; + + // Do NOT use mergeConfig for the data object because this method merges arrays + // and so would change references to labels and datasets, preventing data updates. + var data = config.data = config.data || {}; + data.datasets = data.datasets || []; + data.labels = data.labels || []; + + config.options = mergeConfig( + core_defaults.global, + core_defaults[config.type], + config.options || {}); + + return config; +} + +function updateConfig(chart) { + var newOptions = chart.options; + + helpers$1.each(chart.scales, function(scale) { + core_layouts.removeBox(chart, scale); + }); + + newOptions = mergeConfig( + core_defaults.global, + core_defaults[chart.config.type], + newOptions); + + chart.options = chart.config.options = newOptions; + chart.ensureScalesHaveIDs(); + chart.buildOrUpdateScales(); + + // Tooltip + chart.tooltip._options = newOptions.tooltips; + chart.tooltip.initialize(); +} + +function positionIsHorizontal(position) { + return position === 'top' || position === 'bottom'; +} + +var Chart = function(item, config) { + this.construct(item, config); + return this; +}; + +helpers$1.extend(Chart.prototype, /** @lends Chart */ { + /** + * @private + */ + construct: function(item, config) { + var me = this; + + config = initConfig(config); + + var context = platform.acquireContext(item, config); + var canvas = context && context.canvas; + var height = canvas && canvas.height; + var width = canvas && canvas.width; + + me.id = helpers$1.uid(); + me.ctx = context; + me.canvas = canvas; + me.config = config; + me.width = width; + me.height = height; + me.aspectRatio = height ? width / height : null; + me.options = config.options; + me._bufferedRender = false; + + /** + * Provided for backward compatibility, Chart and Chart.Controller have been merged, + * the "instance" still need to be defined since it might be called from plugins. + * @prop Chart#chart + * @deprecated since version 2.6.0 + * @todo remove at version 3 + * @private + */ + me.chart = me; + me.controller = me; // chart.chart.controller #inception + + // Add the chart instance to the global namespace + Chart.instances[me.id] = me; + + // Define alias to the config data: `chart.data === chart.config.data` + Object.defineProperty(me, 'data', { + get: function() { + return me.config.data; + }, + set: function(value) { + me.config.data = value; + } + }); + + if (!context || !canvas) { + // The given item is not a compatible context2d element, let's return before finalizing + // the chart initialization but after setting basic chart / controller properties that + // can help to figure out that the chart is not valid (e.g chart.canvas !== null); + // https://github.com/chartjs/Chart.js/issues/2807 + console.error("Failed to create chart: can't acquire context from the given item"); + return; + } + + me.initialize(); + me.update(); + }, + + /** + * @private + */ + initialize: function() { + var me = this; + + // Before init plugin notification + core_plugins.notify(me, 'beforeInit'); + + helpers$1.retinaScale(me, me.options.devicePixelRatio); + + me.bindEvents(); + + if (me.options.responsive) { + // Initial resize before chart draws (must be silent to preserve initial animations). + me.resize(true); + } + + // Make sure scales have IDs and are built before we build any controllers. + me.ensureScalesHaveIDs(); + me.buildOrUpdateScales(); + me.initToolTip(); + + // After init plugin notification + core_plugins.notify(me, 'afterInit'); + + return me; + }, + + clear: function() { + helpers$1.canvas.clear(this); + return this; + }, + + stop: function() { + // Stops any current animation loop occurring + core_animations.cancelAnimation(this); + return this; + }, + + resize: function(silent) { + var me = this; + var options = me.options; + var canvas = me.canvas; + var aspectRatio = (options.maintainAspectRatio && me.aspectRatio) || null; + + // the canvas render width and height will be casted to integers so make sure that + // the canvas display style uses the same integer values to avoid blurring effect. + + // Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed + var newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas))); + var newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas))); + + if (me.width === newWidth && me.height === newHeight) { + return; + } + + canvas.width = me.width = newWidth; + canvas.height = me.height = newHeight; + canvas.style.width = newWidth + 'px'; + canvas.style.height = newHeight + 'px'; + + helpers$1.retinaScale(me, options.devicePixelRatio); + + if (!silent) { + // Notify any plugins about the resize + var newSize = {width: newWidth, height: newHeight}; + core_plugins.notify(me, 'resize', [newSize]); + + // Notify of resize + if (options.onResize) { + options.onResize(me, newSize); + } + + me.stop(); + me.update({ + duration: options.responsiveAnimationDuration + }); + } + }, + + ensureScalesHaveIDs: function() { + var options = this.options; + var scalesOptions = options.scales || {}; + var scaleOptions = options.scale; + + helpers$1.each(scalesOptions.xAxes, function(xAxisOptions, index) { + xAxisOptions.id = xAxisOptions.id || ('x-axis-' + index); + }); + + helpers$1.each(scalesOptions.yAxes, function(yAxisOptions, index) { + yAxisOptions.id = yAxisOptions.id || ('y-axis-' + index); + }); + + if (scaleOptions) { + scaleOptions.id = scaleOptions.id || 'scale'; + } + }, + + /** + * Builds a map of scale ID to scale object for future lookup. + */ + buildOrUpdateScales: function() { + var me = this; + var options = me.options; + var scales = me.scales || {}; + var items = []; + var updated = Object.keys(scales).reduce(function(obj, id) { + obj[id] = false; + return obj; + }, {}); + + if (options.scales) { + items = items.concat( + (options.scales.xAxes || []).map(function(xAxisOptions) { + return {options: xAxisOptions, dtype: 'category', dposition: 'bottom'}; + }), + (options.scales.yAxes || []).map(function(yAxisOptions) { + return {options: yAxisOptions, dtype: 'linear', dposition: 'left'}; + }) + ); + } + + if (options.scale) { + items.push({ + options: options.scale, + dtype: 'radialLinear', + isDefault: true, + dposition: 'chartArea' + }); + } + + helpers$1.each(items, function(item) { + var scaleOptions = item.options; + var id = scaleOptions.id; + var scaleType = valueOrDefault$8(scaleOptions.type, item.dtype); + + if (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) { + scaleOptions.position = item.dposition; + } + + updated[id] = true; + var scale = null; + if (id in scales && scales[id].type === scaleType) { + scale = scales[id]; + scale.options = scaleOptions; + scale.ctx = me.ctx; + scale.chart = me; + } else { + var scaleClass = core_scaleService.getScaleConstructor(scaleType); + if (!scaleClass) { + return; + } + scale = new scaleClass({ + id: id, + type: scaleType, + options: scaleOptions, + ctx: me.ctx, + chart: me + }); + scales[scale.id] = scale; + } + + scale.mergeTicksOptions(); + + // TODO(SB): I think we should be able to remove this custom case (options.scale) + // and consider it as a regular scale part of the "scales"" map only! This would + // make the logic easier and remove some useless? custom code. + if (item.isDefault) { + me.scale = scale; + } + }); + // clear up discarded scales + helpers$1.each(updated, function(hasUpdated, id) { + if (!hasUpdated) { + delete scales[id]; + } + }); + + me.scales = scales; + + core_scaleService.addScalesToLayout(this); + }, + + buildOrUpdateControllers: function() { + var me = this; + var newControllers = []; + + helpers$1.each(me.data.datasets, function(dataset, datasetIndex) { + var meta = me.getDatasetMeta(datasetIndex); + var type = dataset.type || me.config.type; + + if (meta.type && meta.type !== type) { + me.destroyDatasetMeta(datasetIndex); + meta = me.getDatasetMeta(datasetIndex); + } + meta.type = type; + + if (meta.controller) { + meta.controller.updateIndex(datasetIndex); + meta.controller.linkScales(); + } else { + var ControllerClass = controllers[meta.type]; + if (ControllerClass === undefined) { + throw new Error('"' + meta.type + '" is not a chart type.'); + } + + meta.controller = new ControllerClass(me, datasetIndex); + newControllers.push(meta.controller); + } + }, me); + + return newControllers; + }, + + /** + * Reset the elements of all datasets + * @private + */ + resetElements: function() { + var me = this; + helpers$1.each(me.data.datasets, function(dataset, datasetIndex) { + me.getDatasetMeta(datasetIndex).controller.reset(); + }, me); + }, + + /** + * Resets the chart back to it's state before the initial animation + */ + reset: function() { + this.resetElements(); + this.tooltip.initialize(); + }, + + update: function(config) { + var me = this; + + if (!config || typeof config !== 'object') { + // backwards compatibility + config = { + duration: config, + lazy: arguments[1] + }; + } + + updateConfig(me); + + // plugins options references might have change, let's invalidate the cache + // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167 + core_plugins._invalidate(me); + + if (core_plugins.notify(me, 'beforeUpdate') === false) { + return; + } + + // In case the entire data object changed + me.tooltip._data = me.data; + + // Make sure dataset controllers are updated and new controllers are reset + var newControllers = me.buildOrUpdateControllers(); + + // Make sure all dataset controllers have correct meta data counts + helpers$1.each(me.data.datasets, function(dataset, datasetIndex) { + me.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements(); + }, me); + + me.updateLayout(); + + // Can only reset the new controllers after the scales have been updated + if (me.options.animation && me.options.animation.duration) { + helpers$1.each(newControllers, function(controller) { + controller.reset(); + }); + } + + me.updateDatasets(); + + // Need to reset tooltip in case it is displayed with elements that are removed + // after update. + me.tooltip.initialize(); + + // Last active contains items that were previously in the tooltip. + // When we reset the tooltip, we need to clear it + me.lastActive = []; + + // Do this before render so that any plugins that need final scale updates can use it + core_plugins.notify(me, 'afterUpdate'); + + if (me._bufferedRender) { + me._bufferedRequest = { + duration: config.duration, + easing: config.easing, + lazy: config.lazy + }; + } else { + me.render(config); + } + }, + + /** + * Updates the chart layout unless a plugin returns `false` to the `beforeLayout` + * hook, in which case, plugins will not be called on `afterLayout`. + * @private + */ + updateLayout: function() { + var me = this; + + if (core_plugins.notify(me, 'beforeLayout') === false) { + return; + } + + core_layouts.update(this, this.width, this.height); + + /** + * Provided for backward compatibility, use `afterLayout` instead. + * @method IPlugin#afterScaleUpdate + * @deprecated since version 2.5.0 + * @todo remove at version 3 + * @private + */ + core_plugins.notify(me, 'afterScaleUpdate'); + core_plugins.notify(me, 'afterLayout'); + }, + + /** + * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate` + * hook, in which case, plugins will not be called on `afterDatasetsUpdate`. + * @private + */ + updateDatasets: function() { + var me = this; + + if (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) { + return; + } + + for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) { + me.updateDataset(i); + } + + core_plugins.notify(me, 'afterDatasetsUpdate'); + }, + + /** + * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate` + * hook, in which case, plugins will not be called on `afterDatasetUpdate`. + * @private + */ + updateDataset: function(index) { + var me = this; + var meta = me.getDatasetMeta(index); + var args = { + meta: meta, + index: index + }; + + if (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) { + return; + } + + meta.controller.update(); + + core_plugins.notify(me, 'afterDatasetUpdate', [args]); + }, + + render: function(config) { + var me = this; + + if (!config || typeof config !== 'object') { + // backwards compatibility + config = { + duration: config, + lazy: arguments[1] + }; + } + + var animationOptions = me.options.animation; + var duration = valueOrDefault$8(config.duration, animationOptions && animationOptions.duration); + var lazy = config.lazy; + + if (core_plugins.notify(me, 'beforeRender') === false) { + return; + } + + var onComplete = function(animation) { + core_plugins.notify(me, 'afterRender'); + helpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me); + }; + + if (animationOptions && duration) { + var animation = new core_animation({ + numSteps: duration / 16.66, // 60 fps + easing: config.easing || animationOptions.easing, + + render: function(chart, animationObject) { + var easingFunction = helpers$1.easing.effects[animationObject.easing]; + var currentStep = animationObject.currentStep; + var stepDecimal = currentStep / animationObject.numSteps; + + chart.draw(easingFunction(stepDecimal), stepDecimal, currentStep); + }, + + onAnimationProgress: animationOptions.onProgress, + onAnimationComplete: onComplete + }); + + core_animations.addAnimation(me, animation, duration, lazy); + } else { + me.draw(); + + // See https://github.com/chartjs/Chart.js/issues/3781 + onComplete(new core_animation({numSteps: 0, chart: me})); + } + + return me; + }, + + draw: function(easingValue) { + var me = this; + + me.clear(); + + if (helpers$1.isNullOrUndef(easingValue)) { + easingValue = 1; + } + + me.transition(easingValue); + + if (me.width <= 0 || me.height <= 0) { + return; + } + + if (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) { + return; + } + + // Draw all the scales + helpers$1.each(me.boxes, function(box) { + box.draw(me.chartArea); + }, me); + + me.drawDatasets(easingValue); + me._drawTooltip(easingValue); + + core_plugins.notify(me, 'afterDraw', [easingValue]); + }, + + /** + * @private + */ + transition: function(easingValue) { + var me = this; + + for (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) { + if (me.isDatasetVisible(i)) { + me.getDatasetMeta(i).controller.transition(easingValue); + } + } + + me.tooltip.transition(easingValue); + }, + + /** + * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw` + * hook, in which case, plugins will not be called on `afterDatasetsDraw`. + * @private + */ + drawDatasets: function(easingValue) { + var me = this; + + if (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) { + return; + } + + // Draw datasets reversed to support proper line stacking + for (var i = (me.data.datasets || []).length - 1; i >= 0; --i) { + if (me.isDatasetVisible(i)) { + me.drawDataset(i, easingValue); + } + } + + core_plugins.notify(me, 'afterDatasetsDraw', [easingValue]); + }, + + /** + * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw` + * hook, in which case, plugins will not be called on `afterDatasetDraw`. + * @private + */ + drawDataset: function(index, easingValue) { + var me = this; + var meta = me.getDatasetMeta(index); + var args = { + meta: meta, + index: index, + easingValue: easingValue + }; + + if (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) { + return; + } + + meta.controller.draw(easingValue); + + core_plugins.notify(me, 'afterDatasetDraw', [args]); + }, + + /** + * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw` + * hook, in which case, plugins will not be called on `afterTooltipDraw`. + * @private + */ + _drawTooltip: function(easingValue) { + var me = this; + var tooltip = me.tooltip; + var args = { + tooltip: tooltip, + easingValue: easingValue + }; + + if (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) { + return; + } + + tooltip.draw(); + + core_plugins.notify(me, 'afterTooltipDraw', [args]); + }, + + /** + * Get the single element that was clicked on + * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw + */ + getElementAtEvent: function(e) { + return core_interaction.modes.single(this, e); + }, + + getElementsAtEvent: function(e) { + return core_interaction.modes.label(this, e, {intersect: true}); + }, + + getElementsAtXAxis: function(e) { + return core_interaction.modes['x-axis'](this, e, {intersect: true}); + }, + + getElementsAtEventForMode: function(e, mode, options) { + var method = core_interaction.modes[mode]; + if (typeof method === 'function') { + return method(this, e, options); + } + + return []; + }, + + getDatasetAtEvent: function(e) { + return core_interaction.modes.dataset(this, e, {intersect: true}); + }, + + getDatasetMeta: function(datasetIndex) { + var me = this; + var dataset = me.data.datasets[datasetIndex]; + if (!dataset._meta) { + dataset._meta = {}; + } + + var meta = dataset._meta[me.id]; + if (!meta) { + meta = dataset._meta[me.id] = { + type: null, + data: [], + dataset: null, + controller: null, + hidden: null, // See isDatasetVisible() comment + xAxisID: null, + yAxisID: null + }; + } + + return meta; + }, + + getVisibleDatasetCount: function() { + var count = 0; + for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) { + if (this.isDatasetVisible(i)) { + count++; + } + } + return count; + }, + + isDatasetVisible: function(datasetIndex) { + var meta = this.getDatasetMeta(datasetIndex); + + // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false, + // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned. + return typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden; + }, + + generateLegend: function() { + return this.options.legendCallback(this); + }, + + /** + * @private + */ + destroyDatasetMeta: function(datasetIndex) { + var id = this.id; + var dataset = this.data.datasets[datasetIndex]; + var meta = dataset._meta && dataset._meta[id]; + + if (meta) { + meta.controller.destroy(); + delete dataset._meta[id]; + } + }, + + destroy: function() { + var me = this; + var canvas = me.canvas; + var i, ilen; + + me.stop(); + + // dataset controllers need to cleanup associated data + for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) { + me.destroyDatasetMeta(i); + } + + if (canvas) { + me.unbindEvents(); + helpers$1.canvas.clear(me); + platform.releaseContext(me.ctx); + me.canvas = null; + me.ctx = null; + } + + core_plugins.notify(me, 'destroy'); + + delete Chart.instances[me.id]; + }, + + toBase64Image: function() { + return this.canvas.toDataURL.apply(this.canvas, arguments); + }, + + initToolTip: function() { + var me = this; + me.tooltip = new core_tooltip({ + _chart: me, + _chartInstance: me, // deprecated, backward compatibility + _data: me.data, + _options: me.options.tooltips + }, me); + }, + + /** + * @private + */ + bindEvents: function() { + var me = this; + var listeners = me._listeners = {}; + var listener = function() { + me.eventHandler.apply(me, arguments); + }; + + helpers$1.each(me.options.events, function(type) { + platform.addEventListener(me, type, listener); + listeners[type] = listener; + }); + + // Elements used to detect size change should not be injected for non responsive charts. + // See https://github.com/chartjs/Chart.js/issues/2210 + if (me.options.responsive) { + listener = function() { + me.resize(); + }; + + platform.addEventListener(me, 'resize', listener); + listeners.resize = listener; + } + }, + + /** + * @private + */ + unbindEvents: function() { + var me = this; + var listeners = me._listeners; + if (!listeners) { + return; + } + + delete me._listeners; + helpers$1.each(listeners, function(listener, type) { + platform.removeEventListener(me, type, listener); + }); + }, + + updateHoverStyle: function(elements, mode, enabled) { + var method = enabled ? 'setHoverStyle' : 'removeHoverStyle'; + var element, i, ilen; + + for (i = 0, ilen = elements.length; i < ilen; ++i) { + element = elements[i]; + if (element) { + this.getDatasetMeta(element._datasetIndex).controller[method](element); + } + } + }, + + /** + * @private + */ + eventHandler: function(e) { + var me = this; + var tooltip = me.tooltip; + + if (core_plugins.notify(me, 'beforeEvent', [e]) === false) { + return; + } + + // Buffer any update calls so that renders do not occur + me._bufferedRender = true; + me._bufferedRequest = null; + + var changed = me.handleEvent(e); + // for smooth tooltip animations issue #4989 + // the tooltip should be the source of change + // Animation check workaround: + // tooltip._start will be null when tooltip isn't animating + if (tooltip) { + changed = tooltip._start + ? tooltip.handleEvent(e) + : changed | tooltip.handleEvent(e); + } + + core_plugins.notify(me, 'afterEvent', [e]); + + var bufferedRequest = me._bufferedRequest; + if (bufferedRequest) { + // If we have an update that was triggered, we need to do a normal render + me.render(bufferedRequest); + } else if (changed && !me.animating) { + // If entering, leaving, or changing elements, animate the change via pivot + me.stop(); + + // We only need to render at this point. Updating will cause scales to be + // recomputed generating flicker & using more memory than necessary. + me.render({ + duration: me.options.hover.animationDuration, + lazy: true + }); + } + + me._bufferedRender = false; + me._bufferedRequest = null; + + return me; + }, + + /** + * Handle an event + * @private + * @param {IEvent} event the event to handle + * @return {boolean} true if the chart needs to re-render + */ + handleEvent: function(e) { + var me = this; + var options = me.options || {}; + var hoverOptions = options.hover; + var changed = false; + + me.lastActive = me.lastActive || []; + + // Find Active Elements for hover and tooltips + if (e.type === 'mouseout') { + me.active = []; + } else { + me.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions); + } + + // Invoke onHover hook + // Need to call with native event here to not break backwards compatibility + helpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me); + + if (e.type === 'mouseup' || e.type === 'click') { + if (options.onClick) { + // Use e.native here for backwards compatibility + options.onClick.call(me, e.native, me.active); + } + } + + // Remove styling for last active (even if it may still be active) + if (me.lastActive.length) { + me.updateHoverStyle(me.lastActive, hoverOptions.mode, false); + } + + // Built in hover styling + if (me.active.length && hoverOptions.mode) { + me.updateHoverStyle(me.active, hoverOptions.mode, true); + } + + changed = !helpers$1.arrayEquals(me.active, me.lastActive); + + // Remember Last Actives + me.lastActive = me.active; + + return changed; + } +}); + +/** + * NOTE(SB) We actually don't use this container anymore but we need to keep it + * for backward compatibility. Though, it can still be useful for plugins that + * would need to work on multiple charts?! + */ +Chart.instances = {}; + +var core_controller = Chart; + +// DEPRECATIONS + +/** + * Provided for backward compatibility, use Chart instead. + * @class Chart.Controller + * @deprecated since version 2.6 + * @todo remove at version 3 + * @private + */ +Chart.Controller = Chart; + +/** + * Provided for backward compatibility, not available anymore. + * @namespace Chart + * @deprecated since version 2.8 + * @todo remove at version 3 + * @private + */ +Chart.types = {}; + +/** + * Provided for backward compatibility, not available anymore. + * @namespace Chart.helpers.configMerge + * @deprecated since version 2.8.0 + * @todo remove at version 3 + * @private + */ +helpers$1.configMerge = mergeConfig; + +/** + * Provided for backward compatibility, not available anymore. + * @namespace Chart.helpers.scaleMerge + * @deprecated since version 2.8.0 + * @todo remove at version 3 + * @private + */ +helpers$1.scaleMerge = mergeScaleConfig; + +var core_helpers = function() { + + // -- Basic js utility methods + + helpers$1.where = function(collection, filterCallback) { + if (helpers$1.isArray(collection) && Array.prototype.filter) { + return collection.filter(filterCallback); + } + var filtered = []; + + helpers$1.each(collection, function(item) { + if (filterCallback(item)) { + filtered.push(item); + } + }); + + return filtered; + }; + helpers$1.findIndex = Array.prototype.findIndex ? + function(array, callback, scope) { + return array.findIndex(callback, scope); + } : + function(array, callback, scope) { + scope = scope === undefined ? array : scope; + for (var i = 0, ilen = array.length; i < ilen; ++i) { + if (callback.call(scope, array[i], i, array)) { + return i; + } + } + return -1; + }; + helpers$1.findNextWhere = function(arrayToSearch, filterCallback, startIndex) { + // Default to start of the array + if (helpers$1.isNullOrUndef(startIndex)) { + startIndex = -1; + } + for (var i = startIndex + 1; i < arrayToSearch.length; i++) { + var currentItem = arrayToSearch[i]; + if (filterCallback(currentItem)) { + return currentItem; + } + } + }; + helpers$1.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) { + // Default to end of the array + if (helpers$1.isNullOrUndef(startIndex)) { + startIndex = arrayToSearch.length; + } + for (var i = startIndex - 1; i >= 0; i--) { + var currentItem = arrayToSearch[i]; + if (filterCallback(currentItem)) { + return currentItem; + } + } + }; + + // -- Math methods + helpers$1.isNumber = function(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + }; + helpers$1.almostEquals = function(x, y, epsilon) { + return Math.abs(x - y) < epsilon; + }; + helpers$1.almostWhole = function(x, epsilon) { + var rounded = Math.round(x); + return (((rounded - epsilon) < x) && ((rounded + epsilon) > x)); + }; + helpers$1.max = function(array) { + return array.reduce(function(max, value) { + if (!isNaN(value)) { + return Math.max(max, value); + } + return max; + }, Number.NEGATIVE_INFINITY); + }; + helpers$1.min = function(array) { + return array.reduce(function(min, value) { + if (!isNaN(value)) { + return Math.min(min, value); + } + return min; + }, Number.POSITIVE_INFINITY); + }; + helpers$1.sign = Math.sign ? + function(x) { + return Math.sign(x); + } : + function(x) { + x = +x; // convert to a number + if (x === 0 || isNaN(x)) { + return x; + } + return x > 0 ? 1 : -1; + }; + helpers$1.log10 = Math.log10 ? + function(x) { + return Math.log10(x); + } : + function(x) { + var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10. + // Check for whole powers of 10, + // which due to floating point rounding error should be corrected. + var powerOf10 = Math.round(exponent); + var isPowerOf10 = x === Math.pow(10, powerOf10); + + return isPowerOf10 ? powerOf10 : exponent; + }; + helpers$1.toRadians = function(degrees) { + return degrees * (Math.PI / 180); + }; + helpers$1.toDegrees = function(radians) { + return radians * (180 / Math.PI); + }; + + /** + * Returns the number of decimal places + * i.e. the number of digits after the decimal point, of the value of this Number. + * @param {number} x - A number. + * @returns {number} The number of decimal places. + * @private + */ + helpers$1._decimalPlaces = function(x) { + if (!helpers$1.isFinite(x)) { + return; + } + var e = 1; + var p = 0; + while (Math.round(x * e) / e !== x) { + e *= 10; + p++; + } + return p; + }; + + // Gets the angle from vertical upright to the point about a centre. + helpers$1.getAngleFromPoint = function(centrePoint, anglePoint) { + var distanceFromXCenter = anglePoint.x - centrePoint.x; + var distanceFromYCenter = anglePoint.y - centrePoint.y; + var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter); + + var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter); + + if (angle < (-0.5 * Math.PI)) { + angle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2] + } + + return { + angle: angle, + distance: radialDistanceFromCenter + }; + }; + helpers$1.distanceBetweenPoints = function(pt1, pt2) { + return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2)); + }; + + /** + * Provided for backward compatibility, not available anymore + * @function Chart.helpers.aliasPixel + * @deprecated since version 2.8.0 + * @todo remove at version 3 + */ + helpers$1.aliasPixel = function(pixelWidth) { + return (pixelWidth % 2 === 0) ? 0 : 0.5; + }; + + /** + * Returns the aligned pixel value to avoid anti-aliasing blur + * @param {Chart} chart - The chart instance. + * @param {number} pixel - A pixel value. + * @param {number} width - The width of the element. + * @returns {number} The aligned pixel value. + * @private + */ + helpers$1._alignPixel = function(chart, pixel, width) { + var devicePixelRatio = chart.currentDevicePixelRatio; + var halfWidth = width / 2; + return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth; + }; + + helpers$1.splineCurve = function(firstPoint, middlePoint, afterPoint, t) { + // Props to Rob Spencer at scaled innovation for his post on splining between points + // http://scaledinnovation.com/analytics/splines/aboutSplines.html + + // This function must also respect "skipped" points + + var previous = firstPoint.skip ? middlePoint : firstPoint; + var current = middlePoint; + var next = afterPoint.skip ? middlePoint : afterPoint; + + var d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2)); + var d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2)); + + var s01 = d01 / (d01 + d12); + var s12 = d12 / (d01 + d12); + + // If all points are the same, s01 & s02 will be inf + s01 = isNaN(s01) ? 0 : s01; + s12 = isNaN(s12) ? 0 : s12; + + var fa = t * s01; // scaling factor for triangle Ta + var fb = t * s12; + + return { + previous: { + x: current.x - fa * (next.x - previous.x), + y: current.y - fa * (next.y - previous.y) + }, + next: { + x: current.x + fb * (next.x - previous.x), + y: current.y + fb * (next.y - previous.y) + } + }; + }; + helpers$1.EPSILON = Number.EPSILON || 1e-14; + helpers$1.splineCurveMonotone = function(points) { + // This function calculates Bézier control points in a similar way than |splineCurve|, + // but preserves monotonicity of the provided data and ensures no local extremums are added + // between the dataset discrete points due to the interpolation. + // See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation + + var pointsWithTangents = (points || []).map(function(point) { + return { + model: point._model, + deltaK: 0, + mK: 0 + }; + }); + + // Calculate slopes (deltaK) and initialize tangents (mK) + var pointsLen = pointsWithTangents.length; + var i, pointBefore, pointCurrent, pointAfter; + for (i = 0; i < pointsLen; ++i) { + pointCurrent = pointsWithTangents[i]; + if (pointCurrent.model.skip) { + continue; + } + + pointBefore = i > 0 ? pointsWithTangents[i - 1] : null; + pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null; + if (pointAfter && !pointAfter.model.skip) { + var slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x); + + // In the case of two points that appear at the same x pixel, slopeDeltaX is 0 + pointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0; + } + + if (!pointBefore || pointBefore.model.skip) { + pointCurrent.mK = pointCurrent.deltaK; + } else if (!pointAfter || pointAfter.model.skip) { + pointCurrent.mK = pointBefore.deltaK; + } else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) { + pointCurrent.mK = 0; + } else { + pointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2; + } + } + + // Adjust tangents to ensure monotonic properties + var alphaK, betaK, tauK, squaredMagnitude; + for (i = 0; i < pointsLen - 1; ++i) { + pointCurrent = pointsWithTangents[i]; + pointAfter = pointsWithTangents[i + 1]; + if (pointCurrent.model.skip || pointAfter.model.skip) { + continue; + } + + if (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) { + pointCurrent.mK = pointAfter.mK = 0; + continue; + } + + alphaK = pointCurrent.mK / pointCurrent.deltaK; + betaK = pointAfter.mK / pointCurrent.deltaK; + squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2); + if (squaredMagnitude <= 9) { + continue; + } + + tauK = 3 / Math.sqrt(squaredMagnitude); + pointCurrent.mK = alphaK * tauK * pointCurrent.deltaK; + pointAfter.mK = betaK * tauK * pointCurrent.deltaK; + } + + // Compute control points + var deltaX; + for (i = 0; i < pointsLen; ++i) { + pointCurrent = pointsWithTangents[i]; + if (pointCurrent.model.skip) { + continue; + } + + pointBefore = i > 0 ? pointsWithTangents[i - 1] : null; + pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null; + if (pointBefore && !pointBefore.model.skip) { + deltaX = (pointCurrent.model.x - pointBefore.model.x) / 3; + pointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX; + pointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK; + } + if (pointAfter && !pointAfter.model.skip) { + deltaX = (pointAfter.model.x - pointCurrent.model.x) / 3; + pointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX; + pointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK; + } + } + }; + helpers$1.nextItem = function(collection, index, loop) { + if (loop) { + return index >= collection.length - 1 ? collection[0] : collection[index + 1]; + } + return index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1]; + }; + helpers$1.previousItem = function(collection, index, loop) { + if (loop) { + return index <= 0 ? collection[collection.length - 1] : collection[index - 1]; + } + return index <= 0 ? collection[0] : collection[index - 1]; + }; + // Implementation of the nice number algorithm used in determining where axis labels will go + helpers$1.niceNum = function(range, round) { + var exponent = Math.floor(helpers$1.log10(range)); + var fraction = range / Math.pow(10, exponent); + var niceFraction; + + if (round) { + if (fraction < 1.5) { + niceFraction = 1; + } else if (fraction < 3) { + niceFraction = 2; + } else if (fraction < 7) { + niceFraction = 5; + } else { + niceFraction = 10; + } + } else if (fraction <= 1.0) { + niceFraction = 1; + } else if (fraction <= 2) { + niceFraction = 2; + } else if (fraction <= 5) { + niceFraction = 5; + } else { + niceFraction = 10; + } + + return niceFraction * Math.pow(10, exponent); + }; + // Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/ + helpers$1.requestAnimFrame = (function() { + if (typeof window === 'undefined') { + return function(callback) { + callback(); + }; + } + return window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + window.msRequestAnimationFrame || + function(callback) { + return window.setTimeout(callback, 1000 / 60); + }; + }()); + // -- DOM methods + helpers$1.getRelativePosition = function(evt, chart) { + var mouseX, mouseY; + var e = evt.originalEvent || evt; + var canvas = evt.target || evt.srcElement; + var boundingRect = canvas.getBoundingClientRect(); + + var touches = e.touches; + if (touches && touches.length > 0) { + mouseX = touches[0].clientX; + mouseY = touches[0].clientY; + + } else { + mouseX = e.clientX; + mouseY = e.clientY; + } + + // Scale mouse coordinates into canvas coordinates + // by following the pattern laid out by 'jerryj' in the comments of + // https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/ + var paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left')); + var paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top')); + var paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right')); + var paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom')); + var width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight; + var height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom; + + // We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However + // the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here + mouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio); + mouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio); + + return { + x: mouseX, + y: mouseY + }; + + }; + + // Private helper function to convert max-width/max-height values that may be percentages into a number + function parseMaxStyle(styleValue, node, parentProperty) { + var valueInPixels; + if (typeof styleValue === 'string') { + valueInPixels = parseInt(styleValue, 10); + + if (styleValue.indexOf('%') !== -1) { + // percentage * size in dimension + valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty]; + } + } else { + valueInPixels = styleValue; + } + + return valueInPixels; + } + + /** + * Returns if the given value contains an effective constraint. + * @private + */ + function isConstrainedValue(value) { + return value !== undefined && value !== null && value !== 'none'; + } + + /** + * Returns the max width or height of the given DOM node in a cross-browser compatible fashion + * @param {HTMLElement} domNode - the node to check the constraint on + * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height') + * @param {string} percentageProperty - property of parent to use when calculating width as a percentage + * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser} + */ + function getConstraintDimension(domNode, maxStyle, percentageProperty) { + var view = document.defaultView; + var parentNode = helpers$1._getParentNode(domNode); + var constrainedNode = view.getComputedStyle(domNode)[maxStyle]; + var constrainedContainer = view.getComputedStyle(parentNode)[maxStyle]; + var hasCNode = isConstrainedValue(constrainedNode); + var hasCContainer = isConstrainedValue(constrainedContainer); + var infinity = Number.POSITIVE_INFINITY; + + if (hasCNode || hasCContainer) { + return Math.min( + hasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity, + hasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity); + } + + return 'none'; + } + // returns Number or undefined if no constraint + helpers$1.getConstraintWidth = function(domNode) { + return getConstraintDimension(domNode, 'max-width', 'clientWidth'); + }; + // returns Number or undefined if no constraint + helpers$1.getConstraintHeight = function(domNode) { + return getConstraintDimension(domNode, 'max-height', 'clientHeight'); + }; + /** + * @private + */ + helpers$1._calculatePadding = function(container, padding, parentDimension) { + padding = helpers$1.getStyle(container, padding); + + return padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10); + }; + /** + * @private + */ + helpers$1._getParentNode = function(domNode) { + var parent = domNode.parentNode; + if (parent && parent.toString() === '[object ShadowRoot]') { + parent = parent.host; + } + return parent; + }; + helpers$1.getMaximumWidth = function(domNode) { + var container = helpers$1._getParentNode(domNode); + if (!container) { + return domNode.clientWidth; + } + + var clientWidth = container.clientWidth; + var paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth); + var paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth); + + var w = clientWidth - paddingLeft - paddingRight; + var cw = helpers$1.getConstraintWidth(domNode); + return isNaN(cw) ? w : Math.min(w, cw); + }; + helpers$1.getMaximumHeight = function(domNode) { + var container = helpers$1._getParentNode(domNode); + if (!container) { + return domNode.clientHeight; + } + + var clientHeight = container.clientHeight; + var paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight); + var paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight); + + var h = clientHeight - paddingTop - paddingBottom; + var ch = helpers$1.getConstraintHeight(domNode); + return isNaN(ch) ? h : Math.min(h, ch); + }; + helpers$1.getStyle = function(el, property) { + return el.currentStyle ? + el.currentStyle[property] : + document.defaultView.getComputedStyle(el, null).getPropertyValue(property); + }; + helpers$1.retinaScale = function(chart, forceRatio) { + var pixelRatio = chart.currentDevicePixelRatio = forceRatio || (typeof window !== 'undefined' && window.devicePixelRatio) || 1; + if (pixelRatio === 1) { + return; + } + + var canvas = chart.canvas; + var height = chart.height; + var width = chart.width; + + canvas.height = height * pixelRatio; + canvas.width = width * pixelRatio; + chart.ctx.scale(pixelRatio, pixelRatio); + + // If no style has been set on the canvas, the render size is used as display size, + // making the chart visually bigger, so let's enforce it to the "correct" values. + // See https://github.com/chartjs/Chart.js/issues/3575 + if (!canvas.style.height && !canvas.style.width) { + canvas.style.height = height + 'px'; + canvas.style.width = width + 'px'; + } + }; + // -- Canvas methods + helpers$1.fontString = function(pixelSize, fontStyle, fontFamily) { + return fontStyle + ' ' + pixelSize + 'px ' + fontFamily; + }; + helpers$1.longestText = function(ctx, font, arrayOfThings, cache) { + cache = cache || {}; + var data = cache.data = cache.data || {}; + var gc = cache.garbageCollect = cache.garbageCollect || []; + + if (cache.font !== font) { + data = cache.data = {}; + gc = cache.garbageCollect = []; + cache.font = font; + } + + ctx.font = font; + var longest = 0; + helpers$1.each(arrayOfThings, function(thing) { + // Undefined strings and arrays should not be measured + if (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) { + longest = helpers$1.measureText(ctx, data, gc, longest, thing); + } else if (helpers$1.isArray(thing)) { + // if it is an array lets measure each element + // to do maybe simplify this function a bit so we can do this more recursively? + helpers$1.each(thing, function(nestedThing) { + // Undefined strings and arrays should not be measured + if (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) { + longest = helpers$1.measureText(ctx, data, gc, longest, nestedThing); + } + }); + } + }); + + var gcLen = gc.length / 2; + if (gcLen > arrayOfThings.length) { + for (var i = 0; i < gcLen; i++) { + delete data[gc[i]]; + } + gc.splice(0, gcLen); + } + return longest; + }; + helpers$1.measureText = function(ctx, data, gc, longest, string) { + var textWidth = data[string]; + if (!textWidth) { + textWidth = data[string] = ctx.measureText(string).width; + gc.push(string); + } + if (textWidth > longest) { + longest = textWidth; + } + return longest; + }; + helpers$1.numberOfLabelLines = function(arrayOfThings) { + var numberOfLines = 1; + helpers$1.each(arrayOfThings, function(thing) { + if (helpers$1.isArray(thing)) { + if (thing.length > numberOfLines) { + numberOfLines = thing.length; + } + } + }); + return numberOfLines; + }; + + helpers$1.color = !chartjsColor ? + function(value) { + console.error('Color.js not found!'); + return value; + } : + function(value) { + /* global CanvasGradient */ + if (value instanceof CanvasGradient) { + value = core_defaults.global.defaultColor; + } + + return chartjsColor(value); + }; + + helpers$1.getHoverColor = function(colorValue) { + /* global CanvasPattern */ + return (colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient) ? + colorValue : + helpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString(); + }; +}; + +function abstract() { + throw new Error( + 'This method is not implemented: either no adapter can ' + + 'be found or an incomplete integration was provided.' + ); +} + +/** + * Date adapter (current used by the time scale) + * @namespace Chart._adapters._date + * @memberof Chart._adapters + * @private + */ + +/** + * Currently supported unit string values. + * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')} + * @memberof Chart._adapters._date + * @name Unit + */ + +/** + * @class + */ +function DateAdapter(options) { + this.options = options || {}; +} + +helpers$1.extend(DateAdapter.prototype, /** @lends DateAdapter */ { + /** + * Returns a map of time formats for the supported formatting units defined + * in Unit as well as 'datetime' representing a detailed date/time string. + * @returns {{string: string}} + */ + formats: abstract, + + /** + * Parses the given `value` and return the associated timestamp. + * @param {any} value - the value to parse (usually comes from the data) + * @param {string} [format] - the expected data format + * @returns {(number|null)} + * @function + */ + parse: abstract, + + /** + * Returns the formatted date in the specified `format` for a given `timestamp`. + * @param {number} timestamp - the timestamp to format + * @param {string} format - the date/time token + * @return {string} + * @function + */ + format: abstract, + + /** + * Adds the specified `amount` of `unit` to the given `timestamp`. + * @param {number} timestamp - the input timestamp + * @param {number} amount - the amount to add + * @param {Unit} unit - the unit as string + * @return {number} + * @function + */ + add: abstract, + + /** + * Returns the number of `unit` between the given timestamps. + * @param {number} max - the input timestamp (reference) + * @param {number} min - the timestamp to substract + * @param {Unit} unit - the unit as string + * @return {number} + * @function + */ + diff: abstract, + + /** + * Returns start of `unit` for the given `timestamp`. + * @param {number} timestamp - the input timestamp + * @param {Unit} unit - the unit as string + * @param {number} [weekday] - the ISO day of the week with 1 being Monday + * and 7 being Sunday (only needed if param *unit* is `isoWeek`). + * @function + */ + startOf: abstract, + + /** + * Returns end of `unit` for the given `timestamp`. + * @param {number} timestamp - the input timestamp + * @param {Unit} unit - the unit as string + * @function + */ + endOf: abstract, + + // DEPRECATIONS + + /** + * Provided for backward compatibility for scale.getValueForPixel(), + * this method should be overridden only by the moment adapter. + * @deprecated since version 2.8.0 + * @todo remove at version 3 + * @private + */ + _create: function(value) { + return value; + } +}); + +DateAdapter.override = function(members) { + helpers$1.extend(DateAdapter.prototype, members); +}; + +var _date = DateAdapter; + +var core_adapters = { + _date: _date +}; + +/** + * Namespace to hold static tick generation functions + * @namespace Chart.Ticks + */ +var core_ticks = { + /** + * Namespace to hold formatters for different types of ticks + * @namespace Chart.Ticks.formatters + */ + formatters: { + /** + * Formatter for value labels + * @method Chart.Ticks.formatters.values + * @param value the value to display + * @return {string|string[]} the label to display + */ + values: function(value) { + return helpers$1.isArray(value) ? value : '' + value; + }, + + /** + * Formatter for linear numeric ticks + * @method Chart.Ticks.formatters.linear + * @param tickValue {number} the value to be formatted + * @param index {number} the position of the tickValue parameter in the ticks array + * @param ticks {number[]} the list of ticks being converted + * @return {string} string representation of the tickValue parameter + */ + linear: function(tickValue, index, ticks) { + // If we have lots of ticks, don't use the ones + var delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0]; + + // If we have a number like 2.5 as the delta, figure out how many decimal places we need + if (Math.abs(delta) > 1) { + if (tickValue !== Math.floor(tickValue)) { + // not an integer + delta = tickValue - Math.floor(tickValue); + } + } + + var logDelta = helpers$1.log10(Math.abs(delta)); + var tickString = ''; + + if (tickValue !== 0) { + var maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1])); + if (maxTick < 1e-4) { // all ticks are small numbers; use scientific notation + var logTick = helpers$1.log10(Math.abs(tickValue)); + tickString = tickValue.toExponential(Math.floor(logTick) - Math.floor(logDelta)); + } else { + var numDecimal = -1 * Math.floor(logDelta); + numDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places + tickString = tickValue.toFixed(numDecimal); + } + } else { + tickString = '0'; // never show decimal places for 0 + } + + return tickString; + }, + + logarithmic: function(tickValue, index, ticks) { + var remain = tickValue / (Math.pow(10, Math.floor(helpers$1.log10(tickValue)))); + + if (tickValue === 0) { + return '0'; + } else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) { + return tickValue.toExponential(); + } + return ''; + } + } +}; + +var valueOrDefault$9 = helpers$1.valueOrDefault; +var valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault; + +core_defaults._set('scale', { + display: true, + position: 'left', + offset: false, + + // grid line settings + gridLines: { + display: true, + color: 'rgba(0, 0, 0, 0.1)', + lineWidth: 1, + drawBorder: true, + drawOnChartArea: true, + drawTicks: true, + tickMarkLength: 10, + zeroLineWidth: 1, + zeroLineColor: 'rgba(0,0,0,0.25)', + zeroLineBorderDash: [], + zeroLineBorderDashOffset: 0.0, + offsetGridLines: false, + borderDash: [], + borderDashOffset: 0.0 + }, + + // scale label + scaleLabel: { + // display property + display: false, + + // actual label + labelString: '', + + // top/bottom padding + padding: { + top: 4, + bottom: 4 + } + }, + + // label settings + ticks: { + beginAtZero: false, + minRotation: 0, + maxRotation: 50, + mirror: false, + padding: 0, + reverse: false, + display: true, + autoSkip: true, + autoSkipPadding: 0, + labelOffset: 0, + // We pass through arrays to be rendered as multiline labels, we convert Others to strings here. + callback: core_ticks.formatters.values, + minor: {}, + major: {} + } +}); + +function labelsFromTicks(ticks) { + var labels = []; + var i, ilen; + + for (i = 0, ilen = ticks.length; i < ilen; ++i) { + labels.push(ticks[i].label); + } + + return labels; +} + +function getPixelForGridLine(scale, index, offsetGridLines) { + var lineValue = scale.getPixelForTick(index); + + if (offsetGridLines) { + if (scale.getTicks().length === 1) { + lineValue -= scale.isHorizontal() ? + Math.max(lineValue - scale.left, scale.right - lineValue) : + Math.max(lineValue - scale.top, scale.bottom - lineValue); + } else if (index === 0) { + lineValue -= (scale.getPixelForTick(1) - lineValue) / 2; + } else { + lineValue -= (lineValue - scale.getPixelForTick(index - 1)) / 2; + } + } + return lineValue; +} + +function computeTextSize(context, tick, font) { + return helpers$1.isArray(tick) ? + helpers$1.longestText(context, font, tick) : + context.measureText(tick).width; +} + +var core_scale = core_element.extend({ + /** + * Get the padding needed for the scale + * @method getPadding + * @private + * @returns {Padding} the necessary padding + */ + getPadding: function() { + var me = this; + return { + left: me.paddingLeft || 0, + top: me.paddingTop || 0, + right: me.paddingRight || 0, + bottom: me.paddingBottom || 0 + }; + }, + + /** + * Returns the scale tick objects ({label, major}) + * @since 2.7 + */ + getTicks: function() { + return this._ticks; + }, + + // These methods are ordered by lifecyle. Utilities then follow. + // Any function defined here is inherited by all scale types. + // Any function can be extended by the scale type + + mergeTicksOptions: function() { + var ticks = this.options.ticks; + if (ticks.minor === false) { + ticks.minor = { + display: false + }; + } + if (ticks.major === false) { + ticks.major = { + display: false + }; + } + for (var key in ticks) { + if (key !== 'major' && key !== 'minor') { + if (typeof ticks.minor[key] === 'undefined') { + ticks.minor[key] = ticks[key]; + } + if (typeof ticks.major[key] === 'undefined') { + ticks.major[key] = ticks[key]; + } + } + } + }, + beforeUpdate: function() { + helpers$1.callback(this.options.beforeUpdate, [this]); + }, + + update: function(maxWidth, maxHeight, margins) { + var me = this; + var i, ilen, labels, label, ticks, tick; + + // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;) + me.beforeUpdate(); + + // Absorb the master measurements + me.maxWidth = maxWidth; + me.maxHeight = maxHeight; + me.margins = helpers$1.extend({ + left: 0, + right: 0, + top: 0, + bottom: 0 + }, margins); + + me._maxLabelLines = 0; + me.longestLabelWidth = 0; + me.longestTextCache = me.longestTextCache || {}; + + // Dimensions + me.beforeSetDimensions(); + me.setDimensions(); + me.afterSetDimensions(); + + // Data min/max + me.beforeDataLimits(); + me.determineDataLimits(); + me.afterDataLimits(); + + // Ticks - `this.ticks` is now DEPRECATED! + // Internal ticks are now stored as objects in the PRIVATE `this._ticks` member + // and must not be accessed directly from outside this class. `this.ticks` being + // around for long time and not marked as private, we can't change its structure + // without unexpected breaking changes. If you need to access the scale ticks, + // use scale.getTicks() instead. + + me.beforeBuildTicks(); + + // New implementations should return an array of objects but for BACKWARD COMPAT, + // we still support no return (`this.ticks` internally set by calling this method). + ticks = me.buildTicks() || []; + + // Allow modification of ticks in callback. + ticks = me.afterBuildTicks(ticks) || ticks; + + me.beforeTickToLabelConversion(); + + // New implementations should return the formatted tick labels but for BACKWARD + // COMPAT, we still support no return (`this.ticks` internally changed by calling + // this method and supposed to contain only string values). + labels = me.convertTicksToLabels(ticks) || me.ticks; + + me.afterTickToLabelConversion(); + + me.ticks = labels; // BACKWARD COMPATIBILITY + + // IMPORTANT: from this point, we consider that `this.ticks` will NEVER change! + + // BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`) + for (i = 0, ilen = labels.length; i < ilen; ++i) { + label = labels[i]; + tick = ticks[i]; + if (!tick) { + ticks.push(tick = { + label: label, + major: false + }); + } else { + tick.label = label; + } + } + + me._ticks = ticks; + + // Tick Rotation + me.beforeCalculateTickRotation(); + me.calculateTickRotation(); + me.afterCalculateTickRotation(); + // Fit + me.beforeFit(); + me.fit(); + me.afterFit(); + // + me.afterUpdate(); + + return me.minSize; + + }, + afterUpdate: function() { + helpers$1.callback(this.options.afterUpdate, [this]); + }, + + // + + beforeSetDimensions: function() { + helpers$1.callback(this.options.beforeSetDimensions, [this]); + }, + setDimensions: function() { + var me = this; + // Set the unconstrained dimension before label rotation + if (me.isHorizontal()) { + // Reset position before calculating rotation + me.width = me.maxWidth; + me.left = 0; + me.right = me.width; + } else { + me.height = me.maxHeight; + + // Reset position before calculating rotation + me.top = 0; + me.bottom = me.height; + } + + // Reset padding + me.paddingLeft = 0; + me.paddingTop = 0; + me.paddingRight = 0; + me.paddingBottom = 0; + }, + afterSetDimensions: function() { + helpers$1.callback(this.options.afterSetDimensions, [this]); + }, + + // Data limits + beforeDataLimits: function() { + helpers$1.callback(this.options.beforeDataLimits, [this]); + }, + determineDataLimits: helpers$1.noop, + afterDataLimits: function() { + helpers$1.callback(this.options.afterDataLimits, [this]); + }, + + // + beforeBuildTicks: function() { + helpers$1.callback(this.options.beforeBuildTicks, [this]); + }, + buildTicks: helpers$1.noop, + afterBuildTicks: function(ticks) { + var me = this; + // ticks is empty for old axis implementations here + if (helpers$1.isArray(ticks) && ticks.length) { + return helpers$1.callback(me.options.afterBuildTicks, [me, ticks]); + } + // Support old implementations (that modified `this.ticks` directly in buildTicks) + me.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks; + return ticks; + }, + + beforeTickToLabelConversion: function() { + helpers$1.callback(this.options.beforeTickToLabelConversion, [this]); + }, + convertTicksToLabels: function() { + var me = this; + // Convert ticks to strings + var tickOpts = me.options.ticks; + me.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this); + }, + afterTickToLabelConversion: function() { + helpers$1.callback(this.options.afterTickToLabelConversion, [this]); + }, + + // + + beforeCalculateTickRotation: function() { + helpers$1.callback(this.options.beforeCalculateTickRotation, [this]); + }, + calculateTickRotation: function() { + var me = this; + var context = me.ctx; + var tickOpts = me.options.ticks; + var labels = labelsFromTicks(me._ticks); + + // Get the width of each grid by calculating the difference + // between x offsets between 0 and 1. + var tickFont = helpers$1.options._parseFont(tickOpts); + context.font = tickFont.string; + + var labelRotation = tickOpts.minRotation || 0; + + if (labels.length && me.options.display && me.isHorizontal()) { + var originalLabelWidth = helpers$1.longestText(context, tickFont.string, labels, me.longestTextCache); + var labelWidth = originalLabelWidth; + var cosRotation, sinRotation; + + // Allow 3 pixels x2 padding either side for label readability + var tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6; + + // Max label rotation can be set or default to 90 - also act as a loop counter + while (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) { + var angleRadians = helpers$1.toRadians(labelRotation); + cosRotation = Math.cos(angleRadians); + sinRotation = Math.sin(angleRadians); + + if (sinRotation * originalLabelWidth > me.maxHeight) { + // go back one step + labelRotation--; + break; + } + + labelRotation++; + labelWidth = cosRotation * originalLabelWidth; + } + } + + me.labelRotation = labelRotation; + }, + afterCalculateTickRotation: function() { + helpers$1.callback(this.options.afterCalculateTickRotation, [this]); + }, + + // + + beforeFit: function() { + helpers$1.callback(this.options.beforeFit, [this]); + }, + fit: function() { + var me = this; + // Reset + var minSize = me.minSize = { + width: 0, + height: 0 + }; + + var labels = labelsFromTicks(me._ticks); + + var opts = me.options; + var tickOpts = opts.ticks; + var scaleLabelOpts = opts.scaleLabel; + var gridLineOpts = opts.gridLines; + var display = me._isVisible(); + var position = opts.position; + var isHorizontal = me.isHorizontal(); + + var parseFont = helpers$1.options._parseFont; + var tickFont = parseFont(tickOpts); + var tickMarkLength = opts.gridLines.tickMarkLength; + + // Width + if (isHorizontal) { + // subtract the margins to line up with the chartArea if we are a full width scale + minSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth; + } else { + minSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0; + } + + // height + if (isHorizontal) { + minSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0; + } else { + minSize.height = me.maxHeight; // fill all the height + } + + // Are we showing a title for the scale? + if (scaleLabelOpts.display && display) { + var scaleLabelFont = parseFont(scaleLabelOpts); + var scaleLabelPadding = helpers$1.options.toPadding(scaleLabelOpts.padding); + var deltaHeight = scaleLabelFont.lineHeight + scaleLabelPadding.height; + + if (isHorizontal) { + minSize.height += deltaHeight; + } else { + minSize.width += deltaHeight; + } + } + + // Don't bother fitting the ticks if we are not showing the labels + if (tickOpts.display && display) { + var largestTextWidth = helpers$1.longestText(me.ctx, tickFont.string, labels, me.longestTextCache); + var tallestLabelHeightInLines = helpers$1.numberOfLabelLines(labels); + var lineSpace = tickFont.size * 0.5; + var tickPadding = me.options.ticks.padding; + + // Store max number of lines and widest label for _autoSkip + me._maxLabelLines = tallestLabelHeightInLines; + me.longestLabelWidth = largestTextWidth; + + if (isHorizontal) { + var angleRadians = helpers$1.toRadians(me.labelRotation); + var cosRotation = Math.cos(angleRadians); + var sinRotation = Math.sin(angleRadians); + + // TODO - improve this calculation + var labelHeight = (sinRotation * largestTextWidth) + + (tickFont.lineHeight * tallestLabelHeightInLines) + + lineSpace; // padding + + minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding); + + me.ctx.font = tickFont.string; + var firstLabelWidth = computeTextSize(me.ctx, labels[0], tickFont.string); + var lastLabelWidth = computeTextSize(me.ctx, labels[labels.length - 1], tickFont.string); + var offsetLeft = me.getPixelForTick(0) - me.left; + var offsetRight = me.right - me.getPixelForTick(labels.length - 1); + var paddingLeft, paddingRight; + + // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned + // which means that the right padding is dominated by the font height + if (me.labelRotation !== 0) { + paddingLeft = position === 'bottom' ? (cosRotation * firstLabelWidth) : (cosRotation * lineSpace); + paddingRight = position === 'bottom' ? (cosRotation * lineSpace) : (cosRotation * lastLabelWidth); + } else { + paddingLeft = firstLabelWidth / 2; + paddingRight = lastLabelWidth / 2; + } + me.paddingLeft = Math.max(paddingLeft - offsetLeft, 0) + 3; // add 3 px to move away from canvas edges + me.paddingRight = Math.max(paddingRight - offsetRight, 0) + 3; + } else { + // A vertical axis is more constrained by the width. Labels are the + // dominant factor here, so get that length first and account for padding + if (tickOpts.mirror) { + largestTextWidth = 0; + } else { + // use lineSpace for consistency with horizontal axis + // tickPadding is not implemented for horizontal + largestTextWidth += tickPadding + lineSpace; + } + + minSize.width = Math.min(me.maxWidth, minSize.width + largestTextWidth); + + me.paddingTop = tickFont.size / 2; + me.paddingBottom = tickFont.size / 2; + } + } + + me.handleMargins(); + + me.width = minSize.width; + me.height = minSize.height; + }, + + /** + * Handle margins and padding interactions + * @private + */ + handleMargins: function() { + var me = this; + if (me.margins) { + me.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0); + me.paddingTop = Math.max(me.paddingTop - me.margins.top, 0); + me.paddingRight = Math.max(me.paddingRight - me.margins.right, 0); + me.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0); + } + }, + + afterFit: function() { + helpers$1.callback(this.options.afterFit, [this]); + }, + + // Shared Methods + isHorizontal: function() { + return this.options.position === 'top' || this.options.position === 'bottom'; + }, + isFullWidth: function() { + return (this.options.fullWidth); + }, + + // Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not + getRightValue: function(rawValue) { + // Null and undefined values first + if (helpers$1.isNullOrUndef(rawValue)) { + return NaN; + } + // isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values + if ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) { + return NaN; + } + // If it is in fact an object, dive in one more level + if (rawValue) { + if (this.isHorizontal()) { + if (rawValue.x !== undefined) { + return this.getRightValue(rawValue.x); + } + } else if (rawValue.y !== undefined) { + return this.getRightValue(rawValue.y); + } + } + + // Value is good, return it + return rawValue; + }, + + /** + * Used to get the value to display in the tooltip for the data at the given index + * @param index + * @param datasetIndex + */ + getLabelForIndex: helpers$1.noop, + + /** + * Returns the location of the given data point. Value can either be an index or a numerical value + * The coordinate (0, 0) is at the upper-left corner of the canvas + * @param value + * @param index + * @param datasetIndex + */ + getPixelForValue: helpers$1.noop, + + /** + * Used to get the data value from a given pixel. This is the inverse of getPixelForValue + * The coordinate (0, 0) is at the upper-left corner of the canvas + * @param pixel + */ + getValueForPixel: helpers$1.noop, + + /** + * Returns the location of the tick at the given index + * The coordinate (0, 0) is at the upper-left corner of the canvas + */ + getPixelForTick: function(index) { + var me = this; + var offset = me.options.offset; + if (me.isHorizontal()) { + var innerWidth = me.width - (me.paddingLeft + me.paddingRight); + var tickWidth = innerWidth / Math.max((me._ticks.length - (offset ? 0 : 1)), 1); + var pixel = (tickWidth * index) + me.paddingLeft; + + if (offset) { + pixel += tickWidth / 2; + } + + var finalVal = me.left + pixel; + finalVal += me.isFullWidth() ? me.margins.left : 0; + return finalVal; + } + var innerHeight = me.height - (me.paddingTop + me.paddingBottom); + return me.top + (index * (innerHeight / (me._ticks.length - 1))); + }, + + /** + * Utility for getting the pixel location of a percentage of scale + * The coordinate (0, 0) is at the upper-left corner of the canvas + */ + getPixelForDecimal: function(decimal) { + var me = this; + if (me.isHorizontal()) { + var innerWidth = me.width - (me.paddingLeft + me.paddingRight); + var valueOffset = (innerWidth * decimal) + me.paddingLeft; + + var finalVal = me.left + valueOffset; + finalVal += me.isFullWidth() ? me.margins.left : 0; + return finalVal; + } + return me.top + (decimal * me.height); + }, + + /** + * Returns the pixel for the minimum chart value + * The coordinate (0, 0) is at the upper-left corner of the canvas + */ + getBasePixel: function() { + return this.getPixelForValue(this.getBaseValue()); + }, + + getBaseValue: function() { + var me = this; + var min = me.min; + var max = me.max; + + return me.beginAtZero ? 0 : + min < 0 && max < 0 ? max : + min > 0 && max > 0 ? min : + 0; + }, + + /** + * Returns a subset of ticks to be plotted to avoid overlapping labels. + * @private + */ + _autoSkip: function(ticks) { + var me = this; + var isHorizontal = me.isHorizontal(); + var optionTicks = me.options.ticks.minor; + var tickCount = ticks.length; + var skipRatio = false; + var maxTicks = optionTicks.maxTicksLimit; + + // Total space needed to display all ticks. First and last ticks are + // drawn as their center at end of axis, so tickCount-1 + var ticksLength = me._tickSize() * (tickCount - 1); + + // Axis length + var axisLength = isHorizontal + ? me.width - (me.paddingLeft + me.paddingRight) + : me.height - (me.paddingTop + me.PaddingBottom); + + var result = []; + var i, tick; + + if (ticksLength > axisLength) { + skipRatio = 1 + Math.floor(ticksLength / axisLength); + } + + // if they defined a max number of optionTicks, + // increase skipRatio until that number is met + if (tickCount > maxTicks) { + skipRatio = Math.max(skipRatio, 1 + Math.floor(tickCount / maxTicks)); + } + + for (i = 0; i < tickCount; i++) { + tick = ticks[i]; + + if (skipRatio > 1 && i % skipRatio > 0) { + // leave tick in place but make sure it's not displayed (#4635) + delete tick.label; + } + result.push(tick); + } + return result; + }, + + /** + * @private + */ + _tickSize: function() { + var me = this; + var isHorizontal = me.isHorizontal(); + var optionTicks = me.options.ticks.minor; + + // Calculate space needed by label in axis direction. + var rot = helpers$1.toRadians(me.labelRotation); + var cos = Math.abs(Math.cos(rot)); + var sin = Math.abs(Math.sin(rot)); + + var padding = optionTicks.autoSkipPadding || 0; + var w = (me.longestLabelWidth + padding) || 0; + + var tickFont = helpers$1.options._parseFont(optionTicks); + var h = (me._maxLabelLines * tickFont.lineHeight + padding) || 0; + + // Calculate space needed for 1 tick in axis direction. + return isHorizontal + ? h * cos > w * sin ? w / cos : h / sin + : h * sin < w * cos ? h / cos : w / sin; + }, + + /** + * @private + */ + _isVisible: function() { + var me = this; + var chart = me.chart; + var display = me.options.display; + var i, ilen, meta; + + if (display !== 'auto') { + return !!display; + } + + // When 'auto', the scale is visible if at least one associated dataset is visible. + for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) { + if (chart.isDatasetVisible(i)) { + meta = chart.getDatasetMeta(i); + if (meta.xAxisID === me.id || meta.yAxisID === me.id) { + return true; + } + } + } + + return false; + }, + + /** + * Actually draw the scale on the canvas + * @param {object} chartArea - the area of the chart to draw full grid lines on + */ + draw: function(chartArea) { + var me = this; + var options = me.options; + + if (!me._isVisible()) { + return; + } + + var chart = me.chart; + var context = me.ctx; + var globalDefaults = core_defaults.global; + var defaultFontColor = globalDefaults.defaultFontColor; + var optionTicks = options.ticks.minor; + var optionMajorTicks = options.ticks.major || optionTicks; + var gridLines = options.gridLines; + var scaleLabel = options.scaleLabel; + var position = options.position; + + var isRotated = me.labelRotation !== 0; + var isMirrored = optionTicks.mirror; + var isHorizontal = me.isHorizontal(); + + var parseFont = helpers$1.options._parseFont; + var ticks = optionTicks.display && optionTicks.autoSkip ? me._autoSkip(me.getTicks()) : me.getTicks(); + var tickFontColor = valueOrDefault$9(optionTicks.fontColor, defaultFontColor); + var tickFont = parseFont(optionTicks); + var lineHeight = tickFont.lineHeight; + var majorTickFontColor = valueOrDefault$9(optionMajorTicks.fontColor, defaultFontColor); + var majorTickFont = parseFont(optionMajorTicks); + var tickPadding = optionTicks.padding; + var labelOffset = optionTicks.labelOffset; + + var tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0; + + var scaleLabelFontColor = valueOrDefault$9(scaleLabel.fontColor, defaultFontColor); + var scaleLabelFont = parseFont(scaleLabel); + var scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding); + var labelRotationRadians = helpers$1.toRadians(me.labelRotation); + + var itemsToDraw = []; + + var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0; + var alignPixel = helpers$1._alignPixel; + var borderValue, tickStart, tickEnd; + + if (position === 'top') { + borderValue = alignPixel(chart, me.bottom, axisWidth); + tickStart = me.bottom - tl; + tickEnd = borderValue - axisWidth / 2; + } else if (position === 'bottom') { + borderValue = alignPixel(chart, me.top, axisWidth); + tickStart = borderValue + axisWidth / 2; + tickEnd = me.top + tl; + } else if (position === 'left') { + borderValue = alignPixel(chart, me.right, axisWidth); + tickStart = me.right - tl; + tickEnd = borderValue - axisWidth / 2; + } else { + borderValue = alignPixel(chart, me.left, axisWidth); + tickStart = borderValue + axisWidth / 2; + tickEnd = me.left + tl; + } + + var epsilon = 0.0000001; // 0.0000001 is margin in pixels for Accumulated error. + + helpers$1.each(ticks, function(tick, index) { + // autoskipper skipped this tick (#4635) + if (helpers$1.isNullOrUndef(tick.label)) { + return; + } + + var label = tick.label; + var lineWidth, lineColor, borderDash, borderDashOffset; + if (index === me.zeroLineIndex && options.offset === gridLines.offsetGridLines) { + // Draw the first index specially + lineWidth = gridLines.zeroLineWidth; + lineColor = gridLines.zeroLineColor; + borderDash = gridLines.zeroLineBorderDash || []; + borderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0; + } else { + lineWidth = valueAtIndexOrDefault(gridLines.lineWidth, index); + lineColor = valueAtIndexOrDefault(gridLines.color, index); + borderDash = gridLines.borderDash || []; + borderDashOffset = gridLines.borderDashOffset || 0.0; + } + + // Common properties + var tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY, textOffset, textAlign; + var labelCount = helpers$1.isArray(label) ? label.length : 1; + var lineValue = getPixelForGridLine(me, index, gridLines.offsetGridLines); + + if (isHorizontal) { + var labelYOffset = tl + tickPadding; + + if (lineValue < me.left - epsilon) { + lineColor = 'rgba(0,0,0,0)'; + } + + tx1 = tx2 = x1 = x2 = alignPixel(chart, lineValue, lineWidth); + ty1 = tickStart; + ty2 = tickEnd; + labelX = me.getPixelForTick(index) + labelOffset; // x values for optionTicks (need to consider offsetLabel option) + + if (position === 'top') { + y1 = alignPixel(chart, chartArea.top, axisWidth) + axisWidth / 2; + y2 = chartArea.bottom; + textOffset = ((!isRotated ? 0.5 : 1) - labelCount) * lineHeight; + textAlign = !isRotated ? 'center' : 'left'; + labelY = me.bottom - labelYOffset; + } else { + y1 = chartArea.top; + y2 = alignPixel(chart, chartArea.bottom, axisWidth) - axisWidth / 2; + textOffset = (!isRotated ? 0.5 : 0) * lineHeight; + textAlign = !isRotated ? 'center' : 'right'; + labelY = me.top + labelYOffset; + } + } else { + var labelXOffset = (isMirrored ? 0 : tl) + tickPadding; + + if (lineValue < me.top - epsilon) { + lineColor = 'rgba(0,0,0,0)'; + } + + tx1 = tickStart; + tx2 = tickEnd; + ty1 = ty2 = y1 = y2 = alignPixel(chart, lineValue, lineWidth); + labelY = me.getPixelForTick(index) + labelOffset; + textOffset = (1 - labelCount) * lineHeight / 2; + + if (position === 'left') { + x1 = alignPixel(chart, chartArea.left, axisWidth) + axisWidth / 2; + x2 = chartArea.right; + textAlign = isMirrored ? 'left' : 'right'; + labelX = me.right - labelXOffset; + } else { + x1 = chartArea.left; + x2 = alignPixel(chart, chartArea.right, axisWidth) - axisWidth / 2; + textAlign = isMirrored ? 'right' : 'left'; + labelX = me.left + labelXOffset; + } + } + + itemsToDraw.push({ + tx1: tx1, + ty1: ty1, + tx2: tx2, + ty2: ty2, + x1: x1, + y1: y1, + x2: x2, + y2: y2, + labelX: labelX, + labelY: labelY, + glWidth: lineWidth, + glColor: lineColor, + glBorderDash: borderDash, + glBorderDashOffset: borderDashOffset, + rotation: -1 * labelRotationRadians, + label: label, + major: tick.major, + textOffset: textOffset, + textAlign: textAlign + }); + }); + + // Draw all of the tick labels, tick marks, and grid lines at the correct places + helpers$1.each(itemsToDraw, function(itemToDraw) { + var glWidth = itemToDraw.glWidth; + var glColor = itemToDraw.glColor; + + if (gridLines.display && glWidth && glColor) { + context.save(); + context.lineWidth = glWidth; + context.strokeStyle = glColor; + if (context.setLineDash) { + context.setLineDash(itemToDraw.glBorderDash); + context.lineDashOffset = itemToDraw.glBorderDashOffset; + } + + context.beginPath(); + + if (gridLines.drawTicks) { + context.moveTo(itemToDraw.tx1, itemToDraw.ty1); + context.lineTo(itemToDraw.tx2, itemToDraw.ty2); + } + + if (gridLines.drawOnChartArea) { + context.moveTo(itemToDraw.x1, itemToDraw.y1); + context.lineTo(itemToDraw.x2, itemToDraw.y2); + } + + context.stroke(); + context.restore(); + } + + if (optionTicks.display) { + // Make sure we draw text in the correct color and font + context.save(); + context.translate(itemToDraw.labelX, itemToDraw.labelY); + context.rotate(itemToDraw.rotation); + context.font = itemToDraw.major ? majorTickFont.string : tickFont.string; + context.fillStyle = itemToDraw.major ? majorTickFontColor : tickFontColor; + context.textBaseline = 'middle'; + context.textAlign = itemToDraw.textAlign; + + var label = itemToDraw.label; + var y = itemToDraw.textOffset; + if (helpers$1.isArray(label)) { + for (var i = 0; i < label.length; ++i) { + // We just make sure the multiline element is a string here.. + context.fillText('' + label[i], 0, y); + y += lineHeight; + } + } else { + context.fillText(label, 0, y); + } + context.restore(); + } + }); + + if (scaleLabel.display) { + // Draw the scale label + var scaleLabelX; + var scaleLabelY; + var rotation = 0; + var halfLineHeight = scaleLabelFont.lineHeight / 2; + + if (isHorizontal) { + scaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width + scaleLabelY = position === 'bottom' + ? me.bottom - halfLineHeight - scaleLabelPadding.bottom + : me.top + halfLineHeight + scaleLabelPadding.top; + } else { + var isLeft = position === 'left'; + scaleLabelX = isLeft + ? me.left + halfLineHeight + scaleLabelPadding.top + : me.right - halfLineHeight - scaleLabelPadding.top; + scaleLabelY = me.top + ((me.bottom - me.top) / 2); + rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI; + } + + context.save(); + context.translate(scaleLabelX, scaleLabelY); + context.rotate(rotation); + context.textAlign = 'center'; + context.textBaseline = 'middle'; + context.fillStyle = scaleLabelFontColor; // render in correct colour + context.font = scaleLabelFont.string; + context.fillText(scaleLabel.labelString, 0, 0); + context.restore(); + } + + if (axisWidth) { + // Draw the line at the edge of the axis + var firstLineWidth = axisWidth; + var lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, ticks.length - 1, 0); + var x1, x2, y1, y2; + + if (isHorizontal) { + x1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2; + x2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2; + y1 = y2 = borderValue; + } else { + y1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2; + y2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2; + x1 = x2 = borderValue; + } + + context.lineWidth = axisWidth; + context.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0); + context.beginPath(); + context.moveTo(x1, y1); + context.lineTo(x2, y2); + context.stroke(); + } + } +}); + +var defaultConfig = { + position: 'bottom' +}; + +var scale_category = core_scale.extend({ + /** + * Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those + * else fall back to data.labels + * @private + */ + getLabels: function() { + var data = this.chart.data; + return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels; + }, + + determineDataLimits: function() { + var me = this; + var labels = me.getLabels(); + me.minIndex = 0; + me.maxIndex = labels.length - 1; + var findIndex; + + if (me.options.ticks.min !== undefined) { + // user specified min value + findIndex = labels.indexOf(me.options.ticks.min); + me.minIndex = findIndex !== -1 ? findIndex : me.minIndex; + } + + if (me.options.ticks.max !== undefined) { + // user specified max value + findIndex = labels.indexOf(me.options.ticks.max); + me.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex; + } + + me.min = labels[me.minIndex]; + me.max = labels[me.maxIndex]; + }, + + buildTicks: function() { + var me = this; + var labels = me.getLabels(); + // If we are viewing some subset of labels, slice the original array + me.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1); + }, + + getLabelForIndex: function(index, datasetIndex) { + var me = this; + var chart = me.chart; + + if (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) { + return me.getRightValue(chart.data.datasets[datasetIndex].data[index]); + } + + return me.ticks[index - me.minIndex]; + }, + + // Used to get data value locations. Value can either be an index or a numerical value + getPixelForValue: function(value, index) { + var me = this; + var offset = me.options.offset; + // 1 is added because we need the length but we have the indexes + var offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - (offset ? 0 : 1)), 1); + + // If value is a data object, then index is the index in the data array, + // not the index of the scale. We need to change that. + var valueCategory; + if (value !== undefined && value !== null) { + valueCategory = me.isHorizontal() ? value.x : value.y; + } + if (valueCategory !== undefined || (value !== undefined && isNaN(index))) { + var labels = me.getLabels(); + value = valueCategory || value; + var idx = labels.indexOf(value); + index = idx !== -1 ? idx : index; + } + + if (me.isHorizontal()) { + var valueWidth = me.width / offsetAmt; + var widthOffset = (valueWidth * (index - me.minIndex)); + + if (offset) { + widthOffset += (valueWidth / 2); + } + + return me.left + widthOffset; + } + var valueHeight = me.height / offsetAmt; + var heightOffset = (valueHeight * (index - me.minIndex)); + + if (offset) { + heightOffset += (valueHeight / 2); + } + + return me.top + heightOffset; + }, + + getPixelForTick: function(index) { + return this.getPixelForValue(this.ticks[index], index + this.minIndex, null); + }, + + getValueForPixel: function(pixel) { + var me = this; + var offset = me.options.offset; + var value; + var offsetAmt = Math.max((me._ticks.length - (offset ? 0 : 1)), 1); + var horz = me.isHorizontal(); + var valueDimension = (horz ? me.width : me.height) / offsetAmt; + + pixel -= horz ? me.left : me.top; + + if (offset) { + pixel -= (valueDimension / 2); + } + + if (pixel <= 0) { + value = 0; + } else { + value = Math.round(pixel / valueDimension); + } + + return value + me.minIndex; + }, + + getBasePixel: function() { + return this.bottom; + } +}); + +// INTERNAL: static default options, registered in src/index.js +var _defaults = defaultConfig; +scale_category._defaults = _defaults; + +var noop = helpers$1.noop; +var isNullOrUndef = helpers$1.isNullOrUndef; + +/** + * Generate a set of linear ticks + * @param generationOptions the options used to generate the ticks + * @param dataRange the range of the data + * @returns {number[]} array of tick values + */ +function generateTicks(generationOptions, dataRange) { + var ticks = []; + // To get a "nice" value for the tick spacing, we will use the appropriately named + // "nice number" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks + // for details. + + var MIN_SPACING = 1e-14; + var stepSize = generationOptions.stepSize; + var unit = stepSize || 1; + var maxNumSpaces = generationOptions.maxTicks - 1; + var min = generationOptions.min; + var max = generationOptions.max; + var precision = generationOptions.precision; + var rmin = dataRange.min; + var rmax = dataRange.max; + var spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit; + var factor, niceMin, niceMax, numSpaces; + + // Beyond MIN_SPACING floating point numbers being to lose precision + // such that we can't do the math necessary to generate ticks + if (spacing < MIN_SPACING && isNullOrUndef(min) && isNullOrUndef(max)) { + return [rmin, rmax]; + } + + numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing); + if (numSpaces > maxNumSpaces) { + // If the calculated num of spaces exceeds maxNumSpaces, recalculate it + spacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit; + } + + if (stepSize || isNullOrUndef(precision)) { + // If a precision is not specified, calculate factor based on spacing + factor = Math.pow(10, helpers$1._decimalPlaces(spacing)); + } else { + // If the user specified a precision, round to that number of decimal places + factor = Math.pow(10, precision); + spacing = Math.ceil(spacing * factor) / factor; + } + + niceMin = Math.floor(rmin / spacing) * spacing; + niceMax = Math.ceil(rmax / spacing) * spacing; + + // If min, max and stepSize is set and they make an evenly spaced scale use it. + if (stepSize) { + // If very close to our whole number, use it. + if (!isNullOrUndef(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) { + niceMin = min; + } + if (!isNullOrUndef(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) { + niceMax = max; + } + } + + numSpaces = (niceMax - niceMin) / spacing; + // If very close to our rounded value, use it. + if (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) { + numSpaces = Math.round(numSpaces); + } else { + numSpaces = Math.ceil(numSpaces); + } + + niceMin = Math.round(niceMin * factor) / factor; + niceMax = Math.round(niceMax * factor) / factor; + ticks.push(isNullOrUndef(min) ? niceMin : min); + for (var j = 1; j < numSpaces; ++j) { + ticks.push(Math.round((niceMin + j * spacing) * factor) / factor); + } + ticks.push(isNullOrUndef(max) ? niceMax : max); + + return ticks; +} + +var scale_linearbase = core_scale.extend({ + getRightValue: function(value) { + if (typeof value === 'string') { + return +value; + } + return core_scale.prototype.getRightValue.call(this, value); + }, + + handleTickRangeOptions: function() { + var me = this; + var opts = me.options; + var tickOpts = opts.ticks; + + // If we are forcing it to begin at 0, but 0 will already be rendered on the chart, + // do nothing since that would make the chart weird. If the user really wants a weird chart + // axis, they can manually override it + if (tickOpts.beginAtZero) { + var minSign = helpers$1.sign(me.min); + var maxSign = helpers$1.sign(me.max); + + if (minSign < 0 && maxSign < 0) { + // move the top up to 0 + me.max = 0; + } else if (minSign > 0 && maxSign > 0) { + // move the bottom down to 0 + me.min = 0; + } + } + + var setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined; + var setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined; + + if (tickOpts.min !== undefined) { + me.min = tickOpts.min; + } else if (tickOpts.suggestedMin !== undefined) { + if (me.min === null) { + me.min = tickOpts.suggestedMin; + } else { + me.min = Math.min(me.min, tickOpts.suggestedMin); + } + } + + if (tickOpts.max !== undefined) { + me.max = tickOpts.max; + } else if (tickOpts.suggestedMax !== undefined) { + if (me.max === null) { + me.max = tickOpts.suggestedMax; + } else { + me.max = Math.max(me.max, tickOpts.suggestedMax); + } + } + + if (setMin !== setMax) { + // We set the min or the max but not both. + // So ensure that our range is good + // Inverted or 0 length range can happen when + // ticks.min is set, and no datasets are visible + if (me.min >= me.max) { + if (setMin) { + me.max = me.min + 1; + } else { + me.min = me.max - 1; + } + } + } + + if (me.min === me.max) { + me.max++; + + if (!tickOpts.beginAtZero) { + me.min--; + } + } + }, + + getTickLimit: function() { + var me = this; + var tickOpts = me.options.ticks; + var stepSize = tickOpts.stepSize; + var maxTicksLimit = tickOpts.maxTicksLimit; + var maxTicks; + + if (stepSize) { + maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1; + } else { + maxTicks = me._computeTickLimit(); + maxTicksLimit = maxTicksLimit || 11; + } + + if (maxTicksLimit) { + maxTicks = Math.min(maxTicksLimit, maxTicks); + } + + return maxTicks; + }, + + _computeTickLimit: function() { + return Number.POSITIVE_INFINITY; + }, + + handleDirectionalChanges: noop, + + buildTicks: function() { + var me = this; + var opts = me.options; + var tickOpts = opts.ticks; + + // Figure out what the max number of ticks we can support it is based on the size of + // the axis area. For now, we say that the minimum tick spacing in pixels must be 40 + // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on + // the graph. Make sure we always have at least 2 ticks + var maxTicks = me.getTickLimit(); + maxTicks = Math.max(2, maxTicks); + + var numericGeneratorOptions = { + maxTicks: maxTicks, + min: tickOpts.min, + max: tickOpts.max, + precision: tickOpts.precision, + stepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize) + }; + var ticks = me.ticks = generateTicks(numericGeneratorOptions, me); + + me.handleDirectionalChanges(); + + // At this point, we need to update our max and min given the tick values since we have expanded the + // range of the scale + me.max = helpers$1.max(ticks); + me.min = helpers$1.min(ticks); + + if (tickOpts.reverse) { + ticks.reverse(); + + me.start = me.max; + me.end = me.min; + } else { + me.start = me.min; + me.end = me.max; + } + }, + + convertTicksToLabels: function() { + var me = this; + me.ticksAsNumbers = me.ticks.slice(); + me.zeroLineIndex = me.ticks.indexOf(0); + + core_scale.prototype.convertTicksToLabels.call(me); + } +}); + +var defaultConfig$1 = { + position: 'left', + ticks: { + callback: core_ticks.formatters.linear + } +}; + +var scale_linear = scale_linearbase.extend({ + determineDataLimits: function() { + var me = this; + var opts = me.options; + var chart = me.chart; + var data = chart.data; + var datasets = data.datasets; + var isHorizontal = me.isHorizontal(); + var DEFAULT_MIN = 0; + var DEFAULT_MAX = 1; + + function IDMatches(meta) { + return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id; + } + + // First Calculate the range + me.min = null; + me.max = null; + + var hasStacks = opts.stacked; + if (hasStacks === undefined) { + helpers$1.each(datasets, function(dataset, datasetIndex) { + if (hasStacks) { + return; + } + + var meta = chart.getDatasetMeta(datasetIndex); + if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && + meta.stack !== undefined) { + hasStacks = true; + } + }); + } + + if (opts.stacked || hasStacks) { + var valuesPerStack = {}; + + helpers$1.each(datasets, function(dataset, datasetIndex) { + var meta = chart.getDatasetMeta(datasetIndex); + var key = [ + meta.type, + // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined + ((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''), + meta.stack + ].join('.'); + + if (valuesPerStack[key] === undefined) { + valuesPerStack[key] = { + positiveValues: [], + negativeValues: [] + }; + } + + // Store these per type + var positiveValues = valuesPerStack[key].positiveValues; + var negativeValues = valuesPerStack[key].negativeValues; + + if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) { + helpers$1.each(dataset.data, function(rawValue, index) { + var value = +me.getRightValue(rawValue); + if (isNaN(value) || meta.data[index].hidden) { + return; + } + + positiveValues[index] = positiveValues[index] || 0; + negativeValues[index] = negativeValues[index] || 0; + + if (opts.relativePoints) { + positiveValues[index] = 100; + } else if (value < 0) { + negativeValues[index] += value; + } else { + positiveValues[index] += value; + } + }); + } + }); + + helpers$1.each(valuesPerStack, function(valuesForType) { + var values = valuesForType.positiveValues.concat(valuesForType.negativeValues); + var minVal = helpers$1.min(values); + var maxVal = helpers$1.max(values); + me.min = me.min === null ? minVal : Math.min(me.min, minVal); + me.max = me.max === null ? maxVal : Math.max(me.max, maxVal); + }); + + } else { + helpers$1.each(datasets, function(dataset, datasetIndex) { + var meta = chart.getDatasetMeta(datasetIndex); + if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) { + helpers$1.each(dataset.data, function(rawValue, index) { + var value = +me.getRightValue(rawValue); + if (isNaN(value) || meta.data[index].hidden) { + return; + } + + if (me.min === null) { + me.min = value; + } else if (value < me.min) { + me.min = value; + } + + if (me.max === null) { + me.max = value; + } else if (value > me.max) { + me.max = value; + } + }); + } + }); + } + + me.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN; + me.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX; + + // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero + this.handleTickRangeOptions(); + }, + + // Returns the maximum number of ticks based on the scale dimension + _computeTickLimit: function() { + var me = this; + var tickFont; + + if (me.isHorizontal()) { + return Math.ceil(me.width / 40); + } + tickFont = helpers$1.options._parseFont(me.options.ticks); + return Math.ceil(me.height / tickFont.lineHeight); + }, + + // Called after the ticks are built. We need + handleDirectionalChanges: function() { + if (!this.isHorizontal()) { + // We are in a vertical orientation. The top value is the highest. So reverse the array + this.ticks.reverse(); + } + }, + + getLabelForIndex: function(index, datasetIndex) { + return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]); + }, + + // Utils + getPixelForValue: function(value) { + // This must be called after fit has been run so that + // this.left, this.top, this.right, and this.bottom have been defined + var me = this; + var start = me.start; + + var rightValue = +me.getRightValue(value); + var pixel; + var range = me.end - start; + + if (me.isHorizontal()) { + pixel = me.left + (me.width / range * (rightValue - start)); + } else { + pixel = me.bottom - (me.height / range * (rightValue - start)); + } + return pixel; + }, + + getValueForPixel: function(pixel) { + var me = this; + var isHorizontal = me.isHorizontal(); + var innerDimension = isHorizontal ? me.width : me.height; + var offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension; + return me.start + ((me.end - me.start) * offset); + }, + + getPixelForTick: function(index) { + return this.getPixelForValue(this.ticksAsNumbers[index]); + } +}); + +// INTERNAL: static default options, registered in src/index.js +var _defaults$1 = defaultConfig$1; +scale_linear._defaults = _defaults$1; + +var valueOrDefault$a = helpers$1.valueOrDefault; + +/** + * Generate a set of logarithmic ticks + * @param generationOptions the options used to generate the ticks + * @param dataRange the range of the data + * @returns {number[]} array of tick values + */ +function generateTicks$1(generationOptions, dataRange) { + var ticks = []; + + var tickVal = valueOrDefault$a(generationOptions.min, Math.pow(10, Math.floor(helpers$1.log10(dataRange.min)))); + + var endExp = Math.floor(helpers$1.log10(dataRange.max)); + var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp)); + var exp, significand; + + if (tickVal === 0) { + exp = Math.floor(helpers$1.log10(dataRange.minNotZero)); + significand = Math.floor(dataRange.minNotZero / Math.pow(10, exp)); + + ticks.push(tickVal); + tickVal = significand * Math.pow(10, exp); + } else { + exp = Math.floor(helpers$1.log10(tickVal)); + significand = Math.floor(tickVal / Math.pow(10, exp)); + } + var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1; + + do { + ticks.push(tickVal); + + ++significand; + if (significand === 10) { + significand = 1; + ++exp; + precision = exp >= 0 ? 1 : precision; + } + + tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision; + } while (exp < endExp || (exp === endExp && significand < endSignificand)); + + var lastTick = valueOrDefault$a(generationOptions.max, tickVal); + ticks.push(lastTick); + + return ticks; +} + +var defaultConfig$2 = { + position: 'left', + + // label settings + ticks: { + callback: core_ticks.formatters.logarithmic + } +}; + +// TODO(v3): change this to positiveOrDefault +function nonNegativeOrDefault(value, defaultValue) { + return helpers$1.isFinite(value) && value >= 0 ? value : defaultValue; +} + +var scale_logarithmic = core_scale.extend({ + determineDataLimits: function() { + var me = this; + var opts = me.options; + var chart = me.chart; + var data = chart.data; + var datasets = data.datasets; + var isHorizontal = me.isHorizontal(); + function IDMatches(meta) { + return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id; + } + + // Calculate Range + me.min = null; + me.max = null; + me.minNotZero = null; + + var hasStacks = opts.stacked; + if (hasStacks === undefined) { + helpers$1.each(datasets, function(dataset, datasetIndex) { + if (hasStacks) { + return; + } + + var meta = chart.getDatasetMeta(datasetIndex); + if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) && + meta.stack !== undefined) { + hasStacks = true; + } + }); + } + + if (opts.stacked || hasStacks) { + var valuesPerStack = {}; + + helpers$1.each(datasets, function(dataset, datasetIndex) { + var meta = chart.getDatasetMeta(datasetIndex); + var key = [ + meta.type, + // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined + ((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''), + meta.stack + ].join('.'); + + if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) { + if (valuesPerStack[key] === undefined) { + valuesPerStack[key] = []; + } + + helpers$1.each(dataset.data, function(rawValue, index) { + var values = valuesPerStack[key]; + var value = +me.getRightValue(rawValue); + // invalid, hidden and negative values are ignored + if (isNaN(value) || meta.data[index].hidden || value < 0) { + return; + } + values[index] = values[index] || 0; + values[index] += value; + }); + } + }); + + helpers$1.each(valuesPerStack, function(valuesForType) { + if (valuesForType.length > 0) { + var minVal = helpers$1.min(valuesForType); + var maxVal = helpers$1.max(valuesForType); + me.min = me.min === null ? minVal : Math.min(me.min, minVal); + me.max = me.max === null ? maxVal : Math.max(me.max, maxVal); + } + }); + + } else { + helpers$1.each(datasets, function(dataset, datasetIndex) { + var meta = chart.getDatasetMeta(datasetIndex); + if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) { + helpers$1.each(dataset.data, function(rawValue, index) { + var value = +me.getRightValue(rawValue); + // invalid, hidden and negative values are ignored + if (isNaN(value) || meta.data[index].hidden || value < 0) { + return; + } + + if (me.min === null) { + me.min = value; + } else if (value < me.min) { + me.min = value; + } + + if (me.max === null) { + me.max = value; + } else if (value > me.max) { + me.max = value; + } + + if (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) { + me.minNotZero = value; + } + }); + } + }); + } + + // Common base implementation to handle ticks.min, ticks.max + this.handleTickRangeOptions(); + }, + + handleTickRangeOptions: function() { + var me = this; + var tickOpts = me.options.ticks; + var DEFAULT_MIN = 1; + var DEFAULT_MAX = 10; + + me.min = nonNegativeOrDefault(tickOpts.min, me.min); + me.max = nonNegativeOrDefault(tickOpts.max, me.max); + + if (me.min === me.max) { + if (me.min !== 0 && me.min !== null) { + me.min = Math.pow(10, Math.floor(helpers$1.log10(me.min)) - 1); + me.max = Math.pow(10, Math.floor(helpers$1.log10(me.max)) + 1); + } else { + me.min = DEFAULT_MIN; + me.max = DEFAULT_MAX; + } + } + if (me.min === null) { + me.min = Math.pow(10, Math.floor(helpers$1.log10(me.max)) - 1); + } + if (me.max === null) { + me.max = me.min !== 0 + ? Math.pow(10, Math.floor(helpers$1.log10(me.min)) + 1) + : DEFAULT_MAX; + } + if (me.minNotZero === null) { + if (me.min > 0) { + me.minNotZero = me.min; + } else if (me.max < 1) { + me.minNotZero = Math.pow(10, Math.floor(helpers$1.log10(me.max))); + } else { + me.minNotZero = DEFAULT_MIN; + } + } + }, + + buildTicks: function() { + var me = this; + var tickOpts = me.options.ticks; + var reverse = !me.isHorizontal(); + + var generationOptions = { + min: nonNegativeOrDefault(tickOpts.min), + max: nonNegativeOrDefault(tickOpts.max) + }; + var ticks = me.ticks = generateTicks$1(generationOptions, me); + + // At this point, we need to update our max and min given the tick values since we have expanded the + // range of the scale + me.max = helpers$1.max(ticks); + me.min = helpers$1.min(ticks); + + if (tickOpts.reverse) { + reverse = !reverse; + me.start = me.max; + me.end = me.min; + } else { + me.start = me.min; + me.end = me.max; + } + if (reverse) { + ticks.reverse(); + } + }, + + convertTicksToLabels: function() { + this.tickValues = this.ticks.slice(); + + core_scale.prototype.convertTicksToLabels.call(this); + }, + + // Get the correct tooltip label + getLabelForIndex: function(index, datasetIndex) { + return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]); + }, + + getPixelForTick: function(index) { + return this.getPixelForValue(this.tickValues[index]); + }, + + /** + * Returns the value of the first tick. + * @param {number} value - The minimum not zero value. + * @return {number} The first tick value. + * @private + */ + _getFirstTickValue: function(value) { + var exp = Math.floor(helpers$1.log10(value)); + var significand = Math.floor(value / Math.pow(10, exp)); + + return significand * Math.pow(10, exp); + }, + + getPixelForValue: function(value) { + var me = this; + var tickOpts = me.options.ticks; + var reverse = tickOpts.reverse; + var log10 = helpers$1.log10; + var firstTickValue = me._getFirstTickValue(me.minNotZero); + var offset = 0; + var innerDimension, pixel, start, end, sign; + + value = +me.getRightValue(value); + if (reverse) { + start = me.end; + end = me.start; + sign = -1; + } else { + start = me.start; + end = me.end; + sign = 1; + } + if (me.isHorizontal()) { + innerDimension = me.width; + pixel = reverse ? me.right : me.left; + } else { + innerDimension = me.height; + sign *= -1; // invert, since the upper-left corner of the canvas is at pixel (0, 0) + pixel = reverse ? me.top : me.bottom; + } + if (value !== start) { + if (start === 0) { // include zero tick + offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize); + innerDimension -= offset; + start = firstTickValue; + } + if (value !== 0) { + offset += innerDimension / (log10(end) - log10(start)) * (log10(value) - log10(start)); + } + pixel += sign * offset; + } + return pixel; + }, + + getValueForPixel: function(pixel) { + var me = this; + var tickOpts = me.options.ticks; + var reverse = tickOpts.reverse; + var log10 = helpers$1.log10; + var firstTickValue = me._getFirstTickValue(me.minNotZero); + var innerDimension, start, end, value; + + if (reverse) { + start = me.end; + end = me.start; + } else { + start = me.start; + end = me.end; + } + if (me.isHorizontal()) { + innerDimension = me.width; + value = reverse ? me.right - pixel : pixel - me.left; + } else { + innerDimension = me.height; + value = reverse ? pixel - me.top : me.bottom - pixel; + } + if (value !== start) { + if (start === 0) { // include zero tick + var offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize); + value -= offset; + innerDimension -= offset; + start = firstTickValue; + } + value *= log10(end) - log10(start); + value /= innerDimension; + value = Math.pow(10, log10(start) + value); + } + return value; + } +}); + +// INTERNAL: static default options, registered in src/index.js +var _defaults$2 = defaultConfig$2; +scale_logarithmic._defaults = _defaults$2; + +var valueOrDefault$b = helpers$1.valueOrDefault; +var valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault; +var resolve$7 = helpers$1.options.resolve; + +var defaultConfig$3 = { + display: true, + + // Boolean - Whether to animate scaling the chart from the centre + animate: true, + position: 'chartArea', + + angleLines: { + display: true, + color: 'rgba(0, 0, 0, 0.1)', + lineWidth: 1, + borderDash: [], + borderDashOffset: 0.0 + }, + + gridLines: { + circular: false + }, + + // label settings + ticks: { + // Boolean - Show a backdrop to the scale label + showLabelBackdrop: true, + + // String - The colour of the label backdrop + backdropColor: 'rgba(255,255,255,0.75)', + + // Number - The backdrop padding above & below the label in pixels + backdropPaddingY: 2, + + // Number - The backdrop padding to the side of the label in pixels + backdropPaddingX: 2, + + callback: core_ticks.formatters.linear + }, + + pointLabels: { + // Boolean - if true, show point labels + display: true, + + // Number - Point label font size in pixels + fontSize: 10, + + // Function - Used to convert point labels + callback: function(label) { + return label; + } + } +}; + +function getValueCount(scale) { + var opts = scale.options; + return opts.angleLines.display || opts.pointLabels.display ? scale.chart.data.labels.length : 0; +} + +function getTickBackdropHeight(opts) { + var tickOpts = opts.ticks; + + if (tickOpts.display && opts.display) { + return valueOrDefault$b(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2; + } + return 0; +} + +function measureLabelSize(ctx, lineHeight, label) { + if (helpers$1.isArray(label)) { + return { + w: helpers$1.longestText(ctx, ctx.font, label), + h: label.length * lineHeight + }; + } + + return { + w: ctx.measureText(label).width, + h: lineHeight + }; +} + +function determineLimits(angle, pos, size, min, max) { + if (angle === min || angle === max) { + return { + start: pos - (size / 2), + end: pos + (size / 2) + }; + } else if (angle < min || angle > max) { + return { + start: pos - size, + end: pos + }; + } + + return { + start: pos, + end: pos + size + }; +} + +/** + * Helper function to fit a radial linear scale with point labels + */ +function fitWithPointLabels(scale) { + + // Right, this is really confusing and there is a lot of maths going on here + // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9 + // + // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif + // + // Solution: + // + // We assume the radius of the polygon is half the size of the canvas at first + // at each index we check if the text overlaps. + // + // Where it does, we store that angle and that index. + // + // After finding the largest index and angle we calculate how much we need to remove + // from the shape radius to move the point inwards by that x. + // + // We average the left and right distances to get the maximum shape radius that can fit in the box + // along with labels. + // + // Once we have that, we can find the centre point for the chart, by taking the x text protrusion + // on each side, removing that from the size, halving it and adding the left x protrusion width. + // + // This will mean we have a shape fitted to the canvas, as large as it can be with the labels + // and position it in the most space efficient manner + // + // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif + + var plFont = helpers$1.options._parseFont(scale.options.pointLabels); + + // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width. + // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points + var furthestLimits = { + l: 0, + r: scale.width, + t: 0, + b: scale.height - scale.paddingTop + }; + var furthestAngles = {}; + var i, textSize, pointPosition; + + scale.ctx.font = plFont.string; + scale._pointLabelSizes = []; + + var valueCount = getValueCount(scale); + for (i = 0; i < valueCount; i++) { + pointPosition = scale.getPointPosition(i, scale.drawingArea + 5); + textSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i] || ''); + scale._pointLabelSizes[i] = textSize; + + // Add quarter circle to make degree 0 mean top of circle + var angleRadians = scale.getIndexAngle(i); + var angle = helpers$1.toDegrees(angleRadians) % 360; + var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180); + var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270); + + if (hLimits.start < furthestLimits.l) { + furthestLimits.l = hLimits.start; + furthestAngles.l = angleRadians; + } + + if (hLimits.end > furthestLimits.r) { + furthestLimits.r = hLimits.end; + furthestAngles.r = angleRadians; + } + + if (vLimits.start < furthestLimits.t) { + furthestLimits.t = vLimits.start; + furthestAngles.t = angleRadians; + } + + if (vLimits.end > furthestLimits.b) { + furthestLimits.b = vLimits.end; + furthestAngles.b = angleRadians; + } + } + + scale.setReductions(scale.drawingArea, furthestLimits, furthestAngles); +} + +function getTextAlignForAngle(angle) { + if (angle === 0 || angle === 180) { + return 'center'; + } else if (angle < 180) { + return 'left'; + } + + return 'right'; +} + +function fillText(ctx, text, position, lineHeight) { + var y = position.y + lineHeight / 2; + var i, ilen; + + if (helpers$1.isArray(text)) { + for (i = 0, ilen = text.length; i < ilen; ++i) { + ctx.fillText(text[i], position.x, y); + y += lineHeight; + } + } else { + ctx.fillText(text, position.x, y); + } +} + +function adjustPointPositionForLabelHeight(angle, textSize, position) { + if (angle === 90 || angle === 270) { + position.y -= (textSize.h / 2); + } else if (angle > 270 || angle < 90) { + position.y -= textSize.h; + } +} + +function drawPointLabels(scale) { + var ctx = scale.ctx; + var opts = scale.options; + var angleLineOpts = opts.angleLines; + var gridLineOpts = opts.gridLines; + var pointLabelOpts = opts.pointLabels; + var lineWidth = valueOrDefault$b(angleLineOpts.lineWidth, gridLineOpts.lineWidth); + var lineColor = valueOrDefault$b(angleLineOpts.color, gridLineOpts.color); + var tickBackdropHeight = getTickBackdropHeight(opts); + + ctx.save(); + ctx.lineWidth = lineWidth; + ctx.strokeStyle = lineColor; + if (ctx.setLineDash) { + ctx.setLineDash(resolve$7([angleLineOpts.borderDash, gridLineOpts.borderDash, []])); + ctx.lineDashOffset = resolve$7([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]); + } + + var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max); + + // Point Label Font + var plFont = helpers$1.options._parseFont(pointLabelOpts); + + ctx.font = plFont.string; + ctx.textBaseline = 'middle'; + + for (var i = getValueCount(scale) - 1; i >= 0; i--) { + if (angleLineOpts.display && lineWidth && lineColor) { + var outerPosition = scale.getPointPosition(i, outerDistance); + ctx.beginPath(); + ctx.moveTo(scale.xCenter, scale.yCenter); + ctx.lineTo(outerPosition.x, outerPosition.y); + ctx.stroke(); + } + + if (pointLabelOpts.display) { + // Extra pixels out for some label spacing + var extra = (i === 0 ? tickBackdropHeight / 2 : 0); + var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5); + + // Keep this in loop since we may support array properties here + var pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor); + ctx.fillStyle = pointLabelFontColor; + + var angleRadians = scale.getIndexAngle(i); + var angle = helpers$1.toDegrees(angleRadians); + ctx.textAlign = getTextAlignForAngle(angle); + adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition); + fillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.lineHeight); + } + } + ctx.restore(); +} + +function drawRadiusLine(scale, gridLineOpts, radius, index) { + var ctx = scale.ctx; + var circular = gridLineOpts.circular; + var valueCount = getValueCount(scale); + var lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1); + var lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1); + var pointPosition; + + if ((!circular && !valueCount) || !lineColor || !lineWidth) { + return; + } + + ctx.save(); + ctx.strokeStyle = lineColor; + ctx.lineWidth = lineWidth; + if (ctx.setLineDash) { + ctx.setLineDash(gridLineOpts.borderDash || []); + ctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0; + } + + ctx.beginPath(); + if (circular) { + // Draw circular arcs between the points + ctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2); + } else { + // Draw straight lines connecting each index + pointPosition = scale.getPointPosition(0, radius); + ctx.moveTo(pointPosition.x, pointPosition.y); + + for (var i = 1; i < valueCount; i++) { + pointPosition = scale.getPointPosition(i, radius); + ctx.lineTo(pointPosition.x, pointPosition.y); + } + } + ctx.closePath(); + ctx.stroke(); + ctx.restore(); +} + +function numberOrZero(param) { + return helpers$1.isNumber(param) ? param : 0; +} + +var scale_radialLinear = scale_linearbase.extend({ + setDimensions: function() { + var me = this; + + // Set the unconstrained dimension before label rotation + me.width = me.maxWidth; + me.height = me.maxHeight; + me.paddingTop = getTickBackdropHeight(me.options) / 2; + me.xCenter = Math.floor(me.width / 2); + me.yCenter = Math.floor((me.height - me.paddingTop) / 2); + me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2; + }, + + determineDataLimits: function() { + var me = this; + var chart = me.chart; + var min = Number.POSITIVE_INFINITY; + var max = Number.NEGATIVE_INFINITY; + + helpers$1.each(chart.data.datasets, function(dataset, datasetIndex) { + if (chart.isDatasetVisible(datasetIndex)) { + var meta = chart.getDatasetMeta(datasetIndex); + + helpers$1.each(dataset.data, function(rawValue, index) { + var value = +me.getRightValue(rawValue); + if (isNaN(value) || meta.data[index].hidden) { + return; + } + + min = Math.min(value, min); + max = Math.max(value, max); + }); + } + }); + + me.min = (min === Number.POSITIVE_INFINITY ? 0 : min); + me.max = (max === Number.NEGATIVE_INFINITY ? 0 : max); + + // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero + me.handleTickRangeOptions(); + }, + + // Returns the maximum number of ticks based on the scale dimension + _computeTickLimit: function() { + return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options)); + }, + + convertTicksToLabels: function() { + var me = this; + + scale_linearbase.prototype.convertTicksToLabels.call(me); + + // Point labels + me.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me); + }, + + getLabelForIndex: function(index, datasetIndex) { + return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]); + }, + + fit: function() { + var me = this; + var opts = me.options; + + if (opts.display && opts.pointLabels.display) { + fitWithPointLabels(me); + } else { + me.setCenterPoint(0, 0, 0, 0); + } + }, + + /** + * Set radius reductions and determine new radius and center point + * @private + */ + setReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) { + var me = this; + var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l); + var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r); + var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t); + var radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b); + + radiusReductionLeft = numberOrZero(radiusReductionLeft); + radiusReductionRight = numberOrZero(radiusReductionRight); + radiusReductionTop = numberOrZero(radiusReductionTop); + radiusReductionBottom = numberOrZero(radiusReductionBottom); + + me.drawingArea = Math.min( + Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2), + Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2)); + me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom); + }, + + setCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) { + var me = this; + var maxRight = me.width - rightMovement - me.drawingArea; + var maxLeft = leftMovement + me.drawingArea; + var maxTop = topMovement + me.drawingArea; + var maxBottom = (me.height - me.paddingTop) - bottomMovement - me.drawingArea; + + me.xCenter = Math.floor(((maxLeft + maxRight) / 2) + me.left); + me.yCenter = Math.floor(((maxTop + maxBottom) / 2) + me.top + me.paddingTop); + }, + + getIndexAngle: function(index) { + var angleMultiplier = (Math.PI * 2) / getValueCount(this); + var startAngle = this.chart.options && this.chart.options.startAngle ? + this.chart.options.startAngle : + 0; + + var startAngleRadians = startAngle * Math.PI * 2 / 360; + + // Start from the top instead of right, so remove a quarter of the circle + return index * angleMultiplier + startAngleRadians; + }, + + getDistanceFromCenterForValue: function(value) { + var me = this; + + if (value === null) { + return 0; // null always in center + } + + // Take into account half font size + the yPadding of the top value + var scalingFactor = me.drawingArea / (me.max - me.min); + if (me.options.ticks.reverse) { + return (me.max - value) * scalingFactor; + } + return (value - me.min) * scalingFactor; + }, + + getPointPosition: function(index, distanceFromCenter) { + var me = this; + var thisAngle = me.getIndexAngle(index) - (Math.PI / 2); + return { + x: Math.cos(thisAngle) * distanceFromCenter + me.xCenter, + y: Math.sin(thisAngle) * distanceFromCenter + me.yCenter + }; + }, + + getPointPositionForValue: function(index, value) { + return this.getPointPosition(index, this.getDistanceFromCenterForValue(value)); + }, + + getBasePosition: function() { + var me = this; + var min = me.min; + var max = me.max; + + return me.getPointPositionForValue(0, + me.beginAtZero ? 0 : + min < 0 && max < 0 ? max : + min > 0 && max > 0 ? min : + 0); + }, + + draw: function() { + var me = this; + var opts = me.options; + var gridLineOpts = opts.gridLines; + var tickOpts = opts.ticks; + + if (opts.display) { + var ctx = me.ctx; + var startAngle = this.getIndexAngle(0); + var tickFont = helpers$1.options._parseFont(tickOpts); + + if (opts.angleLines.display || opts.pointLabels.display) { + drawPointLabels(me); + } + + helpers$1.each(me.ticks, function(label, index) { + // Don't draw a centre value (if it is minimum) + if (index > 0 || tickOpts.reverse) { + var yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]); + + // Draw circular lines around the scale + if (gridLineOpts.display && index !== 0) { + drawRadiusLine(me, gridLineOpts, yCenterOffset, index); + } + + if (tickOpts.display) { + var tickFontColor = valueOrDefault$b(tickOpts.fontColor, core_defaults.global.defaultFontColor); + ctx.font = tickFont.string; + + ctx.save(); + ctx.translate(me.xCenter, me.yCenter); + ctx.rotate(startAngle); + + if (tickOpts.showLabelBackdrop) { + var labelWidth = ctx.measureText(label).width; + ctx.fillStyle = tickOpts.backdropColor; + ctx.fillRect( + -labelWidth / 2 - tickOpts.backdropPaddingX, + -yCenterOffset - tickFont.size / 2 - tickOpts.backdropPaddingY, + labelWidth + tickOpts.backdropPaddingX * 2, + tickFont.size + tickOpts.backdropPaddingY * 2 + ); + } + + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = tickFontColor; + ctx.fillText(label, 0, -yCenterOffset); + ctx.restore(); + } + } + }); + } + } +}); + +// INTERNAL: static default options, registered in src/index.js +var _defaults$3 = defaultConfig$3; +scale_radialLinear._defaults = _defaults$3; + +var valueOrDefault$c = helpers$1.valueOrDefault; + +// Integer constants are from the ES6 spec. +var MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991; +var MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; + +var INTERVALS = { + millisecond: { + common: true, + size: 1, + steps: [1, 2, 5, 10, 20, 50, 100, 250, 500] + }, + second: { + common: true, + size: 1000, + steps: [1, 2, 5, 10, 15, 30] + }, + minute: { + common: true, + size: 60000, + steps: [1, 2, 5, 10, 15, 30] + }, + hour: { + common: true, + size: 3600000, + steps: [1, 2, 3, 6, 12] + }, + day: { + common: true, + size: 86400000, + steps: [1, 2, 5] + }, + week: { + common: false, + size: 604800000, + steps: [1, 2, 3, 4] + }, + month: { + common: true, + size: 2.628e9, + steps: [1, 2, 3] + }, + quarter: { + common: false, + size: 7.884e9, + steps: [1, 2, 3, 4] + }, + year: { + common: true, + size: 3.154e10 + } +}; + +var UNITS = Object.keys(INTERVALS); + +function sorter(a, b) { + return a - b; +} + +function arrayUnique(items) { + var hash = {}; + var out = []; + var i, ilen, item; + + for (i = 0, ilen = items.length; i < ilen; ++i) { + item = items[i]; + if (!hash[item]) { + hash[item] = true; + out.push(item); + } + } + + return out; +} + +/** + * Returns an array of {time, pos} objects used to interpolate a specific `time` or position + * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is + * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other + * extremity (left + width or top + height). Note that it would be more optimized to directly + * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need + * to create the lookup table. The table ALWAYS contains at least two items: min and max. + * + * @param {number[]} timestamps - timestamps sorted from lowest to highest. + * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min + * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}. + * If 'series', timestamps will be positioned at the same distance from each other. In this + * case, only timestamps that break the time linearity are registered, meaning that in the + * best case, all timestamps are linear, the table contains only min and max. + */ +function buildLookupTable(timestamps, min, max, distribution) { + if (distribution === 'linear' || !timestamps.length) { + return [ + {time: min, pos: 0}, + {time: max, pos: 1} + ]; + } + + var table = []; + var items = [min]; + var i, ilen, prev, curr, next; + + for (i = 0, ilen = timestamps.length; i < ilen; ++i) { + curr = timestamps[i]; + if (curr > min && curr < max) { + items.push(curr); + } + } + + items.push(max); + + for (i = 0, ilen = items.length; i < ilen; ++i) { + next = items[i + 1]; + prev = items[i - 1]; + curr = items[i]; + + // only add points that breaks the scale linearity + if (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) { + table.push({time: curr, pos: i / (ilen - 1)}); + } + } + + return table; +} + +// @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/ +function lookup(table, key, value) { + var lo = 0; + var hi = table.length - 1; + var mid, i0, i1; + + while (lo >= 0 && lo <= hi) { + mid = (lo + hi) >> 1; + i0 = table[mid - 1] || null; + i1 = table[mid]; + + if (!i0) { + // given value is outside table (before first item) + return {lo: null, hi: i1}; + } else if (i1[key] < value) { + lo = mid + 1; + } else if (i0[key] > value) { + hi = mid - 1; + } else { + return {lo: i0, hi: i1}; + } + } + + // given value is outside table (after last item) + return {lo: i1, hi: null}; +} + +/** + * Linearly interpolates the given source `value` using the table items `skey` values and + * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos') + * returns the position for a timestamp equal to 42. If value is out of bounds, values at + * index [0, 1] or [n - 1, n] are used for the interpolation. + */ +function interpolate$1(table, skey, sval, tkey) { + var range = lookup(table, skey, sval); + + // Note: the lookup table ALWAYS contains at least 2 items (min and max) + var prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo; + var next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi; + + var span = next[skey] - prev[skey]; + var ratio = span ? (sval - prev[skey]) / span : 0; + var offset = (next[tkey] - prev[tkey]) * ratio; + + return prev[tkey] + offset; +} + +function toTimestamp(scale, input) { + var adapter = scale._adapter; + var options = scale.options.time; + var parser = options.parser; + var format = parser || options.format; + var value = input; + + if (typeof parser === 'function') { + value = parser(value); + } + + // Only parse if its not a timestamp already + if (!helpers$1.isFinite(value)) { + value = typeof format === 'string' + ? adapter.parse(value, format) + : adapter.parse(value); + } + + if (value !== null) { + return +value; + } + + // Labels are in an incompatible format and no `parser` has been provided. + // The user might still use the deprecated `format` option for parsing. + if (!parser && typeof format === 'function') { + value = format(input); + + // `format` could return something else than a timestamp, if so, parse it + if (!helpers$1.isFinite(value)) { + value = adapter.parse(value); + } + } + + return value; +} + +function parse(scale, input) { + if (helpers$1.isNullOrUndef(input)) { + return null; + } + + var options = scale.options.time; + var value = toTimestamp(scale, scale.getRightValue(input)); + if (value === null) { + return value; + } + + if (options.round) { + value = +scale._adapter.startOf(value, options.round); + } + + return value; +} + +/** + * Returns the number of unit to skip to be able to display up to `capacity` number of ticks + * in `unit` for the given `min` / `max` range and respecting the interval steps constraints. + */ +function determineStepSize(min, max, unit, capacity) { + var range = max - min; + var interval = INTERVALS[unit]; + var milliseconds = interval.size; + var steps = interval.steps; + var i, ilen, factor; + + if (!steps) { + return Math.ceil(range / (capacity * milliseconds)); + } + + for (i = 0, ilen = steps.length; i < ilen; ++i) { + factor = steps[i]; + if (Math.ceil(range / (milliseconds * factor)) <= capacity) { + break; + } + } + + return factor; +} + +/** + * Figures out what unit results in an appropriate number of auto-generated ticks + */ +function determineUnitForAutoTicks(minUnit, min, max, capacity) { + var ilen = UNITS.length; + var i, interval, factor; + + for (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) { + interval = INTERVALS[UNITS[i]]; + factor = interval.steps ? interval.steps[interval.steps.length - 1] : MAX_INTEGER; + + if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) { + return UNITS[i]; + } + } + + return UNITS[ilen - 1]; +} + +/** + * Figures out what unit to format a set of ticks with + */ +function determineUnitForFormatting(scale, ticks, minUnit, min, max) { + var ilen = UNITS.length; + var i, unit; + + for (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) { + unit = UNITS[i]; + if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= ticks.length) { + return unit; + } + } + + return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0]; +} + +function determineMajorUnit(unit) { + for (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) { + if (INTERVALS[UNITS[i]].common) { + return UNITS[i]; + } + } +} + +/** + * Generates a maximum of `capacity` timestamps between min and max, rounded to the + * `minor` unit, aligned on the `major` unit and using the given scale time `options`. + * Important: this method can return ticks outside the min and max range, it's the + * responsibility of the calling code to clamp values if needed. + */ +function generate(scale, min, max, capacity) { + var adapter = scale._adapter; + var options = scale.options; + var timeOpts = options.time; + var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity); + var major = determineMajorUnit(minor); + var stepSize = valueOrDefault$c(timeOpts.stepSize, timeOpts.unitStepSize); + var weekday = minor === 'week' ? timeOpts.isoWeekday : false; + var majorTicksEnabled = options.ticks.major.enabled; + var interval = INTERVALS[minor]; + var first = min; + var last = max; + var ticks = []; + var time; + + if (!stepSize) { + stepSize = determineStepSize(min, max, minor, capacity); + } + + // For 'week' unit, handle the first day of week option + if (weekday) { + first = +adapter.startOf(first, 'isoWeek', weekday); + last = +adapter.startOf(last, 'isoWeek', weekday); + } + + // Align first/last ticks on unit + first = +adapter.startOf(first, weekday ? 'day' : minor); + last = +adapter.startOf(last, weekday ? 'day' : minor); + + // Make sure that the last tick include max + if (last < max) { + last = +adapter.add(last, 1, minor); + } + + time = first; + + if (majorTicksEnabled && major && !weekday && !timeOpts.round) { + // Align the first tick on the previous `minor` unit aligned on the `major` unit: + // we first aligned time on the previous `major` unit then add the number of full + // stepSize there is between first and the previous major time. + time = +adapter.startOf(time, major); + time = +adapter.add(time, ~~((first - time) / (interval.size * stepSize)) * stepSize, minor); + } + + for (; time < last; time = +adapter.add(time, stepSize, minor)) { + ticks.push(+time); + } + + ticks.push(+time); + + return ticks; +} + +/** + * Returns the start and end offsets from edges in the form of {start, end} + * where each value is a relative width to the scale and ranges between 0 and 1. + * They add extra margins on the both sides by scaling down the original scale. + * Offsets are added when the `offset` option is true. + */ +function computeOffsets(table, ticks, min, max, options) { + var start = 0; + var end = 0; + var first, last; + + if (options.offset && ticks.length) { + if (!options.time.min) { + first = interpolate$1(table, 'time', ticks[0], 'pos'); + if (ticks.length === 1) { + start = 1 - first; + } else { + start = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2; + } + } + if (!options.time.max) { + last = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos'); + if (ticks.length === 1) { + end = last; + } else { + end = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2; + } + } + } + + return {start: start, end: end}; +} + +function ticksFromTimestamps(scale, values, majorUnit) { + var ticks = []; + var i, ilen, value, major; + + for (i = 0, ilen = values.length; i < ilen; ++i) { + value = values[i]; + major = majorUnit ? value === +scale._adapter.startOf(value, majorUnit) : false; + + ticks.push({ + value: value, + major: major + }); + } + + return ticks; +} + +var defaultConfig$4 = { + position: 'bottom', + + /** + * Data distribution along the scale: + * - 'linear': data are spread according to their time (distances can vary), + * - 'series': data are spread at the same distance from each other. + * @see https://github.com/chartjs/Chart.js/pull/4507 + * @since 2.7.0 + */ + distribution: 'linear', + + /** + * Scale boundary strategy (bypassed by min/max time options) + * - `data`: make sure data are fully visible, ticks outside are removed + * - `ticks`: make sure ticks are fully visible, data outside are truncated + * @see https://github.com/chartjs/Chart.js/pull/4556 + * @since 2.7.0 + */ + bounds: 'data', + + adapters: {}, + time: { + parser: false, // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment + format: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from https://momentjs.com/docs/#/parsing/string-format/ + unit: false, // false == automatic or override with week, month, year, etc. + round: false, // none, or override with week, month, year, etc. + displayFormat: false, // DEPRECATED + isoWeekday: false, // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/ + minUnit: 'millisecond', + displayFormats: {} + }, + ticks: { + autoSkip: false, + + /** + * Ticks generation input values: + * - 'auto': generates "optimal" ticks based on scale size and time options. + * - 'data': generates ticks from data (including labels from data {t|x|y} objects). + * - 'labels': generates ticks from user given `data.labels` values ONLY. + * @see https://github.com/chartjs/Chart.js/pull/4507 + * @since 2.7.0 + */ + source: 'auto', + + major: { + enabled: false + } + } +}; + +var scale_time = core_scale.extend({ + initialize: function() { + this.mergeTicksOptions(); + core_scale.prototype.initialize.call(this); + }, + + update: function() { + var me = this; + var options = me.options; + var time = options.time || (options.time = {}); + var adapter = me._adapter = new core_adapters._date(options.adapters.date); + + // DEPRECATIONS: output a message only one time per update + if (time.format) { + console.warn('options.time.format is deprecated and replaced by options.time.parser.'); + } + + // Backward compatibility: before introducing adapter, `displayFormats` was + // supposed to contain *all* unit/string pairs but this can't be resolved + // when loading the scale (adapters are loaded afterward), so let's populate + // missing formats on update + helpers$1.mergeIf(time.displayFormats, adapter.formats()); + + return core_scale.prototype.update.apply(me, arguments); + }, + + /** + * Allows data to be referenced via 't' attribute + */ + getRightValue: function(rawValue) { + if (rawValue && rawValue.t !== undefined) { + rawValue = rawValue.t; + } + return core_scale.prototype.getRightValue.call(this, rawValue); + }, + + determineDataLimits: function() { + var me = this; + var chart = me.chart; + var adapter = me._adapter; + var timeOpts = me.options.time; + var unit = timeOpts.unit || 'day'; + var min = MAX_INTEGER; + var max = MIN_INTEGER; + var timestamps = []; + var datasets = []; + var labels = []; + var i, j, ilen, jlen, data, timestamp; + var dataLabels = chart.data.labels || []; + + // Convert labels to timestamps + for (i = 0, ilen = dataLabels.length; i < ilen; ++i) { + labels.push(parse(me, dataLabels[i])); + } + + // Convert data to timestamps + for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) { + if (chart.isDatasetVisible(i)) { + data = chart.data.datasets[i].data; + + // Let's consider that all data have the same format. + if (helpers$1.isObject(data[0])) { + datasets[i] = []; + + for (j = 0, jlen = data.length; j < jlen; ++j) { + timestamp = parse(me, data[j]); + timestamps.push(timestamp); + datasets[i][j] = timestamp; + } + } else { + for (j = 0, jlen = labels.length; j < jlen; ++j) { + timestamps.push(labels[j]); + } + datasets[i] = labels.slice(0); + } + } else { + datasets[i] = []; + } + } + + if (labels.length) { + // Sort labels **after** data have been converted + labels = arrayUnique(labels).sort(sorter); + min = Math.min(min, labels[0]); + max = Math.max(max, labels[labels.length - 1]); + } + + if (timestamps.length) { + timestamps = arrayUnique(timestamps).sort(sorter); + min = Math.min(min, timestamps[0]); + max = Math.max(max, timestamps[timestamps.length - 1]); + } + + min = parse(me, timeOpts.min) || min; + max = parse(me, timeOpts.max) || max; + + // In case there is no valid min/max, set limits based on unit time option + min = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min; + max = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max; + + // Make sure that max is strictly higher than min (required by the lookup table) + me.min = Math.min(min, max); + me.max = Math.max(min + 1, max); + + // PRIVATE + me._horizontal = me.isHorizontal(); + me._table = []; + me._timestamps = { + data: timestamps, + datasets: datasets, + labels: labels + }; + }, + + buildTicks: function() { + var me = this; + var min = me.min; + var max = me.max; + var options = me.options; + var timeOpts = options.time; + var timestamps = []; + var ticks = []; + var i, ilen, timestamp; + + switch (options.ticks.source) { + case 'data': + timestamps = me._timestamps.data; + break; + case 'labels': + timestamps = me._timestamps.labels; + break; + case 'auto': + default: + timestamps = generate(me, min, max, me.getLabelCapacity(min), options); + } + + if (options.bounds === 'ticks' && timestamps.length) { + min = timestamps[0]; + max = timestamps[timestamps.length - 1]; + } + + // Enforce limits with user min/max options + min = parse(me, timeOpts.min) || min; + max = parse(me, timeOpts.max) || max; + + // Remove ticks outside the min/max range + for (i = 0, ilen = timestamps.length; i < ilen; ++i) { + timestamp = timestamps[i]; + if (timestamp >= min && timestamp <= max) { + ticks.push(timestamp); + } + } + + me.min = min; + me.max = max; + + // PRIVATE + me._unit = timeOpts.unit || determineUnitForFormatting(me, ticks, timeOpts.minUnit, me.min, me.max); + me._majorUnit = determineMajorUnit(me._unit); + me._table = buildLookupTable(me._timestamps.data, min, max, options.distribution); + me._offsets = computeOffsets(me._table, ticks, min, max, options); + + if (options.ticks.reverse) { + ticks.reverse(); + } + + return ticksFromTimestamps(me, ticks, me._majorUnit); + }, + + getLabelForIndex: function(index, datasetIndex) { + var me = this; + var adapter = me._adapter; + var data = me.chart.data; + var timeOpts = me.options.time; + var label = data.labels && index < data.labels.length ? data.labels[index] : ''; + var value = data.datasets[datasetIndex].data[index]; + + if (helpers$1.isObject(value)) { + label = me.getRightValue(value); + } + if (timeOpts.tooltipFormat) { + return adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat); + } + if (typeof label === 'string') { + return label; + } + return adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime); + }, + + /** + * Function to format an individual tick mark + * @private + */ + tickFormatFunction: function(time, index, ticks, format) { + var me = this; + var adapter = me._adapter; + var options = me.options; + var formats = options.time.displayFormats; + var minorFormat = formats[me._unit]; + var majorUnit = me._majorUnit; + var majorFormat = formats[majorUnit]; + var majorTime = +adapter.startOf(time, majorUnit); + var majorTickOpts = options.ticks.major; + var major = majorTickOpts.enabled && majorUnit && majorFormat && time === majorTime; + var label = adapter.format(time, format ? format : major ? majorFormat : minorFormat); + var tickOpts = major ? majorTickOpts : options.ticks.minor; + var formatter = valueOrDefault$c(tickOpts.callback, tickOpts.userCallback); + + return formatter ? formatter(label, index, ticks) : label; + }, + + convertTicksToLabels: function(ticks) { + var labels = []; + var i, ilen; + + for (i = 0, ilen = ticks.length; i < ilen; ++i) { + labels.push(this.tickFormatFunction(ticks[i].value, i, ticks)); + } + + return labels; + }, + + /** + * @private + */ + getPixelForOffset: function(time) { + var me = this; + var isReverse = me.options.ticks.reverse; + var size = me._horizontal ? me.width : me.height; + var start = me._horizontal ? isReverse ? me.right : me.left : isReverse ? me.bottom : me.top; + var pos = interpolate$1(me._table, 'time', time, 'pos'); + var offset = size * (me._offsets.start + pos) / (me._offsets.start + 1 + me._offsets.end); + + return isReverse ? start - offset : start + offset; + }, + + getPixelForValue: function(value, index, datasetIndex) { + var me = this; + var time = null; + + if (index !== undefined && datasetIndex !== undefined) { + time = me._timestamps.datasets[datasetIndex][index]; + } + + if (time === null) { + time = parse(me, value); + } + + if (time !== null) { + return me.getPixelForOffset(time); + } + }, + + getPixelForTick: function(index) { + var ticks = this.getTicks(); + return index >= 0 && index < ticks.length ? + this.getPixelForOffset(ticks[index].value) : + null; + }, + + getValueForPixel: function(pixel) { + var me = this; + var size = me._horizontal ? me.width : me.height; + var start = me._horizontal ? me.left : me.top; + var pos = (size ? (pixel - start) / size : 0) * (me._offsets.start + 1 + me._offsets.start) - me._offsets.end; + var time = interpolate$1(me._table, 'pos', pos, 'time'); + + // DEPRECATION, we should return time directly + return me._adapter._create(time); + }, + + /** + * Crude approximation of what the label width might be + * @private + */ + getLabelWidth: function(label) { + var me = this; + var ticksOpts = me.options.ticks; + var tickLabelWidth = me.ctx.measureText(label).width; + var angle = helpers$1.toRadians(ticksOpts.maxRotation); + var cosRotation = Math.cos(angle); + var sinRotation = Math.sin(angle); + var tickFontSize = valueOrDefault$c(ticksOpts.fontSize, core_defaults.global.defaultFontSize); + + return (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation); + }, + + /** + * @private + */ + getLabelCapacity: function(exampleTime) { + var me = this; + + // pick the longest format (milliseconds) for guestimation + var format = me.options.time.displayFormats.millisecond; + var exampleLabel = me.tickFormatFunction(exampleTime, 0, [], format); + var tickLabelWidth = me.getLabelWidth(exampleLabel); + var innerWidth = me.isHorizontal() ? me.width : me.height; + var capacity = Math.floor(innerWidth / tickLabelWidth); + + return capacity > 0 ? capacity : 1; + } +}); + +// INTERNAL: static default options, registered in src/index.js +var _defaults$4 = defaultConfig$4; +scale_time._defaults = _defaults$4; + +var scales = { + category: scale_category, + linear: scale_linear, + logarithmic: scale_logarithmic, + radialLinear: scale_radialLinear, + time: scale_time +}; + +var FORMATS = { + datetime: 'MMM D, YYYY, h:mm:ss a', + millisecond: 'h:mm:ss.SSS a', + second: 'h:mm:ss a', + minute: 'h:mm a', + hour: 'hA', + day: 'MMM D', + week: 'll', + month: 'MMM YYYY', + quarter: '[Q]Q - YYYY', + year: 'YYYY' +}; + +core_adapters._date.override(typeof moment === 'function' ? { + _id: 'moment', // DEBUG ONLY + + formats: function() { + return FORMATS; + }, + + parse: function(value, format) { + if (typeof value === 'string' && typeof format === 'string') { + value = moment(value, format); + } else if (!(value instanceof moment)) { + value = moment(value); + } + return value.isValid() ? value.valueOf() : null; + }, + + format: function(time, format) { + return moment(time).format(format); + }, + + add: function(time, amount, unit) { + return moment(time).add(amount, unit).valueOf(); + }, + + diff: function(max, min, unit) { + return moment.duration(moment(max).diff(moment(min))).as(unit); + }, + + startOf: function(time, unit, weekday) { + time = moment(time); + if (unit === 'isoWeek') { + return time.isoWeekday(weekday).valueOf(); + } + return time.startOf(unit).valueOf(); + }, + + endOf: function(time, unit) { + return moment(time).endOf(unit).valueOf(); + }, + + // DEPRECATIONS + + /** + * Provided for backward compatibility with scale.getValueForPixel(). + * @deprecated since version 2.8.0 + * @todo remove at version 3 + * @private + */ + _create: function(time) { + return moment(time); + }, +} : {}); + +core_defaults._set('global', { + plugins: { + filler: { + propagate: true + } + } +}); + +var mappers = { + dataset: function(source) { + var index = source.fill; + var chart = source.chart; + var meta = chart.getDatasetMeta(index); + var visible = meta && chart.isDatasetVisible(index); + var points = (visible && meta.dataset._children) || []; + var length = points.length || 0; + + return !length ? null : function(point, i) { + return (i < length && points[i]._view) || null; + }; + }, + + boundary: function(source) { + var boundary = source.boundary; + var x = boundary ? boundary.x : null; + var y = boundary ? boundary.y : null; + + return function(point) { + return { + x: x === null ? point.x : x, + y: y === null ? point.y : y, + }; + }; + } +}; + +// @todo if (fill[0] === '#') +function decodeFill(el, index, count) { + var model = el._model || {}; + var fill = model.fill; + var target; + + if (fill === undefined) { + fill = !!model.backgroundColor; + } + + if (fill === false || fill === null) { + return false; + } + + if (fill === true) { + return 'origin'; + } + + target = parseFloat(fill, 10); + if (isFinite(target) && Math.floor(target) === target) { + if (fill[0] === '-' || fill[0] === '+') { + target = index + target; + } + + if (target === index || target < 0 || target >= count) { + return false; + } + + return target; + } + + switch (fill) { + // compatibility + case 'bottom': + return 'start'; + case 'top': + return 'end'; + case 'zero': + return 'origin'; + // supported boundaries + case 'origin': + case 'start': + case 'end': + return fill; + // invalid fill values + default: + return false; + } +} + +function computeBoundary(source) { + var model = source.el._model || {}; + var scale = source.el._scale || {}; + var fill = source.fill; + var target = null; + var horizontal; + + if (isFinite(fill)) { + return null; + } + + // Backward compatibility: until v3, we still need to support boundary values set on + // the model (scaleTop, scaleBottom and scaleZero) because some external plugins and + // controllers might still use it (e.g. the Smith chart). + + if (fill === 'start') { + target = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom; + } else if (fill === 'end') { + target = model.scaleTop === undefined ? scale.top : model.scaleTop; + } else if (model.scaleZero !== undefined) { + target = model.scaleZero; + } else if (scale.getBasePosition) { + target = scale.getBasePosition(); + } else if (scale.getBasePixel) { + target = scale.getBasePixel(); + } + + if (target !== undefined && target !== null) { + if (target.x !== undefined && target.y !== undefined) { + return target; + } + + if (helpers$1.isFinite(target)) { + horizontal = scale.isHorizontal(); + return { + x: horizontal ? target : null, + y: horizontal ? null : target + }; + } + } + + return null; +} + +function resolveTarget(sources, index, propagate) { + var source = sources[index]; + var fill = source.fill; + var visited = [index]; + var target; + + if (!propagate) { + return fill; + } + + while (fill !== false && visited.indexOf(fill) === -1) { + if (!isFinite(fill)) { + return fill; + } + + target = sources[fill]; + if (!target) { + return false; + } + + if (target.visible) { + return fill; + } + + visited.push(fill); + fill = target.fill; + } + + return false; +} + +function createMapper(source) { + var fill = source.fill; + var type = 'dataset'; + + if (fill === false) { + return null; + } + + if (!isFinite(fill)) { + type = 'boundary'; + } + + return mappers[type](source); +} + +function isDrawable(point) { + return point && !point.skip; +} + +function drawArea(ctx, curve0, curve1, len0, len1) { + var i; + + if (!len0 || !len1) { + return; + } + + // building first area curve (normal) + ctx.moveTo(curve0[0].x, curve0[0].y); + for (i = 1; i < len0; ++i) { + helpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]); + } + + // joining the two area curves + ctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y); + + // building opposite area curve (reverse) + for (i = len1 - 1; i > 0; --i) { + helpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true); + } +} + +function doFill(ctx, points, mapper, view, color, loop) { + var count = points.length; + var span = view.spanGaps; + var curve0 = []; + var curve1 = []; + var len0 = 0; + var len1 = 0; + var i, ilen, index, p0, p1, d0, d1; + + ctx.beginPath(); + + for (i = 0, ilen = (count + !!loop); i < ilen; ++i) { + index = i % count; + p0 = points[index]._view; + p1 = mapper(p0, index, view); + d0 = isDrawable(p0); + d1 = isDrawable(p1); + + if (d0 && d1) { + len0 = curve0.push(p0); + len1 = curve1.push(p1); + } else if (len0 && len1) { + if (!span) { + drawArea(ctx, curve0, curve1, len0, len1); + len0 = len1 = 0; + curve0 = []; + curve1 = []; + } else { + if (d0) { + curve0.push(p0); + } + if (d1) { + curve1.push(p1); + } + } + } + } + + drawArea(ctx, curve0, curve1, len0, len1); + + ctx.closePath(); + ctx.fillStyle = color; + ctx.fill(); +} + +var plugin_filler = { + id: 'filler', + + afterDatasetsUpdate: function(chart, options) { + var count = (chart.data.datasets || []).length; + var propagate = options.propagate; + var sources = []; + var meta, i, el, source; + + for (i = 0; i < count; ++i) { + meta = chart.getDatasetMeta(i); + el = meta.dataset; + source = null; + + if (el && el._model && el instanceof elements.Line) { + source = { + visible: chart.isDatasetVisible(i), + fill: decodeFill(el, i, count), + chart: chart, + el: el + }; + } + + meta.$filler = source; + sources.push(source); + } + + for (i = 0; i < count; ++i) { + source = sources[i]; + if (!source) { + continue; + } + + source.fill = resolveTarget(sources, i, propagate); + source.boundary = computeBoundary(source); + source.mapper = createMapper(source); + } + }, + + beforeDatasetDraw: function(chart, args) { + var meta = args.meta.$filler; + if (!meta) { + return; + } + + var ctx = chart.ctx; + var el = meta.el; + var view = el._view; + var points = el._children || []; + var mapper = meta.mapper; + var color = view.backgroundColor || core_defaults.global.defaultColor; + + if (mapper && color && points.length) { + helpers$1.canvas.clipArea(ctx, chart.chartArea); + doFill(ctx, points, mapper, view, color, el._loop); + helpers$1.canvas.unclipArea(ctx); + } + } +}; + +var noop$1 = helpers$1.noop; +var valueOrDefault$d = helpers$1.valueOrDefault; + +core_defaults._set('global', { + legend: { + display: true, + position: 'top', + fullWidth: true, + reverse: false, + weight: 1000, + + // a callback that will handle + onClick: function(e, legendItem) { + var index = legendItem.datasetIndex; + var ci = this.chart; + var meta = ci.getDatasetMeta(index); + + // See controller.isDatasetVisible comment + meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null; + + // We hid a dataset ... rerender the chart + ci.update(); + }, + + onHover: null, + onLeave: null, + + labels: { + boxWidth: 40, + padding: 10, + // Generates labels shown in the legend + // Valid properties to return: + // text : text to display + // fillStyle : fill of coloured box + // strokeStyle: stroke of coloured box + // hidden : if this legend item refers to a hidden item + // lineCap : cap style for line + // lineDash + // lineDashOffset : + // lineJoin : + // lineWidth : + generateLabels: function(chart) { + var data = chart.data; + return helpers$1.isArray(data.datasets) ? data.datasets.map(function(dataset, i) { + return { + text: dataset.label, + fillStyle: (!helpers$1.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0]), + hidden: !chart.isDatasetVisible(i), + lineCap: dataset.borderCapStyle, + lineDash: dataset.borderDash, + lineDashOffset: dataset.borderDashOffset, + lineJoin: dataset.borderJoinStyle, + lineWidth: dataset.borderWidth, + strokeStyle: dataset.borderColor, + pointStyle: dataset.pointStyle, + + // Below is extra data used for toggling the datasets + datasetIndex: i + }; + }, this) : []; + } + } + }, + + legendCallback: function(chart) { + var text = []; + text.push('
    '); + for (var i = 0; i < chart.data.datasets.length; i++) { + text.push('
  • '); + if (chart.data.datasets[i].label) { + text.push(chart.data.datasets[i].label); + } + text.push('
  • '); + } + text.push('
'); + return text.join(''); + } +}); + +/** + * Helper function to get the box width based on the usePointStyle option + * @param {object} labelopts - the label options on the legend + * @param {number} fontSize - the label font size + * @return {number} width of the color box area + */ +function getBoxWidth(labelOpts, fontSize) { + return labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ? + fontSize : + labelOpts.boxWidth; +} + +/** + * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required! + */ +var Legend = core_element.extend({ + + initialize: function(config) { + helpers$1.extend(this, config); + + // Contains hit boxes for each dataset (in dataset order) + this.legendHitBoxes = []; + + /** + * @private + */ + this._hoveredItem = null; + + // Are we in doughnut mode which has a different data type + this.doughnutMode = false; + }, + + // These methods are ordered by lifecycle. Utilities then follow. + // Any function defined here is inherited by all legend types. + // Any function can be extended by the legend type + + beforeUpdate: noop$1, + update: function(maxWidth, maxHeight, margins) { + var me = this; + + // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;) + me.beforeUpdate(); + + // Absorb the master measurements + me.maxWidth = maxWidth; + me.maxHeight = maxHeight; + me.margins = margins; + + // Dimensions + me.beforeSetDimensions(); + me.setDimensions(); + me.afterSetDimensions(); + // Labels + me.beforeBuildLabels(); + me.buildLabels(); + me.afterBuildLabels(); + + // Fit + me.beforeFit(); + me.fit(); + me.afterFit(); + // + me.afterUpdate(); + + return me.minSize; + }, + afterUpdate: noop$1, + + // + + beforeSetDimensions: noop$1, + setDimensions: function() { + var me = this; + // Set the unconstrained dimension before label rotation + if (me.isHorizontal()) { + // Reset position before calculating rotation + me.width = me.maxWidth; + me.left = 0; + me.right = me.width; + } else { + me.height = me.maxHeight; + + // Reset position before calculating rotation + me.top = 0; + me.bottom = me.height; + } + + // Reset padding + me.paddingLeft = 0; + me.paddingTop = 0; + me.paddingRight = 0; + me.paddingBottom = 0; + + // Reset minSize + me.minSize = { + width: 0, + height: 0 + }; + }, + afterSetDimensions: noop$1, + + // + + beforeBuildLabels: noop$1, + buildLabels: function() { + var me = this; + var labelOpts = me.options.labels || {}; + var legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || []; + + if (labelOpts.filter) { + legendItems = legendItems.filter(function(item) { + return labelOpts.filter(item, me.chart.data); + }); + } + + if (me.options.reverse) { + legendItems.reverse(); + } + + me.legendItems = legendItems; + }, + afterBuildLabels: noop$1, + + // + + beforeFit: noop$1, + fit: function() { + var me = this; + var opts = me.options; + var labelOpts = opts.labels; + var display = opts.display; + + var ctx = me.ctx; + + var labelFont = helpers$1.options._parseFont(labelOpts); + var fontSize = labelFont.size; + + // Reset hit boxes + var hitboxes = me.legendHitBoxes = []; + + var minSize = me.minSize; + var isHorizontal = me.isHorizontal(); + + if (isHorizontal) { + minSize.width = me.maxWidth; // fill all the width + minSize.height = display ? 10 : 0; + } else { + minSize.width = display ? 10 : 0; + minSize.height = me.maxHeight; // fill all the height + } + + // Increase sizes here + if (display) { + ctx.font = labelFont.string; + + if (isHorizontal) { + // Labels + + // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one + var lineWidths = me.lineWidths = [0]; + var totalHeight = 0; + + ctx.textAlign = 'left'; + ctx.textBaseline = 'top'; + + helpers$1.each(me.legendItems, function(legendItem, i) { + var boxWidth = getBoxWidth(labelOpts, fontSize); + var width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width; + + if (i === 0 || lineWidths[lineWidths.length - 1] + width + labelOpts.padding > minSize.width) { + totalHeight += fontSize + labelOpts.padding; + lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = labelOpts.padding; + } + + // Store the hitbox width and height here. Final position will be updated in `draw` + hitboxes[i] = { + left: 0, + top: 0, + width: width, + height: fontSize + }; + + lineWidths[lineWidths.length - 1] += width + labelOpts.padding; + }); + + minSize.height += totalHeight; + + } else { + var vPadding = labelOpts.padding; + var columnWidths = me.columnWidths = []; + var totalWidth = labelOpts.padding; + var currentColWidth = 0; + var currentColHeight = 0; + var itemHeight = fontSize + vPadding; + + helpers$1.each(me.legendItems, function(legendItem, i) { + var boxWidth = getBoxWidth(labelOpts, fontSize); + var itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width; + + // If too tall, go to new column + if (i > 0 && currentColHeight + itemHeight > minSize.height - vPadding) { + totalWidth += currentColWidth + labelOpts.padding; + columnWidths.push(currentColWidth); // previous column width + + currentColWidth = 0; + currentColHeight = 0; + } + + // Get max width + currentColWidth = Math.max(currentColWidth, itemWidth); + currentColHeight += itemHeight; + + // Store the hitbox width and height here. Final position will be updated in `draw` + hitboxes[i] = { + left: 0, + top: 0, + width: itemWidth, + height: fontSize + }; + }); + + totalWidth += currentColWidth; + columnWidths.push(currentColWidth); + minSize.width += totalWidth; + } + } + + me.width = minSize.width; + me.height = minSize.height; + }, + afterFit: noop$1, + + // Shared Methods + isHorizontal: function() { + return this.options.position === 'top' || this.options.position === 'bottom'; + }, + + // Actually draw the legend on the canvas + draw: function() { + var me = this; + var opts = me.options; + var labelOpts = opts.labels; + var globalDefaults = core_defaults.global; + var defaultColor = globalDefaults.defaultColor; + var lineDefault = globalDefaults.elements.line; + var legendWidth = me.width; + var lineWidths = me.lineWidths; + + if (opts.display) { + var ctx = me.ctx; + var fontColor = valueOrDefault$d(labelOpts.fontColor, globalDefaults.defaultFontColor); + var labelFont = helpers$1.options._parseFont(labelOpts); + var fontSize = labelFont.size; + var cursor; + + // Canvas setup + ctx.textAlign = 'left'; + ctx.textBaseline = 'middle'; + ctx.lineWidth = 0.5; + ctx.strokeStyle = fontColor; // for strikethrough effect + ctx.fillStyle = fontColor; // render in correct colour + ctx.font = labelFont.string; + + var boxWidth = getBoxWidth(labelOpts, fontSize); + var hitboxes = me.legendHitBoxes; + + // current position + var drawLegendBox = function(x, y, legendItem) { + if (isNaN(boxWidth) || boxWidth <= 0) { + return; + } + + // Set the ctx for the box + ctx.save(); + + var lineWidth = valueOrDefault$d(legendItem.lineWidth, lineDefault.borderWidth); + ctx.fillStyle = valueOrDefault$d(legendItem.fillStyle, defaultColor); + ctx.lineCap = valueOrDefault$d(legendItem.lineCap, lineDefault.borderCapStyle); + ctx.lineDashOffset = valueOrDefault$d(legendItem.lineDashOffset, lineDefault.borderDashOffset); + ctx.lineJoin = valueOrDefault$d(legendItem.lineJoin, lineDefault.borderJoinStyle); + ctx.lineWidth = lineWidth; + ctx.strokeStyle = valueOrDefault$d(legendItem.strokeStyle, defaultColor); + + if (ctx.setLineDash) { + // IE 9 and 10 do not support line dash + ctx.setLineDash(valueOrDefault$d(legendItem.lineDash, lineDefault.borderDash)); + } + + if (opts.labels && opts.labels.usePointStyle) { + // Recalculate x and y for drawPoint() because its expecting + // x and y to be center of figure (instead of top left) + var radius = boxWidth * Math.SQRT2 / 2; + var centerX = x + boxWidth / 2; + var centerY = y + fontSize / 2; + + // Draw pointStyle as legend symbol + helpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY); + } else { + // Draw box as legend symbol + if (lineWidth !== 0) { + ctx.strokeRect(x, y, boxWidth, fontSize); + } + ctx.fillRect(x, y, boxWidth, fontSize); + } + + ctx.restore(); + }; + var fillText = function(x, y, legendItem, textWidth) { + var halfFontSize = fontSize / 2; + var xLeft = boxWidth + halfFontSize + x; + var yMiddle = y + halfFontSize; + + ctx.fillText(legendItem.text, xLeft, yMiddle); + + if (legendItem.hidden) { + // Strikethrough the text if hidden + ctx.beginPath(); + ctx.lineWidth = 2; + ctx.moveTo(xLeft, yMiddle); + ctx.lineTo(xLeft + textWidth, yMiddle); + ctx.stroke(); + } + }; + + // Horizontal + var isHorizontal = me.isHorizontal(); + if (isHorizontal) { + cursor = { + x: me.left + ((legendWidth - lineWidths[0]) / 2) + labelOpts.padding, + y: me.top + labelOpts.padding, + line: 0 + }; + } else { + cursor = { + x: me.left + labelOpts.padding, + y: me.top + labelOpts.padding, + line: 0 + }; + } + + var itemHeight = fontSize + labelOpts.padding; + helpers$1.each(me.legendItems, function(legendItem, i) { + var textWidth = ctx.measureText(legendItem.text).width; + var width = boxWidth + (fontSize / 2) + textWidth; + var x = cursor.x; + var y = cursor.y; + + // Use (me.left + me.minSize.width) and (me.top + me.minSize.height) + // instead of me.right and me.bottom because me.width and me.height + // may have been changed since me.minSize was calculated + if (isHorizontal) { + if (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) { + y = cursor.y += itemHeight; + cursor.line++; + x = cursor.x = me.left + ((legendWidth - lineWidths[cursor.line]) / 2) + labelOpts.padding; + } + } else if (i > 0 && y + itemHeight > me.top + me.minSize.height) { + x = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding; + y = cursor.y = me.top + labelOpts.padding; + cursor.line++; + } + + drawLegendBox(x, y, legendItem); + + hitboxes[i].left = x; + hitboxes[i].top = y; + + // Fill the actual label + fillText(x, y, legendItem, textWidth); + + if (isHorizontal) { + cursor.x += width + labelOpts.padding; + } else { + cursor.y += itemHeight; + } + + }); + } + }, + + /** + * @private + */ + _getLegendItemAt: function(x, y) { + var me = this; + var i, hitBox, lh; + + if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) { + // See if we are touching one of the dataset boxes + lh = me.legendHitBoxes; + for (i = 0; i < lh.length; ++i) { + hitBox = lh[i]; + + if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) { + // Touching an element + return me.legendItems[i]; + } + } + } + + return null; + }, + + /** + * Handle an event + * @private + * @param {IEvent} event - The event to handle + */ + handleEvent: function(e) { + var me = this; + var opts = me.options; + var type = e.type === 'mouseup' ? 'click' : e.type; + var hoveredItem; + + if (type === 'mousemove') { + if (!opts.onHover && !opts.onLeave) { + return; + } + } else if (type === 'click') { + if (!opts.onClick) { + return; + } + } else { + return; + } + + // Chart event already has relative position in it + hoveredItem = me._getLegendItemAt(e.x, e.y); + + if (type === 'click') { + if (hoveredItem && opts.onClick) { + // use e.native for backwards compatibility + opts.onClick.call(me, e.native, hoveredItem); + } + } else { + if (opts.onLeave && hoveredItem !== me._hoveredItem) { + if (me._hoveredItem) { + opts.onLeave.call(me, e.native, me._hoveredItem); + } + me._hoveredItem = hoveredItem; + } + + if (opts.onHover && hoveredItem) { + // use e.native for backwards compatibility + opts.onHover.call(me, e.native, hoveredItem); + } + } + } +}); + +function createNewLegendAndAttach(chart, legendOpts) { + var legend = new Legend({ + ctx: chart.ctx, + options: legendOpts, + chart: chart + }); + + core_layouts.configure(chart, legend, legendOpts); + core_layouts.addBox(chart, legend); + chart.legend = legend; +} + +var plugin_legend = { + id: 'legend', + + /** + * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making + * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of + * the plugin, which one will be re-exposed in the chart.js file. + * https://github.com/chartjs/Chart.js/pull/2640 + * @private + */ + _element: Legend, + + beforeInit: function(chart) { + var legendOpts = chart.options.legend; + + if (legendOpts) { + createNewLegendAndAttach(chart, legendOpts); + } + }, + + beforeUpdate: function(chart) { + var legendOpts = chart.options.legend; + var legend = chart.legend; + + if (legendOpts) { + helpers$1.mergeIf(legendOpts, core_defaults.global.legend); + + if (legend) { + core_layouts.configure(chart, legend, legendOpts); + legend.options = legendOpts; + } else { + createNewLegendAndAttach(chart, legendOpts); + } + } else if (legend) { + core_layouts.removeBox(chart, legend); + delete chart.legend; + } + }, + + afterEvent: function(chart, e) { + var legend = chart.legend; + if (legend) { + legend.handleEvent(e); + } + } +}; + +var noop$2 = helpers$1.noop; + +core_defaults._set('global', { + title: { + display: false, + fontStyle: 'bold', + fullWidth: true, + padding: 10, + position: 'top', + text: '', + weight: 2000 // by default greater than legend (1000) to be above + } +}); + +/** + * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required! + */ +var Title = core_element.extend({ + initialize: function(config) { + var me = this; + helpers$1.extend(me, config); + + // Contains hit boxes for each dataset (in dataset order) + me.legendHitBoxes = []; + }, + + // These methods are ordered by lifecycle. Utilities then follow. + + beforeUpdate: noop$2, + update: function(maxWidth, maxHeight, margins) { + var me = this; + + // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;) + me.beforeUpdate(); + + // Absorb the master measurements + me.maxWidth = maxWidth; + me.maxHeight = maxHeight; + me.margins = margins; + + // Dimensions + me.beforeSetDimensions(); + me.setDimensions(); + me.afterSetDimensions(); + // Labels + me.beforeBuildLabels(); + me.buildLabels(); + me.afterBuildLabels(); + + // Fit + me.beforeFit(); + me.fit(); + me.afterFit(); + // + me.afterUpdate(); + + return me.minSize; + + }, + afterUpdate: noop$2, + + // + + beforeSetDimensions: noop$2, + setDimensions: function() { + var me = this; + // Set the unconstrained dimension before label rotation + if (me.isHorizontal()) { + // Reset position before calculating rotation + me.width = me.maxWidth; + me.left = 0; + me.right = me.width; + } else { + me.height = me.maxHeight; + + // Reset position before calculating rotation + me.top = 0; + me.bottom = me.height; + } + + // Reset padding + me.paddingLeft = 0; + me.paddingTop = 0; + me.paddingRight = 0; + me.paddingBottom = 0; + + // Reset minSize + me.minSize = { + width: 0, + height: 0 + }; + }, + afterSetDimensions: noop$2, + + // + + beforeBuildLabels: noop$2, + buildLabels: noop$2, + afterBuildLabels: noop$2, + + // + + beforeFit: noop$2, + fit: function() { + var me = this; + var opts = me.options; + var display = opts.display; + var minSize = me.minSize; + var lineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1; + var fontOpts = helpers$1.options._parseFont(opts); + var textSize = display ? (lineCount * fontOpts.lineHeight) + (opts.padding * 2) : 0; + + if (me.isHorizontal()) { + minSize.width = me.maxWidth; // fill all the width + minSize.height = textSize; + } else { + minSize.width = textSize; + minSize.height = me.maxHeight; // fill all the height + } + + me.width = minSize.width; + me.height = minSize.height; + + }, + afterFit: noop$2, + + // Shared Methods + isHorizontal: function() { + var pos = this.options.position; + return pos === 'top' || pos === 'bottom'; + }, + + // Actually draw the title block on the canvas + draw: function() { + var me = this; + var ctx = me.ctx; + var opts = me.options; + + if (opts.display) { + var fontOpts = helpers$1.options._parseFont(opts); + var lineHeight = fontOpts.lineHeight; + var offset = lineHeight / 2 + opts.padding; + var rotation = 0; + var top = me.top; + var left = me.left; + var bottom = me.bottom; + var right = me.right; + var maxWidth, titleX, titleY; + + ctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour + ctx.font = fontOpts.string; + + // Horizontal + if (me.isHorizontal()) { + titleX = left + ((right - left) / 2); // midpoint of the width + titleY = top + offset; + maxWidth = right - left; + } else { + titleX = opts.position === 'left' ? left + offset : right - offset; + titleY = top + ((bottom - top) / 2); + maxWidth = bottom - top; + rotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5); + } + + ctx.save(); + ctx.translate(titleX, titleY); + ctx.rotate(rotation); + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + + var text = opts.text; + if (helpers$1.isArray(text)) { + var y = 0; + for (var i = 0; i < text.length; ++i) { + ctx.fillText(text[i], 0, y, maxWidth); + y += lineHeight; + } + } else { + ctx.fillText(text, 0, 0, maxWidth); + } + + ctx.restore(); + } + } +}); + +function createNewTitleBlockAndAttach(chart, titleOpts) { + var title = new Title({ + ctx: chart.ctx, + options: titleOpts, + chart: chart + }); + + core_layouts.configure(chart, title, titleOpts); + core_layouts.addBox(chart, title); + chart.titleBlock = title; +} + +var plugin_title = { + id: 'title', + + /** + * Backward compatibility: since 2.1.5, the title is registered as a plugin, making + * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of + * the plugin, which one will be re-exposed in the chart.js file. + * https://github.com/chartjs/Chart.js/pull/2640 + * @private + */ + _element: Title, + + beforeInit: function(chart) { + var titleOpts = chart.options.title; + + if (titleOpts) { + createNewTitleBlockAndAttach(chart, titleOpts); + } + }, + + beforeUpdate: function(chart) { + var titleOpts = chart.options.title; + var titleBlock = chart.titleBlock; + + if (titleOpts) { + helpers$1.mergeIf(titleOpts, core_defaults.global.title); + + if (titleBlock) { + core_layouts.configure(chart, titleBlock, titleOpts); + titleBlock.options = titleOpts; + } else { + createNewTitleBlockAndAttach(chart, titleOpts); + } + } else if (titleBlock) { + core_layouts.removeBox(chart, titleBlock); + delete chart.titleBlock; + } + } +}; + +var plugins = {}; +var filler = plugin_filler; +var legend = plugin_legend; +var title = plugin_title; +plugins.filler = filler; +plugins.legend = legend; +plugins.title = title; + +/** + * @namespace Chart + */ + + +core_controller.helpers = helpers$1; + +// @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests! +core_helpers(core_controller); + +core_controller._adapters = core_adapters; +core_controller.Animation = core_animation; +core_controller.animationService = core_animations; +core_controller.controllers = controllers; +core_controller.DatasetController = core_datasetController; +core_controller.defaults = core_defaults; +core_controller.Element = core_element; +core_controller.elements = elements; +core_controller.Interaction = core_interaction; +core_controller.layouts = core_layouts; +core_controller.platform = platform; +core_controller.plugins = core_plugins; +core_controller.Scale = core_scale; +core_controller.scaleService = core_scaleService; +core_controller.Ticks = core_ticks; +core_controller.Tooltip = core_tooltip; + +// Register built-in scales + +core_controller.helpers.each(scales, function(scale, type) { + core_controller.scaleService.registerScaleType(type, scale, scale._defaults); +}); + +// Load to register built-in adapters (as side effects) + + +// Loading built-in plugins + +for (var k in plugins) { + if (plugins.hasOwnProperty(k)) { + core_controller.plugins.register(plugins[k]); + } +} + +core_controller.platform.initialize(); + +var src = core_controller; +if (typeof window !== 'undefined') { + window.Chart = core_controller; +} + +// DEPRECATIONS + +/** + * Provided for backward compatibility, not available anymore + * @namespace Chart.Chart + * @deprecated since version 2.8.0 + * @todo remove at version 3 + * @private + */ +core_controller.Chart = core_controller; + +/** + * Provided for backward compatibility, not available anymore + * @namespace Chart.Legend + * @deprecated since version 2.1.5 + * @todo remove at version 3 + * @private + */ +core_controller.Legend = plugins.legend._element; + +/** + * Provided for backward compatibility, not available anymore + * @namespace Chart.Title + * @deprecated since version 2.1.5 + * @todo remove at version 3 + * @private + */ +core_controller.Title = plugins.title._element; + +/** + * Provided for backward compatibility, use Chart.plugins instead + * @namespace Chart.pluginService + * @deprecated since version 2.1.5 + * @todo remove at version 3 + * @private + */ +core_controller.pluginService = core_controller.plugins; + +/** + * Provided for backward compatibility, inheriting from Chart.PlugingBase has no + * effect, instead simply create/register plugins via plain JavaScript objects. + * @interface Chart.PluginBase + * @deprecated since version 2.5.0 + * @todo remove at version 3 + * @private + */ +core_controller.PluginBase = core_controller.Element.extend({}); + +/** + * Provided for backward compatibility, use Chart.helpers.canvas instead. + * @namespace Chart.canvasHelpers + * @deprecated since version 2.6.0 + * @todo remove at version 3 + * @private + */ +core_controller.canvasHelpers = core_controller.helpers.canvas; + +/** + * Provided for backward compatibility, use Chart.layouts instead. + * @namespace Chart.layoutService + * @deprecated since version 2.7.3 + * @todo remove at version 3 + * @private + */ +core_controller.layoutService = core_controller.layouts; + +/** + * Provided for backward compatibility, not available anymore. + * @namespace Chart.LinearScaleBase + * @deprecated since version 2.8 + * @todo remove at version 3 + * @private + */ +core_controller.LinearScaleBase = scale_linearbase; + +/** + * Provided for backward compatibility, instead we should create a new Chart + * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`). + * @deprecated since version 2.8.0 + * @todo remove at version 3 + */ +core_controller.helpers.each( + [ + 'Bar', + 'Bubble', + 'Doughnut', + 'Line', + 'PolarArea', + 'Radar', + 'Scatter' + ], + function(klass) { + core_controller[klass] = function(ctx, cfg) { + return new core_controller(ctx, core_controller.helpers.merge(cfg || {}, { + type: klass.charAt(0).toLowerCase() + klass.slice(1) + })); + }; + } +); + +return src; + +}))); diff --git a/src/main/webapp/pb/css/common.css b/src/main/webapp/pb/css/common.css index 6bf6532..2cf88b4 100644 --- a/src/main/webapp/pb/css/common.css +++ b/src/main/webapp/pb/css/common.css @@ -1,4 +1,4 @@ -@import url(//fonts.googleapis.com/earlyaccess/notosanskr.css); +@import url('/css/font-sans.css'); html{width: 100%;min-width:1480px;box-sizing: border-box;} body{font-family: 'Noto Sans KR', sans-serif;width: 100%;max-width: 1920px;min-width:1480px;height: 100%;box-sizing: border-box;background-color:#e7ebf1;} @@ -28,7 +28,7 @@ header .allMenu{background-image: url(/pb/img/common/topMenuIcon.png);width: 24p .favoriteBtn:hover,.favoriteBtn:active{background-image: url(/pb/img/common/topFavoriteColor.png)} header .infoWrap{position: absolute;right: 0;} -.infoWrap>ul{background-color: #f3f4f7;box-shadow: inset 0.5px 0.9px 3px 0 rgba(0,0,0,0.1);border-radius: 17px;width: 485px;margin: 15px 30px 15px 0;padding: 9px 0;text-align: center;} +.infoWrap>ul{background-color: #f3f4f7;box-shadow: inset 0.5px 0.9px 3px 0 rgba(0,0,0,0.1);border-radius: 17px;width: 280px;margin: 15px 30px 15px 0;padding: 9px 0;text-align: center;} .infoWrap>ul>li{margin-left: 15px;} .infoWrap>ul>li:first-child{margin-left: 25px;} .infoWrap>ul>li>*{vertical-align: middle;display: inline-block;font-size: 0.8125em;color: #666;} @@ -103,99 +103,6 @@ input[type="checkbox"]:checked+label::after{background-image: url(/pb/img/common .calendar_wrap .calendar_box .calBtn{position:absolute;right:5px;top:7px;width:25px;height:25px;margin:0;border:none;background-color:transparent !important;background-image:url(/pb/img/common/calendarIcon.png);background-repeat:no-repeat;vertical-align:middle;cursor:pointer;} .calendar_wrap .line {display:inline-block;letter-spacing:0;} - -/* @media screen and (max-width:1400px){ - header h1{max-width: 200px;} - header .topRight{width: 78%;} - .leftMenu{max-width: 200px;} - div.contWrap{left: 200px;} - .leftMenu .btnWrap{margin: 25px 0 0 8px;} - .leftMenu .btnWrap button{width: 180px;padding-left: 9px} - .leftMenu .btnWrap button *{letter-spacing: -1px;} - .leftMenu .btnWrap button img{padding-right: 3px} -} - -@media screen and (max-width:1280px){ - header .infoWrap{right:-8%;} -} - -@media screen and (max-width:1100px){ - header{background-color: #456ded;} - header h1,header .topRight{background-color: transparent;} - header h1{max-width: 10%;} - header .topRight{width: 87%;} - header .allMenu.mMenuClose{background-image: url(/pb/img/common/leftMenuClose.png);margin: 21px 0;} - header .topRight ul:nth-child(2) li:first-child,header .topRight ul:nth-child(2) li:nth-child(2),header .topRight .infoWrap ul:first-child{display: none;} - header .allMenu{background-image: url(/pb/img/common/mTopMenuIcon.png);width: 38px;height: 27px;right: 0;left: auto} - .topRight>ul:nth-child(2){left: auto;right: 11%;} - .topRight>ul:nth-child(2) li{background-color: #6a8af1;} - .topRight>ul:nth-child(2) li input[type="button"]{width: 22px;height: - 22px;background-size: 22px;left: 21%;} - .quickSiteBtn{background-image: url(/pb/img/common/topPcWhite.png);} - .favoriteBtn{background-image: url(/pb/img/common/topFavoriteWhite.png);} - header .infoWrap{right: 4%;} - .pfImg{position: absolute;right: 5%;float: none;} - .leftMenu{display: none;} - .leftMenu.mMenuOn{display: block;right: 0;left: auto;z-index: 1;max-width: 243px;} -} - -@media screen and (max-width: 787px){ - header{z-index: 2;} - header h1{max-width: 17%;} - header .topRight{width: 78%;} - .topRight>ul:nth-child(2){left: auto;right: 12%} - header .infoWrap{right: 7%;} - .topRight>ul:nth-child(2){left: auto;right: 19.5%;} - - .leftMenu .btnWrap button{width: 96%;height: 70px;} - .leftMenu .btnWrap button *{font-size: 1.125em;} - .leftMenu>ul{overflow-y: scroll;height: 66%;overflow-x: hidden;} - .leftMenu>ul>li{height: 70px;line-height: 70px;} - .leftMenu>ul>li *{font-size: 1.250em;letter-spacing: -0.5px;} - .leftMenu ul>li>input[type="button"]{background-image: url(/pb/img/common/tLeftMenuGo.png);margin: 25px 10px 0 0} - .leftMenu .subMenu>li{height: 60px;line-height: 55px;} - .leftMenu .subMenu>li>a{font-size: 0.768em;} - - input[type="text"],input[type="number"],input[type="password"],select{height: 60px;border: 1px solid #dbdcdf;vertical-align: middle;min-width: 160px;font-size: 1.375em;color: #555;font-weight: 500;padding: 0 0 0 20px;border-radius: 3px;} - select{background-image: url(/pb/img/common/selectIcon.png);background-repeat: no-repeat;background-position: 93% center;} - input[type="radio"]{display: none;} - input[type="radio"]+label{width: 25px;height: 25px;display: inline-block;border: 1px solid #999;border-radius: 100%;vertical-align: middle;margin-right: 0px;} - input[type="radio"]+label+label{vertical-align: middle;margin-right: 15px;font-size: 1.250em} - input[type="radio"]:checked+label{border: 1px solid #456ded;position: relative;} - input[type="radio"]:checked+label::after{position: absolute;content: "";width: 16px;height: 16px;background-color: #456ded;border-radius: 100%;top: 50%;left: 50%;transform: translate(-48%,-52%);} - - input[type="checkbox"]+label{width: 25px;height: 25px;display: inline-block;border: 1px solid #999;border-radius: 3px;vertical-align: middle;} - input[type="checkbox"]+label+label{font-size: 1.250em} - input[type="checkbox"]:checked+label::after{background-image: url(/pb/img/common/tCheck.png);background-repeat: no-repeat;background-position: center;position: absolute;content: " ";display: inline-block;width: 28px;height: 20px;top: 50%;left: 50%;transform: translate(-50%,-50%)} -} - -@media screen and (max-width:640px){ - input[type="radio"]:checked+label::after{position: absolute;content: "";width: 16px;height: 16px;background-color: #456ded;border-radius: 100%;top: 50%;left: 50%;transform: translate(-53%,-53%);} - - header{height: 90px;} - header h1{margin-top: 11px;} - header .allMenu{top: 5%} - header .allMenu.mMenuClose{margin: 30px 0;} - .topRight>ul:nth-child(2){right: 20%;} - .leftMenu{display: block;top: 90px;right: 0;left: auto;} - - div.contWrap{padding: 20px 13px;} - .rightWrap select{min-width: 120px;} - .pfImg{margin-top: 24px;} -} - -@media screen and (max-width:500px){ - .topRight>ul:nth-child(2){right:25%;} -} - -@media screen and (max-width:400px){ - header h1{width: 15%} - header h1 img{width: 220%} - header .allMenu{top: 10%;right: -2%;} - .topRight>ul:nth-child(2){right: 31%} - .topRight>ul:nth-child(2) li{margin: 0 3px;} -} */ - /*개인정보 레이어팝업*/ .setDiv {padding-top: 100px;text-align: center;} .mask {position:absolute;left:0;top:0;z-index:9999;background-color:#000;display:none;} diff --git a/src/main/webapp/pb/css/content.css b/src/main/webapp/pb/css/content.css index c4fc170..64d2a86 100644 --- a/src/main/webapp/pb/css/content.css +++ b/src/main/webapp/pb/css/content.css @@ -1,4 +1,4 @@ -@import url(//fonts.googleapis.com/earlyaccess/notosanskr.css); +@import url('/css/font-sans.css'); /* 怨듯�� */ @media print{ @@ -459,151 +459,3 @@ input[type="button"].printBtn{border: 1px solid #686b72;background-image: url(/p .listSerch input[type="checkbox"]+label{margin: 6px 0 0 0;} .listSerch input[type="checkbox"]+label+label{vertical-align: sub;} } - -/* 諛����� */ -/* @media screen and (max-width:1510px) { - .boxCont table.tbType2 tr td:first-child{padding-left: 10px;white-space: normal;} -} -@media screen and (max-width:1400px){ - .pageCont .tbType1 thead tr th{white-space: normal;} - - .ipStatus .contBox:nth-child(1){width: 100%;} - .ipStatus .contBox:nth-child(2){width: 100%;} - .ipStatus .chartArea{height: auto;} - .ipStatus .contBox:nth-child(2) .chartArea img{height:300px;width: auto;} -} - -@media screen and (max-width:1100px){ - .downBtn{display:none;} - div.contWrap{left: 0;} - div.pageCont{width: 100%;} - .listSerch input[type="button"]{margin-left: -4%;position: absolute;} - .listSerch input[type="text"]{width: 40%;} - - .pageCont .tbType2 tbody tr td input[type="text"]{width: 93%} - .pageCont .tbType2 tbody tr td .imgBox{width: 95%;} - .fileWrap{width: 95%;} - .fileWrap+.fileInfo{width: 94.5%;} - - .galleryListWrap ul li{width: 32.4%;} - .galleryListWrap ul li:nth-child(3n){margin-right: 0;} - .galleryListWrap ul li:nth-child(4n){margin-right: 1.3%;} - .galleryListWrap .listCategory{width: 65%;} - .galleryListWrap .listCategory li{white-space: nowrap;padding: 7px 5px;text-overflow: ellipsis;} - -} - -@media screen and (max-width:1024px){ - .orgWrap{width: 100%;display: block;} - .orgWrap+.tbWrap{width: 100%} -} - -@media screen and (max-width:916px){ - .pageNav{width: 100%;margin-top: 20px;} - .pageNav+.pageCont{margin-top: 8px;} - - .pageCont .tableWrap{overflow-x: scroll;width: 100%;height: 100%;} - .pageCont .tableWrap table{width: 200%;table-layout: auto;white-space: nowrap;} - .pageCont .tableWrap table thead tr th{padding: 15px 2%;} - .pageCont .tableWrap table tbody tr td{padding: 5px 2%;white-space: nowrap;} - .pageCont .tbType1 thead tr th{white-space: nowrap;} - .pageCont .tbType1 tbody tr td{white-space: nowrap !important;} - .pageCont .tbType1 tbody tr td:first-child{white-space: normal !important; overflow: visible; text-overflow:inherit;} - .pageCont .tableWrap .tbType1 tbody tr td{text-overflow: inherit;} - - .pageCont table.tbType2{width: 100%;} - .pageCont .tbType2 tbody tr td input[type="text"]{width: 95%} - .pageCont .tbType2 tbody tr td .imgBox{width: 98%;} - .fileWrap{width: 98%;overflow-x: scroll;} - .fileWrap+.fileInfo{width: 98%;} - .fileWrap+.fileInfo ul li{width: 45%;} - - .galleryListWrap ul li{width: 49%;} - .galleryListWrap ul li:nth-child(2n){margin-right: 0%;} - .galleryListWrap ul li:nth-child(3n){margin-right: 1.3%} - .galleryListWrap .listCategory li:nth-child(2n){margin-right: 0;} -} - -@media screen and (max-width:787px){ - .titType1{font-size: 1.750em;} - .tType5{font-size: 1.375em;} - .pageTitle h2{padding: 3px 0 10px 0} - .pageNav{margin-top: 20px;width: 100%;} - .pageNav+.pageCont{margin-top: 15px;} - .listSerch{display: flex;flex-flow: row wrap;justify-content: space-between;} - .listSerch select{width: 49%;} - .listSerch select{margin-right: 0;} - .listSerch input[type="text"]{width: 88.7%;margin-top: 2%;} - .listSerch input[type="button"]{position: inherit;margin-top: 2%;margin-left: -50%;height: 62px;width: 97px;font-size: 1.375em;} - - .listTop{height: 40px;margin-top: 50px;} - .listTop.resisterList{margin-top: 0;} - .listTop p{margin-top: 10px;letter-spacing: -1px;} - .listTop .rightWrap input[type="button"]{width: 60px;height: 60px;} - input[type="button"].excelBtn{background-image: url(/pb/img/tExcelIcon.png)} - input[type="button"].printBtn{background-image: url(/pb/img/tPrintIcon.png)} - - .pageCont{margin-bottom: 50px;} - .pageCont .tableWrap .tbType1{width: 200%;} - .pageCont .tableWrap .tbType1 thead tr th{font-size: 1.250em;letter-spacing: -1px;padding: 15px 8px} - .sortBtn{background-image: url(/pb/img/common/tSortImg1.png);width: 17px;height: 16px;} - .pageCont .tableWrap .tbType1 tbody tr td{font-size: 1.250em;font-weight: 300;padding: 8px;white-space:nowrap !important;} - .pageCont .tbType1 tbody tr td input[type="button"]{height: 40px} - - .pageCont table.tbType2{width: 100%;table-layout: fixed} - .pageCont .tbType2 colgroup{display: none;} - .pageCont .tbType2 tbody tr th{width: 35%;font-size: 1.250em;letter-spacing: -1px;} - .pageCont .tbType2 tbody tr td{width: 65%;padding: 8px 0 8px 15px;} - .pageCont .tbType2 tbody tr td input[type="text"]{width: 80%;} - .pageCont .tbType2 tbody tr td select{font-size: 1.250em;} - .pageCont .tbType2 tbody tr td ul li{margin: 5px;} - - .pageCont .tbType2 tbody tr td input[type="text"]{width: 85%} - .pageCont .tbType2 tbody tr td .imgBox{width: 93%;} - - - .fileWrap{width: 93%;overflow-x: scroll;} - .fileWrap+.fileInfo{width: 80%;} - .fileWrap+.fileInfo ul{ float: left;} - - .pageCont .btnWrap{margin-top: 15px;} - .pageCont .btnWrap input[type="button"]{font-size: 1.250em;font-weight: 500;} - - .orgWrap .btnWrap{height: 65px} - - .page{margin: 25px auto;padding-bottom: 20px;} - .page ul{position: inherit;display: flex;flex-flow: row;justify-content: center;} - .page ul li{width: 60px;height: 60px;font-size: 1.250em;line-height: 60px;} - .page ul li input[type="button"]{height: 60px} - .pageFirst{background-image: url(/pb/img/common/tPageFirst.png)} - .page ul li:hover .pageFirst{background-image: url(/pb/img/common/tPageFirstHover.png)} - .pageBefore{background-image: url(/pb/img/common/tPageBefore.png)} - .page ul li:hover .pageBefore{background-image: url(/pb/img/common/tPageBeforeHover.png)} - .pageNext{background-image: url(/pb/img/common/tPageNext.png)} - .page ul li:hover .pageNext{background-image: url(/pb/img/common/tPageNextHover.png)} - .pageLast{background-image: url(/pb/img/common/tPageLast.png)} - .page ul li:hover .pageLast{background-image: url(/pb/img/common/tPageLastHover.png)} - - -} - -@media screen and (max-width:640px){ - div.contWrap{top: 90px;} - .listSerch h3{margin-bottom: 10px;} - .listSerch select{width: 100%;margin-bottom: 10px;} - .listSerch input[type="text"]{width: 88.7%;margin-top: 0;} - .listSerch input[type="button"]{position: inherit;margin-top: 0;margin-left: -50%;height: 62px;width: 97px;font-size: 1.375em;} - - .listTop.resisterList{margin-top: 20px;height: 18px;} - .listTop p{width: 25%;margin-top: -20px;line-height: 25px;} - .pageCont{padding: 25px 15px;} - .pageCont .tableWrap .tbType1{width: 250%;} - .listTop p.right{width: 100%;} - - .pageCont table.tbType2{table-layout: auto;} - - .galleryListWrap ul li{width: 100%;} - .galleryListWrap ul li:nth-child(2n){margin-right: 0%;} - .galleryListWrap ul li:nth-child(3n){margin-right: 0} - .galleryListWrap .listCategory li:nth-child(2n){margin-right: 0;} -} */ diff --git a/src/main/webapp/pb/css/dashboard.css b/src/main/webapp/pb/css/dashboard.css index 5abb8b2..59671c9 100644 --- a/src/main/webapp/pb/css/dashboard.css +++ b/src/main/webapp/pb/css/dashboard.css @@ -1,4 +1,4 @@ -@import url(//fonts.googleapis.com/earlyaccess/notosanskr.css); +@import url('/css/font-sans.css'); /* 공통 */ @media print{ diff --git a/src/main/webapp/pb/js/common.js b/src/main/webapp/pb/js/common.js index 811608b..aeb3e20 100644 --- a/src/main/webapp/pb/js/common.js +++ b/src/main/webapp/pb/js/common.js @@ -53,13 +53,9 @@ $(document).ready(function () { setNumberOnly();//숫자만입력 validatePassword(); //validateEmail(); - setEmailNum(); - setEngNum(); - setKogNum(); - setCashOnly(); // 메인 대시보드 문자내용 및 문의내용 등 호버시 내용 전체 나오게 - $(".tb_subj").mouseover(function(){ + $(".tb_subj").mouseover(function(){ var text = $(this).text(); var textHover = '
'+text+'
'; $(this).after(textHover); @@ -96,32 +92,6 @@ function fn_search(){ linkPage(1); } -//메인 대시보드 달력 -function dateSet(itm){ - var dateText = $(itm).siblings("p").text(); - dateText = new Date(dateText); - if($(itm).is(".btn_prev") == true){ - dateText = new Date(dateText.setDate(dateText.getDate() - 1)); - var yyyy = dateText.getFullYear(); - var mm = dateText.getMonth() + 1; - var dd = dateText.getDate(); - var date_text = yyyy+'.'+mm+'.'+dd; - }else if($(itm).is(".btn_next") == true){ - dateText = new Date(dateText.setDate(dateText.getDate() + 1)); - var yyyy = dateText.getFullYear(); - var mm = dateText.getMonth() + 1; - var dd = dateText.getDate(); - var date_text = yyyy+'.'+mm+'.'+dd; - }else if($(itm).is(".btn_today") == true){ - var date = new Date(); - var yyyy = date.getFullYear(); - var mm = date.getMonth() + 1; - var dd = date.getDate(); - var date_text = yyyy+'.'+mm+'.'+dd; - } - $(itm).siblings("p").text(date_text); -} - // 검색 초기화 function fn_searchReset(){ $("select[name*=search]").val('').prop("selected", true); @@ -179,7 +149,7 @@ function cmnPopOpen(ct, ctNum){ "visibility":"visible" }); // 컨텐츠의 좌표값을 알아내서 위치 조정 - if (ctNum == 1) { + if (ctNum == 0) { $(".commonPop").eq(ctNum).css({ top: 116 + "px", left: objOfs.left - 81 + "px", @@ -188,56 +158,14 @@ function cmnPopOpen(ct, ctNum){ } } -/* 공통팝업 닫기 */ -/*function cmnPopClose(){ - $(".commonPop").hide(); -}*/ - //페스워드 유효성 체크 function validatePassword(character) { return /^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$/.test(character); } -//이메일 양식 -function setEmailNum(){ - $("#certificationEmail").keyup(function(event){ - if (!(event.keyCode >=37 && event.keyCode<=40)) { - var inputVal = $(this).val(); - $(this).val(inputVal.replace(/[^a-z0-9@._-]/gi,'')); - } - }); -} - //숫자만 입력 function setNumberOnly(){ $("input:text[numberOnly]").on("keyup", function(){ $(this).val($(this).val().replace(/[^0-9]/g,"")); }); } - -//캐시 입력포멧 -function setCashOnly(){ - $("input:text[cashOnly]").on("keyup", function(){ - $(this).val($(this).val().replace(/[^0-9.]/g,"")); - }); -} - - //영어 숫자만 입력 -function setEngNum(){ - $("#certificationNameEn").keyup(function(event){ - if (!(event.keyCode >=37 && event.keyCode<=40)) { - var inputVal = $(this).val(); - $(this).val(inputVal.replace(/[^a-z0-9\s]/gi,'')); - } - }); -} - - // 한글만 입력받도록 -function setKogNum(){ - $("#certificationNameKr").keyup(function(event){ - if (!(event.keyCode >=37 && event.keyCode<=40)) { - var inputVal = $(this).val(); - $(this).val(inputVal.replace(/[a-z0-9]/gi,'')); - } - }); -}