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/web/KakaoAlimTalkSendController.java b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java index ca1678bf..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; @@ -200,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; + } // 카카오 템플릿 목록 조회 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/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 e615bec6..e0a1667f 100644 --- a/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java +++ b/src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java @@ -1280,7 +1280,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); @@ -1380,11 +1380,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 601e1507..e61daec4 100644 --- a/src/main/java/itn/let/mjo/pay/service/MjonPayVO.java +++ b/src/main/java/itn/let/mjo/pay/service/MjonPayVO.java @@ -207,6 +207,7 @@ public class MjonPayVO extends ComDefaultVO{ private String amtCellSum; //휴대폰 결제 금액 private String amtBankSum; //즉시이체 결제 금액 private String amtVbankSum; //전용계좌 결제 금액 + private String amtAfterPaySum; //전용계좌 결제 금액 private String amtRefundSum; //환불 금액 private String amtTotSum; //결제 금액 총액 @@ -215,6 +216,7 @@ public class MjonPayVO extends ComDefaultVO{ private String amtCellSumTot; //전체 휴대폰 결제 금액 private String amtBankSumTot; //전체 즉시이체 결제 금액 private String amtVbankSumTot; //전체 전용계좌 결제 금액 + private String amtAfterPaySumTot; //전체 전용계좌 결제 금액 private String amtRefundSumTot; //환불 금액 private String amtTotSumTot; //전체 결제 금액 총액 @@ -223,6 +225,7 @@ public class MjonPayVO extends ComDefaultVO{ private String amtCellCnt; //휴대폰 결제 수 private String amtBankCnt; //즉시이체 결제 수 private String amtVbankCnt; //전용계좌 결제 수 + private String amtAfterPayCnt; //전용계좌 결제 수 private String amtRefundCnt; //환불 수 private String amtTotCnt; //결제 수 총수 @@ -1708,6 +1711,30 @@ public class MjonPayVO extends ComDefaultVO{ public void setTrdNo(String trdNo) { this.trdNo = trdNo; } + + public String getAmtAfterPaySum() { + return amtAfterPaySum; + } + + public void setAmtAfterPaySum(String amtAfterPaySum) { + this.amtAfterPaySum = amtAfterPaySum; + } + + public String getAmtAfterPaySumTot() { + return amtAfterPaySumTot; + } + + public void setAmtAfterPaySumTot(String amtAfterPaySumTot) { + this.amtAfterPaySumTot = amtAfterPaySumTot; + } + + public String getAmtAfterPayCnt() { + return amtAfterPayCnt; + } + + public void setAmtAfterPayCnt(String amtAfterPayCnt) { + this.amtAfterPayCnt = amtAfterPayCnt; + } } 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 45abff3a..e753ea0d 100644 --- a/src/main/java/itn/let/mjo/pay/web/MjonPayController.java +++ b/src/main/java/itn/let/mjo/pay/web/MjonPayController.java @@ -5352,7 +5352,7 @@ public class MjonPayController { if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List mjonPayVO.setSearchSortCnd("regDate"); - mjonPayVO.setSearchSortOrd("desc"); + mjonPayVO.setSearchSortOrd("asc"); } List resultList = mjonPayService.selectPayDayChart(mjonPayVO); @@ -5363,7 +5363,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); @@ -5373,6 +5373,7 @@ public class MjonPayController { long amtCellSumTot = 0; //전체 휴대폰 결제 금액 long amtBankSumTot = 0; //전체 즉시이체 결제 금액 long amtVbankSumTot = 0; //전체 전용계좌 결제 금액 + long amtAfterPaySumTot = 0; //전체 전용계좌 결제 금액 long amtRefundSumTot = 0; //전체 환불 금액 long amtTotSumTot = 0; //전체 결제 금액 총액 @@ -5382,6 +5383,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()); } @@ -5391,6 +5393,7 @@ public class MjonPayController { mjonPayVO.setAmtCellSumTot(amtCellSumTot + ""); mjonPayVO.setAmtBankSumTot(amtBankSumTot + ""); mjonPayVO.setAmtVbankSumTot(amtVbankSumTot + ""); + mjonPayVO.setAmtAfterPaySumTot(amtAfterPaySumTot + ""); mjonPayVO.setAmtRefundSumTot(amtRefundSumTot + ""); mjonPayVO.setAmtTotSumTot(amtTotSumTot + ""); @@ -5402,8 +5405,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" @@ -5434,7 +5646,7 @@ public class MjonPayController { } if("".equals(mjonPayVO.getSearchSortCnd())){ //최초조회시 최신것 조회List mjonPayVO.setSearchSortCnd("regDate"); - mjonPayVO.setSearchSortOrd("desc"); + mjonPayVO.setSearchSortOrd("asc"); } mjonPayVO.setFirstIndex(0); @@ -5447,6 +5659,7 @@ public class MjonPayController { long amtCellSumTot = 0; //전체 휴대폰 결제 금액 long amtBankSumTot = 0; //전체 즉시이체 결제 금액 long amtVbankSumTot = 0; //전체 전용계좌 결제 금액 + long amtAfterPaySumTot = 0; //전체 후불결제 금액 long amtRefundSumTot = 0; //전체 환불 금액 long amtTotSumTot = 0; //전체 결제 금액 총액 @@ -5456,6 +5669,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()); } @@ -5465,6 +5679,7 @@ public class MjonPayController { mjonPayVO.setAmtCellSumTot(amtCellSumTot + ""); mjonPayVO.setAmtBankSumTot(amtBankSumTot + ""); mjonPayVO.setAmtVbankSumTot(amtVbankSumTot + ""); + mjonPayVO.setAmtAfterPaySumTot(amtAfterPaySumTot + ""); mjonPayVO.setAmtRefundSumTot(amtRefundSumTot + ""); mjonPayVO.setAmtTotSumTot(amtTotSumTot + ""); @@ -5478,6 +5693,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/uat/uia/web/EgovMypageController.java b/src/main/java/itn/let/uat/uia/web/EgovMypageController.java index af841586..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"); 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 ed90c7b8..723ae746 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 '알림톡' @@ -1080,6 +1087,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 , @@ -1092,6 +1100,8 @@ M2.curState , M2.rsltCode , M2.rsltCode2 , + M2.atDelayYn , + M2.atDelayCompleteYn , M2.orderByrsltCode , M2.delFlag , M2.msgType , @@ -1177,6 +1187,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 , @@ -1215,6 +1227,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/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 c0fa44ab..75d69bfc 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 @@ -1651,7 +1651,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, @@ -1768,6 +1770,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$ @@ -1790,7 +1809,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 @@ -1879,6 +1899,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/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp b/src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp index b72619d0..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, "이용자 정지를 진행하시겠습니까?"); /* 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/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/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(); + +} +