diff --git a/src/main/java/itn/com/cmm/interceptor/InterceptorHandler.java b/src/main/java/itn/com/cmm/interceptor/InterceptorHandler.java index 2bd3ad86..96696730 100644 --- a/src/main/java/itn/com/cmm/interceptor/InterceptorHandler.java +++ b/src/main/java/itn/com/cmm/interceptor/InterceptorHandler.java @@ -56,6 +56,8 @@ public class InterceptorHandler extends HandlerInterceptorAdapter{ && !name.toLowerCase().contains("di") && !name.toLowerCase().contains("mbldn") && !name.toLowerCase().contains("mberid") + && !name.toLowerCase().contains("userid") + && !name.toLowerCase().contains("id_text") && !name.toLowerCase().contains("mberemailadres") && !name.toLowerCase().contains("recommendid") && !name.toLowerCase().contains("mbernm") 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 31e926c3..fc5bfecd 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 @@ -768,7 +768,7 @@ public class MjonKakaoATController { channelIDVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); if("".equals(channelIDVO.getSearchSortCnd())){ //최초조회시 최신것 조회List - channelIDVO.setSearchSortCnd("profileId"); + channelIDVO.setSearchSortCnd("lastUpdtPnttm"); channelIDVO.setSearchSortOrd("desc"); } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java index a05f3b9f..60d01ef7 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java @@ -14,12 +14,18 @@ import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.idgnr.EgovIdGnrService; import itn.let.kakao.kakaoComm.KakaoVO; import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService; +import itn.let.mjo.mjocommon.MjonHolidayApi; import itn.let.mjo.msg.service.MjonMsgVO; import itn.let.mjo.msg.service.impl.MjonMsgDAO; import itn.let.mjo.msgdata.service.MjonMsgReturnVO; import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO; +import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; +import itn.let.mjo.msgholiday.service.MsgHolidayVO; +import itn.let.mjo.msgholiday.service.impl.MsgHolidayDAO; import itn.let.mjo.pay.service.MjonPayService; import itn.let.mjo.pay.service.MjonPayVO; +import itn.let.sym.site.service.JoinSettingVO; +import itn.let.sym.site.service.impl.SiteManagerDAO; @Service("kakaoAlimTalkService") public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements KakaoAlimTalkService{ @@ -33,6 +39,12 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements @Resource(name="kakaoAlimTalkDAO") private KakaoAlimTalkDAO kakaoAlimTalkDAO; + @Resource(name="siteManagerDAO") + SiteManagerDAO siteManagerDAO; + + @Resource(name="MsgHolidayDAO") + private MsgHolidayDAO msgHolidayDAO; + @Resource(name = "egovMjonMsgIdGnrService") private EgovIdGnrService idgenMsgId; @@ -95,7 +107,52 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements //카카오 알림톡 전송 리스트 List kakaoAtSandList = new ArrayList(); - + + //야간스미싱 알림여부 정보 불러오기 + JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); + String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); + + //스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수 + boolean spamSmishingPassStatus = false; //야간스미싱 알림여부가 활성화인 경우 false, 비활성화인경우 true 값을 가지도록 한다. + + //야간스미싱알리 여부가 비활성화 인경우 무조건 문자를 즉시 보내도록 한다. + //현재는 평일, 주말, 휴일 상관없이 N 이면 30분 딜레이 없이 발송 처리하도록 함. + if(holiSmishingNoti.equals("Y")) { + + MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); + + msgAlarmSetVO.setUseYn("Y"); + msgAlarmSetVO.setFirstIndex(0); + + List resultAlarmList = msgHolidayDAO.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 = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); + + MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); + + boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); + + spamSmishingPassStatus = smishingAlarmPassSts; + }else { + + spamSmishingPassStatus = true; + + } + + String atSmishingYn = kakaoVO.getAtSmishingYn(); + + if(spamSmishingPassStatus) { + atSmishingYn = "N"; + } + /** 카카오 알림톡 전송 리스트 생성 (시작)-------------------------------------------*/ for(int i = 0; i < callToCnt; i++) { @@ -159,7 +216,7 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements } - if(kakaoVO.getAtSmishingYn().equals("Y")) { + if(atSmishingYn.equals("Y")) { String sandDate = ""; if(kakaoVO.getDivideChk().equals("Y")) { @@ -293,7 +350,14 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements mjonMsgVO.setBefCash(kakaoVO.getBefCash()); mjonMsgVO.setBefPoint(kakaoVO.getBefPoint()); mjonMsgVO.setKakaoSubMagOrgnlTxt(kakaoVO.getKakaoSubMagOrgnlTxt()); - mjonMsgVO.setAtDelayYn(kakaoVO.getAtSmishingYn()); + + //야간 스미싱 알림 비활성화인 경우 딜레이처리 안하도록 함 20240722 우영두 수정 + if(spamSmishingPassStatus) { + mjonMsgVO.setAtDelayYn("N"); + }else { + mjonMsgVO.setAtDelayYn(kakaoVO.getAtSmishingYn()); + } + if(kakaoVO.getBizJsonYn().equals("Y")) { @@ -311,6 +375,20 @@ public class KakaoAlimTalkServiceImpl extends EgovAbstractServiceImpl implements if(msgGroupDataCnt < 1) { mjonMsgDAO.insertGroupMsgData(mjonMsgVO); kakaoAlimTalkDAO.insertKakaoSendPrice(kakaoVO); + + + try { + + //야간 스미싱 알림이 활성화 이고 알림 예외 일정에 포함되고, 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 우영두 추가 + if(holiSmishingNoti.equals("Y") && spamSmishingPassStatus && kakaoVO.getAtSmishingYn().equals("Y")) { + mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO); + } + + } catch (Exception e) { + System.out.println("++++++++++++++++++++++++++++++ spamSmishingPassStatus 알림톡 야간 스미싱 알림 데이터 입력 오류 발생 !!!!"); + } + + }else { mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); } 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 index 91a4b60d..c0295a74 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java @@ -18,12 +18,22 @@ 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.stereotype.Controller; import org.springframework.ui.ModelMap; @@ -31,15 +41,20 @@ 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.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 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.KakaoSendUtil; @@ -51,9 +66,13 @@ 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.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; @@ -104,6 +123,9 @@ public class KakaoAlimTalkSendController { @Resource(name = "egovSiteManagerService") EgovSiteManagerService egovSiteManagerService; + @Resource(name = "MsgHolidayService") + private MsgHolidayService msgHolidayService; + @Autowired KakaoApiProfile kakaoApiProfile; @@ -193,6 +215,569 @@ public class KakaoAlimTalkSendController { return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView"; } + + + /* + * 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() > 501) { + errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다."; + 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; + } + + 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; + } // 카카오 템플릿 목록 조회 @@ -769,11 +1354,44 @@ public class KakaoAlimTalkSendController { JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - //Slack으로 메세지 전송 처리 - MjonCommon comm = new MjonCommon(); - comm.getAdminKakaoAtSandSlack(kakaoVO); + 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.getAdminKakaoAtSandSlack(kakaoVO); + + } + + } + } } diff --git a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java index f169c54d..d5cf36fa 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java +++ b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java @@ -99,6 +99,10 @@ public class KakaoSentVO extends UserDefaultVO{ private String callToComma; private String callFromComma; + private String atDelayYn; //알림톡 30분 지연 유무 + private String atDelayCompleteYn; //알림톡 30분 지연 승인/취소 처리 여부 + private Date atDelayOrgTime; //알림톡 30분 지연에 대한 원래 시간 (-30분 처리된 시간) + public String getCallToComma() { return callToComma; } @@ -545,6 +549,24 @@ public class KakaoSentVO extends UserDefaultVO{ public void setFailCount(int failCount) { this.failCount = failCount; } + public String getAtDelayYn() { + return atDelayYn; + } + public void setAtDelayYn(String atDelayYn) { + this.atDelayYn = atDelayYn; + } + public String getAtDelayCompleteYn() { + return atDelayCompleteYn; + } + public void setAtDelayCompleteYn(String atDelayCompleteYn) { + this.atDelayCompleteYn = atDelayCompleteYn; + } + public Date getAtDelayOrgTime() { + return atDelayOrgTime; + } + public void setAtDelayOrgTime(Date atDelayOrgTime) { + this.atDelayOrgTime = atDelayOrgTime; + } diff --git a/src/main/java/itn/let/mjo/mjocommon/MjonHolidayApi.java b/src/main/java/itn/let/mjo/mjocommon/MjonHolidayApi.java new file mode 100644 index 00000000..71f24e95 --- /dev/null +++ b/src/main/java/itn/let/mjo/mjocommon/MjonHolidayApi.java @@ -0,0 +1,234 @@ +package itn.let.mjo.mjocommon; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.springframework.stereotype.Component; + +import com.ibm.icu.text.SimpleDateFormat; + +import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; +import itn.let.mjo.msgholiday.service.MsgHolidayVO; + +@Component +public class MjonHolidayApi { + + public List getYearHolidayApiData(MsgHolidayVO msgHolidayVO) throws Exception{ + + try { + + String sendUrl = "http://apis.data.go.kr/B090041/openapi/service/SpcdeInfoService/getHoliDeInfo?"; + String numOfRows = "100"; + String serviceKey = "J8QXC%2BtOGvxwmH8blG7nmqIq%2B0MrkNrxTo1PCmFMRdtSldlGN8vWDW2NpZ2om8k9LctZT6oubfFt5dMmbEDeoA%3D%3D"; + String solYear = msgHolidayVO.getSearchHoliYear(); + String frstRegisterId = msgHolidayVO.getFrstRegisterId(); + + + String strUrl = sendUrl + "&solYear=" + solYear + "&numOfRows=" + numOfRows + "&serviceKey=" + serviceKey; + + HttpClient httpClient = HttpClientBuilder.create().build(); + HttpGet httpGet = new HttpGet(strUrl); + httpGet.addHeader("Content-type", "application/json"); + httpGet.addHeader("Accept", "application/json"); + + HttpResponse response = httpClient.execute(httpGet); + + String result = ""; + String statusCode = Integer.toString(response.getStatusLine().getStatusCode()); + + if(statusCode.equals("200")) { + + result = EntityUtils.toString(response.getEntity()); + + result = new String(result.getBytes("iso-8859-1"));//한글 깨짐 현상이 있어서 변환 해줌. + //System.out.println(result); + JSONParser parser = new JSONParser(); + Object obj = parser.parse(result); + JSONObject object = (JSONObject) obj; + + Object objResp = parser.parse(object.get("response").toString()); + JSONObject objectResp = (JSONObject) objResp; + + Object objBody = parser.parse(objectResp.get("body").toString()); + JSONObject objectBody = (JSONObject) objBody; + + Object objItems = parser.parse(objectBody.get("items").toString()); + JSONObject objectItems = (JSONObject) objItems; + + JSONArray objItemArr = (JSONArray) objectItems.get("item"); + + List msgHolidayVoList = new ArrayList(); + + for(Object tmpObj : objItemArr) { + + JSONObject tmpObject = (JSONObject) tmpObj; + MsgHolidayVO tmpMsgHolidayVO = new MsgHolidayVO(); + + String isHoli = tmpObject.get("isHoliday").toString(); + String holiNm = tmpObject.get("dateName").toString(); + String holiDate = tmpObject.get("locdate").toString(); + + + if(isHoli.equals("Y")) { + + tmpMsgHolidayVO.setHolidayNm(holiNm); + tmpMsgHolidayVO.setHolidayDate(holiDate); + tmpMsgHolidayVO.setHolidayType("1"); + tmpMsgHolidayVO.setApiType("Y"); + tmpMsgHolidayVO.setFrstRegisterId(frstRegisterId); + tmpMsgHolidayVO.setLastUpdusrId(frstRegisterId); + + msgHolidayVoList.add(tmpMsgHolidayVO); + + } + + + } + + return msgHolidayVoList; + + }else { + return null; + } + + } catch (Exception e) { + System.out.println("+++++++++++++++++++++++++++++++++ getYearHolidayApiData Method Error!!!!" + e); + return null; + } + + } + + + public boolean getHolidaySmishingPassStatus(List resultAlarmList, List resultHolidayList) throws Exception{ + + boolean holiCompareSts = false; //공휴일 일치 날자가 있는지 여부 + boolean smishingAlarmPassSts = false; //스미싱 알람 Pass 시킬건지 여부 + + //현재 날짜의 요일 구하기 + Date currentDate = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DATE); + + calendar.setTime(currentDate); + + // 3. 텍스트 요일 구하기 (숫자) + int dayOfWeekNumber = calendar.get(Calendar.DAY_OF_WEEK); + // 4. 요일 출력 - 1은 일요일, 7은 토요일 + //System.out.println(dayOfWeekNumber); // 7 + + + //월에 대한 자릿수 처리 : 10미만은 앞에 0을 추가해주어 자릿수 맞춰준다. + String strMonth = ""; + if((month +1) < 10) { + strMonth = "0" + Integer.toString(month +1); + }else { + strMonth = Integer.toString(month + 1); + } + + String strNowDate = year + "-" + strMonth + "-" + day; + + for(MsgHolidayVO holiVO : resultHolidayList) { + + String holiDate = holiVO.getHolidayDate(); + + if(strNowDate.equals(holiDate)) { + + //System.out.println("공휴일이 동일한 날이 있습니다."); + holiCompareSts = true; + break; + } + + } + + + for(MsgAlarmSetVO alarmVO : resultAlarmList) { + + String alarmType = alarmVO.getAlarmType(); + String startTime = alarmVO.getAlarmStart(); + String sDate = strNowDate + " " + startTime; + + String endTime = alarmVO.getAlarmEnd(); + String eDate = strNowDate + " " + endTime; + + Date nowDate = currentDate; + Date startDate = sdf.parse(sDate); + Date endDate = sdf.parse(eDate); + + //평일인 경우 비교 + if(dayOfWeekNumber > 1 && dayOfWeekNumber < 7 ) { + + if(alarmType.equals("W")) { + + int copStart = nowDate.compareTo(startDate); + int copEnd = nowDate.compareTo(endDate); + + if(copStart > 0 && copEnd < 0) { + + //System.out.println("평일 알림 일정 해당시간에 포함됩니다."); + smishingAlarmPassSts = true; + break; + + } + + } + + }else { + + //주말인 경우 비교 + if(alarmType.equals("E")) { + + int copStart = nowDate.compareTo(startDate); + int copEnd = nowDate.compareTo(endDate); + + if(copStart > 0 && copEnd < 0) { + + //System.out.println("주말 알림 일정 해당시간에 포함됩니다."); + smishingAlarmPassSts = true; + break; + + } + + } + + } + + //공휴일인 경우 비교 + if(alarmType.equals("H")) { + + if(holiCompareSts) {//오늘 날짜가 공휴일이면 실행 + + int copStart = nowDate.compareTo(startDate); + int copEnd = nowDate.compareTo(endDate); + + if(copStart > 0 && copEnd < 0) { + + //System.out.println("공휴일 알림 일정 해당시간에 포함됩니다."); + smishingAlarmPassSts = true; + break; + + } + + } + + } + + } + + return smishingAlarmPassSts; + } + +} diff --git a/src/main/java/itn/let/mjo/msg/service/MjonMsgService.java b/src/main/java/itn/let/mjo/msg/service/MjonMsgService.java index f17cfdb7..7503e1f9 100644 --- a/src/main/java/itn/let/mjo/msg/service/MjonMsgService.java +++ b/src/main/java/itn/let/mjo/msg/service/MjonMsgService.java @@ -231,4 +231,9 @@ public interface MjonMsgService { MjonMsgVO selectApiSttstList(MjonMsgVO mjonMsgVO) throws Exception; + int selectCallFromNumberChk(MjonMsgVO mjonMsgVO) throws Exception; + + List selectMjonHoliMsgList(MjonMsgVO mjonMsgVO) throws Exception; + + void updateHoliMsgResultYn(MjonMsgVO mjonMsgVO) throws Exception; } diff --git a/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java b/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java index 4235df2f..85043c29 100644 --- a/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java +++ b/src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java @@ -197,6 +197,7 @@ public class MjonMsgVO extends ComDefaultVO{ private int pictSendCount; private int atSendCount; private int ftSendCount; + private int faxSendCount; private String searchDelayMsgYn; @@ -208,6 +209,8 @@ public class MjonMsgVO extends ComDefaultVO{ private String bookmarkYn = "N"; + private String cancelResultYn = ""; //야간스미싱 알림에 따른 관리자 결과(회원이용정지 또는 문자발송 취소) 처리 여부 N:미처리, Y:처리완료 + public String getSearchDelayMsgYn() { return searchDelayMsgYn; } @@ -1610,6 +1613,12 @@ public class MjonMsgVO extends ComDefaultVO{ public void setFtSendCount(int ftSendCount) { this.ftSendCount = ftSendCount; } + public int getFaxSendCount() { + return faxSendCount; + } + public void setFaxSendCount(int faxSendCount) { + this.faxSendCount = faxSendCount; + } public int getSuccSendCnt() { return succSendCnt; } @@ -1646,4 +1655,10 @@ public class MjonMsgVO extends ComDefaultVO{ public void setBookmarkYn(String bookmarkYn) { this.bookmarkYn = bookmarkYn; } + public String getCancelResultYn() { + return cancelResultYn; + } + public void setCancelResultYn(String cancelResultYn) { + this.cancelResultYn = cancelResultYn; + } } diff --git a/src/main/java/itn/let/mjo/msg/service/impl/MjonMsgDAO.java b/src/main/java/itn/let/mjo/msg/service/impl/MjonMsgDAO.java index a61fcdd2..5108b0ac 100644 --- a/src/main/java/itn/let/mjo/msg/service/impl/MjonMsgDAO.java +++ b/src/main/java/itn/let/mjo/msg/service/impl/MjonMsgDAO.java @@ -94,6 +94,10 @@ public class MjonMsgDAO extends EgovAbstractDAO { insert("mjonMsgDAO.insertGroupMsgData", mjonMsgVO); } + public void insertSpamPassMsgData(MjonMsgVO mjonMsgVO) throws Exception{ + insert("mjonMsgDAO.insertSpamPassMsgData", mjonMsgVO); + } + public void updateMsgGroupDataForTotCntSum(MjonMsgVO mjonMsgVO) { update("mjonMsgDAO.updateMsgGroupDataForTotCntSum",mjonMsgVO); @@ -504,4 +508,18 @@ public class MjonMsgDAO extends EgovAbstractDAO { return (MjonMsgVO)select("mjonMsgDAO.selectApiSttstList", mjonMsgVO); } + public int selectCallFromNumberChk(MjonMsgVO mjonMsgVO) throws Exception{ + + return (int) select("mjonMsgDAO.selectCallFromNumberChk", mjonMsgVO); + } + + @SuppressWarnings("unchecked") + public List selectMjonHoliMsgList(MjonMsgVO mjonMsgVO) throws Exception{ + return (List)list("mjonMsgDAO.selectMjonHoliMsgList", mjonMsgVO); + } + + public void updateHoliMsgResultYn(MjonMsgVO mjonMsgVO) throws Exception{ + update("mjonMsgDAO.updateHoliMsgResultYn", mjonMsgVO); + } + } diff --git a/src/main/java/itn/let/mjo/msg/service/impl/MjonMsgServiceImpl.java b/src/main/java/itn/let/mjo/msg/service/impl/MjonMsgServiceImpl.java index 77adb54d..c9e979bb 100644 --- a/src/main/java/itn/let/mjo/msg/service/impl/MjonMsgServiceImpl.java +++ b/src/main/java/itn/let/mjo/msg/service/impl/MjonMsgServiceImpl.java @@ -31,6 +31,7 @@ import itn.let.mjo.pay.service.impl.MjonPayDAO; import itn.let.mjo.reservmsg.service.MjonResvMsgVO; import itn.let.mjo.reservmsg.service.impl.MjonReservMsgDAO; import itn.let.sym.site.service.JoinSettingVO; +import itn.let.uat.uia.service.impl.MberManageDAO; import itn.let.uss.umt.service.AdmProcHstryVO; import itn.let.uss.umt.service.impl.AdmProcHstryDAO; @@ -64,6 +65,10 @@ public class MjonMsgServiceImpl extends EgovAbstractServiceImpl implements MjonM @Resource(name="MjonReservMsgDAO") private MjonReservMsgDAO mjonReservMsgDAO; + /** mberManageDAO */ + @Resource(name="mberManageDAO") + private MberManageDAO mberManageDAO; + @Resource(name="mjonPayDAO") private MjonPayDAO mjonPayDAO; @@ -1158,4 +1163,21 @@ public class MjonMsgServiceImpl extends EgovAbstractServiceImpl implements MjonM public MjonMsgVO selectApiSttstList(MjonMsgVO mjonMsgVO) throws Exception { return mjonMsgDAO.selectApiSttstList(mjonMsgVO); } + + @Override + public int selectCallFromNumberChk(MjonMsgVO mjonMsgVO) throws Exception{ + + return mjonMsgDAO.selectCallFromNumberChk(mjonMsgVO); + } + + @Override + public List selectMjonHoliMsgList(MjonMsgVO mjonMsgVO) throws Exception{ + return mjonMsgDAO.selectMjonHoliMsgList(mjonMsgVO); + } + + @Override + public void updateHoliMsgResultYn(MjonMsgVO mjonMsgVO) throws Exception{ + mjonMsgDAO.updateHoliMsgResultYn(mjonMsgVO); + } + } 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 50ed83ae..43d09937 100644 --- a/src/main/java/itn/let/mjo/msg/web/MjonMsgController.java +++ b/src/main/java/itn/let/mjo/msg/web/MjonMsgController.java @@ -72,6 +72,8 @@ import itn.let.mjo.msgsent.service.MjonMsgRecvTestVO; import itn.let.mjo.msgsent.service.MjonMsgSentTestService; import itn.let.mjo.msgsent.service.MjonMsgSentTestVO; import itn.let.mjo.pay.service.MjonPayService; +import itn.let.mjo.payva.service.VacsVactService; +import itn.let.mjo.payva.service.VacsVactVO; import itn.let.mjo.reservmsg.service.MjonReservMsgService; import itn.let.mjo.reservmsg.service.MjonResvMsgVO; import itn.let.sts.com.StatsVO; @@ -161,6 +163,10 @@ public class MjonMsgController { @Resource(name = "EgovFileMngService") private EgovFileMngService fileService; + //전용계좌 서비스 + @Resource(name = "vacsVactService") + private VacsVactService vacsVactService; + //배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"} private String[][] sendMsgExcelValue ={ {"0" ,"번호" , "1" , "" }, @@ -1174,10 +1180,10 @@ public class MjonMsgController { } /** - * 문자전송 리스트 + * 문자예약전송 리스트 * @param searchVO * @param model - * @return uss/ion/msg/ReserveNumberList.do(에약 문자리스트) + * @return /uss/ion/msg/ReserveNumberList.do(예약 문자리스트) * @throws Exception */ @RequestMapping(value= {"/uss/ion/msg/ReserveNumberList.do"}) @@ -1245,6 +1251,267 @@ public class MjonMsgController { } + + /** + * 야간 스미싱 문자전송 리스트 + * @param searchVO + * @param model + * @return uss/ion/msg/selectHoliMsgList.do + * @throws Exception + */ + @RequestMapping(value= {"/uss/ion/msg/selectHoliMsgList.do"}) + public String selectHoliMsgList(@ModelAttribute("searchVO") MjonMsgVO searchVO, + HttpServletRequest request , + ModelMap model) throws Exception{ + //value 값 가져오기 +// String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ; + + /** 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("FRST_REGIST_PNTTM"); + searchVO.setSearchSortOrd("desc"); + } + + + /* + * 2024.01.26 우영두 변경 + * 기존 한달전 시작일자 지정에서 하루전으로 변경 + * 데이터 양이 너무 많이 검색되어 하루전으로 변경해 달라는 기획팀 요청 + * */ + String toDay = MJUtil.getTodayDate(); //오늘 + String beforeMonthDay = MJUtil.getBefore1DayDate(); //하루 전 + if (null == searchVO.getNtceBgnde() || searchVO.getNtceBgnde().equals("")) { + searchVO.setNtceBgnde(beforeMonthDay); + searchVO.setNtceEndde(toDay); + } + + List resultList = new ArrayList(); + resultList = mjonMsgService.selectMjonHoliMsgList(searchVO); + model.addAttribute("resultList", resultList); + + //문자발송 실패 결과 코드정보 리스트 불러오기 + MjonMsgResultCodeVO mjonMsgResultCodeVO = new MjonMsgResultCodeVO(); + List resultMsgCodeList = mjonMsgService.selectMsgResultCodeAllList(mjonMsgResultCodeVO); + + model.addAttribute("resultMsgCodeList", resultMsgCodeList); + + paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MjonMsgVO)resultList.get(0)).getTotCnt() : 0); + model.addAttribute("paginationInfo", paginationInfo); + + return "/uss/ion/msg/SendHoliMsgList"; + + } + + /** + * 야간 스미싱 문자전송 사용자 이용정지 및 예약문자 취소 처리 + * @param searchVO + * @param model + * @return uss/ion/msg/updateUserMsgData.do + * @throws Exception + */ + @RequestMapping(value= {"/uss/ion/msg/updateUserMsgData.do"}) + public String updateUserMsgData(@RequestParam("checkedIdForDel") String checkedIdForUpt, + HttpServletRequest request , + ModelMap model) throws Exception{ + + try { + + LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + String adminId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + + //파라미터 데이터 파싱해주기 + String[] splitCheckId = checkedIdForUpt.split(","); + + if(splitCheckId != null && splitCheckId.length > 0) { + + for(String checkId : splitCheckId) { + + if(checkId != null && checkId.length() > 0) { //개별 데이터에 대해서 예약 문자 취소 및 회원 이용정지 + + String[] splitUserMsg = checkId.split("§"); + + if(splitUserMsg != null && splitUserMsg.length > 0) { + + MjonResvMsgVO mjonResvMsgVO = new MjonResvMsgVO(); + + + String mberId = splitUserMsg[0]; + String msgGroupId = splitUserMsg[1]; + String reserveYn = splitUserMsg[2]; + + mjonResvMsgVO.setUserId(mberId);//회원 아이디 + mjonResvMsgVO.setMsgGroupId(msgGroupId);//취소 문자 그룹 아이디 + + if(reserveYn.equals("Y")) { + + int count = mjonMsgService.deleteMsgDelaySendCancelData(mjonResvMsgVO); + + } + + MberManageVO mberManageVO = new MberManageVO(); + + //이용자 상태를 변경하는 관리자 아이디 입력 + mberManageVO.setMberSttusUpdusrId(adminId); + mberManageVO.setMberId(mberId); + + //회원 정보 조회 + MberManageVO resultMberVO = mberManageService.selectMber(mberId); + + if(resultMberVO != null) { //회원 정보가 있으면 + + //회원상태가 이용정지 상태가 아니면 + if(!resultMberVO.getMberSttus().equals("B")) { + + //회원 상태 변경하기 + int resultCnt = 0; + mberManageVO.setMberSttus("B"); //이용정지 상태로 변경 + mberManageVO.setSmiMemo("시스템 스팸 필터링에 의한 이용정지"); + resultCnt = mberManageService.updateUserMsttus(mberManageVO); + + if(resultCnt > 0) { + + if(mberManageVO.getMberSttus().equals("B")) { //회원 이용정지를 시키는 경우 가상계좌도 함께 해지 시킨다. + + //가상계좌 보유 여부 체크 + //대상 리스트 가져오기 + VacsVactVO vacsVactVO = new VacsVactVO(); + vacsVactVO.setMberId(mberId); + List myBankList = vacsVactService.selectBankAccountByUserId(vacsVactVO); //내가 할당받은 전용계좌 리스트 받아오기 + + int vacsCnt = myBankList.size(); + + //가상계좌 해지 처리 + if(vacsCnt > 0) { + + for(int i=0; i < vacsCnt; i++) { + + String acctNo = myBankList.get(i).getAcctNo(); + + VacsVactVO vacsVO = new VacsVactVO(); + vacsVO.setMberId(mberId); //회원 아이디 + //계좌 해지일자 생성 + Date now = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + String closeDate = sdf.format(now); + vacsVO.setCloseIl(closeDate); //해지일자 + vacsVO.setAcctNo(acctNo); //해지계좌번호 + + //계좌 상태 셋팅 0: 미할당, 1:할당, 9: 해지 + vacsVO.setAcctSt("9"); + int blockCnt = vacsVactService.updateVacsAccountUsrBlock(vacsVO); + + } + + } + + } + + // 관리자 메모 + String memo = ""; + memo = "회원상태 변경 : 이용정지, 사유 : 알림 비활성화 시간대 발송(예약) 문자내역 중 스미싱 의심으로 판단하여 이용자 정지 처리"; + mberManageVO.setMberId(mberId); + mberManageVO.setMemoCn(memo); + mberManageVO.setFrstRegisterId(adminId); + mberManageService.insertMberMemo(mberManageVO); + + } + } + + }//회원 이용정지 처리 종료 + + //야간스미싱 알림 상태 처리 완료로 변경 + MjonMsgVO mjonMsgVO = new MjonMsgVO(); + mjonMsgVO.setUserId(mberId); //사용자 아이디 + mjonMsgVO.setMsgGroupId(msgGroupId); //문자 발송 그룹 아이디 + mjonMsgVO.setLastUpdusrId(adminId); //변경 관리자 아이디 + mjonMsgService.updateHoliMsgResultYn(mjonMsgVO); + + + } + + } + + } + + } + + } catch (Exception e) { + System.out.println("++++++++++++ updateUserMsgData Controller Error !!! "); + } + + return "redirect:/uss/ion/msg/selectHoliMsgList.do"; + + } + + + + /** + * 야간 스미싱 문자전송 사용자 이용정지 및 예약문자 취소 처리 + * @param searchVO + * @param model + * @return /uss/ion/msg/updateMsgStatusData.do + * @throws Exception + */ + @RequestMapping(value= {"/uss/ion/msg/updateMsgStatusData.do"}) + public String updateMsgStatusData(@RequestParam("checkedIdForDel") String checkedIdForUpt, + HttpServletRequest request , + ModelMap model) throws Exception{ + + try { + + LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + String adminId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + + //파라미터 데이터 파싱해주기 + String[] splitCheckId = checkedIdForUpt.split(","); + + if(splitCheckId != null && splitCheckId.length > 0) { + + for(String checkId : splitCheckId) { + + if(checkId != null && checkId.length() > 0) { //개별 데이터에 대해서 알림 미처리 문자에 대한 상태값만 완료로 변경, 회원이용정지 및 예약문자취소는 처리 안함 + + String[] splitUserMsg = checkId.split("§"); + + if(splitUserMsg != null && splitUserMsg.length > 0) { + + String mberId = splitUserMsg[0]; + String msgGroupId = splitUserMsg[1]; + + //야간스미싱 알림 상태 처리 완료로 변경 + MjonMsgVO mjonMsgVO = new MjonMsgVO(); + mjonMsgVO.setUserId(mberId); //사용자 아이디 + mjonMsgVO.setMsgGroupId(msgGroupId); //문자 발송 그룹 아이디 + mjonMsgVO.setLastUpdusrId(adminId); //변경 관리자 아이디 + mjonMsgService.updateHoliMsgResultYn(mjonMsgVO); + + } + + } + + } + + } + + } catch (Exception e) { + System.out.println("++++++++++++ updateMsgStatusData Controller Error !!! "); + } + + return "redirect:/uss/ion/msg/selectHoliMsgList.do"; + + } + + + /** * 문자전송 리스트 * @param searchVO diff --git a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainDataController.java b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainDataController.java index e6fe846c..09e0f84a 100644 --- a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainDataController.java +++ b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainDataController.java @@ -69,6 +69,7 @@ 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; @@ -77,6 +78,9 @@ 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; @@ -172,6 +176,9 @@ public class MjonMsgCampainDataController { @Resource(name = "mberGrdService") MberGrdService mberGrdService; + @Resource(name = "MsgHolidayService") + private MsgHolidayService msgHolidayService; + private static final Logger logger = LoggerFactory.getLogger(MjonMsgCampainDataController.class); /** @@ -2006,6 +2013,18 @@ public class MjonMsgCampainDataController { mjonMsgVO.setUserId(userId); + //발신번호가 등록된 유효한 번호인지 확인 + int sendCallFromCnt = mjonMsgService.selectCallFromNumberChk(mjonMsgVO); + + if(sendCallFromCnt < 1) { + + modelAndView.addObject("message", "등록된 발신번호를 찾을 수 없습니다."); + modelAndView.addObject("result", "loginFail"); + modelAndView.addObject("resultSts", resultSts); + return modelAndView; + + } + /** * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 * 현재 로그인 세션도 만료 처리함 @@ -3174,17 +3193,50 @@ public class MjonMsgCampainDataController { // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); + + String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); + // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { getAdminPhoneSendMsgData(mjonMsgVO); } - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - //Slack으로 메세지 전송 처리 - MjonCommon comm = new MjonCommon(); - comm.getAdminSandSlack(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.getAdminSandSlack(mjonMsgVO); + + } + + } } + } } diff --git a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java index 716e35cb..2ac0dff7 100644 --- a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java +++ b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainHGDataController.java @@ -41,6 +41,7 @@ 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; @@ -48,6 +49,9 @@ 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; @@ -143,6 +147,8 @@ public class MjonMsgCampainHGDataController { @Resource(name = "mberGrdService") MberGrdService mberGrdService; + @Resource(name = "MsgHolidayService") + private MsgHolidayService msgHolidayService; /** * 선거 문자 대량 발송 화면 @@ -578,6 +584,18 @@ public class MjonMsgCampainHGDataController { mjonMsgVO.setUserId(userId); + //발신번호가 등록된 유효한 번호인지 확인 + int sendCallFromCnt = mjonMsgService.selectCallFromNumberChk(mjonMsgVO); + + if(sendCallFromCnt < 1) { + + modelAndView.addObject("message", "등록된 발신번호를 찾을 수 없습니다."); + modelAndView.addObject("result", "loginFail"); + modelAndView.addObject("resultSts", resultSts); + return modelAndView; + + } + /** * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 * 현재 로그인 세션도 만료 처리함 @@ -873,6 +891,8 @@ public class MjonMsgCampainHGDataController { System.out.println("++++++++++++++ 중복제거 후 리스트 갯수 ::: "+addrDupListLen); + mjonMsgVO.setTotalCallCnt(addrDupListLen); + //수신자 총 수 * 단가 를 통해 총 결제 금액 계산 int tmpTotCallCnt = addrDupListLen; //mjonMsgVO.getCallToList().length; float tmpTotPrice = tmpTotCallCnt * tmpEachPrice; @@ -1082,18 +1102,51 @@ public class MjonMsgCampainHGDataController { // 법인폰 알람여부 체크 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); } - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - //Slack으로 메세지 전송 처리 - MjonCommon comm = new MjonCommon(); - comm.getAdminSandSlack(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.getAdminSandSlack(mjonMsgVO); + + } + + } } + } } diff --git a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java index 838763ae..f0c4f2bc 100644 --- a/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java +++ b/src/main/java/itn/let/mjo/msgcampain/web/MjonMsgCampainTWDataController.java @@ -64,6 +64,7 @@ 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; @@ -73,6 +74,9 @@ 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; @@ -167,6 +171,9 @@ public class MjonMsgCampainTWDataController { @Resource(name = "mberGrdService") MberGrdService mberGrdService; + @Resource(name = "MsgHolidayService") + private MsgHolidayService msgHolidayService; + private static final Logger logger = LoggerFactory.getLogger(MjonMsgCampainTWDataController.class); /** @@ -930,6 +937,18 @@ public class MjonMsgCampainTWDataController { mjonMsgVO.setUserId(userId); + //발신번호가 등록된 유효한 번호인지 확인 + int sendCallFromCnt = mjonMsgService.selectCallFromNumberChk(mjonMsgVO); + + if(sendCallFromCnt < 1) { + + modelAndView.addObject("message", "등록된 발신번호를 찾을 수 없습니다."); + modelAndView.addObject("result", "loginFail"); + modelAndView.addObject("resultSts", resultSts); + return modelAndView; + + } + /** * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 * 현재 로그인 세션도 만료 처리함 @@ -2057,18 +2076,51 @@ public class MjonMsgCampainTWDataController { // 법인폰 알람여부 체크 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); } - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - //Slack으로 메세지 전송 처리 - MjonCommon comm = new MjonCommon(); - comm.getAdminSandSlack(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.getAdminSandSlack(mjonMsgVO); + + } + + } } + } } @@ -2081,21 +2133,6 @@ public class MjonMsgCampainTWDataController { } - - /* - * 선거문자 20건 발송 처리 종료 - * - * */ - - - - - - - - - - /** * 선거문자 20건씩 문자 발송 - 엑셀파일 불러오기 * @param body diff --git a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java index ce1cd6a0..5148dd10 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java +++ b/src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java @@ -177,4 +177,8 @@ public interface MjonMsgDataService { public int countByMsgAddrListAjax_advc(AddrVO addrVO) throws Exception; + //팩스 거래명세서 합산 정보 + public List selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception; + + } diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java index 7e18bfd4..aa833cdf 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java @@ -361,4 +361,9 @@ public class MjonMsgDataDAO extends EgovAbstractDAO { return (int) select("mjonMsgDAO.countByMsgAddrListAjax_advc", addrVO); } + @SuppressWarnings("unchecked") + public List selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception{ + return (List) list("mjonMsgDAO.selectPayUserSumFaxList",mjonMsgVO); + } + } diff --git a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java index 79e906bf..56a847ca 100644 --- a/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java @@ -20,6 +20,7 @@ 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.MjonMsgVO; import itn.let.mjo.msg.service.impl.MjonMsgDAO; import itn.let.mjo.msgagent.service.MjonMsgAgentStsService; @@ -28,10 +29,14 @@ import itn.let.mjo.msgagent.service.impl.MjonMsgAgentStsDAO; 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.MsgHolidayVO; +import itn.let.mjo.msgholiday.service.impl.MsgHolidayDAO; import itn.let.mjo.pay.service.MjonPayService; import itn.let.mjo.pay.service.MjonPayVO; import itn.let.mjo.pay.service.impl.MjonPayDAO; import itn.let.sym.site.service.JoinSettingVO; +import itn.let.sym.site.service.impl.SiteManagerDAO; import itn.let.uat.uia.web.SendLogVO; import itn.let.uss.umt.service.MberManageVO; @@ -50,6 +55,12 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M @Resource(name="mjonMsgAgentStsDAO") private MjonMsgAgentStsDAO mjonMsgAgentStsDAO; + @Resource(name="siteManagerDAO") + SiteManagerDAO siteManagerDAO; + + @Resource(name="MsgHolidayDAO") + private MsgHolidayDAO msgHolidayDAO; + @Resource(name = "egovMjonMsgIdGnrService") private EgovIdGnrService idgenMsgId; @@ -152,6 +163,46 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId()); String hotlineAgentCode = userInfo.getHotlineAgentCode(); + //야간스미싱 알림여부 정보(관리자 알림관리 상태 정보를 모두 불러옴) 불러오기 20240722 우영두 추가 + JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); + String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); + + //스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수 + boolean spamSmishingPassStatus = false; //야간스미싱 알림여부가 활성화인 경우 false, 비활성화인경우 true 값을 가지도록 한다. + + //스팸, 스미싱 상태인 경우에만 true 처리 + //야간스미싱알리 여부가 활성화 인경우 무조건 문자를 즉시 보내도록 한다. + //스미싱 알림 일정에 등록된 날짜와 시간에 포함되면 30분 딜레이 없이 발송 처리하도록 함. + if(holiSmishingNoti.equals("Y")) { + + MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); + + msgAlarmSetVO.setUseYn("Y"); + msgAlarmSetVO.setFirstIndex(0); + + List resultAlarmList = msgHolidayDAO.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 = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); + + MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); + + boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); + + spamSmishingPassStatus = smishingAlarmPassSts; + }else { + + spamSmishingPassStatus = true; + + } + //전용 전송사가 지정되어 있으면 실행 if(!hotlineAgentCode.equals("00")) { @@ -310,6 +361,15 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M } + //야간 스미싱 알림여부가 활성화 이고 예외시간에 포함되는 경우 스팸, 스미싱, 딜레이 값을 모두 N 으로 처리 + if(spamSmishingPassStatus) { + + spamStatus = "N"; + smishingYn = "N"; + delayYn = "N"; + + } + if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 @@ -786,6 +846,17 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M } mjonMsgDAO.insertGroupMsgData(mjonMsgVO); + try { + + //야간 스미싱 알림이 활성화이고 알림 예외 일정에 포함되고 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 우영두 추가 + if(holiSmishingNoti.equals("Y") && spamSmishingPassStatus && (mjonMsgVO.getSpamStatus().equals("Y") || mjonMsgVO.getSmishingYn().equals("Y"))) { + mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO); + } + + } catch (Exception e) { + System.out.println("++++++++++++++++++++++++++++++ spamSmishingPassStatus 문자전송 야간 스미싱 알림 데이터 입력 오류 발생 !!!!"); + } + }else { mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); } @@ -2372,6 +2443,46 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M MberManageVO userInfo = mjonMsgDataDAO.selectMberManageInfo(mjonMsgVO.getUserId()); String hotlineAgentCode = userInfo.getHotlineAgentCode(); + //야간스미싱 알림여부 정보 불러오기 + JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail(); + String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); + + System.out.println("++++++++++++++++++ holiSmishingNoti ::: "+holiSmishingNoti); + //스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수 + boolean spamSmishingPassStatus = false; //야간스미싱 알림여부가 활성화인 경우 예외 알림 일정에 포함되는 시간에는 슬랙 및 30분 딜레이를 하지 않는다. + + //스팸, 스미싱 상태인 경우에만 true 처리 + //야간스미싱알리 여부가 비활성화 인경우 무조건 문자를 즉시 보내도록 한다. + //야간 스미싱 알림 여부가 활성화 이고 스미싱 알림 일정에 등록된 날짜와 시간에 포함되면 30분 딜레이 없이 발송 처리하도록 함. + if(holiSmishingNoti.equals("Y")) { + + MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO(); + + msgAlarmSetVO.setUseYn("Y"); + msgAlarmSetVO.setFirstIndex(0); + + List resultAlarmList = msgHolidayDAO.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 = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); + + MjonHolidayApi mjonHolidayApi = new MjonHolidayApi(); + + boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList); + + spamSmishingPassStatus = smishingAlarmPassSts; + }else { + + spamSmishingPassStatus = true; + } + //전용 전송사가 지정되어 있으면 실행 if(!hotlineAgentCode.equals("00")) { @@ -2530,6 +2641,15 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M } + //스팸스미싱 예외 상태가 true 이면 30분 딜레이 및 슬랙 알림을 하지 않는다. + if(spamSmishingPassStatus) { + + spamStatus = "N"; + smishingYn = "N"; + delayYn = "N"; + + } + if(!mjonMsgVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅 @@ -3013,6 +3133,17 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M } mjonMsgDAO.insertGroupMsgData(mjonMsgVO); + try { + + //야간 스미싱 알림이 활성화이고 알림 예외 일정에 포함되고 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 우영두 추가 + if(holiSmishingNoti.equals("Y") && spamSmishingPassStatus && (mjonMsgVO.getSpamStatus().equals("Y") || mjonMsgVO.getSmishingYn().equals("Y"))) { + mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO); + } + + } catch (Exception e) { + System.out.println("++++++++++++++++++++++++++++++ spamSmishingPassStatus HG 대량 선거 문자전송 야간 스미싱 알림 데이터 입력 오류 발생 !!!!"); + } + }else { mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO); } @@ -3063,5 +3194,8 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M return mjonMsgDataDAO.countByMsgAddrListAjax_advc(addrVO); } - + @Override + public List selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception { + return mjonMsgDataDAO.selectPayUserSumFaxList(mjonMsgVO); + } } diff --git a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java index 93711c09..152f04b5 100644 --- a/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java +++ b/src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java @@ -83,12 +83,16 @@ 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; @@ -185,6 +189,9 @@ public class MjonMsgDataController { @Resource(name = "MjonMsgSentService") private MjonMsgSentService mjonMsgSentService; + @Resource(name = "MsgHolidayService") + private MsgHolidayService msgHolidayService; + private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class); /** @@ -2171,6 +2178,20 @@ public class MjonMsgDataController { 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; + + } + + /** * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 * 현재 로그인 세션도 만료 처리함 @@ -3081,20 +3102,52 @@ public class MjonMsgDataController { // 법인폰 알람여부 체크 JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); + + String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti(); + // SMS 체크 if (joinSettingVO != null && joinSettingVO.getSmsNoti().equals("Y")) { getAdminPhoneSendMsgData(mjonMsgVO); } - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - //Slack으로 메세지 전송 처리 - MjonCommon comm = new MjonCommon(); - comm.getAdminSandSlack(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.getAdminSandSlack(mjonMsgVO); + + } + + } } + } - } catch (Exception e) { throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e); } diff --git a/src/main/java/itn/let/mjo/msgholiday/service/MsgAlarmSetVO.java b/src/main/java/itn/let/mjo/msgholiday/service/MsgAlarmSetVO.java new file mode 100644 index 00000000..c1924e62 --- /dev/null +++ b/src/main/java/itn/let/mjo/msgholiday/service/MsgAlarmSetVO.java @@ -0,0 +1,66 @@ +package itn.let.mjo.msgholiday.service; + +import java.util.List; + +import itn.let.uss.umt.service.UserDefaultVO; + +public class MsgAlarmSetVO extends UserDefaultVO{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + private int alarmId; //알림 아이디 + private String alarmType; //알림 종류(W: 평일, E:주말, H:공휴일) + private String alarmStart; //알림 시작 시간 + private String alarmEnd; //알림 종료 시간 + private String useYn; //알림 사용여부(Y: 사용, N: 미사용) + + private String alarmIds; + private List alarmIdList; //알림 아이디 리스트 + + public int getAlarmId() { + return alarmId; + } + public void setAlarmId(int alarmId) { + this.alarmId = alarmId; + } + public String getAlarmType() { + return alarmType; + } + public void setAlarmType(String alarmType) { + this.alarmType = alarmType; + } + public String getAlarmStart() { + return alarmStart; + } + public void setAlarmStart(String alarmStart) { + this.alarmStart = alarmStart; + } + public String getAlarmEnd() { + return alarmEnd; + } + public void setAlarmEnd(String alarmEnd) { + this.alarmEnd = alarmEnd; + } + public String getUseYn() { + return useYn; + } + public void setUseYn(String useYn) { + this.useYn = useYn; + } + public String getAlarmIds() { + return alarmIds; + } + public void setAlarmIds(String alarmIds) { + this.alarmIds = alarmIds; + } + public List getAlarmIdList() { + return alarmIdList; + } + public void setAlarmIdList(List alarmIdList) { + this.alarmIdList = alarmIdList; + } + +} diff --git a/src/main/java/itn/let/mjo/msgholiday/service/MsgHolidayService.java b/src/main/java/itn/let/mjo/msgholiday/service/MsgHolidayService.java new file mode 100644 index 00000000..4d4e374b --- /dev/null +++ b/src/main/java/itn/let/mjo/msgholiday/service/MsgHolidayService.java @@ -0,0 +1,34 @@ +package itn.let.mjo.msgholiday.service; + +import java.util.List; + +public interface MsgHolidayService { + + //공휴일 정보 입력하기 + public int insertHolidayData(List msgHolidayVO) throws Exception; + + //공휴일 리스트 정보 조회하기 + public List selectMsgHolidayList(MsgHolidayVO msgHolidayVO) throws Exception; + + //공휴일 상세정보 조회하기 + public MsgHolidayVO selectHolidayDetail(MsgHolidayVO msgHolidayVO) throws Exception; + + //공휴일 정보 수정하기 + public int updateHolidayData(MsgHolidayVO msgHolidayVO) throws Exception; + + //공휴일 정보 삭제하기 + public int deleteHolidayData(MsgHolidayVO msgHolidayVO) throws Exception; + + //알림 일정 추가하기 + public int insertAlarmSettingData(MsgAlarmSetVO msgAlarmSetVO) throws Exception; + + //알림 일정 리스트 정보 조회하기 + public List selectAlarmSettingList(MsgAlarmSetVO msgAlarmSetVO) throws Exception; + + //알림 일정 상태정보 수정하기 + public int updateAlarmSettingDataUseYn(MsgAlarmSetVO msgAlarmSetVO) throws Exception; + + //알림 일정 삭제처리 + public int deleteAlarmSettingData(MsgAlarmSetVO msgAlarmSetVO) throws Exception; + +} diff --git a/src/main/java/itn/let/mjo/msgholiday/service/MsgHolidayVO.java b/src/main/java/itn/let/mjo/msgholiday/service/MsgHolidayVO.java new file mode 100644 index 00000000..8a90cebe --- /dev/null +++ b/src/main/java/itn/let/mjo/msgholiday/service/MsgHolidayVO.java @@ -0,0 +1,82 @@ +package itn.let.mjo.msgholiday.service; + +import java.util.List; + +import itn.let.uss.umt.service.UserDefaultVO; + +public class MsgHolidayVO extends UserDefaultVO{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + private int holidayId; + private String holidayNm; + private String holidayDate; + private String holidayType; + private String apiType; + + private String searchHoliYear; + + private String ntceBgnde; + private String ntceEndde; + + private List holidayIdList; + + public int getHolidayId() { + return holidayId; + } + public void setHolidayId(int holidayId) { + this.holidayId = holidayId; + } + public String getHolidayNm() { + return holidayNm; + } + public void setHolidayNm(String holidayNm) { + this.holidayNm = holidayNm; + } + public String getHolidayDate() { + return holidayDate; + } + public void setHolidayDate(String holidayDate) { + this.holidayDate = holidayDate; + } + public String getHolidayType() { + return holidayType; + } + public void setHolidayType(String holidayType) { + this.holidayType = holidayType; + } + public String getApiType() { + return apiType; + } + public void setApiType(String apiType) { + this.apiType = apiType; + } + public String getSearchHoliYear() { + return searchHoliYear; + } + public void setSearchHoliYear(String searchHoliYear) { + this.searchHoliYear = searchHoliYear; + } + public String getNtceBgnde() { + return ntceBgnde; + } + public void setNtceBgnde(String ntceBgnde) { + this.ntceBgnde = ntceBgnde; + } + public String getNtceEndde() { + return ntceEndde; + } + public void setNtceEndde(String ntceEndde) { + this.ntceEndde = ntceEndde; + } + public List getHolidayIdList() { + return holidayIdList; + } + public void setHolidayIdList(List holidayIdList) { + this.holidayIdList = holidayIdList; + } + +} diff --git a/src/main/java/itn/let/mjo/msgholiday/service/impl/MsgHolidayDAO.java b/src/main/java/itn/let/mjo/msgholiday/service/impl/MsgHolidayDAO.java new file mode 100644 index 00000000..6d17f463 --- /dev/null +++ b/src/main/java/itn/let/mjo/msgholiday/service/impl/MsgHolidayDAO.java @@ -0,0 +1,62 @@ +package itn.let.mjo.msgholiday.service.impl; + +import java.util.List; + +import org.springframework.stereotype.Repository; + +import egovframework.rte.psl.dataaccess.EgovAbstractDAO; +import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; +import itn.let.mjo.msgholiday.service.MsgHolidayVO; + +@Repository("MsgHolidayDAO") +public class MsgHolidayDAO extends EgovAbstractDAO{ + + + //기존 동일 년도의 공휴일 정보 조회 및 삭제 처리 + public int deleteDuplicateHolidayApiData(MsgHolidayVO msgHolidayVO) throws Exception{ + + return update("MsgHolidayDAO.deleteDuplicateHolidayApiData", msgHolidayVO); + } + + + //신규 api 공휴일 데이터 추가 + public int insertHolidayData(List msgHolidayVO) throws Exception{ + + return update("MsgHolidayDAO.insertHolidayData", msgHolidayVO); + + } + + @SuppressWarnings("unchecked") + public List selectMsgHolidayList(MsgHolidayVO msgHolidayVO) throws Exception{ + return (List) list("MsgHolidayDAO.selectMsgHolidayList",msgHolidayVO); + } + + public MsgHolidayVO selectHolidayDetail(MsgHolidayVO msgHolidayVO) throws Exception{ + return (MsgHolidayVO) select("MsgHolidayDAO.selectHolidayDetail", msgHolidayVO); + } + + public int updateHolidayData(MsgHolidayVO msgHolidayVO) throws Exception{ + return update("MsgHolidayDAO.updateHolidayData",msgHolidayVO); + } + + public int deleteHolidayData(MsgHolidayVO msgHolidayVO) throws Exception{ + return update("MsgHolidayDAO.deleteHolidayData", msgHolidayVO); + } + + public int insertAlarmSettingData(MsgAlarmSetVO msgAlarmSetVO) throws Exception{ + return update("MsgHolidayDAO.insertAlarmSettingData", msgAlarmSetVO); + } + + @SuppressWarnings("unchecked") + public List selectAlarmSettingList(MsgAlarmSetVO msgAlarmSetVO) throws Exception{ + return (List) list("MsgHolidayDAO.selectAlarmSettingList", msgAlarmSetVO); + } + + public int updateAlarmSettingDataUseYn(MsgAlarmSetVO msgAlarmSetVO) throws Exception{ + return update("MsgHolidayDAO.updateAlarmSettingDataUseYn", msgAlarmSetVO); + } + + public int deleteAlarmSettingData(MsgAlarmSetVO msgAlarmSetVO) throws Exception{ + return update("MsgHolidayDAO.deleteAlarmSettingData", msgAlarmSetVO); + } +} diff --git a/src/main/java/itn/let/mjo/msgholiday/service/impl/MsgHolidayServiceImpl.java b/src/main/java/itn/let/mjo/msgholiday/service/impl/MsgHolidayServiceImpl.java new file mode 100644 index 00000000..699473e5 --- /dev/null +++ b/src/main/java/itn/let/mjo/msgholiday/service/impl/MsgHolidayServiceImpl.java @@ -0,0 +1,79 @@ +package itn.let.mjo.msgholiday.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; +import itn.let.mjo.msgholiday.service.MsgHolidayService; +import itn.let.mjo.msgholiday.service.MsgHolidayVO; + +@Service("MsgHolidayService") +public class MsgHolidayServiceImpl extends EgovAbstractServiceImpl implements MsgHolidayService{ + + @Resource(name="MsgHolidayDAO") + private MsgHolidayDAO msgHolidayDAO; + + + @Override + public int insertHolidayData(List msgHolidayVO) throws Exception{ + + //기존 데이터에 같은 해의 API로 입력된 공휴일 정보가 있으면 삭제처리를 먼저 해준다. + MsgHolidayVO tmpMsgHolidayVO = new MsgHolidayVO(); + String searchHoliYear = msgHolidayVO.get(0).getHolidayDate().substring(0,4); + String apiType = msgHolidayVO.get(0).getApiType(); + + //공공데이터 포털에서 공휴일을 받아오는 경우 기존에 등록된 공휴일 정보를 삭제 후 등록해준다. + if(apiType.equals("Y")) { + + tmpMsgHolidayVO.setSearchHoliYear(searchHoliYear); + msgHolidayDAO.deleteDuplicateHolidayApiData(tmpMsgHolidayVO); + + } + + return msgHolidayDAO.insertHolidayData(msgHolidayVO); + } + + @Override + public List selectMsgHolidayList(MsgHolidayVO msgHolidayVO) throws Exception{ + return msgHolidayDAO.selectMsgHolidayList(msgHolidayVO); + } + + @Override + public MsgHolidayVO selectHolidayDetail(MsgHolidayVO msgHolidayVO) throws Exception{ + return msgHolidayDAO.selectHolidayDetail(msgHolidayVO); + } + + @Override + public int updateHolidayData(MsgHolidayVO msgHolidayVO) throws Exception{ + return msgHolidayDAO.updateHolidayData(msgHolidayVO); + } + + @Override + public int deleteHolidayData(MsgHolidayVO msgHolidayVO) throws Exception{ + return msgHolidayDAO.deleteHolidayData(msgHolidayVO); + } + + @Override + public int insertAlarmSettingData(MsgAlarmSetVO msgAlarmSetVO) throws Exception{ + return msgHolidayDAO.insertAlarmSettingData(msgAlarmSetVO); + } + + @Override + public List selectAlarmSettingList(MsgAlarmSetVO msgAlarmSetVO) throws Exception{ + return msgHolidayDAO.selectAlarmSettingList(msgAlarmSetVO); + } + + @Override + public int updateAlarmSettingDataUseYn(MsgAlarmSetVO msgAlarmSetVO) throws Exception{ + return msgHolidayDAO.updateAlarmSettingDataUseYn(msgAlarmSetVO); + } + + @Override + public int deleteAlarmSettingData(MsgAlarmSetVO msgAlarmSetVO) throws Exception{ + return msgHolidayDAO.deleteAlarmSettingData(msgAlarmSetVO); + } +} diff --git a/src/main/java/itn/let/mjo/msgholiday/web/MsgHolidayController.java b/src/main/java/itn/let/mjo/msgholiday/web/MsgHolidayController.java new file mode 100644 index 00000000..43b13862 --- /dev/null +++ b/src/main/java/itn/let/mjo/msgholiday/web/MsgHolidayController.java @@ -0,0 +1,642 @@ +package itn.let.mjo.msgholiday.web; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; +import java.util.List; + +import javax.annotation.Resource; + +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.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +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.MJUtil; +import itn.com.cmm.util.RedirectUrlMaker; +import itn.com.utl.fcc.service.EgovStringUtil; +import itn.let.mail.service.StatusResponse; +import itn.let.mjo.mjocommon.MjonHolidayApi; +import itn.let.mjo.msgholiday.service.MsgAlarmSetVO; +import itn.let.mjo.msgholiday.service.MsgHolidayService; +import itn.let.mjo.msgholiday.service.MsgHolidayVO; + +@Controller +public class MsgHolidayController { + + @Resource(name = "MsgHolidayService") + private MsgHolidayService msgHolidayService; + + @Autowired + MjonHolidayApi mjonHolidayApi; + + /** + * 공휴일 관리 리스트 화면 + * @param searchVO + * @param model + * @return "/let/mjo/holiday/selectHolidayList.do" + * @throws Exception + */ + @RequestMapping("/let/mjo/holiday/selectHolidayList.do") + public String selectHolidayList(@ModelAttribute("searchVO") MsgHolidayVO searchVO, + ModelMap model) throws Exception{ + + /** 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("holidayDate"); + searchVO.setSearchSortOrd("desc"); + } + + /* + * 2024.01.26 우영두 변경 + * 기존 한달전 시작일자 지정에서 하루전으로 변경 + * 데이터 양이 너무 많이 검색되어 하루전으로 변경해 달라는 기획팀 요청 + * */ + String toDay = MJUtil.getTodayDate(); //오늘 + String endDay = ""; + + + if (null == searchVO.getNtceBgnde() || searchVO.getNtceBgnde().equals("")) { + searchVO.setNtceBgnde(toDay); + + //현재년도의 12월 31일로 종료일을 셋팅 + Calendar cal = Calendar.getInstance(); + String year = Integer.toString(cal.get(Calendar.YEAR)); + + endDay = year +"-"+"12-31"; + searchVO.setNtceEndde(endDay); + } + + List resultList = msgHolidayService.selectMsgHolidayList(searchVO); + + model.addAttribute("resultList", resultList); + + paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MsgHolidayVO)resultList.get(0)).getTotCnt() : 0); + model.addAttribute("paginationInfo", paginationInfo); + + return "/holiday/MsgHolidayList"; + + } + + /** + * 공휴일 관리 리스트 삭제 처리 + * @param String + * @param model + * @return "/let/mjo/holiday/deleteHolidayList.do" + * @throws Exception + */ + @RequestMapping("/let/mjo/holiday/deleteHolidayList.do") + public String deleteHolidayList(@RequestParam("checkedIdForDel") String checkedIdForUpt, + ModelMap model) throws Exception{ + + try { + + String[] idArr = checkedIdForUpt.split(","); + + MsgHolidayVO msgHolidayVO = new MsgHolidayVO(); + List idList = Arrays.asList(idArr); + + msgHolidayVO.setHolidayIdList(idList); + + int resultCnt = msgHolidayService.deleteHolidayData(msgHolidayVO); + + } catch (Exception e) { + System.out.println("+++++++++++++++++++++++++++++ deleteHolidayList Error !!! "); + } + + return "redirect:/let/mjo/holiday/selectHolidayList.do"; + } + + /** + * 공휴일 관리 공공데이터 포털에서 공휴일 정보 받아오기 API + * @param MsgHolidayVO + * @param model + * @return "/let/mjo/holiday/getHolidayApiDataAjax.do" + * @throws Exception + */ + @RequestMapping("/let/mjo/holiday/getHolidayApiDataAjax.do") + public String getHolidayApiDataAjax(MsgHolidayVO msgHolidayVO, RedirectAttributes redirectAttributes) throws Exception{ + + try { + + 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("/uat/uia/EgovLoginUsr.do"); + return redirectUrlMaker.getRedirectUrl(); + + } + + String searchHoliYear = msgHolidayVO.getSearchHoliYear(); + + if(searchHoliYear == null) {//년도 파라미터가 없으면 현재 년도를 넘겨준다. + + Calendar cal = Calendar.getInstance(); + String year = Integer.toString(cal.get(Calendar.YEAR)); + + msgHolidayVO.setSearchHoliYear(year); + + } + + //공휴일 등록요청한 아이디를 셋팅 + msgHolidayVO.setFrstRegisterId(userId); + + //공공데이터 포털에서 공휴일 API를 통하여 정보를 받아온다. + List msgHolidayList = mjonHolidayApi.getYearHolidayApiData(msgHolidayVO); + + int resultCnt = msgHolidayService.insertHolidayData(msgHolidayList); + + } catch (Exception e) { + System.out.println("+++++++++++++++++++++++++++++++++ getHolidayApiDataAjax Controller Error!!!! " + e); + redirectAttributes.addFlashAttribute("message", "오류가 발생하였습니다."); + RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/let/mjo/holiday/selectHolidayList.do"); + return redirectUrlMaker.getRedirectUrl(); + } + + redirectAttributes.addFlashAttribute("message", "공휴일 등록이 완료 되었습니다."); + RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/let/mjo/holiday/selectHolidayList.do"); + return redirectUrlMaker.getRedirectUrl(); + } + + /** + * 공휴일 관리 공휴일 정보 등록 팝업 화면 + * @param MsgHolidayVO + * @param model + * @return "/uss/umt/holiday/selectHolidayModifyPopupAjax.do" + * @throws Exception + */ + @RequestMapping("/uss/umt/holiday/selectHolidayModifyPopupAjax.do") + public String selectHolidayModifyPopupAjax(MsgHolidayVO msgHolidayVO, ModelMap model) throws Exception{ + + String toDay = MJUtil.getTodayDate(); //오늘 + msgHolidayVO.setHolidayDate(toDay); + + model.addAttribute("result", msgHolidayVO); + + return "/holiday/popup/MsgHolidayModifyPopup"; + } + + /** + * 공휴일 관리 공휴일 정보 신규 등록 처리 + * @param MsgHolidayVO + * @param model + * @return "/let/mjo/holiday/insertHolidayRegistAjax.do" + * @throws Exception + */ + @RequestMapping("/let/mjo/holiday/insertHolidayRegistAjax.do") + public ResponseEntity insertHolidayRegistAjax(@RequestBody MsgHolidayVO msgHolidayVO, 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() + ) + ); + + } + + //공공데이터 포털이 아닌 일반 등록 타입으로 등록해 준다. + msgHolidayVO.setApiType("N"); + msgHolidayVO.setFrstRegisterId(userId); + + //캘린더에서 넘어오는 날짜에서 하이픈을 삭제해준다. + String holidayDate = msgHolidayVO.getHolidayDate().replace("-", ""); + msgHolidayVO.setHolidayDate(holidayDate); + + List msgHolidayList = new ArrayList(); + + msgHolidayList.add(msgHolidayVO); + + int resultCnt = msgHolidayService.insertHolidayData(msgHolidayList); + + } catch (Exception e) { + System.out.println("++++++++++++++++++++++++ insertHolidayRegistAjax Controller Error!!!! "); + return ResponseEntity.ok( + new StatusResponse(HttpStatus.BAD_REQUEST + , "공휴일 등록 중 오류가 발생하였습니다.." + , LocalDateTime.now() + ) + ); + } + + return ResponseEntity.ok( + new StatusResponse(HttpStatus.OK + , "공휴일 등록을 완료하였습니다." + , LocalDateTime.now() + ) + ); + } + + /** + * 공휴일 관리 공휴일 정보 신규 등록 처리 + * @param MsgHolidayVO + * @param model + * @return "/let/mjo/holiday/insertHolidayRegistAjax.do" + * @throws Exception + */ + @RequestMapping("/uss/umt/holiday/selectHolidayDetailPopupAjax.do") + public String selectHolidayDetailPopupAjax(MsgHolidayVO msgHolidayVO, RedirectAttributes redirectAttributes, ModelMap model) throws Exception{ + + try { + + 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("/uat/uia/EgovLoginUsr.do"); + return redirectUrlMaker.getRedirectUrl(); + + } + + MsgHolidayVO resultVO = msgHolidayService.selectHolidayDetail(msgHolidayVO); + + model.addAttribute("result", resultVO); + + } catch (Exception e) { + System.out.println("+++++++++++++++++++++++++++++ selectHolidayDetailPopupAjax Error !!!! "); + redirectAttributes.addFlashAttribute("message", "오류가 발생하였습니다."); + RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/let/mjo/holiday/selectHolidayList.do"); + return redirectUrlMaker.getRedirectUrl(); + } + + return "/holiday/popup/MsgHolidayModifyPopup"; + } + + + /** + * 공휴일 관리 공휴일 정보 수정 처리 + * @param MsgHolidayVO + * @param model + * @return "/let/mjo/holiday/updateHolidayDataAjax.do" + * @throws Exception + */ + @RequestMapping("/let/mjo/holiday/updateHolidayDataAjax.do") + public ResponseEntity updateHolidayDataAjax(@RequestBody MsgHolidayVO msgHolidayVO, 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() + ) + ); + + } + + //공공데이터 포털이 아닌 일반 등록 타입으로 등록해 준다. + msgHolidayVO.setApiType("N"); + msgHolidayVO.setLastUpdusrId(userId); + + //캘린더에서 넘어오는 날짜에서 하이픈을 삭제해준다. + String holidayDate = msgHolidayVO.getHolidayDate().replace("-", ""); + msgHolidayVO.setHolidayDate(holidayDate); + + int resultCnt = msgHolidayService.updateHolidayData(msgHolidayVO); + + } catch (Exception e) { + System.out.println("++++++++++++++++++++++++ updateHolidayDataAjax Controller Error!!!! "); + return ResponseEntity.ok( + new StatusResponse(HttpStatus.BAD_REQUEST + , "공휴일 수정 중 오류가 발생하였습니다.." + , LocalDateTime.now() + ) + ); + } + + return ResponseEntity.ok( + new StatusResponse(HttpStatus.OK + , "공휴일 수정을 완료하였습니다." + , LocalDateTime.now() + ) + ); + } + + /** + * 공휴일 관리 공휴일 정보 삭제 처리(상세 팝업화면에서 삭제 요청시 처리) + * @param MsgHolidayVO + * @param model + * @return "/let/mjo/holiday/deleteHolidayDataAjax.do" + * @throws Exception + */ + @RequestMapping("/let/mjo/holiday/deleteHolidayDataAjax.do") + public ResponseEntity deleteHolidayDataAjax(@RequestBody MsgHolidayVO msgHolidayVO, 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() + ) + ); + + } + + List idList = new ArrayList(); + + String holiId = Integer.toString(msgHolidayVO.getHolidayId()); + + idList.add(holiId); + + msgHolidayVO.setHolidayIdList(idList); + int resultCnt = msgHolidayService.deleteHolidayData(msgHolidayVO); + + } catch (Exception e) { + System.out.println("++++++++++++++++++++++++ deleteHolidayDataAjax Controller Error!!!! "); + return ResponseEntity.ok( + new StatusResponse(HttpStatus.BAD_REQUEST + , "공휴일 삭제 중 오류가 발생하였습니다.." + , LocalDateTime.now() + ) + ); + } + + return ResponseEntity.ok( + new StatusResponse(HttpStatus.OK + , "공휴일이 삭제 되었습니다." + , LocalDateTime.now() + ) + ); + } + + /** + * 관리자 알림 설정 - 야간스미싱알림 설정 팝업 화면 + * @param MsgHolidayVO + * @param model + * @return "/uss/umt/holiday/alarmSet/selectAlarmSettingPopupAjax.do" + * @throws Exception + */ + @RequestMapping("/uss/umt/holiday/alarmSet/selectAlarmSettingPopupAjax.do") + public String selectAlarmSettingPopupAjax(MsgAlarmSetVO msgAlarmSetVO, RedirectAttributes redirectAttributes, ModelMap model) throws Exception{ + + try { + + 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("/uat/uia/EgovLoginUsr.do"); + return redirectUrlMaker.getRedirectUrl(); + + } + + /** pageing */ + PaginationInfo paginationInfo = new PaginationInfo(); + paginationInfo.setCurrentPageNo(msgAlarmSetVO.getPageIndex()); + paginationInfo.setRecordCountPerPage(msgAlarmSetVO.getPageUnit()); + paginationInfo.setPageSize(msgAlarmSetVO.getPageSize()); + + msgAlarmSetVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); + msgAlarmSetVO.setLastIndex(paginationInfo.getLastRecordIndex()); + msgAlarmSetVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); + + if("".equals(msgAlarmSetVO.getSearchSortCnd())){ //최초조회시 최신것 조회List + msgAlarmSetVO.setSearchSortCnd("ALARM_START"); + msgAlarmSetVO.setSearchSortOrd("desc"); + } + + List resultList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO); + model.addAttribute("resultList", resultList); + model.addAttribute("msgAlarmSetVO", msgAlarmSetVO); + + paginationInfo.setTotalRecordCount(resultList.size() > 0 ? ((MsgAlarmSetVO)resultList.get(0)).getTotCnt() : 0); + model.addAttribute("paginationInfo", paginationInfo); + + } catch (Exception e) { + System.out.println("+++++++++++++++++++++++++++++ selectAlarmSettingPopupAjax Error !!!! "); + } + + return "/holiday/alarmset/MsgHolidayAlarmSettingListPop"; + } + + /** + * 관리자 알림 설정 - 야간스미싱알림 일정 추가 처리 + * @param MsgHolidayVO + * @param model + * @return "/let/mjo/holiday/alarmSet/insertAlarmSettinDataAjax.do" + * @throws Exception + */ + @RequestMapping("/let/mjo/holiday/alarmSet/insertAlarmSettingDataAjax.do") + public ResponseEntity insertAlarmSettingDataAjax(@RequestBody MsgAlarmSetVO msgAlarmSetVO, 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() + ) + ); + + } + + //등록자 아이디 셋팅 + msgAlarmSetVO.setFrstRegisterId(userId); + + int resultCnt = msgHolidayService.insertAlarmSettingData(msgAlarmSetVO); + + } catch (Exception e) { + System.out.println("++++++++++++++++++++++++ insertAlimSettingDataAjax Controller Error!!!! "); + return ResponseEntity.ok( + new StatusResponse(HttpStatus.BAD_REQUEST + , "알림 일정 등록 중 오류가 발생하였습니다.." + , LocalDateTime.now() + ) + ); + } + + return ResponseEntity.ok( + new StatusResponse(HttpStatus.OK + , "알림 일정이 등록 되었습니다." + , LocalDateTime.now() + ) + ); + } + + /** + * 관리자 알림 설정 - 야간스미싱알림 일정 사용상태 변경 + * @param MsgHolidayVO + * @param model + * @return "/let/mjo/holiday/alarmSet/updateAlarmSettingDataUseYnAjax.do" + * @throws Exception + */ + @RequestMapping("/let/mjo/holiday/alarmSet/updateAlarmSettingDataUseYnAjax.do") + public ResponseEntity updateAlarmSettingDataUseYnAjax(@RequestBody MsgAlarmSetVO msgAlarmSetVO, 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() + ) + ); + + } + + + System.out.println(msgAlarmSetVO.getAlarmId()); + System.out.println(msgAlarmSetVO.getUseYn()); + msgAlarmSetVO.setLastUpdusrId(userId); + + int resultCnt = msgHolidayService.updateAlarmSettingDataUseYn(msgAlarmSetVO); + + } catch (Exception e) { + System.out.println("++++++++++++++++++++++++ updateAlarmSettingDataUseYnAjax Controller Error!!!! "); + return ResponseEntity.ok( + new StatusResponse(HttpStatus.BAD_REQUEST + , "사용여부 변경 중 오류가 발생하였습니다.." + , LocalDateTime.now() + ) + ); + } + + return ResponseEntity.ok( + new StatusResponse(HttpStatus.OK + , "변경이 완료 되었습니다." + , LocalDateTime.now() + ) + ); + } + + /** + * 관리자 알림 설정 - 야간스미싱알림 일정 삭제 처리 + * @param MsgHolidayVO + * @param model + * @return "/let/mjo/holiday/alarmSet/updateAlarmSettingDataUseYnAjax.do" + * @throws Exception + */ + @RequestMapping("/let/mjo/holiday/alarmSet/deleteAlarmSettingDataAjax.do") + public ResponseEntity deleteAlarmSettingDataAjax(@RequestBody MsgAlarmSetVO msgAlarmSetVO) 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() + ) + ); + + } + + String[] splitId = msgAlarmSetVO.getAlarmIds().split(","); + + List idList = Arrays.asList(splitId); + + msgAlarmSetVO.setAlarmIdList(idList); + + int resultCnt = msgHolidayService.deleteAlarmSettingData(msgAlarmSetVO); + + } catch (Exception e) { + System.out.println("++++++++++++++++++++++++ deleteAlarmSettingDataAjax Controller Error!!!! " + e); + return ResponseEntity.ok( + new StatusResponse(HttpStatus.BAD_REQUEST + , "사용여부 변경 중 오류가 발생하였습니다.." + , LocalDateTime.now() + ) + ); + } + + return ResponseEntity.ok( + new StatusResponse(HttpStatus.OK + , "변경이 완료 되었습니다." + , LocalDateTime.now() + ) + ); + } + + @RequestMapping("/let/mjo/holiday/alarmSet/selectAlarmSettingDataCheckAjax.do") + public ResponseEntity selectAlarmSettingDataCheckAjax() throws Exception{ + + 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); + + System.out.println("+++++++++ 스미싱을 패스 시킬건지 ::: "+smishingAlarmPassSts); + + return ResponseEntity.ok( + new StatusResponse(HttpStatus.OK + , "변경이 완료 되었습니다." + , LocalDateTime.now() + ) + ); + } + +} diff --git a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java index ece24751..f7478240 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java +++ b/src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java @@ -73,6 +73,7 @@ public class MjonMsgSentVO extends UserDefaultVO{ private String msgKind; //문자종류(일반:N, 광고:A , 선거:C, 관리자:S, 이벤트:E) private String delayYn; //지연 문자 유무 private String delayCompleteYn; //지연문자 처리 완료 여부 + private Date delayOrgTime; //30분 딜레이된 발송시간에서 -30분 처리하여 원래 보내려던 발송시간 처리 private String msgId; //문자아이디 private String atchFiles; // 그림문자 파일정보 @@ -84,6 +85,9 @@ public class MjonMsgSentVO extends UserDefaultVO{ private String msgSentType; private String successCount; + private String resultSValue; + private String resultWFValue; + public String getSuccessCount() { return successCount; } @@ -458,5 +462,23 @@ public class MjonMsgSentVO extends UserDefaultVO{ public void setSendKind(String sendKind) { this.sendKind = sendKind; } + public String getResultSValue() { + return resultSValue; + } + public void setResultSValue(String resultSValue) { + this.resultSValue = resultSValue; + } + public String getResultWFValue() { + return resultWFValue; + } + public void setResultWFValue(String resultWFValue) { + this.resultWFValue = resultWFValue; + } + public Date getDelayOrgTime() { + return delayOrgTime; + } + public void setDelayOrgTime(Date delayOrgTime) { + this.delayOrgTime = delayOrgTime; + } } diff --git a/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java b/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java index e50a691c..89898107 100644 --- a/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java +++ b/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java @@ -1293,7 +1293,7 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll cell.setCellStyle(style); cell = row.createCell(10); - cell.setCellValue("실패"); + cell.setCellValue("실패/대기"); cell.setCellStyle(style); cell = row.createCell(11); @@ -1393,11 +1393,26 @@ private static final Logger logger = LoggerFactory.getLogger(MjonMsgSentControll double eachPrice = Float.parseFloat(resultAllSentList.get(i).getEachPrice()); + int resultSValue = 0; + int resultWFValue = 0; + + if(resultAllSentList.get(i).getResultSValue() != null) { + resultSValue = Integer.parseInt(resultAllSentList.get(i).getResultSValue()); + }else { + resultSValue = 1; + } + + if(resultAllSentList.get(i).getResultWFValue() != null) { + resultWFValue = Integer.parseInt(resultAllSentList.get(i).getResultWFValue()); + }else { + resultWFValue = 1; + } + if("S".equals(resultAllSentList.get(i).getMsgResult())) { - resSucCnt = 1; + resSucCnt = resultSValue; } else { - resFailCnt = 1; + resFailCnt = resultWFValue; } resSucPrice = eachPrice * resSucCnt; diff --git a/src/main/java/itn/let/mjo/pay/service/MjonPayVO.java b/src/main/java/itn/let/mjo/pay/service/MjonPayVO.java index a7de9f72..603b4c33 100644 --- a/src/main/java/itn/let/mjo/pay/service/MjonPayVO.java +++ b/src/main/java/itn/let/mjo/pay/service/MjonPayVO.java @@ -178,6 +178,7 @@ public class MjonPayVO extends ComDefaultVO{ private String amtCellSum; //휴대폰 결제 금액 private String amtBankSum; //즉시이체 결제 금액 private String amtVbankSum; //전용계좌 결제 금액 + private String amtAfterPaySum; //전용계좌 결제 금액 private String amtRefundSum; //환불 금액 private String amtTotSum; //결제 금액 총액 @@ -186,6 +187,7 @@ public class MjonPayVO extends ComDefaultVO{ private String amtCellSumTot; //전체 휴대폰 결제 금액 private String amtBankSumTot; //전체 즉시이체 결제 금액 private String amtVbankSumTot; //전체 전용계좌 결제 금액 + private String amtAfterPaySumTot; //전체 전용계좌 결제 금액 private String amtRefundSumTot; //환불 금액 private String amtTotSumTot; //전체 결제 금액 총액 @@ -194,6 +196,7 @@ public class MjonPayVO extends ComDefaultVO{ private String amtCellCnt; //휴대폰 결제 수 private String amtBankCnt; //즉시이체 결제 수 private String amtVbankCnt; //전용계좌 결제 수 + private String amtAfterPayCnt; //전용계좌 결제 수 private String amtRefundCnt; //환불 수 private String amtTotCnt; //결제 수 총수 diff --git a/src/main/java/itn/let/mjo/pay/web/MjonPayController.java b/src/main/java/itn/let/mjo/pay/web/MjonPayController.java index 8906a7d2..4aad77e8 100644 --- a/src/main/java/itn/let/mjo/pay/web/MjonPayController.java +++ b/src/main/java/itn/let/mjo/pay/web/MjonPayController.java @@ -4855,31 +4855,54 @@ public class MjonPayController { Date maxRegDate = null; int i = 0; + String pageType = mjonMsgVO.getPageType(); + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd"); - List 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(); + 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()); - } - } + // 시작일, 종료일 + 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); - i++; + //총 사용금액에 팩스 금액 합산해주기 + for(MjonMsgVO item : payUserSumFaxList) { + supplySumPrice += item.getSupplyPrice(); + totalSumPrice += item.getTotalPrice(); + + } } + + model.addAttribute("payUserSumFaxList", payUserSumFaxList); // 현재 날짜 구하기 (시스템 시계, 시스템 타임존) LocalDate now = LocalDate.now(); @@ -4955,7 +4978,7 @@ public class MjonPayController { model.addAttribute("addTax", decFormat.format(addTax)); model.addAttribute("addTaxSumPrice", decFormat.format(addTax+totalSumPrice)); - + model.addAttribute("pageType", mjonMsgVO.getPageType()); return "/web/pay/MsgPrintUsageDetailsPopUp"; } @@ -5009,7 +5032,7 @@ public class MjonPayController { i++; } - + // 현재 날짜 구하기 (시스템 시계, 시스템 타임존) LocalDate now = LocalDate.now(); int year = now.getYear(); @@ -5073,7 +5096,6 @@ public class MjonPayController { model.addAttribute("mberNm", mberNm); model.addAttribute("managerNm", managerNm); model.addAttribute("moblphonNo", moblphonNo); - return "/web/pay/MsgPrintUsageDetailsPopUp"; } @@ -5102,32 +5124,57 @@ public class MjonPayController { Date maxRegDate = null; int i = 0; + String pageType = mjonMsgVO.getPageType(); + SimpleDateFormat transFormat = new SimpleDateFormat("yyyy-MM-dd"); - List 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()); - } + 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(maxRegDate.before(transFormat.parse(item.getMaxRegDate()))) { + // 시작일, 종료일 + 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++; } - 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(); @@ -5203,6 +5250,7 @@ public class MjonPayController { model.addAttribute("addTax", decFormat.format(addTax)); model.addAttribute("addTaxSumPrice", decFormat.format(addTax+totalSumPrice)); + model.addAttribute("pageType", mjonMsgVO.getPageType()); return "/web/pay/MsgPrintStatementPopUp"; } @@ -5366,7 +5414,7 @@ public class MjonPayController { if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List mjonPayVO.setSearchSortCnd("regDate"); - mjonPayVO.setSearchSortOrd("desc"); + mjonPayVO.setSearchSortOrd("asc"); } List resultList = mjonPayService.selectPayDayChart(mjonPayVO); @@ -5377,7 +5425,7 @@ public class MjonPayController { mjonPayVO.setRecordCountPerPage(10000); if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List mjonPayVO.setSearchSortCnd("regDate"); - mjonPayVO.setSearchSortOrd("desc"); + mjonPayVO.setSearchSortOrd("asc"); } List resultList2 = mjonPayService.selectPayDayChart(mjonPayVO); @@ -5387,6 +5435,7 @@ public class MjonPayController { long amtCellSumTot = 0; //전체 휴대폰 결제 금액 long amtBankSumTot = 0; //전체 즉시이체 결제 금액 long amtVbankSumTot = 0; //전체 전용계좌 결제 금액 + long amtAfterPaySumTot = 0; //전체 전용계좌 결제 금액 long amtRefundSumTot = 0; //전체 환불 금액 long amtTotSumTot = 0; //전체 결제 금액 총액 @@ -5396,6 +5445,7 @@ public class MjonPayController { amtCellSumTot += Long.parseLong(item.getAmtCellSum()); amtBankSumTot += Long.parseLong(item.getAmtBankSum()); amtVbankSumTot += Long.parseLong(item.getAmtVbankSum()); + amtAfterPaySumTot += Long.parseLong(item.getAmtAfterPaySum()); amtRefundSumTot += Long.parseLong(item.getAmtRefundSum()); amtTotSumTot += Long.parseLong(item.getAmtTotSum()); } @@ -5405,6 +5455,7 @@ public class MjonPayController { mjonPayVO.setAmtCellSumTot(amtCellSumTot + ""); mjonPayVO.setAmtBankSumTot(amtBankSumTot + ""); mjonPayVO.setAmtVbankSumTot(amtVbankSumTot + ""); + mjonPayVO.setAmtAfterPaySumTot(amtAfterPaySumTot + ""); mjonPayVO.setAmtRefundSumTot(amtRefundSumTot + ""); mjonPayVO.setAmtTotSumTot(amtTotSumTot + ""); @@ -5416,8 +5467,217 @@ public class MjonPayController { return "/uss/ion/pay/PayDayChart"; } + + /* + * 일별 매출 통계 엑셀 다운로드 + * + * */ + @RequestMapping(value= {"/uss/ion/pay/payDayChartExcelDownload.do"}) + public void payDayChartExcelDownload( MjonPayVO mjonPayVO, + HttpServletRequest request, + HttpServletResponse response , + ModelMap model) throws Exception { + + mjonPayVO.setRecordCountPerPage(mjonPayVO.getPageUnit()); + mjonPayVO.setFirstIndex(0); + LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + if(null != loginVO && !"super".equals(loginVO.getSiteId())){ + mjonPayVO.setSiteId(loginVO.getSiteId()); + } + // 메모리에 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{ + List resultList = mjonPayService.selectPayDayChart(mjonPayVO); + { //화면 리스트 + sheetTitle = "일별 매출 통계" ; //제목 + Sheet sheet = wb.createSheet(sheetTitle); + row = sheet.createRow(0); + + 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("합계(VAT포함)"); + cell.setCellStyle(style); + + long amtCardSumTot = 0; //전체 신용카드 결제 금액 + long amtCellSumTot = 0; //전체 휴대폰 결제 금액 + long amtBankSumTot = 0; //전체 즉시이체 결제 금액 + long amtVbankSumTot = 0; //전체 전용계좌 결제 금액 + long amtSpaySumTot = 0; //전체 간편결제 결제 금액 + long amtAfterPaySumTot = 0; //전체 후불결제 금액 + long amtRefundSumTot = 0; //전체 환불 금액 + long amtTotSumTot = 0; //전체 결제 금액 총액 + + for(int i=0; i < resultList.size(); i++){ + row = sheet.createRow(i+1); + for(int j=0 ; j < 9 ; j++) { + cell = row.createCell(j); + cell.setCellStyle(style); + + String regDate = (resultList.get(i)).getRegDate(); + String amtCardSum = (resultList.get(i)).getAmtCardSum(); + String amtCellSum = (resultList.get(i)).getAmtCellSum(); + String amtBankSum = (resultList.get(i)).getAmtBankSum(); + String amtVbankSum = (resultList.get(i)).getAmtVbankSum(); + String amtSpaySum = (resultList.get(i)).getAmtSpaySum(); + String amtAfterPaySum = (resultList.get(i)).getAmtAfterPaySum(); + String amtRefundSum = (resultList.get(i)).getAmtRefundSum(); + String amtTotSum = (resultList.get(i)).getAmtTotSum(); + + if(j==0) cell.setCellValue(regDate); //결제월 + if(j==1) { + cell.setCellValue(amtCardSum); //신용카드 + amtCardSumTot += Long.parseLong(amtCardSum); + } + if(j==2) { + cell.setCellValue(amtCellSum); //휴대폰 + amtCellSumTot += Long.parseLong(amtCellSum); + } + if(j==3) { + cell.setCellValue(amtBankSum); //즉시이체 + amtBankSumTot += Long.parseLong(amtBankSum); + } + if(j==4) { + cell.setCellValue(amtVbankSum); //전용계좌 + amtVbankSumTot += Long.parseLong(amtVbankSum); + } + if(j==5) { + cell.setCellValue(amtSpaySum); //간편결제 + amtSpaySumTot += Long.parseLong(amtSpaySum); + } + if(j==6) { + cell.setCellValue(amtAfterPaySum); //후불결제 + amtAfterPaySumTot += Long.parseLong(amtAfterPaySum); + } + if(j==7) { + cell.setCellValue(amtRefundSum); //환불 + amtRefundSumTot += Long.parseLong(amtRefundSum); + } + if(j==8) { + cell.setCellValue(amtTotSum); //합계(VAT포함) + amtTotSumTot += Long.parseLong(amtTotSum); + } + + } + } + + //전체 합계 행 추가 + row = sheet.createRow(resultList.size()+1); + cell = row.createCell(0); + cell.setCellStyle(style); + cell.setCellValue("합계"); //결제월 + + cell = row.createCell(1); + cell.setCellStyle(style); + cell.setCellValue(amtCardSumTot); //신용카드 + + cell = row.createCell(2); + cell.setCellStyle(style); + cell.setCellValue(amtCellSumTot); //휴대폰 + + cell = row.createCell(3); + cell.setCellStyle(style); + cell.setCellValue(amtBankSumTot); //즉시이체 + + cell = row.createCell(4); + cell.setCellStyle(style); + cell.setCellValue(amtVbankSumTot); //전용계좌 + + cell = row.createCell(5); + cell.setCellStyle(style); + cell.setCellValue(amtSpaySumTot); //간편결제 + + cell = row.createCell(6); + cell.setCellStyle(style); + cell.setCellValue(amtAfterPaySumTot); //후불결제 + + cell = row.createCell(7); + cell.setCellStyle(style); + cell.setCellValue(amtRefundSumTot); //환불 + + cell = row.createCell(8); + cell.setCellStyle(style); + cell.setCellValue(amtTotSumTot); //합계(VAT포함) + + } + 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) {} + if(wb != null) try { wb.dispose(); wb.close(); } catch(Exception ignore) {} + } + }finally { + // 디스크 적었던 임시파일을 제거합니다. + wb.dispose(); + try { wb.close(); } catch(Exception ignore) {} + } + } + + /** - * 월별 결제 통계 + * 월별 매출 통계 * @param searchVO * @param model * @return "/uss/ion/pay/payDayChart" @@ -5448,7 +5708,7 @@ public class MjonPayController { } if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List mjonPayVO.setSearchSortCnd("regDate"); - mjonPayVO.setSearchSortOrd("desc"); + mjonPayVO.setSearchSortOrd("asc"); } mjonPayVO.setFirstIndex(0); @@ -5461,6 +5721,7 @@ public class MjonPayController { long amtCellSumTot = 0; //전체 휴대폰 결제 금액 long amtBankSumTot = 0; //전체 즉시이체 결제 금액 long amtVbankSumTot = 0; //전체 전용계좌 결제 금액 + long amtAfterPaySumTot = 0; //전체 후불결제 금액 long amtRefundSumTot = 0; //전체 환불 금액 long amtTotSumTot = 0; //전체 결제 금액 총액 @@ -5470,6 +5731,7 @@ public class MjonPayController { amtCellSumTot += Long.parseLong(item.getAmtCellSum()); amtBankSumTot += Long.parseLong(item.getAmtBankSum()); amtVbankSumTot += Long.parseLong(item.getAmtVbankSum()); + amtAfterPaySumTot += Long.parseLong(item.getAmtAfterPaySum()); amtRefundSumTot += Long.parseLong(item.getAmtRefundSum()); amtTotSumTot += Long.parseLong(item.getAmtTotSum()); } @@ -5479,6 +5741,7 @@ public class MjonPayController { mjonPayVO.setAmtCellSumTot(amtCellSumTot + ""); mjonPayVO.setAmtBankSumTot(amtBankSumTot + ""); mjonPayVO.setAmtVbankSumTot(amtVbankSumTot + ""); + mjonPayVO.setAmtAfterPaySumTot(amtAfterPaySumTot + ""); mjonPayVO.setAmtRefundSumTot(amtRefundSumTot + ""); mjonPayVO.setAmtTotSumTot(amtTotSumTot + ""); @@ -5492,6 +5755,214 @@ public class MjonPayController { return "/uss/ion/pay/PayMonthChart"; } + + /* + * 월별 매출 통계 엑셀 다운로드 + * + * */ + @RequestMapping(value= {"/uss/ion/pay/payMonthChartExcelDownload.do"}) + public void payMonthChartExcelDownload( MjonPayVO mjonPayVO, + HttpServletRequest request, + HttpServletResponse response , + ModelMap model) throws Exception { + + mjonPayVO.setRecordCountPerPage(mjonPayVO.getPageUnit()); + mjonPayVO.setFirstIndex(0); + LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); + if(null != loginVO && !"super".equals(loginVO.getSiteId())){ + mjonPayVO.setSiteId(loginVO.getSiteId()); + } + // 메모리에 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{ + List resultList = mjonPayService.selectPayMonthChart(mjonPayVO); + { //화면 리스트 + sheetTitle = "월별 매출 통계" ; //제목 + Sheet sheet = wb.createSheet(sheetTitle); + row = sheet.createRow(0); + + 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("합계(VAT포함)"); + cell.setCellStyle(style); + + long amtCardSumTot = 0; //전체 신용카드 결제 금액 + long amtCellSumTot = 0; //전체 휴대폰 결제 금액 + long amtBankSumTot = 0; //전체 즉시이체 결제 금액 + long amtVbankSumTot = 0; //전체 전용계좌 결제 금액 + long amtSpaySumTot = 0; //전체 간편결제 결제 금액 + long amtAfterPaySumTot = 0; //전체 후불결제 금액 + long amtRefundSumTot = 0; //전체 환불 금액 + long amtTotSumTot = 0; //전체 결제 금액 총액 + + for(int i=0; i < resultList.size(); i++){ + row = sheet.createRow(i+1); + for(int j=0 ; j < 9 ; j++) { + cell = row.createCell(j); + cell.setCellStyle(style); + + String regDate = (resultList.get(i)).getRegDate(); + String amtCardSum = (resultList.get(i)).getAmtCardSum(); + String amtCellSum = (resultList.get(i)).getAmtCellSum(); + String amtBankSum = (resultList.get(i)).getAmtBankSum(); + String amtVbankSum = (resultList.get(i)).getAmtVbankSum(); + String amtSpaySum = (resultList.get(i)).getAmtSpaySum(); + String amtAfterPaySum = (resultList.get(i)).getAmtAfterPaySum(); + String amtRefundSum = (resultList.get(i)).getAmtRefundSum(); + String amtTotSum = (resultList.get(i)).getAmtTotSum(); + + if(j==0) cell.setCellValue(regDate); //결제월 + if(j==1) { + cell.setCellValue(amtCardSum); //신용카드 + amtCardSumTot += Long.parseLong(amtCardSum); + } + if(j==2) { + cell.setCellValue(amtCellSum); //휴대폰 + amtCellSumTot += Long.parseLong(amtCellSum); + } + if(j==3) { + cell.setCellValue(amtBankSum); //즉시이체 + amtBankSumTot += Long.parseLong(amtBankSum); + } + if(j==4) { + cell.setCellValue(amtVbankSum); //전용계좌 + amtVbankSumTot += Long.parseLong(amtVbankSum); + } + if(j==5) { + cell.setCellValue(amtSpaySum); //간편결제 + amtSpaySumTot += Long.parseLong(amtSpaySum); + } + if(j==6) { + cell.setCellValue(amtAfterPaySum); //후불결제 + amtAfterPaySumTot += Long.parseLong(amtAfterPaySum); + } + if(j==7) { + cell.setCellValue(amtRefundSum); //환불 + amtRefundSumTot += Long.parseLong(amtRefundSum); + } + if(j==8) { + cell.setCellValue(amtTotSum); //합계(VAT포함) + amtTotSumTot += Long.parseLong(amtTotSum); + } + + } + } + + //총합계 행 추가 + row = sheet.createRow(resultList.size()+1); + cell = row.createCell(0); + cell.setCellStyle(style); + cell.setCellValue("합계"); //결제월 + + cell = row.createCell(1); + cell.setCellStyle(style); + cell.setCellValue(amtCardSumTot); //신용카드 + + cell = row.createCell(2); + cell.setCellStyle(style); + cell.setCellValue(amtCellSumTot); //휴대폰 + + cell = row.createCell(3); + cell.setCellStyle(style); + cell.setCellValue(amtBankSumTot); //즉시이체 + + cell = row.createCell(4); + cell.setCellStyle(style); + cell.setCellValue(amtVbankSumTot); //전용계좌 + + cell = row.createCell(5); + cell.setCellStyle(style); + cell.setCellValue(amtSpaySumTot); //간편결제 + + cell = row.createCell(6); + cell.setCellStyle(style); + cell.setCellValue(amtAfterPaySumTot); //후불결제 + + cell = row.createCell(7); + cell.setCellStyle(style); + cell.setCellValue(amtRefundSumTot); //환불 + + cell = row.createCell(8); + cell.setCellStyle(style); + cell.setCellValue(amtTotSumTot); //합계(VAT포함) + + } + 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) {} + if(wb != null) try { wb.dispose(); wb.close(); } catch(Exception ignore) {} + } + }finally { + // 디스크 적었던 임시파일을 제거합니다. + wb.dispose(); + try { wb.close(); } catch(Exception ignore) {} + } + } + /* @RequestMapping(value= {"/web/main/vacTest.do"}) public void vacTest() throws Exception { diff --git a/src/main/java/itn/let/mjo/reservmsg/service/MjonResvMsgVO.java b/src/main/java/itn/let/mjo/reservmsg/service/MjonResvMsgVO.java index 14331caa..a926dd78 100644 --- a/src/main/java/itn/let/mjo/reservmsg/service/MjonResvMsgVO.java +++ b/src/main/java/itn/let/mjo/reservmsg/service/MjonResvMsgVO.java @@ -61,6 +61,11 @@ public class MjonResvMsgVO extends UserDefaultVO{ private String callFromComma; private String callToComma; + private String delayYn; //30분 딜레이 유무 + private String delayCompleteYn; //30분 딜레이 문자 처리 완료 유무 + + private Date delayOrgTime; //30분 딜레이된 발송시간에서 -30분 처리하여 원래 보내려던 발송시간 처리 + public String getCallFromComma() { return callFromComma; } @@ -319,6 +324,25 @@ public class MjonResvMsgVO extends UserDefaultVO{ public void setSendKind(String sendKind) { this.sendKind = sendKind; } + public String getDelayYn() { + return delayYn; + } + public void setDelayYn(String delayYn) { + this.delayYn = delayYn; + } + public String getDelayCompleteYn() { + return delayCompleteYn; + } + public void setDelayCompleteYn(String delayCompleteYn) { + this.delayCompleteYn = delayCompleteYn; + } + public Date getDelayOrgTime() { + return delayOrgTime; + } + public void setDelayOrgTime(Date delayOrgTime) { + this.delayOrgTime = delayOrgTime; + } + 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 607ae395..a60021f6 100644 --- a/src/main/java/itn/let/mjo/test/web/TestController.java +++ b/src/main/java/itn/let/mjo/test/web/TestController.java @@ -78,10 +78,14 @@ import itn.let.mjo.apikey.service.ApiKeyMngService; 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.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.payva.service.VacsVactService; import itn.let.mjo.payva.service.VacsVactVO; @@ -196,6 +200,9 @@ public class TestController { @Autowired CheckNoServiceCommon checkNoServiceCommon; + @Autowired + MjonHolidayApi mjonHolidayApi; + @Resource(name = "egovSiteManagerService") private EgovSiteManagerService egovSiteManagerService; @@ -223,6 +230,9 @@ public class TestController { @Resource (name = "userManageService") private EgovUserManageService egovUserManageService; + @Resource(name = "MsgHolidayService") + private MsgHolidayService msgHolidayService; + private static final Logger logger = LoggerFactory.getLogger(TestController.class); ///////////////////////////////////////////////////////////////////////////////////////// @@ -1029,6 +1039,22 @@ public class TestController { 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) {//스팸 체크리스트가 없는 경우 @@ -2109,13 +2135,78 @@ public class TestController { JoinSettingVO joinSettingVO = new JoinSettingVO(); joinSettingVO = egovSiteManagerService.selectAdminNotiDetail(); - // SLACK 체크 - if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) { - //Slack으로 메세지 전송 처리 - MjonCommon comm = new MjonCommon(); - System.out.println("slack noti"); - comm.getAdminSandSlack(mjonMsgVO); + 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.getAdminSandSlack(mjonMsgVO); + + } + + //Slack으로 메세지 전송 처리 + /*MjonCommon comm = new MjonCommon(); + System.out.println("slack noti"); + comm.getAdminSandSlack(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.getAdminSandSlack(mjonMsgVO); + + } + + }*/ } @@ -3289,6 +3380,5 @@ public class TestController { } } - - + } diff --git a/src/main/java/itn/let/sym/site/service/JoinSettingVO.java b/src/main/java/itn/let/sym/site/service/JoinSettingVO.java index 0fe89cea..8dc3b39d 100644 --- a/src/main/java/itn/let/sym/site/service/JoinSettingVO.java +++ b/src/main/java/itn/let/sym/site/service/JoinSettingVO.java @@ -48,6 +48,7 @@ public class JoinSettingVO { private String emailNoti; //관리자 이메일 알림 여부 private String slackNoti; //관리자 SLACK 알림 여부 private String smishingNoti; //첫결제(카드제외) 스미싱의심 알림 여부 + private String holiSmishingNoti; //야간 스미싱알림 여부 public String getSmishingNoti() { return smishingNoti; @@ -215,6 +216,14 @@ public class JoinSettingVO { public void setFaxPrice(float faxPrice) { this.faxPrice = faxPrice; + } + + public String getHoliSmishingNoti() { + return holiSmishingNoti; + } + + public void setHoliSmishingNoti(String holiSmishingNoti) { + this.holiSmishingNoti = holiSmishingNoti; } } 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 3a4f25b9..33526052 100644 --- a/src/main/java/itn/let/uat/uia/web/EgovLoginController.java +++ b/src/main/java/itn/let/uat/uia/web/EgovLoginController.java @@ -2682,15 +2682,10 @@ public class EgovLoginController { boolean TorF = usedNmList.size() > 0 ? true : false; - System.out.println(TorF); - System.out.println(TorF); - System.out.println(TorF); if (!TorF) { - System.out.println(TorF); - System.out.println(TorF); - modelAndView.addObject("message", "입력하신 아이디/이름/휴대폰 번호 정보에 맞는 회원이 없습니다."); + modelAndView.addObject("message", "입력하신 아이디/이름/휴대폰 번호에 맞는 회원 정보가 없습니다."); modelAndView.addObject("result", "fail-check"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); @@ -2700,7 +2695,17 @@ public class EgovLoginController { if(!usedNmList.get(0).getMberSttus().equals("Y")) { - modelAndView.addObject("message", "입력하신 아이디/이름/휴대폰 번호 정보에 맞는 회원이 없습니다."); + + String mberSttus = usedNmList.get(0).getMberSttus(); + String message = ""; + if(mberSttus.equals("B")) { + message = "문자온 이용이 정지 된 회원 정보입니다."; + + }else { + message = "문자온에서 탈퇴한 회원 정보입니다."; + } + + modelAndView.addObject("message", message); modelAndView.addObject("result", "fail-check"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); @@ -3373,15 +3378,10 @@ public class EgovLoginController { boolean TorF = usedNmList.size() > 0 ? true : false; - System.out.println(TorF); - System.out.println(TorF); - System.out.println(TorF); if (!TorF) { - System.out.println(TorF); - System.out.println(TorF); - modelAndView.addObject("message", "입력하신 아이디/이름/이메일 정보에 맞는 회원이 없습니다."); + modelAndView.addObject("message", "입력하신 아이디/이름/휴대폰 번호에 맞는 회원 정보가 없습니다."); modelAndView.addObject("result", "fail-check"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); @@ -3390,7 +3390,17 @@ public class EgovLoginController { } if(!usedNmList.get(0).getMberSttus().equals("Y")) { - modelAndView.addObject("message", "입력하신 아이디/이름/휴대폰 번호 정보에 맞는 회원이 없습니다."); + + String mberSttus = usedNmList.get(0).getMberSttus(); + String message = ""; + if(mberSttus.equals("B")) { + message = "문자온 이용이 정지 된 회원 정보입니다."; + + }else { + message = "문자온에서 탈퇴한 회원 정보입니다."; + } + + modelAndView.addObject("message", message); modelAndView.addObject("result", "fail-check"); modelAndView.addObject("resultSts", "0"); modelAndView.addObject("resultBlockSts", "0"); diff --git a/src/main/java/itn/let/uat/uia/web/EgovMypageController.java b/src/main/java/itn/let/uat/uia/web/EgovMypageController.java index 7d13c676..f0ed2d97 100644 --- a/src/main/java/itn/let/uat/uia/web/EgovMypageController.java +++ b/src/main/java/itn/let/uat/uia/web/EgovMypageController.java @@ -1532,12 +1532,30 @@ public class EgovMypageController { public String sendNumberManageRegister( @ModelAttribute MberManageVO mberManageVO , HttpServletRequest request + , RedirectAttributes redirectAttributes , ModelMap model) throws Exception { /*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/ 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"; + }else { + + /** + * 회원 정지된 상태이면 문자 발송이 안되도록 처리함 + * 현재 로그인 세션도 만료 처리함 + * */ + boolean mberSttus = userManageService.selectUserStatusInfo(userId); + + if(!mberSttus) { + + request.getSession().invalidate(); + redirectAttributes.addFlashAttribute("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 발신번호 등록을 할 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다."); + + RedirectUrlMaker redirectUrlMaker = new RedirectUrlMaker("/web/main/mainPage.do"); + return redirectUrlMaker.getRedirectUrl(); + } + } model.addAttribute("loginVO", loginVO); model.addAttribute("pageTab", "sendNumberManage"); @@ -1629,6 +1647,9 @@ public class EgovMypageController { model.addAttribute("rejectCnt", rejectCnt); model.addAttribute("compCnt", compCnt); + MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); + model.addAttribute("mberManageVO", mberManageVO); + return "web/user/sendNumberListAjax"; } 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 38168d6d..2f95d929 100644 --- a/src/main/java/itn/let/uss/umt/web/EgovUserManageController.java +++ b/src/main/java/itn/let/uss/umt/web/EgovUserManageController.java @@ -4936,6 +4936,14 @@ public String selectMberSpamBlockMemoDetailAjax(MberManageVO mberManageVO, Model } + // 관리자 메모 + String memo = ""; + memo = "회원상태 변경 : 이용정지, 사유 : "+ mberManageVO.getSmiMemo(); + mberManageVO.setMberId(mberId); + mberManageVO.setMemoCn(memo); + mberManageVO.setFrstRegisterId(userId); + mberManageService.insertMberMemo(mberManageVO); + modelAndView.addObject("message", "차단처리가 완료되었습니다."); modelAndView.addObject("result", "success"); diff --git a/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-holiday.xml b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-holiday.xml new file mode 100644 index 00000000..217461e0 --- /dev/null +++ b/src/main/resources/egovframework/sqlmap/config/mysql/sql-map-config-mysql-holiday.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/src/main/resources/egovframework/sqlmap/let/holiday/MsgHolidayData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/holiday/MsgHolidayData_SQL_mysql.xml new file mode 100644 index 00000000..529eab4d --- /dev/null +++ b/src/main/resources/egovframework/sqlmap/let/holiday/MsgHolidayData_SQL_mysql.xml @@ -0,0 +1,213 @@ + + + + + + + + + INSERT INTO MJ_HOLIDAY + (HOLIDAY_NM, + HOLIDAY_DATE, + HOLIDAY_TYPE, + API_TYPE, + FRST_REGIST_PNTTM, + FRST_REGISTER_ID, + LAST_UPDT_PNTTM, + LAST_UPDUSR_ID + )VALUES + + ( + #[].holidayNm#, + #[].holidayDate#, + #[].holidayType#, + #[].apiType#, + NOW(), + #[].frstRegisterId#, + NOW(), + #[].lastUpdusrId# + ) + + + + + + + + + + DELETE + FROM MJ_HOLIDAY + WHERE HOLIDAY_ID IN + ( SELECT HOLIDAY_ID + FROM MJ_HOLIDAY + WHERE API_TYPE = 'Y' + AND HOLIDAY_DATE LIKE CONCAT(#searchHoliYear#,'%') + ) + + + + + + UPDATE MJ_HOLIDAY + SET HOLIDAY_NM = #holidayNm#, + HOLIDAY_DATE = #holidayDate#, + HOLIDAY_TYPE = #holidayType#, + LAST_UPDUSR_ID = #lastUpdusrId# + WHERE HOLIDAY_ID = #holidayId# + + + + + + DELETE FROM MJ_HOLIDAY + WHERE 1=1 + + + #holidayIdList[]# + + + + + + + + INSERT + INTO MJ_SPAMPASS_ALARM + ( + ALARM_TYPE, + ALARM_START, + ALARM_END, + FRST_REGIST_PNTTM, + FRST_REGISTER_ID, + LAST_UPDT_PNTTM, + LAST_UPDUSR_ID + ) + VALUES + ( #alarmType# + , #alarmStart# + , #alarmEnd# + , NOW() + , #frstRegisterId# + , NOW() + , #frstRegisterId# + ) + + + + + + + + UPDATE MJ_SPAMPASS_ALARM SET + USE_YN = #useYn#, + LAST_UPDT_PNTTM = NOW(), + LAST_UPDUSR_ID = #lastUpdusrId# + WHERE ALARM_ID = #alarmId# + + + + + + DELETE FROM MJ_SPAMPASS_ALARM + WHERE 1=1 + + + #alarmIdList[]# + + + + + + + diff --git a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml index 4d59601c..e0017014 100644 --- a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml @@ -211,6 +211,7 @@ M2.subject , M2.regDate , M2.reqDate , + IF(atDelayYn = 'Y' and atDelayCompleteYn = 'N', DATE_ADD(M2.reqdate, INTERVAL -30 MINUTE), M2.reqdate) AS atDelayOrgTime , M2.rsltDate , M2.callFrom , M2.callTo , @@ -222,6 +223,8 @@ M2.curState , M2.rsltCode , M2.rsltCode2 , + M2.atDelayYn , + M2.atDelayCompleteYn , M2.orderByrsltCode , M2.delFlag , M2.msgType , @@ -306,6 +309,8 @@ CUR_STATE AS curState , RSLT_CODE AS rsltCode , RSLT_CODE2 AS rsltCode2 , + AT_DELAY_YN AS atDelayYn , + AT_DELAY_COMPLETE_YN AS atDelayCompleteYn , IF((RSLT_CODE != '7000'),'1','0') AS orderByrsltCode , DEL_FLAG AS delFlag , M.MSG_TYPE AS msgType , @@ -344,6 +349,8 @@ MD.CUR_STATE , MD.RSLT_CODE , MD.RSLT_CODE2 , + MG.AT_DELAY_YN, + MG.AT_DELAY_COMPLETE_YN, CASE WHEN MG.MSG_TYPE = '8' THEN '알림톡' @@ -1076,6 +1083,7 @@ M2.subject , M2.regDate , M2.reqDate , + IF(atDelayYn = 'Y' and atDelayCompleteYn = 'N', DATE_ADD(M2.reqdate, INTERVAL -30 MINUTE), M2.reqdate) AS atDelayOrgTime , M2.rsltDate , M2.diffMin, M2.callFrom , @@ -1088,6 +1096,8 @@ M2.curState , M2.rsltCode , M2.rsltCode2 , + M2.atDelayYn , + M2.atDelayCompleteYn , M2.orderByrsltCode , M2.delFlag , M2.msgType , @@ -1173,6 +1183,8 @@ CUR_STATE AS curState , RSLT_CODE AS rsltCode , RSLT_CODE2 AS rsltCode2 , + AT_DELAY_YN AS atDelayYn , + AT_DELAY_COMPLETE_YN AS atDelayCompleteYn , IF((RSLT_CODE != '7000'),'1','0') AS orderByrsltCode , DEL_FLAG AS delFlag , M.MSG_TYPE AS msgType , @@ -1211,6 +1223,8 @@ MD.CUR_STATE , MD.RSLT_CODE , MD.RSLT_CODE2 , + MG.AT_DELAY_YN , + MG.AT_DELAY_COMPLETE_YN , CASE WHEN MG.MSG_TYPE = '8' THEN '알림톡' diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml index 760a57c0..f4cdece8 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml @@ -2302,6 +2302,39 @@ ) + + + INSERT + INTO MJ_SPAMPASS_MSG + ( + MSG_GROUP_ID, + USER_ID, + REQ_DATE, + SMS_TXT, + MSG_GROUP_CNT, + CALL_FROM, + MSG_TYPE, + RESERVE_YN, + FRST_REGIST_PNTTM, + LAST_UPDT_PNTTM + ) + VALUES + ( + #msgGroupId# + , #userId# + , #reqDate# + , #smsTxt# + , #totalCallCnt# + , #callFrom# + , #msgType# + , #reserveYn# + , NOW() + , NOW() + + ) + + + UPDATE MJ_MSG_GROUP_DATA @@ -3497,7 +3530,7 @@ + + + + + INSERT INTO mj_system_send @@ -7623,5 +7698,282 @@ + + + + + + + UPDATE MJ_SPAMPASS_MSG + SET CANCEL_RESULT_YN = 'Y' + , LAST_UPDUSR_ID = #lastUpdusrId# + , LAST_UPDT_PNTTM = NOW() + WHERE USER_ID = #userId# + AND MSG_GROUP_ID = #msgGroupId# + + + diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgResv_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgResv_SQL_mysql.xml index 61b93073..e8e803dd 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgResv_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgResv_SQL_mysql.xml @@ -202,6 +202,7 @@ M2.subject, M2.regdate, M2.reqdate, + IF(delayYn = 'Y' and delayCompleteYn = 'N', DATE_ADD(M2.reqdate, INTERVAL -30 MINUTE), M2.reqdate) AS delayOrgTime, M2.diffMin, M2.callFrom, FN_GETHYPHEN(M2.callFrom) AS callFromComma, @@ -218,6 +219,8 @@ M2.cancelDate, M2.sendKind, M2.shipmentStatus, + M2.delayYn, + M2.delayCompleteYn, M2.orderByCode FROM ( SELECT COUNT(USER_ID) OVER() AS totMsgCnt, @@ -241,7 +244,9 @@ AGENT_CODE AS agentCode, RESERVE_C_YN AS reserveCYn, CANCELDATE AS cancelDate, - SEND_KIND as sendKind, + SEND_KIND AS sendKind, + DELAY_YN AS delayYn, + DELAY_COMPLETE_YN AS delayCompleteYn, CASE WHEN RESERVE_C_YN = 'Y' THEN '예약취소' @@ -282,6 +287,8 @@ MD.CUR_STATE, MD.RSLT_CODE, MD.RSLT_CODE2, + MGD.DELAY_YN, + MGD.DELAY_COMPLETE_YN, MGD.SEND_KIND FROM mj_msg_data MD INNER JOIN MJ_MSG_GROUP_DATA MGD diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml index b556d4d1..a9209770 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml @@ -233,6 +233,7 @@ , M2.subject , M2.regdate , M2.reqdate + , IF(delayYn = 'Y' and delayCompleteYn = 'N', DATE_ADD(M2.reqdate, INTERVAL -30 MINUTE), M2.reqdate) AS delayOrgTime , M2.callFrom , M2.callTo , FN_GETHYPHEN(M2.callFrom) AS callFromComma @@ -256,6 +257,10 @@ , M2.msgResult , M2.sendKind , M2.msgKind + , M2.resultSValue + , M2.resultWFValue + , M2.delayYn + , M2.delayCompleteYn FROM ( SELECT @@ -297,8 +302,12 @@ , msgTypeName AS msgTypeName , orderByCode AS orderByCode , RESULT AS msgResult + , SUM(IF(RESULT = 'S', 1, 0 )) AS resultSValue + , SUM(IF(RESULT = 'W' OR RESULT = 'F', 1, 0 )) AS resultWFValue , sendKind AS sendKind , MSG_KIND AS msgKind + , DELAY_YN AS delayYn + , DELAY_COMPLETE_YN AS delayCompleteYn FROM ( SELECT B.USER_ID @@ -324,6 +333,8 @@ , A.RSLT_CODE2 , B.SEND_KIND as sendKind , B.MSG_KIND + , B.DELAY_YN + , B.DELAY_COMPLETE_YN , CASE WHEN B.MSG_TYPE = '6' AND B.FILE_CNT > 0 @@ -618,6 +629,7 @@ , M2.subject , M2.regdate , M2.reqdate + , IF(delayYn = 'Y' and delayCompleteYn = 'N', DATE_ADD(M2.reqdate, INTERVAL -30 MINUTE), M2.reqdate) AS delayOrgTime , M2.callFrom , M2.callTo , FN_GETHYPHEN(M2.callFrom) AS callFromComma @@ -637,6 +649,8 @@ , M2.msgId , M2.msgResult , M2.sendKind + , M2.delayYn + , M2.delayCompleteYn FROM ( SELECT @@ -657,6 +671,8 @@ , CUR_STATE AS curState , RSLT_CODE AS rsltCode , RSLT_CODE2 AS rsltCode2 + , DELAY_YN AS delayYn + , DELAY_COMPLETE_YN AS delayCompleteYn , IF( (RSLT_CODE != '0' AND RSLT_CODE != '100' AND RSLT_CODE != '101' @@ -703,6 +719,8 @@ , MD.CUR_STATE , MD.RSLT_CODE , MD.RSLT_CODE2 + , MGD.DELAY_YN + , MGD.DELAY_COMPLETE_YN , MGD.SEND_KIND AS sendKind ,() AS RESULT FROM diff --git a/src/main/resources/egovframework/sqlmap/let/pay/MjonPay_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/pay/MjonPay_SQL_mysql.xml index 1eac75a6..d7428744 100644 --- a/src/main/resources/egovframework/sqlmap/let/pay/MjonPay_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/pay/MjonPay_SQL_mysql.xml @@ -1653,7 +1653,9 @@ ROUND(IFNULL(S6.AMT, 0)) AS amtRefundSum, IFNULL(S6.CNT, 0) AS amtRefundCnt, ROUND(IFNULL(S7.AMT, 0)) AS amtSpaySum, - IFNULL(S7.CNT, 0) AS amtSpayCnt + IFNULL(S7.CNT, 0) AS amtSpayCnt, + ROUND(IFNULL(S8.AMT, 0)) AS amtAfterPaySum, + IFNULL(S8.CNT, 0) AS amtAfterPayCnt FROM (SELECT DATE_FORMAT(t1.REG_DATE, '%Y-%m-%d') AS REG_DATE , SUM(t1.AMT) AS AMT, COUNT(0) AS CNT, @@ -1770,6 +1772,23 @@ ) S7 ON S7.REG_DATE = S1.REG_DATE + LEFT JOIN + ( SELECT DATE_FORMAT(t8.REG_DATE, '%Y-%m-%d') AS REG_DATE , + SUM(t8.AMT) AS AMT, + COUNT(0) AS CNT + FROM MJ_PG t8 + WHERE t8.PG_STATUS = 1 + AND t8.pay_method ='AFTERPAY' + + AND = #ntceBgnde# ]]> + + + AND + + GROUP BY DATE_FORMAT(t8.REG_DATE, '%Y-%m-%d') + ) + S8 + ON S8.REG_DATE = S1.REG_DATE ORDER BY 1=1 ,$searchSortCnd$ @@ -1792,7 +1811,8 @@ ROUND(IFNULL(S4.AMT, 0)) AS amtBankSum, ROUND(IFNULL(S5.AMT, 0)) AS amtVbankSum, ROUND(IFNULL(S6.AMT, 0)) AS amtRefundSum, - ROUND(IFNULL(S7.AMT, 0)) AS amtSpaySum + ROUND(IFNULL(S7.AMT, 0)) AS amtSpaySum, + ROUND(IFNULL(S8.AMT, 0)) AS amtAfterPaySum FROM (SELECT DATE_FORMAT(t1.REG_DATE, '%Y-%m') AS REG_DATE , SUM(t1.AMT) AS AMT, t1.moid AS MOID @@ -1881,6 +1901,19 @@ ) S7 ON S7.REG_DATE = S1.REG_DATE + LEFT JOIN + ( SELECT DATE_FORMAT(t8.REG_DATE, '%Y-%m') AS REG_DATE , + SUM(t8.AMT) AS AMT + FROM MJ_PG t8 + WHERE t8.PG_STATUS = 1 + AND t8.pay_method ='AFTERPAY' + + AND + + GROUP BY DATE_FORMAT(t8.REG_DATE, '%Y-%m') + ) + S8 + ON S8.REG_DATE = S1.REG_DATE ORDER BY 1=1 ,$searchSortCnd$ diff --git a/src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml index 3dba239c..e9004017 100644 --- a/src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml @@ -956,6 +956,7 @@ IFNULL(EMAIL_NOTI, 'N') AS emailNoti, IFNULL(SLACK_NOTI, 'N') AS slackNoti, IFNULL(SMISHING_NOTI, 'N') AS smishingNoti, + IFNULL(HOLI_SMISHING_NOTI, 'N') AS holiSmishingNoti, LAST_UPDUSR_ID AS lasUpdusrId, LAST_UPDT_PNTTM AS lastUpdtPnttm FROM MJ_MBER_SETTING @@ -972,6 +973,7 @@ ,EMAIL_NOTI = #emailNoti# ,SLACK_NOTI = #slackNoti# ,SMISHING_NOTI = #smishingNoti# + ,HOLI_SMISHING_NOTI = #holiSmishingNoti# ,LAST_UPDUSR_ID = #lasUpdusrId# ,LAST_UPDT_PNTTM = NOW() diff --git a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrUserSelectSpamBlockDetailPopAjax.jsp b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrUserSelectSpamBlockDetailPopAjax.jsp index b1914e0c..1ccb9082 100644 --- a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrUserSelectSpamBlockDetailPopAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrUserSelectSpamBlockDetailPopAjax.jsp @@ -6,6 +6,12 @@ <%@ page import="itn.com.cmm.LoginVO" %>
+
+

+ +

+
+ <%-- 이용정지 사유 표시 변경으로 문자내용은 표시 안하고 사유로만 표시하기로 변경 됨 - 20240821 우영두 변경 @@ -74,7 +80,7 @@

- + --%>
diff --git a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop.jsp b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop.jsp index 5c5f71ab..7fccb3e2 100644 --- a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop.jsp +++ b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectMsgDataListPop.jsp @@ -153,6 +153,7 @@ function fn_updateMberSttus(msgGroupId){ var data = new FormData(form); url = "/uss/umt/user/updateMberSttusBlockAjax.do"; data.append("msgGroupId", msgGroupId); + data.append("smiMemo", "시스템 스팸 필터링에 의한 이용정지"); $.ajax({ type: "POST", diff --git a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp index 3c2fe97e..1a52cfed 100644 --- a/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp +++ b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp @@ -1535,7 +1535,7 @@ function fn_MsgDelayCancel_after(){ var mberSttus = $('#mberSttus').val(); mberSttus = "B"; //이용자 정지 처리 var smiMemo = $('#smiContents').val(); - smiMemo = "관리자가 최근 문자 지연 내역에서 스미싱의심으로 판단하여 발송취소를 한 후 이용자 정지 처리함"; + smiMemo = "시스템 스팸 필터링에 의한 이용정지"; fn_SpamMberUpdt(mberSttus, smiMemo, "이용자 정지를 진행하시겠습니까?"); /* @@ -2949,6 +2949,31 @@ function kakaoATDelayCancel(msgGroupId){ }); } } + +function fnInputSpamBlockMemo(){ + var memo = $("#inputSpamBlockMemo option:selected").text(); + var memoVal = $("#inputSpamBlockMemo option:selected").val(); + + if(memoVal != "6"){ + $("#smiMemoEdit").text(memo); + }else{ + $("#smiMemoEdit").text(""); + } + +} + +function fnInputSmiBlockMemo(){ + var memo = $("#inputSmiBlockMemo option:selected").text(); + var memoVal = $("#inputSmiBlockMemo option:selected").val(); + + if(memoVal != "6"){ + $("#smiContents").text(memo); + }else{ + $("#smiContents").text(""); + } + +} + + + +
+ + + " /> + " /> + + + + + + +
+
+
+

공휴일 관리

+

공휴일 등록 관리

+
+
+
+
+ + + + + " > + + + ~ + + " + > + + + + 타임아웃 아이콘 + +
+

+ + + + + +
+
+

+ 총 건 + + (예약발송 : 건) + +

+
+ + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
번호공휴일명휴일일자휴일종류등록일자등록자
+ " title="Check " type="checkbox"/> + + + + + + + + + + '); return false;"> + + + + + + + + 법정 공휴일 + + + 임시 공휴일 + + + 기타 + + + + + + +
+
+
+ + +
+ + +
+
    + +
+
+
+ +
+
+
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/holiday/alarmset/MsgHolidayAlarmSettingListPop.jsp b/src/main/webapp/WEB-INF/jsp/holiday/alarmset/MsgHolidayAlarmSettingListPop.jsp new file mode 100644 index 00000000..88e69cbd --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/holiday/alarmset/MsgHolidayAlarmSettingListPop.jsp @@ -0,0 +1,675 @@ +<%-- + Class Name : MsgHolidayAlarmSettingListPop.jsp + Description : 야간 스미싱알림 일정 등록관리 팝업 + Modification Information + + 수정일 수정자 수정내용 + ------- -------- --------------------------- + 2024.07.31 우영두 최초 생성 + + author : 우영두 + since : 2022.07.01 + + Copyright (C) 2009 by MOPAS All right reserved. +--%> +<%@ 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="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"%> +<% pageContext.setAttribute("newLineChar", "\r\n"); %> +<% pageContext.setAttribute("newLineChar2", "\n"); %> +<% + response.setHeader("Cache-Control","no-store"); + response.setHeader("Pragma","no-cache"); + response.setDateHeader("Expires",0); + if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache"); +%> + + + +스미싱의심 알림 설정 관리 + + + + + + + + + + + + + + + + + +
+
+
+
Loading
+
+
+
+ + +
+
+ +

스미싱의심 알림 예외 일정 관리

+ +
+
+
+ + + + + 부터 + + + + + + 까지 + + + + + +
+
+

+
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
번호구분시작시간종료시간사용여부
+ " title="Check " type="checkbox"/> + + + + + + + + + + + + 평일 + + + 주말 + + + 공휴일 + + + + + + + + + + 사용 중 + + + + ','Y');" value="사용" style="width:55px;"/> + + + + + + + ','N');" value="미사용"/> + + + 미사용 + + +
+
+
+ + +
+ + +
+
    + +
+
+
+ +
+
+
+ + diff --git a/src/main/webapp/WEB-INF/jsp/holiday/popup/MsgHolidayModifyPopup.jsp b/src/main/webapp/WEB-INF/jsp/holiday/popup/MsgHolidayModifyPopup.jsp new file mode 100644 index 00000000..8c78aa58 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/holiday/popup/MsgHolidayModifyPopup.jsp @@ -0,0 +1,443 @@ +<%-- + Class Name : MsgHolidayModifyPopup.jsp + Description : 공휴일 등록 팝업 + Modification Information + + 수정일 수정자 수정내용 + ------- -------- --------------------------- + 2024.07.29 우영두 최초 생성 + + author : 우영두 + since : 2022.07.01 + + Copyright (C) 2009 by MOPAS All right reserved. +--%> +<%@ 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="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"%> +<% pageContext.setAttribute("newLineChar", "\r\n"); %> +<% pageContext.setAttribute("newLineChar2", "\n"); %> +<% + response.setHeader("Cache-Control","no-store"); + response.setHeader("Pragma","no-cache"); + response.setDateHeader("Expires",0); + if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache"); +%> + + + +공휴일 등록 + + + + + + + + + + + + + + + + +
+
+
+
Loading
+
+
+
+ + + + +
+
+ +

공휴일 등록

+ +
+
+ + + + + + + + + + + + + + + + + + + +
휴일명 + +
휴일 일자 + + + + + +
휴일 구분 + +
+
+ + + + + + + + + + +
+
+
+
+ + diff --git a/src/main/webapp/WEB-INF/jsp/sym/site/adminNotiDetail.jsp b/src/main/webapp/WEB-INF/jsp/sym/site/adminNotiDetail.jsp index 3b8f55b1..9bd58074 100644 --- a/src/main/webapp/WEB-INF/jsp/sym/site/adminNotiDetail.jsp +++ b/src/main/webapp/WEB-INF/jsp/sym/site/adminNotiDetail.jsp @@ -6,9 +6,34 @@ - - 관리자 알림 관리 - +
@@ -73,6 +111,17 @@ + + + 스미싱의심 알림 여부 + + + + + diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/KakaoATChannelIDList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/KakaoATChannelIDList.jsp index 0e8e298e..bd264762 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/KakaoATChannelIDList.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/KakaoATChannelIDList.jsp @@ -205,7 +205,7 @@ function fnSelectMber(mberId) { 채널명 등록상태 채널생성일 - 채널등록일 + 채널등록일 삭제여부 diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/SendKakaoATList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/SendKakaoATList.jsp index a0b1316a..e763479d 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/SendKakaoATList.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/SendKakaoATList.jsp @@ -476,7 +476,7 @@ function kakaoATDelayCancel(msgGroupId, userId){ function fn_MsgDelayCancel_after(userId){ var mberSttus = $('#mberSttus').val(); mberSttus = "B"; //이용자 정지 처리 - var smiMemo = "관리자가 최근 문자 지연 내역에서 스미싱의심으로 판단하여 발송취소를 한 후 이용자 정지 처리함"; + var smiMemo = "시스템 스팸 필터링에 의한 이용정지"; fn_SpamMberUpdt(userId, mberSttus, smiMemo, "이용자 정지를 진행하시겠습니까?"); } diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendHoliMsgList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendHoliMsgList.jsp new file mode 100644 index 00000000..254b1453 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendHoliMsgList.jsp @@ -0,0 +1,708 @@ +<%-- + Class Name : SendHoliMsgList.jsp + Description : 야간 스미싱의심 알림 제한 발송 내역 + Modification Information + + 수정일 수정자 수정내용 + ------- -------- --------------------------- + 2024.07.24 우영두 최초 생성 + + author : 공통서비스 개발팀 장동한 + since : 2009.09.16 + + Copyright (C) 2009 by MOPAS All right reserved. +--%> +<%@ 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="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"%> +<% pageContext.setAttribute("newLineChar", "\r\n"); %> +<% pageContext.setAttribute("newLineChar2", "\n"); %> +<% + response.setHeader("Cache-Control","no-store"); + response.setHeader("Pragma","no-cache"); + response.setDateHeader("Expires",0); + if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache"); +%> + + + +알림 미처리 문자예약 조회 + + + + + + + +
+ + + + + " /> + " /> + + + + + + + +
+
+
+

알림 미처리 문자 조회

+

스미싱의심 알림 비활성화로 인해 발송된 문자리스트 현황을 파악할 수 있습니다.

+
+
+
+
+ + + + + " > + + + ~ + + " + > + + + + 타임아웃 아이콘 + +
+

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

+ 총 건 + + (예약발송 : 건) + +

+
+ + + + +
+
+
+ + + + + + <%-- --%> + + + + + + + + + + <%-- + + --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + <%-- --%> + + + + + + + + + + + + + + + +
번호아이디발신번호발송건수요청시간예약여부내용타입처리상태등록일자방식
+ " title="Check " type="checkbox"/> + + style="color: #0000FF; cursor:pointer;"> + + + + + + + style="color: #0000FF; cursor:pointer;"> + '); return false;"> + + () + + style="color: #0000FF; cursor:pointer;"> + + + 일반 + + + 탈퇴 + + + 이용정지 + + + 기타(${result.mberSttus}) + + + style="color: #0000FF; cursor:pointer;"style="cursor:pointer;"> + + + + style="color: #0000FF; cursor:pointer;"style="cursor:pointer;"> + + + + + + + + (%) + + + style="color: #0000FF; cursor:pointer;"style="cursor:pointer;"> + + style="color: #0000FF; cursor:pointer;"> + + + 예약 + <%-- + (취소) + --%> + + + 즉시 + + + style="color: #0000FF;"> + + + + + 내용없음 + + + 그림문자 + + +
+ + + + + + + + + +
+
+ +

+
+ + + + + + + + + + + +
+
+ + +
+
+
+
style="color: #0000FF; cursor:pointer;"> + + + SMS + + + LMS + + + MMS + + + 알림톡 + + + + + + style="color: #0000FF; cursor:pointer;"> + + + 처리완료 + + + 이용정지 + + + 예약취소 + + + 미처리 + + + + style="color: #0000FF; cursor:pointer;"> + + style="color: #0000FF; cursor:pointer;"> + + + API + + + WEB + + +
+
+
+ + +
+ + +
+
    + +
+
+
+ +
+
+
+
+ + + +
+ +
+ +
+ + + diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendMsgDetailList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendMsgDetailList.jsp index 34075d5d..b4ac83b9 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendMsgDetailList.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendMsgDetailList.jsp @@ -105,6 +105,10 @@ function goList() { frm.action ='/uss/ion/msg/NewUserSendMsgList.do'; } + if(detailType == "sendHoliMsgList") { + frm.action ='/uss/ion/msg/selectHoliMsgList.do'; + } + frm.submit(); } diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendMsgList.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendMsgList.jsp index 7721272e..55ab57ed 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendMsgList.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/SendMsgList.jsp @@ -499,11 +499,11 @@ function fnMsgDelayCancelArray(msgGroupId, userId) { function fn_MsgDelayCancel_after(userId){ var mberSttus = $('#mberSttus').val(); mberSttus = "B"; //이용자 정지 처리 - var smiMemo = "관리자가 최근 문자 지연 내역에서 스미싱의심으로 판단하여 발송취소를 한 후 이용자 정지 처리함"; + var smiMemo = "시스템 스팸 필터링에 의한 이용정지"; fn_SpamMberUpdt(userId, mberSttus, smiMemo, "이용자 정지를 진행하시겠습니까?"); } - + //회원 이용정지 처리 function fn_SpamMberUpdt(userId, p_mberSttus, p_smiMemo, p_confirm_msg) { url = "/uss/umt/user/EgovGnrlUpdateUserMsttusAjax.do"; @@ -781,9 +781,9 @@ function fn_SpamMberUpdt(userId, p_mberSttus, p_smiMemo, p_confirm_msg) {
- + - + diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/pdfViewPhone.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/pdfViewPhone.jsp index 4f5dc648..e1677450 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/pdfViewPhone.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/pdfViewPhone.jsp @@ -17,10 +17,10 @@ <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> <% - response.setHeader("Cache-Control","no-store"); - response.setHeader("Pragma","no-cache"); - response.setDateHeader("Expires",0); - if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache"); + response.setHeader("Cache-Control","no-store"); + response.setHeader("Pragma","no-cache"); + response.setDateHeader("Expires",0); + if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache"); %> @@ -35,7 +35,7 @@ html { overflow-x: hidden; overflow-y: auto; -} +} @@ -45,141 +45,153 @@ html { @@ -188,247 +200,247 @@ function setRejectAreaHide() {
-
-

발신번호 신청 정보

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
발신번호대표담당자회원구분인증방식인증자인증여부다운로드
${phoneNumber}${userName}${managerNm} - - - 기업 - - - 개인 - - - - - - - - 당사 - - - 대표 - - - 직원 - - - 타사 - - - 본인 - - - 타인 - - - - - 없음 - - - - - - 휴대폰 - - - 서류 - - - - - - - - - - - - - - - - - - 발신번호 차단 - - - 인증요청 - - - - - - - -
-
+
+

발신번호 신청 정보

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
발신번호대표담당자회원구분인증방식인증자인증여부다운로드
${phoneNumber}${userName}${managerNm} + + + 기업 + + + 개인 + + + + + + + + 당사 + + + 대표 + + + 직원 + + + 타사 + + + 본인 + + + 타인 + + + + + 없음 + + + + + + 휴대폰 + + + 서류 + + + + + + + + + + + + + + + + + + 발신번호 차단 + + + 인증요청 + + + + + + + +
+
-

- -
-

승인에 필요한 서류

-
-
- - - - - - - - - - - - -
${requiredDocuments} - - - - -
-
- - - - +

+ +
+

승인에 필요한 서류

+
+
+ + + + + + + + + + + + +
${requiredDocuments} + + + + +
+
+ + + + - -
- - - - - - - - - - - - - - -
-
+ +
+ + + + + + + + + + + + + + +
+
- -
- PDF 뷰어에서 지원하지 않는 형식의 파일입니다. 첨부파일 다운로드후 확인해주세요. -
-
- + +
+ PDF 뷰어에서 지원하지 않는 형식의 파일입니다. 첨부파일 다운로드후 확인해주세요. +
+
+ -
- -  Page: /   - - -
-
+
+ +  Page: /   + + +
+


@@ -458,95 +470,101 @@ function setRejectAreaHide() { - \ No newline at end of file + // Initial/first page rendering + renderPage(pageNum); + }); + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/sendNumberReturnPop.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/sendNumberReturnPop.jsp index 3031beea..44a074d9 100644 --- a/src/main/webapp/WEB-INF/jsp/uss/ion/msg/sendNumberReturnPop.jsp +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/msg/sendNumberReturnPop.jsp @@ -39,14 +39,22 @@ $(document).ready(function() { // change 함수 - $("#changeWord").change(function() { + /* $("#changeWord").change(function() { // 변경된 값으로 비교 후 alert 표출 if($(this).val() == ""){ $("#rejectReason").val(''); } else { - $("#rejectReason").val($(this).val()); + + var memo = $(this).val(); + var spMemo = memo.split('
').join("\r\n"); + + console.log("memo split ::: "+memo); + + $("#rejectReason").html(spMemo); + + //$("#rejectReason").val($(this).val()); } - }); + }); */ }); @@ -94,6 +102,15 @@ function authYnC() { } +function fnRejectResonInput(){ + + //각 문구 줄바꿈 처리 적용 + var memo = $("#changeWord option:selected").val(); + var spMemo = memo.split('
').join("\r\n"); + $("#rejectReason").html(spMemo); + +} + @@ -113,20 +130,18 @@ function authYnC() { 반려문구 - - - - - - - - - - - - - + + + + + + + + + + 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 d0eaef2e..73e41db8 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 @@ -105,6 +105,44 @@ function fnSetCalMonth(val) { form.ntceEnddeYYYMMDD.value = year + "-" + month + "-" + date; } + +function fnGoPayList(payType, payDate){ + + var form = document.payParamForm; + form.searchCondition2.value = payType; + form.searchStartDate.value= payDate; + form.searchEndDate.value= payDate; + + form.action=""; + form.submit(); + +} + +function fnGoPayRefundList(refundType, refundDate){ + + var form = document.payRefParamForm; + + form.searchCondition2.value = refundType; + form.searchStartDate.value= refundDate; + form.searchEndDate.value= refundDate; + + form.action=""; + form.submit(); + +} + +function payDayExcelDownload(){ + + var form = document.payExcelDwnForm; + + $('#excelNtceBgnde').val($('#ntceBgndeYYYMMDD').val()) ; + $('#excelNtceEndde').val($('#ntceEnddeYYYMMDD').val()) ; + + form.action=""; + form.submit(); + +} +