into advc

Conflicts:
	src/main/java/itn/let/mjo/pay/service/MjonPayVO.java
This commit is contained in:
hylee 2024-09-10 09:47:09 +09:00
commit 60ad230120
82 changed files with 8230 additions and 768 deletions

View File

@ -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")

View File

@ -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");
}

View File

@ -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<KakaoVO> kakaoAtSandList = new ArrayList<KakaoVO>();
//야간스미싱 알림여부 정보 불러오기
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<MsgAlarmSetVO> 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<MsgHolidayVO> 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);
}

View File

@ -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<String, MultipartFile> files = multiRequest.getFileMap();
List<MultipartFile> files = (List<MultipartFile>) 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<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
HSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap<String, String> 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<sheet.getPhysicalNumberOfRows(); r++) {
XSSFRow tmpRow = sheet.getRow(r);
//System.out.println("=================r:"+r);
XSSFCell cell = null;
if(tmpRow.getCell(0) != null) {
cell = tmpRow.getCell(0); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5
if(cell != null && !cell.toString().trim().equals("")) {
//System.out.println("value-" + r + ":" +cell.getStringCellValue());
totRowDataCnt++;
//System.out.println("tmpRowCnt:"+totRowDataCnt);
}
}
}
if(totRowDataCnt > 501) { //
errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다.";
jr.setSuccess(false);
jr.setMessage(errMessage);
return jr;
}
List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
for(int i=2; i< sheet.getLastRowNum() + 2; i++){ //먼저 밸리데이션 체크(1줄은 생략)
XSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap<String, String> 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<String, MultipartFile> files = multiRequest.getFileMap();
List<MultipartFile> files = (List<MultipartFile>) 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<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
for(int i=1; i< sheet.getLastRowNum() + 1; i++){ //먼저 밸리데이션 체크(1줄은 생략)
HSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap<String, String> 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<sheet.getPhysicalNumberOfRows(); r++) {
XSSFRow tmpRow = sheet.getRow(r);
//System.out.println("=================r:"+r);
XSSFCell cell = null;
if(tmpRow.getCell(0) != null) {
cell = tmpRow.getCell(0); //이름/핸드폰/변환1/변환2/변환3/변환4/변환5
if(cell != null && !cell.toString().trim().equals("")) {
//System.out.println("value-" + r + ":" +cell.getStringCellValue());
totRowDataCnt++;
//System.out.println("tmpRowCnt:"+totRowDataCnt);
}
}
}
if(totRowDataCnt > 501) { //
errMessage = "한번에 전송 가능한 최대 발송건은 500건 입니다.";
jr.setSuccess(false);
jr.setMessage(errMessage);
return jr;
}
List<HashMap<String, String>> json = new ArrayList<HashMap<String, String>>();
for(int i=1; i< sheet.getLastRowNum() + 1; i++){ //먼저 밸리데이션 체크(1줄은 생략)
XSSFRow row = sheet.getRow(i); //열읽기
if(null == row) {
continue;
}
HashMap<String, String> 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<MsgAlarmSetVO> 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<MsgHolidayVO> resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO);
MjonHolidayApi mjonHolidayApi = new MjonHolidayApi();
boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList);
if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송
MjonCommon comm = new MjonCommon();
comm.getAdminKakaoAtSandSlack(kakaoVO);
}
}
}
}

View File

@ -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;
}

View File

@ -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<MsgHolidayVO> 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<MsgHolidayVO> msgHolidayVoList = new ArrayList<MsgHolidayVO>();
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<MsgAlarmSetVO> resultAlarmList, List<MsgHolidayVO> 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;
}
}

View File

@ -231,4 +231,9 @@ public interface MjonMsgService {
MjonMsgVO selectApiSttstList(MjonMsgVO mjonMsgVO) throws Exception;
int selectCallFromNumberChk(MjonMsgVO mjonMsgVO) throws Exception;
List<MjonMsgVO> selectMjonHoliMsgList(MjonMsgVO mjonMsgVO) throws Exception;
void updateHoliMsgResultYn(MjonMsgVO mjonMsgVO) throws Exception;
}

View File

@ -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;
}
}

View File

@ -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<MjonMsgVO> selectMjonHoliMsgList(MjonMsgVO mjonMsgVO) throws Exception{
return (List<MjonMsgVO>)list("mjonMsgDAO.selectMjonHoliMsgList", mjonMsgVO);
}
public void updateHoliMsgResultYn(MjonMsgVO mjonMsgVO) throws Exception{
update("mjonMsgDAO.updateHoliMsgResultYn", mjonMsgVO);
}
}

View File

@ -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<MjonMsgVO> selectMjonHoliMsgList(MjonMsgVO mjonMsgVO) throws Exception{
return mjonMsgDAO.selectMjonHoliMsgList(mjonMsgVO);
}
@Override
public void updateHoliMsgResultYn(MjonMsgVO mjonMsgVO) throws Exception{
mjonMsgDAO.updateHoliMsgResultYn(mjonMsgVO);
}
}

View File

@ -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<MjonMsgVO> resultList = new ArrayList<MjonMsgVO>();
resultList = mjonMsgService.selectMjonHoliMsgList(searchVO);
model.addAttribute("resultList", resultList);
//문자발송 실패 결과 코드정보 리스트 불러오기
MjonMsgResultCodeVO mjonMsgResultCodeVO = new MjonMsgResultCodeVO();
List<MjonMsgResultCodeVO> 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<VacsVactVO> 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

View File

@ -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<MsgAlarmSetVO> 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<MsgHolidayVO> resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO);
MjonHolidayApi mjonHolidayApi = new MjonHolidayApi();
boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList);
if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송
MjonCommon comm = new MjonCommon();
comm.getAdminSandSlack(mjonMsgVO);
}
}
}
}
}

View File

@ -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<MsgAlarmSetVO> 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<MsgHolidayVO> resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO);
MjonHolidayApi mjonHolidayApi = new MjonHolidayApi();
boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList);
if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송
MjonCommon comm = new MjonCommon();
comm.getAdminSandSlack(mjonMsgVO);
}
}
}
}
}

View File

@ -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<MsgAlarmSetVO> 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<MsgHolidayVO> 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

View File

@ -177,4 +177,8 @@ public interface MjonMsgDataService {
public int countByMsgAddrListAjax_advc(AddrVO addrVO) throws Exception;
//팩스 거래명세서 합산 정보
public List<MjonMsgVO> selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception;
}

View File

@ -361,4 +361,9 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
return (int) select("mjonMsgDAO.countByMsgAddrListAjax_advc", addrVO);
}
@SuppressWarnings("unchecked")
public List<MjonMsgVO> selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception{
return (List<MjonMsgVO>) list("mjonMsgDAO.selectPayUserSumFaxList",mjonMsgVO);
}
}

View File

@ -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<MsgAlarmSetVO> 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<MsgHolidayVO> 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<MsgAlarmSetVO> 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<MsgHolidayVO> 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<MjonMsgVO> selectPayUserSumFaxList(MjonMsgVO mjonMsgVO) throws Exception {
return mjonMsgDataDAO.selectPayUserSumFaxList(mjonMsgVO);
}
}

View File

@ -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<MsgAlarmSetVO> 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<MsgHolidayVO> 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);
}

View File

@ -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;
}
}

View File

@ -0,0 +1,34 @@
package itn.let.mjo.msgholiday.service;
import java.util.List;
public interface MsgHolidayService {
//공휴일 정보 입력하기
public int insertHolidayData(List<MsgHolidayVO> msgHolidayVO) throws Exception;
//공휴일 리스트 정보 조회하기
public List<MsgHolidayVO> 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<MsgAlarmSetVO> selectAlarmSettingList(MsgAlarmSetVO msgAlarmSetVO) throws Exception;
//알림 일정 상태정보 수정하기
public int updateAlarmSettingDataUseYn(MsgAlarmSetVO msgAlarmSetVO) throws Exception;
//알림 일정 삭제처리
public int deleteAlarmSettingData(MsgAlarmSetVO msgAlarmSetVO) throws Exception;
}

View File

@ -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;
}
}

View File

@ -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> msgHolidayVO) throws Exception{
return update("MsgHolidayDAO.insertHolidayData", msgHolidayVO);
}
@SuppressWarnings("unchecked")
public List<MsgHolidayVO> selectMsgHolidayList(MsgHolidayVO msgHolidayVO) throws Exception{
return (List<MsgHolidayVO>) 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<MsgAlarmSetVO> selectAlarmSettingList(MsgAlarmSetVO msgAlarmSetVO) throws Exception{
return (List<MsgAlarmSetVO>) 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);
}
}

View File

@ -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> 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<MsgHolidayVO> 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<MsgAlarmSetVO> 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);
}
}

View File

@ -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<MsgHolidayVO> 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<String> 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<MsgHolidayVO> 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<StatusResponse> 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<MsgHolidayVO> msgHolidayList = new ArrayList<MsgHolidayVO>();
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<StatusResponse> 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<StatusResponse> 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<String> idList = new ArrayList<String>();
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<MsgAlarmSetVO> 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<StatusResponse> 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<StatusResponse> 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<StatusResponse> 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<String> 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<StatusResponse> selectAlarmSettingDataCheckAjax() throws Exception{
MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO();
msgAlarmSetVO.setUseYn("Y");
msgAlarmSetVO.setFirstIndex(0);
List<MsgAlarmSetVO> 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<MsgHolidayVO> 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()
)
);
}
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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; //결제 총수

View File

@ -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<MjonMsgVO> 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<MjonMsgVO> payUserSumList = new ArrayList<MjonMsgVO>();
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<MjonMsgVO> payUserSumFaxList = new ArrayList<MjonMsgVO>();
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<MjonMsgVO> 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<MjonMsgVO> payUserSumList = new ArrayList<MjonMsgVO>();
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<MjonMsgVO> payUserSumFaxList = new ArrayList<MjonMsgVO>();
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<MjonPayVO> 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<MjonPayVO> 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<MjonPayVO> 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<MjonPayVO> 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 {

View File

@ -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;
}

View File

@ -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<String> 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<MsgAlarmSetVO> 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<MsgHolidayVO> 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<MsgAlarmSetVO> 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<MsgHolidayVO> 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 {
}
}
}

View File

@ -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;
}
}

View File

@ -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");

View File

@ -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";
}

View File

@ -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");

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<sqlMap resource="egovframework/sqlmap/let/holiday/MsgHolidayData_SQL_mysql.xml"/>
</sqlMapConfig>

View File

@ -0,0 +1,213 @@
<?xml version="1.0" encoding="UTF-8"?><!--
수정일 수정자 수정내용
========= ======= =================================================
2024.07.29 우영두
-->
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMap namespace="Holiday">
<typeAlias alias="msgHolidayVO" type="itn.let.mjo.msgholiday.service.MsgHolidayVO"/>
<typeAlias alias="msgAlarmSetVO" type="itn.let.mjo.msgholiday.service.MsgAlarmSetVO"/>
<insert id="MsgHolidayDAO.insertHolidayData" parameterClass="java.util.List">
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
<iterate conjunction=",">
(
#[].holidayNm#,
#[].holidayDate#,
#[].holidayType#,
#[].apiType#,
NOW(),
#[].frstRegisterId#,
NOW(),
#[].lastUpdusrId#
)
</iterate>
</insert>
<select id="MsgHolidayDAO.selectMsgHolidayList" parameterClass="msgHolidayVO" resultClass="msgHolidayVO">
SELECT COUNT(HOLIDAY_ID) OVER() AS totCnt,
HOLIDAY_ID AS holidayId,
HOLIDAY_NM AS holidayNm,
DATE_FORMAT(HOLIDAY_DATE, '%Y-%m-%d') AS holidayDate,
HOLIDAY_TYPE AS holidayType,
DATE_FORMAT(FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm,
FRST_REGISTER_ID AS frstRegisterId,
DATE_FORMAT(LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastUpdtPnttm,
LAST_UPDUSR_ID AS lastUpdusrID
FROM MJ_HOLIDAY
WHERE 1=1
<isNotEmpty property="searchKeyword">
AND ( HOLIDAY_NM LIKE CONCAT('%', #searchKeyword#, '%') )
</isNotEmpty>
<isNotEmpty property="holidayType">
<isEqual property="holidayType" compareValue="1">
AND HOLIDAY_TYPE = 1
</isEqual>
<isEqual property="holidayType" compareValue="2">
AND HOLIDAY_TYPE = 2
</isEqual>
<isEqual property="holidayType" compareValue="3">
AND HOLIDAY_TYPE = 3
</isEqual>
</isNotEmpty>
<isNotEmpty property="searchHoliYear">
AND HOLIDAY_DATE LIKE CONCAT(#searchHoliYear#,'%')
</isNotEmpty>
<isNotEmpty property="ntceBgnde">
AND HOLIDAY_DATE BETWEEN DATE_FORMAT(#ntceBgnde#, '%Y%m%d') AND DATE_FORMAT(#ntceEndde#, '%Y%m%d')
</isNotEmpty>
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
,$searchSortCnd$
</isNotEmpty>
<isNotEmpty property="searchSortOrd">
$searchSortOrd$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select>
<select id="MsgHolidayDAO.selectHolidayDetail" parameterClass="msgHolidayVO" resultClass="msgHolidayVO">
SELECT HOLIDAY_ID AS holidayId,
HOLIDAY_NM AS holidayNm,
DATE_FORMAT(HOLIDAY_DATE, '%Y-%m-%d') AS holidayDate,
HOLIDAY_TYPE AS holidayType,
DATE_FORMAT(FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm,
FRST_REGISTER_ID AS frstRegisterId,
DATE_FORMAT(LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastUpdtPnttm,
LAST_UPDUSR_ID AS lastUpdusrID
FROM MJ_HOLIDAY
WHERE HOLIDAY_ID = #holidayId#
</select>
<delete id="MsgHolidayDAO.deleteDuplicateHolidayApiData" parameterClass="msgHolidayVO">
DELETE
FROM MJ_HOLIDAY
WHERE HOLIDAY_ID IN
( SELECT HOLIDAY_ID
FROM MJ_HOLIDAY
WHERE API_TYPE = 'Y'
AND HOLIDAY_DATE LIKE CONCAT(#searchHoliYear#,'%')
)
</delete>
<update id="MsgHolidayDAO.updateHolidayData" parameterClass="msgHolidayVO">
UPDATE MJ_HOLIDAY
SET HOLIDAY_NM = #holidayNm#,
HOLIDAY_DATE = #holidayDate#,
HOLIDAY_TYPE = #holidayType#,
LAST_UPDUSR_ID = #lastUpdusrId#
WHERE HOLIDAY_ID = #holidayId#
</update>
<delete id="MsgHolidayDAO.deleteHolidayData" parameterClass="msgHolidayVO">
DELETE FROM MJ_HOLIDAY
WHERE 1=1
<isNotEmpty property="holidayIdList">
<iterate prepend="AND HOLIDAY_ID IN " open="(" close=")" conjunction="," property="holidayIdList">
#holidayIdList[]#
</iterate>
</isNotEmpty>
</delete>
<insert id="MsgHolidayDAO.insertAlarmSettingData" parameterClass="msgAlarmSetVO">
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#
)
</insert>
<select id="MsgHolidayDAO.selectAlarmSettingList" parameterClass="msgAlarmSetVO" resultClass="msgAlarmSetVO">
SELECT COUNT(ALARM_ID) OVER() AS totCnt,
ALARM_ID AS alarmId,
ALARM_TYPE AS alarmType,
ALARM_START AS alarmStart,
ALARM_END AS alarmEnd,
USE_YN AS useYn,
DATE_FORMAT(FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm,
FRST_REGISTER_ID AS frstRegisterId,
DATE_FORMAT(LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastRegistPnttm,
LAST_UPDUSR_ID AS lastUpdusrId
FROM MJ_SPAMPASS_ALARM
WHERE 1=1
<isNotEmpty property="useYn">
AND USE_YN = #useYn#
</isNotEmpty>
ORDER BY 1=1
, ALARM_TYPE ASC
<isNotEmpty property="searchSortCnd">
,$searchSortCnd$
</isNotEmpty>
<isNotEmpty property="searchSortOrd">
$searchSortOrd$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
</select>
<update id="MsgHolidayDAO.updateAlarmSettingDataUseYn" parameterClass="msgAlarmSetVO">
UPDATE MJ_SPAMPASS_ALARM SET
USE_YN = #useYn#,
LAST_UPDT_PNTTM = NOW(),
LAST_UPDUSR_ID = #lastUpdusrId#
WHERE ALARM_ID = #alarmId#
</update>
<delete id="MsgHolidayDAO.deleteAlarmSettingData" parameterClass="msgAlarmSetVO">
DELETE FROM MJ_SPAMPASS_ALARM
WHERE 1=1
<isNotEmpty property="alarmIdList">
<iterate prepend="AND ALARM_ID IN " open="(" close=")" conjunction="," property="alarmIdList">
#alarmIdList[]#
</iterate>
</isNotEmpty>
</delete>
</sqlMap>

View File

@ -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 '알림톡'

View File

@ -2302,6 +2302,39 @@
)
</insert>
<insert id="mjonMsgDAO.insertSpamPassMsgData" parameterClass="mjonMsgVO">
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()
)
</insert>
<update id="mjonMsgDAO.updateGroupMsgData" parameterClass="mjonMsgVO">
UPDATE MJ_MSG_GROUP_DATA
@ -3497,7 +3530,7 @@
<!-- 사용자 요금 사용내역 Sum 리스트 -->
<select id="mjonMsgDAO.selectPayUserSumList" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
/* 2024.01.26 검색 기준을 regdate 에서 reqdate로 기준을 잡자고 장건영팀장 요청으로 변경처리, msg_group_cnt는 사용하지 않아서 주석처리 */
/* 2024.05.08 공급가액 은 버림처리 */
/* 2024.05.08 공급가액 은 버림처리 TRUNCATE(숫자, 버림할 자릿수) */
SELECT
MAX(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )) AS maxRegDate
, MIN(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )) AS minRegDate
@ -3512,6 +3545,7 @@
, ifnull(TRUNCATE(SUM(M.EACH_PRICE) , 0), 0) AS supplyPrice
, 0 AS vatPrice
, ifnull(TRUNCATE(SUM(M.EACH_PRICE) , 0), 0) AS totalPrice
, M.MSG_TYPE
FROM (
SELECT
B.REGDATE
@ -3520,6 +3554,7 @@
, (B.EACH_PRICE * B.MSG_GROUP_CNT) AS supplyPrice
, B.EACH_PRICE
, B.TOT_PRICE
, B.MSG_TYPE
, CASE
WHEN B.MSG_TYPE = '6' AND B.FILE_CNT > 0
THEN '그림(MMS)'
@ -3581,9 +3616,49 @@
WHERE 1=1
AND M.RESULT IN ('W','S')
GROUP BY M.msgTypeName
ORDER BY M.orderByCode
ORDER BY M.MSG_TYPE
</select>
<select id="mjonMsgDAO.selectPayUserSumFaxList" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
/* 2024.08.23 팩스 데이터 누락으로 추가 */
SELECT
IFNULL(MAX(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )), 0) AS maxRegDate
, IFNULL(MIN(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )), 0) AS minRegDate
, M.msgTypeName
, IFNULL(SUM(SentEA), 0) AS ftSendCount
, ifnull(TRUNCATE(SUM(supplyPrice) , 0), 0) AS supplyPrice
, 0 AS vatPrice
, ifnull(TRUNCATE(SUM(M.TOT_PRICE) , 0), 0) AS totalPrice
FROM (
SELECT pf.ReqDate AS REGDATE
, pf.ReqDate AS REQ_DATE
, mjf.FAX_GROUP_CNT AS MSG_GROUP_CNT
, SentEA
, (mjf.EACH_PRICE * mjf.FAX_GROUP_CNT) AS supplyPrice
, mjf.EACH_PRICE
, mjf.TOT_PRICE
, "팩스" AS msgTypeName
FROM pgi_faxtran pf
LEFT JOIN mj_fax_group_data mjf
ON pf.seq = mjf.PGI_FAXTRAN_SEQ
LEFT JOIN mj_fax_convert_mng mjc
ON mjf.CONVERT_MNG_SEQ = mjc.CONVERT_MNG_SEQ
WHERE 1 = 1
AND pf.SentEA > 0
AND mjf.USER_ID = #userId#
<isNotEmpty property="startDate">
AND <![CDATA[ DATE_FORMAT(pf.ReqDate, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d') ]]>
</isNotEmpty>
<isNotEmpty property="endDate">
AND <![CDATA[ DATE_FORMAT(pf.ReqDate, '%Y-%m-%d') <= DATE_FORMAT(#endDate#, '%Y-%m-%d') ]]>
</isNotEmpty>
)M
WHERE 1=1
</select>
<insert id="mjonMsgDAO.insertSysMsgLog" parameterClass="SendLogVO">
INSERT
INTO mj_system_send
@ -7623,5 +7698,282 @@
</select>
<select id="mjonMsgDAO.selectCallFromNumberChk" parameterClass="mjonMsgVO" resultClass="Integer">
SELECT COUNT(USER_ID) FROM MJ_PHONE_MEMBER
WHERE USER_ID = #userId#
AND PHM_TYPE = '01'
AND PHONE_NUMBER = #callFrom#
</select>
<select id="mjonMsgDAO.selectMjonHoliMsgList" parameterClass="mjonMsgVO" resultClass="mjonMsgVO">
SELECT M.totCnt,
M.userId,
M.userNm,
M.msgGroupId,
M.reqDate,
M.reqFullDate,
M.smsTxt,
M.callFrom,
M.msgType,
M.msgTypeTxt,
M.reserveYn,
M.reserveCYn,
M.msgGroupCnt,
M.sendKind,
M.cancelResultYn,
M.frstRegistPnttm,
M.adminSmsNoticeYn,
M.smishingYn,
M.atSmishingYn,
M.mberSttus,
(SELECT COUNT(0)
FROM MJ_MSG_DATA B
WHERE B.RESERVE_C_YN = 'N'
AND B.MSG_GROUP_ID = M.msgGroupId
AND (
CASE
WHEN B.AGENT_CODE = '01'
AND
(
B.RSLT_CODE = '100'
AND
(
B.RSLT_CODE2 = '0'
)
)
THEN 'S'
WHEN B.AGENT_CODE = '02'
AND
(
B.RSLT_CODE = '0'
)
THEN 'S'
WHEN B.AGENT_CODE = '03'
AND
(
B.RSLT_CODE = '100' OR B.RSLT_CODE = '101' OR B.RSLT_CODE = '110' OR B.RSLT_CODE = '800'
)
THEN 'S'
WHEN B.AGENT_CODE = '04'
AND
(
B.RSLT_CODE = '4100' OR B.RSLT_CODE = '6600'
)
THEN 'S'
WHEN B.AGENT_CODE = '05'
AND
(
B.RSLT_CODE = '1000' OR B.RSLT_CODE = '1001'
)
THEN 'S'
WHEN B.AGENT_CODE = '07'
AND
(
B.RSLT_CODE = '6' OR B.RSLT_CODE = '1000'
)
THEN 'S'
WHEN B.AGENT_CODE = '08'
AND
(
B.RSLT_CODE = '1000' OR B.RSLT_CODE = '1001'
)
THEN 'S'
WHEN B.AGENT_CODE = '09'
AND
(
B.RSLT_CODE = '1000' OR B.RSLT_CODE = '1001'
)
THEN 'S'
ELSE 'F'
END) = 'S'
)
AS successCount,
(SELECT COUNT(0)
FROM MJ_MSG_DATA B
WHERE B.RESERVE_C_YN = 'N'
AND B.MSG_GROUP_ID = M.msgGroupId
AND (
CASE
WHEN B.AGENT_CODE = '01'
AND
(
B.RSLT_CODE = '410'
AND
(
B.RSLT_CODE2 = 'c'
)
)
THEN 'E'
WHEN B.AGENT_CODE = '02'
AND
(
B.RSLT_CODE = '1027' OR B.RSLT_CODE = '1030'
)
THEN 'E'
WHEN B.AGENT_CODE = '03'
AND B.RSLT_CODE = '508'
THEN 'E'
WHEN B.AGENT_CODE = '04'
AND
(
B.RSLT_CODE = '4432' OR B.RSLT_CODE = '4433' OR B.RSLT_CODE = '6628' OR B.RSLT_CODE = '6629'
)
THEN 'E'
WHEN B.AGENT_CODE = '05'
AND
(
B.RSLT_CODE = '2404' OR B.RSLT_CODE = '3404' OR B.RSLT_CODE = '6404'
)
THEN 'E'
WHEN B.AGENT_CODE = '07'
AND B.RSLT_CODE = '9013'
THEN 'E'
WHEN B.AGENT_CODE = '08'
AND
(
B.RSLT_CODE = '2404' OR B.RSLT_CODE = '3404' OR B.RSLT_CODE = '6404'
)
THEN 'E'
WHEN B.AGENT_CODE = '09'
AND
(
B.RSLT_CODE = '2404' OR B.RSLT_CODE = '3404' OR B.RSLT_CODE = '6404'
)
THEN 'E'
ELSE 'ETC'
END) = 'E'
)
AS callRejectionCount
FROM ( SELECT COUNT(msm.SPAMPASS_ID) OVER() AS totCnt,
mmgd.USER_ID AS userId,
lmb.MBER_NM AS userNm,
mmgd.MSG_GROUP_ID AS msgGroupId,
DATE_FORMAT(mmgd.REQ_DATE, '%Y-%m-%d %H:%i' ) AS reqDate ,
DATE_FORMAT(mmgd.REQ_DATE, '%Y-%m-%d %H:%i' ) AS reqFullDate ,
mmgd.SMS_TXT AS smsTxt ,
mmgd.CALL_FROM AS callFrom ,
mmgd.MSG_TYPE AS msgType ,
D.CODE_NM AS msgTypeTxt,
mmgd.RESERVE_YN AS reserveYn ,
mmgd.RESERVE_C_YN AS reserveCYn ,
mmgd.MSG_GROUP_CNT AS msgGroupCnt ,
mmgd.SEND_KIND AS sendKind,
msm.CANCEL_RESULT_YN AS cancelResultYn,
DATE_FORMAT(msm.FRST_REGIST_PNTTM, '%Y-%m-%d %H:%i' ) AS frstRegistPnttm,
lmb.ADMIN_SMS_NOTICE_YN AS adminSmsNoticeYn,
lmb.SMISHING_YN AS smishingYn,
lmb.AT_SMISHING_YN AS atSmishingYn,
lmb.SPAM_YN AS spamYn,
lmb.MBER_STTUS AS mberSttus
FROM MJ_SPAMPASS_MSG msm
INNER JOIN LETTNGNRLMBER lmb
ON msm.USER_ID = lmb.MBER_ID
INNER JOIN MJ_MSG_GROUP_DATA mmgd
ON msm.MSG_GROUP_ID = mmgd.MSG_GROUP_ID
LEFT JOIN
( SELECT CODE_NM ,
CODE ,
CODE_DC
FROM LETTCCMMNDETAILCODE
WHERE USE_AT = 'Y'
AND CODE_ID = 'ITN022'
)
D
ON mmgd.MSG_TYPE = D.CODE
/** 메세지타입 */
WHERE DATE_FORMAT(msm.FRST_REGIST_PNTTM, '%Y-%m-%d') BETWEEN #ntceBgnde# AND #ntceEndde#
<isNotEmpty property="searchKeyword">
<isEqual property="searchCondition" compareValue="" >
AND (
mmgd.USER_ID LIKE CONCAT ('%', #searchKeyword#,'%')
OR mmgd.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%')
OR mmgd.SMS_TXT LIKE CONCAT ('%', #searchKeyword#,'%')
)
</isEqual>
<isEqual property="searchCondition" compareValue="1">
AND mmgd.USER_ID LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
<isEqual property="searchCondition" compareValue="2">
AND mmgd.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
<isEqual property="searchCondition" compareValue="3">
AND mmgd.SMS_TXT LIKE CONCAT ('%', #searchKeyword#,'%')
</isEqual>
</isNotEmpty>
<isNotEmpty property="mberSttus">
<isEqual property="mberSttus" compareValue="Y">
AND lmb.MBER_STTUS = 'Y'
</isEqual>
<isEqual property="mberSttus" compareValue="N">
AND lmb.MBER_STTUS = 'N'
</isEqual>
<isEqual property="mberSttus" compareValue="B">
AND lmb.MBER_STTUS = 'B'
</isEqual>
</isNotEmpty>
<isNotEmpty property="searchCondition3">
<isEqual property="searchCondition3" compareValue="1">
AND mmgd.MSG_TYPE = '4'
</isEqual>
<isEqual property="searchCondition3" compareValue="2">
AND mmgd.MSG_TYPE = '6' AND mmgd.FILE_CNT = 0
</isEqual>
<isEqual property="searchCondition3" compareValue="3">
<![CDATA[
AND mmgd.MSG_TYPE = '6' AND mmgd.FILE_CNT <> 0
]]>
</isEqual>
<isEqual property="searchCondition3" compareValue="8">
AND mmgd.MSG_TYPE = '8'
</isEqual>
<isEqual property="searchCondition3" compareValue="9">
AND mmgd.MSG_TYPE = '9'
</isEqual>
</isNotEmpty>
<isNotEmpty property="cancelResultYn">
<isEqual property="cancelResultYn" compareValue="Y">
AND msm.CANCEL_RESULT_YN = 'Y'
</isEqual>
<isEqual property="cancelResultYn" compareValue="N">
AND msm.CANCEL_RESULT_YN = 'N'
</isEqual>
</isNotEmpty>
<isNotEmpty property="sendKind">
<isEqual property="sendKind" compareValue="H">
AND mmgd.SEND_KIND = 'H'
</isEqual>
<isEqual property="sendKind" compareValue="A">
AND mmgd.SEND_KIND = 'A'
</isEqual>
</isNotEmpty>
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
,$searchSortCnd$
</isNotEmpty>
<isNotEmpty property="searchSortOrd">
$searchSortOrd$
</isNotEmpty>
LIMIT #recordCountPerPage# OFFSET #firstIndex#
) M
</select>
<update id="mjonMsgDAO.updateHoliMsgResultYn" parameterClass="mjonMsgVO">
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#
</update>
</sqlMap>

View File

@ -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

View File

@ -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
,(<include refid="MjonMsgSentDAO.selectAgentResultQuery_MD"/>) AS RESULT
FROM

View File

@ -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'
<isNotEmpty property="ntceBgnde">
AND <![CDATA[ DATE_FORMAT(t8.REG_DATE, '%Y-%m-%d') >= #ntceBgnde# ]]>
</isNotEmpty>
<isNotEmpty property="ntceEndde">
AND <![CDATA[ DATE_FORMAT(t8.REG_DATE, '%Y-%m-%d') <= #ntceEndde# ]]>
</isNotEmpty>
GROUP BY DATE_FORMAT(t8.REG_DATE, '%Y-%m-%d')
)
S8
ON S8.REG_DATE = S1.REG_DATE
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
,$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'
<isNotEmpty property="ntceBgnde">
AND <![CDATA[ DATE_FORMAT(t8.REG_DATE, '%Y') = #ntceBgnde# ]]>
</isNotEmpty>
GROUP BY DATE_FORMAT(t8.REG_DATE, '%Y-%m')
)
S8
ON S8.REG_DATE = S1.REG_DATE
ORDER BY 1=1
<isNotEmpty property="searchSortCnd">
,$searchSortCnd$

View File

@ -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()

View File

@ -6,6 +6,12 @@
<%@ page import="itn.com.cmm.LoginVO" %>
<div class="rev_pop_in rev_pop_in_block">
<div class="rev_pop_txt">
<div>
<p class="rev_cont">
<textarea name="smiMemoEdit" id="smiMemoEdit"><c:out value="${resultSpamMberInfo.smiMemo}"/></textarea>
</p>
</div>
<%-- 이용정지 사유 표시 변경으로 문자내용은 표시 안하고 사유로만 표시하기로 변경 됨 - 20240821 우영두 변경
<c:choose>
<c:when test="${resultMsgDetail.msgGroupId != null}">
<c:if test="${resultMsgDetail.fileCnt != '0'}">
@ -74,7 +80,7 @@
</p>
</div>
</c:otherwise>
</c:choose>
</c:choose> --%>
<div style="width:100%; height: 10px;"></div>

View File

@ -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",

View File

@ -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("");
}
}
</script>
<style>
.fileView {border-bottom: inherit !important;}
@ -5931,6 +5956,15 @@ function kakaoATDelayCancel(msgGroupId){
<tr>
<th>이용정지 사유</th>
<td>
<select id="inputSmiBlockMemo" onchange="fnInputSmiBlockMemo();">
<option value="0">이용정지 사유를 선택해 주세요.</option>
<option value="1">시스템 스팸 필터링에 의한 이용정지</option>
<option value="2">한국인터넷진흥원 스팸신고로 인한 이용정지</option>
<option value="3">이동통신사 스팸신고로 인한 이용정지</option>
<option value="4">비즈메시지 운영정책위반으로 인한 이용정지</option>
<option value="5">알림 비활성화 시간대 발송(예약) 문자내역 중 스미싱 의심으로 판단하여 이용자 정지 처리</option>
<option value="6">-(자율수정)</option>
</select>
<textarea name="smiContents" id="smiContents"></textarea>
</td>
</tr>
@ -5952,6 +5986,19 @@ function kakaoATDelayCancel(msgGroupId){
<col style="width:auto;">
</colgroup>
<tbody>
<tr>
<td>
<select id="inputSpamBlockMemo" onchange="fnInputSpamBlockMemo();">
<option value="0">이용정지 사유를 선택해 주세요.</option>
<option value="1">시스템 스팸 필터링에 의한 이용정지</option>
<option value="2">한국인터넷진흥원 스팸신고로 인한 이용정지</option>
<option value="3">이동통신사 스팸신고로 인한 이용정지</option>
<option value="4">비즈메시지 운영정책위반으로 인한 이용정지</option>
<option value="5">알림 비활성화 시간대 발송(예약) 문자내역 중 스미싱 의심으로 판단하여 이용자 정지 처리</option>
<option value="6">-(자율수정)</option>
</select>
</td>
</tr>
<tr>
<td class="rev_pop_in_block">
<div class="spamBlockMemoPopLoad"></div>

View File

@ -0,0 +1,400 @@
<%--
Class Name : MsgHolidayList.jsp
Description : 공휴일 관리 리스트
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024.07.29 우영두 최초 생성
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");
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>공휴일 관리 조회</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script>
<script type="text/javaScript" language="javascript">
function fn_search(){
var searchKeyword = $('input[name=searchKeyword]').val();
$('input[name=searchKeyword]').val(searchKeyword.replace(/(\s*)/g, ""));
linkPage(1);
}
function linkPage(pageNo){
var toDay = getToday();
//if (toDay == $('#ntceBgndeYYYMMDD').val() && toDay == $('#ntceEnddeYYYMMDD').val()) {
if ($('#ntceBgndeYYYMMDD').val() != "" && $('#ntceEnddeYYYMMDD').val() != "") {
// 오늘 검색
$("#todayYn").val("Y");
}
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
$('#ntceBgnde').val($('#ntceBgndeYYYMMDD').val()) ; //검색날짜 세팅
$('#ntceEndde').val($('#ntceEnddeYYYMMDD').val()) ;
listForm.action = "<c:url value='/let/mjo/holiday/selectHolidayList.do'/>";
listForm.submit();
}
function getToday() {
// new Date를 통해서 날짜 객체를 생성. 여기서 년, 월, 일 정보만 필요.
const nowDate = new Date();
var year = nowDate.getFullYear(); // 년
var month = ('0' + (nowDate.getMonth() + 1)).slice(-2); // 월
var day = ('0' + nowDate.getDate()).slice(-2); // 일
// yyyy-mm-dd 형식으로 todate에 담기.
var todate = year + '-' + month + '-' + day;
return todate;
}
/* 날자 초기화 */
function init_date(){
$('#ntceBgndeYYYMMDD').val('');
$('#ntceEnddeYYYMMDD').val('');
$('#ntceBgnde').val('');
$('#ntceEndde').val('');
}
//기간선택 select
function fnSetCalMonth(val) {
var form = document.listForm;
var today = new Date();
var year = today.getFullYear();
var month = ("0"+(today.getMonth()+1)).slice(-2);
var date = ("0"+today.getDate()).slice(-2);
var sDate = new Date(today.setMonth(today.getMonth() - val));
var sYear = sDate.getFullYear();
var sMonth = ("0"+(sDate.getMonth()+1)).slice(-2);
var sDate = ("0"+sDate.getDate()).slice(-2);
form.ntceBgndeYYYMMDD.value = sYear + "-" + sMonth + "-" + sDate;
form.ntceEnddeYYYMMDD.value = year + "-" + month + "-" + date;
}
function fnCheckAll(){
var checkField = document.listForm.checkField;
if(document.listForm.checkAll.checked) {
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
checkField[i].checked = true;
}
} else {
checkField.checked = true;
}
}
} else {
if(checkField) {
if(checkField.length > 1) {
for(var j=0; j < checkField.length; j++) {
checkField[j].checked = false;
}
} else {
checkField.checked = false;
}
}
}
}
function fnMsgHolidayDel(){
if($("input:checkbox[name='checkField']").is(":checked")==false){
alert("선택된 항목이 없습니다.");
return;
}
var checkField = document.listForm.checkField;
var id = document.listForm.checkId;
var checkedIds = "";
var checkedCount = 0;
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
if(checkField[i].checked) {
checkedIds += ((checkedCount==0? "" : ",") + id[i].value);
checkedCount++;
}
}
} else {
if(checkField.checked) {
checkedIds = id.value;
}
}
}
if(checkedIds.length > 0) {
var msg = "공휴일 정보를 삭제하시겠습니까?";
if(confirm(msg)){
document.listForm.checkedIdForDel.value=checkedIds;
document.listForm.action = "<c:url value='/let/mjo/holiday/deleteHolidayList.do'/>";
document.listForm.submit();
}
}
}
function getMsgHolidayApi(){
var searchHoliYear = $("#searchHoliYear option:selected").val();
var form = document.listForm;
form.action="/let/mjo/holiday/getHolidayApiDataAjax.do";
form.submit();
}
function fnRegistHoliday() {
document.listForm.holidayId.value = "0";
window.open("about:blank", 'popupRegistHoliday', 'width=900, height=600, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbar=no');
document.listForm.action = "<c:url value='/uss/umt/holiday/selectHolidayModifyPopupAjax.do'/>";
document.listForm.target = "popupRegistHoliday";
document.listForm.submit();
}
function fnHolidayDetail(holidayId) {
var form = document.listForm;
form.holidayId.value = holidayId;
window.open("about:blank", 'popupHolidayDetail', 'width=900, height=600, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbar=no');
form.action = "<c:url value='/uss/umt/holiday/selectHolidayDetailPopupAjax.do'/>";
form.target = "popupHolidayDetail";
form.submit();
}
</script>
<style>
.calBtn{
border: none;
background-color: transparent !important;
background-image: url(/pb/img/common/calendarIcon.png);
background-repeat: no-repeat;
width: 25px;
height: 25px !important;
vertical-align: middle;
margin-left: -38px !important;
margin-top: -2px !important;
cursor: pointer;
}
.pageCont .tbType1 tbody tr td.sms_detail {overflow:inherit;text-overflow:inherit;position:relative;}
.pageCont .tbType1 tbody tr td.sms_detail p {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pageCont .tbType1 tbody tr td.sms_detail .sms_detail_hover {overflow:hidden;text-overflow:ellipsis;display:none;word-wrap:break-word;-webkit-line-clamp:20;-webkit-box-orient:vertical;position:absolute;left:-15px;top:45px;width:calc(100% + 150px);padding:15px;line-height:20px;white-space:normal;border:1px solid #e5e5e5;background:#fff;border-radius:5px;box-sizing:border-box;box-shadow:0px 3px 10px 0px rgb(0 0 0 / 0.2);z-index:1;font-size:14px;text-align:left;}
.pageCont .tbType1 tbody tr td.sms_detail .sms_detail_hover:after {content:'';position:absolute;left:0;bottom:0;width:100%;height:10px;background:#fff;border-radius:0 0 5px 5px;}
.pageCont .tbType1 tbody tr td.sms_detail:hover .sms_detail_hover {display:-webkit-box;}
</style>
</head>
<body>
<form name="listForm" action="<c:url value='/let/mjo/holiday/selectHolidayList.do'/>" method="post">
<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
<input type="hidden" name="delFlag" value="Y" />
<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
<input type="hidden" name="ntceBgnde" id="ntceBgnde" value="">
<input type="hidden" name="ntceEndde" id="ntceEndde" value="">
<input name="checkedIdForDel" type="hidden" />
<input type="hidden" name="todayYn" id="todayYn" value="N"/>
<input type="hidden" id="holidayId" name="holidayId" value="0"/>
<div class="contWrap">
<div class="pageTitle">
<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
<h2 class="titType1 c_222222 fwBold">공휴일 관리</h2>
<p class="tType6 c_999999">공휴일 등록 관리</p>
</div>
<div class="pageCont">
<div class="listSerch">
<div class="calendar_wrap">
<select name="setCalMonth" onchange="fnSetCalMonth(this.value)">
<option value="0">전체</option>
<option value="1">1개월</option>
<option value="3">3개월</option>
<option value="6">6개월</option>
</select>
<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceBgndeYYYMMDD);">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly=""
value="<c:out value="${searchVO.ntceBgnde}" />" >
<input type="button" class="calBtn">
</a>
<span class="line">~</span>
<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceEnddeYYYMMDD);">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly=""
value="<c:out value="${searchVO.ntceEndde}" />"
>
<input type="button" class="calBtn">
</a>
<a href="#" style="margin-left: 17px;" onclick="init_date(); return false;">
<img src="/pb/img/common/topTimeOut.png" alt="타임아웃 아이콘">
</a>
</div>
<br /><br />
<select name="searchCondition" class="select" title="검색조건 선택">
<option value="" <c:if test="${searchVO.searchCondition == ''}">selected="selected"</c:if>>전체</option>
<option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if>>공휴일명</option>
</select>
<select name="holidayType" id="holidayType" title="공휴일 종류" onchange="fn_search();">
<option value="" <c:if test="${empty searchVO.holidayType }">selected="selected"</c:if> >공휴일 종류</option>
<option value="1" <c:if test="${searchVO.holidayType == '1'}">selected="selected"</c:if>>공휴일</option>
<option value="2" <c:if test="${searchVO.holidayType == '2'}">selected="selected"</c:if>>임시공휴일</option>
<option value="3" <c:if test="${searchVO.holidayType == '3'}">selected="selected"</c:if>>기타</option>
</select>
<input id="searchKeyword" name="searchKeyword" class="recentSearch" type="text" value="<c:out value='${searchVO.searchKeyword}'/>" size="15" title="검색" maxlength="100" />
<input type="button" class="btnType1" value="검색" onclick="fn_search(); return false;">
</div>
<div class="listTop">
<p class="tType5">
총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건
<c:if test="${todayYn eq 'Y' }">
(예약발송 : <fmt:formatNumber value="${msgGroupCntSum}" pattern="#,###" />건)
</c:if>
</p>
<div class="rightWrap">
<select name="searchHoliYear" id="searchHoliYear" class="select" title="공휴일 연도">
<option value='2024' >2024 년</option>
<option value='2025' >2025 년</option>
<option value='2026' >2026 년</option>
</select>
<input type="button" style="cursor: pointer;" onclick="getMsgHolidayApi();" value="공휴일 불러오기">
<!-- <input type="button" class="printBtn"> -->
<select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);">
<option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option>
<option value='20' <c:if test="${searchVO.pageUnit == '20'}">selected</c:if>>20줄</option>
<option value='30' <c:if test="${searchVO.pageUnit == '30'}">selected</c:if>>30줄</option>
</select>
</div>
</div>
<div class="tableWrap">
<table class="tbType1">
<colgroup>
<col style="width: 5%">
<col style="width: 5%">
<col style="width: auto;">
<col style="width: 10%">
<col style="width: 10%">
<col style="width: 10%">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th><input type="checkbox" name="checkAll" id="checkAll" onclick="fnCheckAll();" /><label for="checkAll"></label></th>
<th>번호<input type="button" class="sort sortBtn" id="sort_holidayId"></th>
<th>공휴일명<input type="button" class="sort sortBtn" id="sort_holidayNm"></th>
<th>휴일일자<input type="button" class="sort sortBtn" id="sort_holidayDate"></th>
<th>휴일종류<input type="button" class="sort sortBtn" id="sort_holidayType"></th>
<th>등록일자<input type="button" class="sort sortBtn" id="sort_frstRegistPnttm"></th>
<th>등록자<input type="button" class="sort sortBtn" id="sort_frstRegisterId"></th>
</tr>
</thead>
<tbody>
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td>
<input name="checkField" id="<c:out value="${result.holidayId}}"/>" title="Check <c:out value="${status.count}"/>" type="checkbox"/><label for="<c:out value="${result.holidayId}"/>"></label>
<input name="checkId" type="hidden" class="${result.holidayId}" value="<c:out value='${result.holidayId}'/>"/>
</td>
<td>
<c:if test="${searchVO.searchSortOrd eq 'desc' }">
<c:out value="${ ( paginationInfo.totalRecordCount - ((paginationInfo.currentPageNo -1)*paginationInfo.recordCountPerPage) ) - status.index }"/>
</c:if>
<c:if test="${searchVO.searchSortOrd eq 'asc' }">
<c:out value="${(paginationInfo.currentPageNo - 1) * paginationInfo.recordCountPerPage + status.count}"/>
</c:if>
</td>
<td>
<a href="#" onclick="javascript:fnHolidayDetail('<c:out value="${result.holidayId}"/>'); return false;">
<c:out value="${result.holidayNm}"/>
</a>
</td>
<td>
<c:out value="${result.holidayDate}"/>
</td>
<td>
<c:choose>
<c:when test="${result.holidayType eq '1'}">
법정 공휴일
</c:when>
<c:when test="${result.holidayType eq '2'}">
임시 공휴일
</c:when>
<c:otherwise>
기타
</c:otherwise>
</c:choose>
</td>
<td>
<c:out value="${result.frstRegistPnttm}"/>
</td>
<td>
<c:out value="${result.frstRegisterId}"/>
</td>
</tr>
</c:forEach>
<c:if test="${empty resultList}">
<tr><td colspan="7"><spring:message code="common.nodata.msg" /></td></tr>
</c:if>
</tbody>
</table>
</div>
<div class="btnWrap" style="margin-bottom: 15px;">
<input type="button" class="btnType2" onclick="fnMsgHolidayDel(); return false;" value="삭제">
<input type="button" class="btnType1" onclick="fnRegistHoliday(); return false;" value="등록">
</div>
<!-- 페이지 네비게이션 시작 -->
<c:if test="${!empty resultList}">
<div class="page">
<ul class="inline">
<ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" />
</ul>
</div>
</c:if>
<!-- //페이지 네비게이션 끝 -->
</div>
</div>
</form>
</body>
</html>

View File

@ -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");
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>스미싱의심 알림 설정 관리</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="/pb/css/reset.css">
<link rel="stylesheet" href="/pb/css/common.css">
<link rel="stylesheet" href="/pb/css/content.css">
<link rel="stylesheet" href="/pb/css/popup.css">
<style>
.pageCont .tbType1 tbody tr td.sms_detail {overflow:inherit;text-overflow:inherit;position:relative;}
.pageCont .tbType1 tbody tr td.sms_detail p {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pageCont .tbType1 tbody tr td.sms_detail .sms_detail_hover {overflow:hidden;text-overflow:ellipsis;display:none;word-wrap:break-word;-webkit-line-clamp:20;-webkit-box-orient:vertical;position:absolute;left:-5px;top:45px;width:calc(100% + 150px);padding:15px;line-height:20px;white-space:normal;border:1px solid #e5e5e5;background:#fff;border-radius:5px;box-sizing:border-box;box-shadow:0px 3px 10px 0px rgb(0 0 0 / 0.2);z-index:1;font-size:14px;text-align:left;}
.pageCont .tbType1 tbody tr td.sms_detail .sms_detail_hover:after {content:'';position:absolute;left:0;bottom:0;width:100%;height:10px;background:#fff;border-radius:0 0 5px 5px;}
.pageCont .tbType1 tbody tr td.sms_detail:hover .sms_detail_hover {display:-webkit-box;}
</style>
<script type="text/javascript" src="/pb/js/jquery-3.5.0.js"></script>
<script type="text/javascript" src="/pb/js/common.js"></script>
<script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/ncms_common.js' />"></script>
<script type="text/javaScript" language="javascript">
function fn_search(){
var searchKeyword = $('input[name=searchKeyword]').val();
$('input[name=searchKeyword]').val(searchKeyword.replace(/(\s*)/g, ""));
linkPage(1);
}
function linkPage(pageNo){
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
listForm.action = "<c:url value='/uss/umt/user/EgovGnrlselectedUserMsgDataListAjax.do'/>";
listForm.submit();
}
function fnCheckAll(){
var checkField = document.listForm.checkField;
if(document.listForm.checkAll.checked) {
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
checkField[i].checked = true;
}
} else {
checkField.checked = true;
}
}
} else {
if(checkField) {
if(checkField.length > 1) {
for(var j=0; j < checkField.length; j++) {
checkField[j].checked = false;
}
} else {
checkField.checked = false;
}
}
}
}
/* 체크된 메인배너 목록 삭제 */
function fn_delete(){
if($("input[name=del]:checked").length == 0){
alert("선택된 항목이 없습니다.");
return;
}
if (confirm("해당 문자를 삭제하시겠습니까?")){
frm = document.listForm;
frm.action = "<c:url value='/uss/ion/msg/SendMsgDelete.do' />";
frm.submit();
}
}
/* 수정 화면*/
function fn_modify(msgId){
var frm = document.modiForm ;
frm.msgId.value = msgId ;
frm.submit();
}
/* 수정 화면*/
function fn_detail_list(msgGroupId){
var frm = document.modiForm ;
frm.msgGroupId.value = msgGroupId ;
frm.submit();
}
/* 날자 초기화 */
function init_date(){
$('#ntceBgndeYYYMMDD').val('');
$('#ntceEnddeYYYMMDD').val('');
$('#ntceBgnde').val('');
$('#ntceEndde').val('');
$('#searchKeyword').val('');
$('#sendKind').val('').prop("selected",true);
$('#searchCondition').val('').prop("selected",true);
}
//엑셀 다운로드
function sendMsgExcelDownload(){
var frm = document.listForm;
$('#ntceBgnde').val($('#ntceBgndeYYYMMDD').val()) ;
$('#ntceEndde').val($('#ntceEnddeYYYMMDD').val()) ;
var ntceBgnde = $('#ntceBgndeYYYMMDD').val();
var ntceEndde = $('#ntceEnddeYYYMMDD').val();
frm.ntceBgnde.value = ntceBgnde;
frm.ntceEndde.value = ntceEndde;
frm.method = "post";
frm.action = "<c:url value='/uss/ion/msg/selectMberSendMsgExcelDownload.do'/>";
frm.submit();
}
function fn_updateMberSttus(msgGroupId){
var form = document.listForm;
if(confirm("이용자 정지를 진행하시겠습니까?")){
var data = new FormData(form);
url = "/uss/umt/user/updateMberSttusBlockAjax.do";
data.append("msgGroupId", msgGroupId);
$.ajax({
type: "POST",
url: url,
data: data,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success: function (returnData, status) {
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
if("fail"==returnData.result){
alert(returnData.message);
return false;
}else if("loginFail"==returnData.result){
alert(returnData.message);
return false;
}else{ //문자발송 성공시 처리
alert(returnData.message);
opener.parent.location.reload();
location.reload();
}
} else if(status== 'fail'){
alert("이용자 상태 변경에 실패하였습니다.");
}
},
beforeSend: function () {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete: function () {
//로딩창 hide
$('.loading_layer').removeClass('active');
},
error: function (e) { alert("이용자 상태 변경에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
}
function msgDetailView(obj, msgGroupId, index){
var form = document.modiForm;
form.msgGroupId.value = msgGroupId;
var sendData = $(form).serializeArray();
$(".msgSentDetailPopLoad"+index).load("/uss/umt/user/selectMberMsgDetailAjax.do", sendData ,function(response, status, xhr){
var target=$(obj);
$('.layer_msg_detail').hide();
target.next('.layer_msg_wrap').find('.layer_msg_detail').show();
});
}
function fnAlimSetReg(){
var form = document.listForm;
var startHour = form.startHour.value;
var startMin = form.startMin.value;
var endHour = form.endHour.value;
var endMin = form.endMin.value;
var alarmType = form.alarmType.value;
var alarmStart = startHour + ":" + startMin;
var alarmEnd = endHour + ":" + endMin;
if(confirm("알람설정을 등록하시겠습니까?")){
url = "/let/mjo/holiday/alarmSet/insertAlarmSettingDataAjax.do";
var jsonParam = {"alarmStart" : alarmStart, "alarmEnd" : alarmEnd, "alarmType" : alarmType};
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(jsonParam),
dataType:'json',
contentType: 'application/json',
async: true,
success: function (data) {
if(data.status == "OK"){
alert(data.message);
location.reload();
}else if(data.status == "UNAUTHORIZED"){
alert(data.message);
window.location.href="/uat/uia/EgovLoginUsr.do";
}else{
alert(data.message);
return false;
}
},
beforeSend: function () {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete: function () {
//로딩창 hide
$('.loading_layer').removeClass('active');
},
error: function (e) { alert("공휴일 삭제에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
}
function fnUpdateAlarmUse(alarmId, useYn){
var msg = "";
if(useYn == "Y"){
msg = "사용으로 변경하시겠습니까?";
}else{
msg = "미사용으로 변경하시겠습니까?";
}
if(confirm(msg)){
url = "/let/mjo/holiday/alarmSet/updateAlarmSettingDataUseYnAjax.do";
var jsonParam = {"alarmId" : alarmId, "useYn" : useYn};
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(jsonParam),
dataType:'json',
contentType: 'application/json',
async: true,
success: function (data) {
if(data.status == "OK"){
alert(data.message);
location.reload();
}else if(data.status == "UNAUTHORIZED"){
alert(data.message);
window.location.href="/uat/uia/EgovLoginUsr.do";
}else{
alert(data.message);
return false;
}
},
beforeSend: function () {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete: function () {
//로딩창 hide
$('.loading_layer').removeClass('active');
},
error: function (e) { alert("공휴일 삭제에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
}
function fnGoHoliday(){
opener.location.href="<c:out value='/let/mjo/holiday/selectHolidayList.do'/>";
self.close();
}
function fnMsgAlimDel(){
if($("input:checkbox[name='checkField']").is(":checked")==false){
alert("선택된 항목이 없습니다.");
return;
}
var checkField = document.listForm.checkField;
var id = document.listForm.checkId;
var checkedIds = "";
var checkedCount = 0;
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
if(checkField[i].checked) {
checkedIds += ((checkedCount==0? "" : ",") + id[i].value);
checkedCount++;
}
}
} else {
if(checkField.checked) {
checkedIds = id.value;
}
}
}
console.log("+++ checkedIds ::: "+checkedIds);
if(checkedIds.length > 0) {
var msg = "스미싱 알림 일정을 삭제하시겠습니까?";
if(confirm(msg)){
document.listForm.checkedIdForDel.value = checkedIds;
/* document.listForm.checkedIdForDel.value=checkedIds;
document.listForm.action = "<c:url value='/let/mjo/holiday/alarmSet/deleteAlarmSettingDataAjax.do'/>";
document.listForm.submit(); */
var data = new FormData(document.listForm);
url = "/let/mjo/holiday/alarmSet/deleteAlarmSettingDataAjax.do";
console.log(document.listForm.checkedIdForDel.value)
var jsonParam = {"alarmIds" : document.listForm.checkedIdForDel.value};
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(jsonParam),
dataType:'json',
contentType: 'application/json',
async: true,
success: function (data) {
if(data.status == "OK"){
alert(data.message);
location.reload();
}else if(data.status == "UNAUTHORIZED"){
alert(data.message);
window.location.href="/uat/uia/EgovLoginUsr.do";
}else{
alert(data.message);
return false;
}
},
beforeSend: function () {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete: function () {
//로딩창 hide
$('.loading_layer').removeClass('active');
},
error: function (e) { alert("알림 일정 삭제에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
}
}
function fnClose(){
window.close();
}
</script>
<style>
.calBtn{
border: none;
background-color: transparent !important;
background-image: url(/pb/img/common/calendarIcon.png);
background-repeat: no-repeat;
width: 25px;
height: 25px !important;
vertical-align: middle;
margin-left: -38px !important;
margin-top: -2px !important;
cursor: pointer;
}
.pageCont {width:100%;padding:50px 30px;box-sizing:border-box;}
.tableWrapTotal {margin:0 0 20px;}
.tableWrapTotal .tbType1 thead tr:first-child {border-width:1px;}
.tableWrapTotal .tbType1 thead tr th {border-left:1px solid #e6e6e6;}
.tableWrapTotal .tbType1 thead tr th:first-child {border-left:0 none;}
.tableWrapTotal .tbType1 thead tr.content th {font-size:14px;}
.tableWrapTotal .tbType1 tbody tr td {border-left:1px solid #e6e6e6;}
.tableWrapTotal .tbType1 tbody tr td:first-child {border-left:0 none;}
.listSerch .select {height:42px;vertical-align:top;}
.pageCont .tbType1 tbody tr td.msg_detail {overflow:inherit;}
.pageCont .tbType1 tbody tr td.msg_detail a {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;}
/* .layer_msg_wrap {position:relative;} */
.layer_msg_wrap .layer_msg_detail {overflow:hidden;display:none;position:absolute;left:50%;top:600px;width:400px;max-height:600px;background:#eee;transform:translateX(-50%);z-index:1;}
.layer_msg_wrap .layer_msg_detail button {position:absolute;right:0;top:0;width:35px;height:35px;}
.layer_msg_wrap .layer_msg_detail button:before {content:'';position:absolute;left:50%;top:50%;width:1px;height:14px;margin:-7px 0 0;background:#fff;transform:rotate(-45deg);}
.layer_msg_wrap .layer_msg_detail button:after {content:'';position:absolute;left:50%;top:50%;width:1px;height:14px;margin:-7px 0 0;background:#fff;transform:rotate(45deg);}
.layer_msg_wrap .layer_msg_detail .title {height:35px;padding:0 15px;font-size:16px;line-height:35px;text-align:left;color:#fff;background:#456ded;border-radius:5px 5px 0 0;}
.layer_msg_wrap .layer_msg_detail .content {overflow-y:auto;max-height:535px;margin:15px;padding:10px 15px;line-height:20px;white-space:normal;background:#fff;}
.layer_msg_wrap .layer_msg_detail .content .rev_cont {text-align:left;}
@media screen and (max-width:916px){
.pageCont .tableWrap table thead tr th {padding:15px 0;}
}
</style>
</head>
<body>
<div class="loading_layer">
<div class="loading_container">
<div class="bar"></div>
<div class="text">Loading</div>
</div>
</div>
<form id="listForm" name="listForm" method="post">
<input name="pageIndex" type="hidden" value="<c:out value='${msgAlarmSetVO.pageIndex}'/>"/>
<input name="checkedIdForDel" type="hidden" />
<div class="contWrap" style="position:relative;left:inherit;top:inherit;min-height:auto;padding:40px;">
<div class="pageTitle">
<!-- <div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div> -->
<h2 class="titType1 c_222222 fwBold">스미싱의심 알림 예외 일정 관리</h2>
<!-- <p class="tType6 c_999999">문자전송리스트 현황을 파악할 수 있습니다.</p> -->
</div>
<div class="pageCont">
<div class="listSerch">
<select id="startHour" name="startHour" class="select" title="시작시간">
<c:forEach var="hour" begin="0" end="23" step="1" varStatus="status">
<c:choose>
<c:when test="${hour < 10}">
<option value="0${hour}">0${hour}시</option>
</c:when>
<c:otherwise>
<option value="${hour}">${hour}시</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
<select id="startMin" name="startMin" class="select" title="시작시간분">
<c:forEach var="min" begin="0" end="59" step="1">
<c:choose>
<c:when test="${min < 10}">
<option value="0${min}">0${min}분</option>
</c:when>
<c:otherwise>
<option value="${min}">${min}분</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
부터
<select id="endHour" name="endHour" class="select" title="종료시간">
<c:forEach var="hour" begin="0" end="23" step="1" varStatus="status">
<c:choose>
<c:when test="${hour < 10}">
<option value="0${hour}">0${hour}시</option>
</c:when>
<c:otherwise>
<option value="${hour}">${hour}시</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
<select id="endMin" name="endMin" class="select" title="종료시간분">
<c:forEach var="min" begin="0" end="59" step="1">
<c:choose>
<c:when test="${min < 10}">
<option value="0${min}">0${min}분</option>
</c:when>
<c:otherwise>
<option value="${min}">${min}분</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
까지
<select id="alarmType" name="alarmType" class="select" title="알람종류">
<option value="W">평일 (월~금)</option>
<option value="E">주말 (토/일)</option>
<option value="H">공휴일</option>
</select>
<input type="button" class="btnType1" onclick="javascript:fnAlimSetReg();" value="+ 추가" style="margin-left:20px;">
</div>
<div class="listTop">
<p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건</p>
<div class="rightWrap">
<input type="button" class="btnType2" onclick="javascript:fnGoHoliday();" value="공휴일 관리">
</div>
</div>
<div class="tableWrap">
<table class="tbType1">
<colgroup>
<col style="width: 10%">
<col style="width: 10%">
<col style="width: 10%">
<col style="width: 15%">
<col style="width: 15%">
<col style="width: 15%">
<col style="width: 15%">
</colgroup>
<thead>
<tr>
<th><input type="checkbox" name="checkAll" id="checkAll" onclick="fnCheckAll();" /><label for="checkAll"></label></th>
<th>번호</th>
<th>구분</th>
<th>시작시간</th>
<th>종료시간</th>
<th colspan="2">사용여부</th>
</tr>
</thead>
<tbody>
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td>
<input name="checkField" id="<c:out value="${result.alarmId}"/>" title="Check <c:out value="${status.count}"/>" type="checkbox"/><label for="<c:out value="${result.alarmId}"/>"></label>
<input name="checkId" type="hidden" class="${result.alarmId}" value="<c:out value='${result.alarmId}'/>"/>
</td>
<td>
<c:if test="${msgAlarmSetVO.searchSortOrd eq 'desc' }">
<c:out value="${ ( paginationInfo.totalRecordCount - ((paginationInfo.currentPageNo -1)*paginationInfo.recordCountPerPage) ) - status.index }"/>
</c:if>
<c:if test="${msgAlarmSetVO.searchSortOrd eq 'asc' }">
<c:out value="${(paginationInfo.currentPageNo - 1) * paginationInfo.recordCountPerPage + status.count}"/>
</c:if>
</td>
<td>
<c:choose>
<c:when test="${result.alarmType eq 'W'}">
평일
</c:when>
<c:when test="${result.alarmType eq 'E'}">
주말
</c:when>
<c:otherwise>
공휴일
</c:otherwise>
</c:choose>
</td>
<td>
<c:out value="${result.alarmStart}"/>
</td>
<td>
<c:out value="${result.alarmEnd}"/>
</td>
<td>
<c:choose>
<c:when test="${result.useYn eq 'Y'}">
사용 중
</c:when>
<c:otherwise>
<!-- 사용으로 변경 -->
<input type="button" class="btnType1" onclick="javascript:fnUpdateAlarmUse('<c:out value="${result.alarmId}"/>','Y');" value="사용" style="width:55px;"/>
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${result.useYn eq 'Y'}">
<!-- 미사용으로 변경 -->
<input type="button" class="btnType1" onclick="javascript:fnUpdateAlarmUse('<c:out value="${result.alarmId}"/>','N');" value="미사용"/>
</c:when>
<c:otherwise>
미사용
</c:otherwise>
</c:choose>
</td>
</tr>
</c:forEach>
<c:if test="${empty resultList}">
<tr><td colspan="7"><spring:message code="common.nodata.msg" /></td></tr>
</c:if>
</tbody>
</table>
</div>
<div class="btnWrap">
<input type="button" class="btnType2" onclick="fnMsgAlimDel(); return false;" value="삭제">
<input type="button" class="btnType1" onclick="fnClose(); return false;" value="닫기">
</div>
<!-- 페이지 네비게이션 시작 -->
<c:if test="${!empty resultList}">
<div class="page">
<ul class="inline">
<ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" />
</ul>
</div>
</c:if>
<!-- //페이지 네비게이션 끝 -->
</div>
</div>
</form>
</body>
</html>

View File

@ -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");
%>
<!DOCTYPE html>
<html lang="kr">
<head>
<title>공휴일 등록</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="stylesheet" href="/pb/css/reset.css">
<link rel="stylesheet" href="/pb/css/common.css">
<link rel="stylesheet" href="/pb/css/content.css">
<link rel="stylesheet" href="/pb/css/popup.css">
<style>
.pageCont .tbType1 tbody tr td.sms_detail {overflow:inherit;text-overflow:inherit;position:relative;}
.pageCont .tbType1 tbody tr td.sms_detail p {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pageCont .tbType1 tbody tr td.sms_detail .sms_detail_hover {overflow:hidden;text-overflow:ellipsis;display:none;word-wrap:break-word;-webkit-line-clamp:20;-webkit-box-orient:vertical;position:absolute;left:-5px;top:45px;width:calc(100% + 150px);padding:15px;line-height:20px;white-space:normal;border:1px solid #e5e5e5;background:#fff;border-radius:5px;box-sizing:border-box;box-shadow:0px 3px 10px 0px rgb(0 0 0 / 0.2);z-index:1;font-size:14px;text-align:left;}
.pageCont .tbType1 tbody tr td.sms_detail .sms_detail_hover:after {content:'';position:absolute;left:0;bottom:0;width:100%;height:10px;background:#fff;border-radius:0 0 5px 5px;}
.pageCont .tbType1 tbody tr td.sms_detail:hover .sms_detail_hover {display:-webkit-box;}
</style>
<script type="text/javascript" src="/pb/js/jquery-3.5.0.js"></script>
<script type="text/javascript" src="/pb/js/common.js"></script>
<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script>
<script type="text/javaScript" language="javascript">
function fn_search(){
var searchKeyword = $('input[name=searchKeyword]').val();
$('input[name=searchKeyword]').val(searchKeyword.replace(/(\s*)/g, ""));
linkPage(1);
}
function linkPage(pageNo){
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
if( $('#ntceBgndeYYYMMDD').val() != '' && $('#ntceEnddeYYYMMDD').val() != '' ){
var iChkBeginDe = Number($('#ntceBgndeYYYMMDD').val().replaceAll("-", ""));
var iChkEndDe = Number($('#ntceEnddeYYYMMDD').val().replaceAll("-", ""));
if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
alert("검색시작일자는 종료일자 보다 클수 없습니다.");
return;
}
}
$('#ntceBgnde').val($('#ntceBgndeYYYMMDD').val()) ;
$('#ntceEndde').val($('#ntceEnddeYYYMMDD').val()) ;
listForm.action = "<c:url value='/uss/umt/user/EgovGnrlselectedUserMsgDataListAjax.do'/>";
listForm.submit();
}
function fnCheckAll() {
if( $("#checkAll").is(':checked') ){
$("input[name=del]").prop("checked", true);
}else{
$("input[name=del]").prop("checked", false);
}
}
/* 체크된 메인배너 목록 삭제 */
function fn_delete(){
if($("input[name=del]:checked").length == 0){
alert("선택된 항목이 없습니다.");
return;
}
if (confirm("해당 문자를 삭제하시겠습니까?")){
frm = document.listForm;
frm.action = "<c:url value='/uss/ion/msg/SendMsgDelete.do' />";
frm.submit();
}
}
/* 수정 화면*/
function fn_modify(msgId){
var frm = document.modiForm ;
frm.msgId.value = msgId ;
frm.submit();
}
/* 수정 화면*/
function fn_detail_list(msgGroupId){
var frm = document.modiForm ;
frm.msgGroupId.value = msgGroupId ;
frm.submit();
}
/* 날자 초기화 */
function init_date(){
$('#ntceBgndeYYYMMDD').val('');
$('#ntceEnddeYYYMMDD').val('');
$('#ntceBgnde').val('');
$('#ntceEndde').val('');
$('#searchKeyword').val('');
$('#sendKind').val('').prop("selected",true);
$('#searchCondition').val('').prop("selected",true);
}
//엑셀 다운로드
function sendMsgExcelDownload(){
var frm = document.listForm;
$('#ntceBgnde').val($('#ntceBgndeYYYMMDD').val()) ;
$('#ntceEndde').val($('#ntceEnddeYYYMMDD').val()) ;
var ntceBgnde = $('#ntceBgndeYYYMMDD').val();
var ntceEndde = $('#ntceEnddeYYYMMDD').val();
frm.ntceBgnde.value = ntceBgnde;
frm.ntceEndde.value = ntceEndde;
frm.method = "post";
frm.action = "<c:url value='/uss/ion/msg/selectMberSendMsgExcelDownload.do'/>";
frm.submit();
}
function fnHolidayReg(){
var form = document.modiForm;
if(form.holidayNm.value == ""){
alert("휴일명을 입력해 주세요.");
return false;
}
if(form.ntceBgndeYYYMMDD.value == ""){
alert("휴일 일자를 선택해 주세요.");
return false;
}
if(form.holidayType.value == ""){
alert("휴일 구분을 입력해 주세요.");
return false;
}
if(confirm("공휴일을 등록하시겠습니까?")){
var holidayDate = form.ntceBgndeYYYMMDD.value;
url = "/let/mjo/holiday/insertHolidayRegistAjax.do";
var jsonParam = {"holidayNm" : form.holidayNm.value, "holidayDate" : holidayDate, "holidayType" : form.holidayType.value};
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(jsonParam),
dataType:'json',
contentType: 'application/json',
async: true,
success: function (data) {
if(data.status == "OK"){
alert(data.message);
opener.location.reload();
window.close();
}else if(data.status == "UNAUTHORIZED"){
alert(data.message);
window.location.href="/uat/uia/EgovLoginUsr.do";
}else{
alert(data.message);
return false;
}
},
beforeSend: function () {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete: function () {
//로딩창 hide
$('.loading_layer').removeClass('active');
},
error: function (e) { alert("공휴일 정보 등록에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
}
function fnHolidayUpdt(){
var form = document.modiForm;
if(form.holidayNm.value == ""){
alert("휴일명을 입력해 주세요.");
return false;
}
if(confirm("공휴일 정보를 수정하시겠습니까?")){
var holidayDate = form.ntceBgndeYYYMMDD.value;
url = "/let/mjo/holiday/updateHolidayDataAjax.do";
var jsonParam = {"holidayId" : form.holidayId.value,"holidayNm" : form.holidayNm.value, "holidayDate" : holidayDate, "holidayType" : form.holidayType.value};
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(jsonParam),
dataType:'json',
contentType: 'application/json',
async: true,
success: function (data) {
if(data.status == "OK"){
alert(data.message);
opener.location.reload();
window.close();
}else if(data.status == "UNAUTHORIZED"){
alert(data.message);
window.location.href="/uat/uia/EgovLoginUsr.do";
}else{
alert(data.message);
return false;
}
},
beforeSend: function () {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete: function () {
//로딩창 hide
$('.loading_layer').removeClass('active');
},
error: function (e) { alert("공휴일 정보 변경에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
}
function fnHolidayDel(){
var form = document.modiForm;
if(confirm("공휴일 정보를 삭제하시겠습니까?")){
url = "/let/mjo/holiday/deleteHolidayDataAjax.do";
var jsonParam = {"holidayId" : form.holidayId.value};
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(jsonParam),
dataType:'json',
contentType: 'application/json',
async: true,
success: function (data) {
if(data.status == "OK"){
alert(data.message);
opener.location.reload();
window.close();
}else if(data.status == "UNAUTHORIZED"){
alert(data.message);
window.location.href="/uat/uia/EgovLoginUsr.do";
}else{
alert(data.message);
return false;
}
},
beforeSend: function () {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete: function () {
//로딩창 hide
$('.loading_layer').removeClass('active');
},
error: function (e) { alert("공휴일 삭제에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
}
function fnClose(){
window.close();
}
</script>
<style>
.calBtn{
border: none;
background-color: transparent !important;
background-image: url(/pb/img/common/calendarIcon.png);
background-repeat: no-repeat;
width: 25px;
height: 25px !important;
vertical-align: middle;
margin-left: -38px !important;
margin-top: -2px !important;
cursor: pointer;
}
.pageCont {width:100%;padding:50px 30px;box-sizing:border-box;}
.tableWrapTotal {margin:0 0 20px;}
.tableWrapTotal .tbType1 thead tr:first-child {border-width:1px;}
.tableWrapTotal .tbType1 thead tr th {border-left:1px solid #e6e6e6;}
.tableWrapTotal .tbType1 thead tr th:first-child {border-left:0 none;}
.tableWrapTotal .tbType1 thead tr.content th {font-size:14px;}
.tableWrapTotal .tbType1 tbody tr td {border-left:1px solid #e6e6e6;}
.tableWrapTotal .tbType1 tbody tr td:first-child {border-left:0 none;}
.listSerch .select {height:42px;vertical-align:top;}
.pageCont .tbType1 tbody tr td.msg_detail {overflow:inherit;}
.pageCont .tbType1 tbody tr td.msg_detail a {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;}
/* .layer_msg_wrap {position:relative;} */
.layer_msg_wrap .layer_msg_detail {overflow:hidden;display:none;position:absolute;left:50%;top:600px;width:400px;max-height:600px;background:#eee;transform:translateX(-50%);z-index:1;}
.layer_msg_wrap .layer_msg_detail button {position:absolute;right:0;top:0;width:35px;height:35px;}
.layer_msg_wrap .layer_msg_detail button:before {content:'';position:absolute;left:50%;top:50%;width:1px;height:14px;margin:-7px 0 0;background:#fff;transform:rotate(-45deg);}
.layer_msg_wrap .layer_msg_detail button:after {content:'';position:absolute;left:50%;top:50%;width:1px;height:14px;margin:-7px 0 0;background:#fff;transform:rotate(45deg);}
.layer_msg_wrap .layer_msg_detail .title {height:35px;padding:0 15px;font-size:16px;line-height:35px;text-align:left;color:#fff;background:#456ded;border-radius:5px 5px 0 0;}
.layer_msg_wrap .layer_msg_detail .content {overflow-y:auto;max-height:535px;margin:15px;padding:10px 15px;line-height:20px;white-space:normal;background:#fff;}
.layer_msg_wrap .layer_msg_detail .content .rev_cont {text-align:left;}
@media screen and (max-width:916px){
.pageCont .tableWrap table thead tr th {padding:15px 0;}
}
</style>
</head>
<body>
<div class="loading_layer">
<div class="loading_container">
<div class="bar"></div>
<div class="text">Loading</div>
</div>
</div>
<form id="modiForm" name="modiForm" method="post">
<input type="hidden" id="holidayId" name="holidayId" value="<c:out value='${result.holidayId}'/>"/>
<input type="hidden" name="ntceBgnde" id="ntceBgnde" value="">
<input type="hidden" name="ntceEndde" id="ntceEndde" value="">
<div class="contWrap" style="position:relative;left:inherit;top:inherit;min-height:auto;padding:40px; width:900px; ">
<div class="pageTitle">
<!-- <div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div> -->
<h2 class="titType1 c_222222 fwBold">공휴일 등록</h2>
<!-- <p class="tType6 c_999999">문자전송리스트 현황을 파악할 수 있습니다.</p> -->
</div>
<div class="pageCont" style="min-height: 300px;">
<table class="tbType2">
<colgroup>
<col style="width: 20%">
<col style="width: 80%">
</colgroup>
<tbody>
<tr>
<th><span class="reqArea">휴일명</span></th>
<td colspan="3">
<input type="text" id="holidayNm" name="holidayNm" title="아이디" maxlength="30" value="<c:out value='${result.holidayNm}'/>"/>
</td>
</tr>
<tr>
<th><span class="reqArea">휴일 일자</span></th>
<td colspan="3">
<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.modiForm, document.forms.modiForm.ntceBgndeYYYMMDD);">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly=""
value="<c:out value='${result.holidayDate}'/>" >
<input type="button" class="calBtn">
</a>
</td>
</tr>
<tr>
<th><span class="reqArea">휴일 구분</span></th>
<td colspan="3">
<select id="holidayType" name="holidayType" style="min-width: 150px;">
<option value="1" <c:if test="${result.holidayType eq '1'}">selected</c:if> >법정 공휴일</option>
<option value="2" <c:if test="${result.holidayType eq '2'}">selected</c:if>>임시 공휴일</option>
<option value="3" <c:if test="${result.holidayType eq '3'}">selected</c:if>>기타</option>
</select>
</td>
</tr>
</tbody>
</table>
<div class="btnWrap" style="margin-bottom: 15px;">
<input type="button" class="btnType1" onclick="fnClose(); return false;" value="닫기">
<c:choose>
<c:when test="${result.holidayId > 0}">
<input type="button" class="btnType2" onclick="fnHolidayDel(); return false;" value="삭제">
<input type="button" class="btnType1" onclick="fnHolidayUpdt(); return false;" value="수정">
</c:when>
<c:otherwise>
<input type="button" class="btnType1" onclick="fnHolidayReg(); return false;" value="등록">
</c:otherwise>
</c:choose>
</div>
</div>
</div>
</form>
</body>
</html>

View File

@ -6,9 +6,34 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>관리자 알림 관리</title>
<script type="text/javascript">
<meta charset="UTF-8">
<title>관리자 알림 관리</title>
<script type="text/javascript">
$(document).ready(function(){
var holiSmishingNoti = $('#holiSmishingNoti').val();
if(holiSmishingNoti == "N"){
$('.btnTypeAlim').hide();
}
$('#holiSmishingNoti').change(function(){
if($('#holiSmishingNoti').val() == "N"){
$('.btnTypeAlim').hide();
}else{
$('.btnTypeAlim').show();
}
})
});
function doUpdate() {
var form = document.form;
@ -20,7 +45,20 @@
form.submit();
}
function fnAlimSetPopup(){
window.open("about:blank", 'popupAlimSetting', 'width=1250, height=800, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbar=no');
document.form.action = "<c:url value='/uss/umt/holiday/alarmSet/selectAlarmSettingPopupAjax.do'/>";
document.form.target = "popupAlimSetting";
document.form.submit();
}
</script>
<style>
.pageCont .btnTypeAlim{background-color: #456ded !important;}
.btnTypeAlim{font-size: 1em;height: 40px;vertical-align: middle;color: #fff;background-color: #aaa;border: none;border-radius: 3px;cursor: pointer;padding: 0 10px}
</style>
</head>
<body>
<div class="contWrap">
@ -73,6 +111,17 @@
<option value="N" <c:if test="${joinSettingVO.smishingNoti == 'N'}">selected</c:if> >비활성화</option>
</select>
</td>
</tr>
<tr>
<th>스미싱의심 알림 여부</th>
<td>
<select name="holiSmishingNoti" id="holiSmishingNoti">
<option value="Y" <c:if test="${joinSettingVO.holiSmishingNoti == 'Y'}">selected</c:if> >활성화</option>
<option value="N" <c:if test="${joinSettingVO.holiSmishingNoti == 'N'}">selected</c:if> >비활성화</option>
</select>
<input type="button" class="btnTypeAlim" value="예외 일정관리" onclick="javascript:fnAlimSetPopup(); return false;" style="margin-left:50px;">
</td>
</tr>
</tbody>
</table>

View File

@ -205,7 +205,7 @@ function fnSelectMber(mberId) {
<th>채널명<input type="button" class="sort sortBtn" id="sort_yellowId"></th>
<th>등록상태</th>
<th>채널생성일</th>
<th>채널등록일</th>
<th>채널등록일<input type="button" class="sort sortBtn" id="sort_lastUpdtPnttm"></th>
<th>삭제여부<input type="button" class="sort sortBtn" id="sort_deleteYn"></th>
</tr>
</thead>

View File

@ -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, "이용자 정지를 진행하시겠습니까?");
}

View File

@ -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");
%>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>알림 미처리 문자예약 조회</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script>
<script type="text/javaScript" language="javascript">
function fn_search(){
var searchKeyword = $('input[name=searchKeyword]').val();
$('input[name=searchKeyword]').val(searchKeyword.replace(/(\s*)/g, ""));
linkPage(1);
}
function linkPage(pageNo){
var toDay = getToday();
//if (toDay == $('#ntceBgndeYYYMMDD').val() && toDay == $('#ntceEnddeYYYMMDD').val()) {
if ($('#ntceBgndeYYYMMDD').val() != "" && $('#ntceEnddeYYYMMDD').val() != "") {
// 오늘 검색
$("#todayYn").val("Y");
}
var listForm = document.listForm ;
listForm.pageIndex.value = pageNo ;
$('#ntceBgnde').val($('#ntceBgndeYYYMMDD').val()) ; //검색날짜 세팅
$('#ntceEndde').val($('#ntceEnddeYYYMMDD').val()) ;
listForm.submit();
}
function setToday(){
var toDay = getToday();
$('#ntceBgndeYYYMMDD').val(toDay);
$('#ntceEnddeYYYMMDD').val(toDay);
$('#ntceBgnde').val($('#ntceBgndeYYYMMDD').val()) ;
$('#ntceEndde').val($('#ntceEnddeYYYMMDD').val()) ;
// 오늘 검색
$("#todayYn").val("Y");
linkPage(1);
}
function getToday() {
// new Date를 통해서 날짜 객체를 생성. 여기서 년, 월, 일 정보만 필요.
const nowDate = new Date();
var year = nowDate.getFullYear(); // 년
var month = ('0' + (nowDate.getMonth() + 1)).slice(-2); // 월
var day = ('0' + nowDate.getDate()).slice(-2); // 일
// yyyy-mm-dd 형식으로 todate에 담기.
var todate = year + '-' + month + '-' + day;
return todate;
}
function fnCheckAll() {
if( $("#checkAll").is(':checked') ){
$("input[name=del]").prop("checked", true);
}else{
$("input[name=del]").prop("checked", false);
}
}
/* 체크된 메인배너 목록 삭제 */
function fn_delete(){
if($("input[name=del]:checked").length == 0){
alert("선택된 항목이 없습니다.");
return;
}
if (confirm("해당 문자를 삭제하시겠습니까?")){
frm = document.listForm;
frm.action = "<c:url value='/uss/ion/msg/SendMsgDelete.do' />";
frm.submit();
}
}
/* 수정 화면*/
function fn_modify(msgId){
var frm = document.modiForm ;
frm.msgId.value = msgId ;
frm.submit();
}
/* 수정 화면*/
function fn_detail_list(msgGroupId){
var frm = document.modiForm ;
frm.msgGroupId.value = msgGroupId ;
frm.submit();
}
/* 날자 초기화 */
function init_date(){
$('#ntceBgndeYYYMMDD').val('');
$('#ntceEnddeYYYMMDD').val('');
$('#ntceBgnde').val('');
$('#ntceEndde').val('');
}
//기간선택 select
function fnSetCalMonth(val) {
var form = document.listForm;
var today = new Date();
var year = today.getFullYear();
var month = ("0"+(today.getMonth()+1)).slice(-2);
var date = ("0"+today.getDate()).slice(-2);
var sDate = new Date(today.setMonth(today.getMonth() - val));
var sYear = sDate.getFullYear();
var sMonth = ("0"+(sDate.getMonth()+1)).slice(-2);
var sDate = ("0"+sDate.getDate()).slice(-2);
form.ntceBgndeYYYMMDD.value = sYear + "-" + sMonth + "-" + sDate;
form.ntceEnddeYYYMMDD.value = year + "-" + month + "-" + date;
}
function fnSelectMber(mberId) {
document.modiForm2.mberId.value = mberId;
window.open("about:blank", 'popupSelectMber', 'width=900, height=1800, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbar=no');
document.modiForm2.action = "<c:url value='/uss/umt/user/EgovGnrlselectedUserView.do'/>";
document.modiForm2.target = "popupSelectMber";
document.modiForm2.submit();
}
function fnCheckAll(){
var checkField = document.listForm.checkField;
if(document.listForm.checkAll.checked) {
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
checkField[i].checked = true;
}
} else {
checkField.checked = true;
}
}
} else {
if(checkField) {
if(checkField.length > 1) {
for(var j=0; j < checkField.length; j++) {
checkField[j].checked = false;
}
} else {
checkField.checked = false;
}
}
}
}
// 법인폰 알림 업데이트
function fnSmsNotiUpdate(flag) {
if($("input:checkbox[name='checkField']").is(":checked")==false){
alert("선택된 항목이 없습니다.");
return;
}
var checkField = document.listForm.checkField;
var id = document.listForm.checkId;
var checkedIds = "";
var checkedCount = 0;
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
if(checkField[i].checked) {
checkedIds += ((checkedCount==0? "" : ",") + id[i].className);
checkedCount++;
}
}
} else {
if(checkField.checked) {
checkedIds = id.className;
}
}
}
if(checkedIds.length > 0) {
var msg = "";
if(flag == 'on') {
document.listForm.adminSmsNoticeYn.value='Y';
msg = "선택하신 사용자의 법인폰 알림을 On 하시겠습니까?";
} else {
document.listForm.adminSmsNoticeYn.value='N';
msg = "선택하신 사용자의 법인폰 알림을 Off 하시겠습니까?";
}
if(confirm(msg)){
document.listForm.checkedIdForDel.value=checkedIds;
document.listForm.action = "<c:url value='/uss/umt/user/EgovUsersSmsNoticeUpdate3.do'/>";
document.listForm.submit();
}
}
}
//스미싱의심 온/오프
function fnSmishingUpdate(flag) {
if($("input:checkbox[name='checkField']").is(":checked")==false){
alert("선택된 항목이 없습니다.");
return;
}
var checkField = document.listForm.checkField;
var id = document.listForm.checkId;
var checkedIds = "";
var checkedCount = 0;
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
if(checkField[i].checked) {
checkedIds += ((checkedCount==0? "" : ",") + id[i].className);
checkedCount++;
}
}
} else {
if(checkField.checked) {
checkedIds = id.className;
}
}
}
if(checkedIds.length > 0) {
var msg = "";
if(flag == 'on') {
document.listForm.smishingYn.value='Y';
msg = "선택하신 사용자의 스미싱의심을 On 하시겠습니까?";
} else {
document.listForm.smishingYn.value='N';
msg = "선택하신 사용자의 스미싱의심을 Off 하시겠습니까?";
}
if(confirm(msg)){
document.listForm.checkedIdForDel.value=checkedIds;
document.listForm.action = "<c:url value='/uss/umt/user/EgovUsersSmishingUpdate.do'/>";
document.listForm.submit();
}
}
}
function fnUserMsgUpdt(){
if($("input:checkbox[name='checkField']").is(":checked")==false){
alert("선택된 항목이 없습니다.");
return;
}
var checkField = document.listForm.checkField;
var id = document.listForm.checkId;
var checkedIds = "";
var checkedCount = 0;
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
if(checkField[i].checked) {
checkedIds += ((checkedCount==0? "" : ",") + id[i].value);
checkedCount++;
}
}
} else {
if(checkField.checked) {
checkedIds = id.value;
}
}
}
if(checkedIds.length > 0) {
var msg = "사용자 이용정지 및 예약문자 취소를 진행하시겠습니까?";
if(confirm(msg)){
document.listForm.checkedIdForDel.value=checkedIds;
document.listForm.action = "<c:url value='/uss/ion/msg/updateUserMsgData.do'/>";
document.listForm.submit();
}
}
}
function fnMsgStatusUpdt(){
if($("input:checkbox[name='checkField']").is(":checked")==false){
alert("선택된 항목이 없습니다.");
return;
}
var checkField = document.listForm.checkField;
var id = document.listForm.checkId;
var checkedIds = "";
var checkedCount = 0;
if(checkField) {
if(checkField.length > 1) {
for(var i=0; i < checkField.length; i++) {
if(checkField[i].checked) {
checkedIds += ((checkedCount==0? "" : ",") + id[i].value);
checkedCount++;
}
}
} else {
if(checkField.checked) {
checkedIds = id.value;
}
}
}
if(checkedIds.length > 0) {
var msg = "이용자정지, 예약취소 없이 상태만 변경됩니다. 완료처리를 진행하시겠습니까?";
if(confirm(msg)){
document.listForm.checkedIdForDel.value=checkedIds;
document.listForm.action = "<c:url value='/uss/ion/msg/updateMsgStatusData.do'/>";
document.listForm.submit();
}
}
}
</script>
<style>
.calBtn{
border: none;
background-color: transparent !important;
background-image: url(/pb/img/common/calendarIcon.png);
background-repeat: no-repeat;
width: 25px;
height: 25px !important;
vertical-align: middle;
margin-left: -38px !important;
margin-top: -2px !important;
cursor: pointer;
}
.pageCont .tbType1 tbody tr td.sms_detail {overflow:inherit;text-overflow:inherit;position:relative;}
.pageCont .tbType1 tbody tr td.sms_detail p {overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.pageCont .tbType1 tbody tr td.sms_detail .sms_detail_hover {overflow:hidden;text-overflow:ellipsis;display:none;word-wrap:break-word;-webkit-line-clamp:20;-webkit-box-orient:vertical;position:absolute;left:-15px;top:45px;width:calc(100% + 150px);padding:15px;line-height:20px;white-space:normal;border:1px solid #e5e5e5;background:#fff;border-radius:5px;box-sizing:border-box;box-shadow:0px 3px 10px 0px rgb(0 0 0 / 0.2);z-index:1;font-size:14px;text-align:left;}
.pageCont .tbType1 tbody tr td.sms_detail .sms_detail_hover:after {content:'';position:absolute;left:0;bottom:0;width:100%;height:10px;background:#fff;border-radius:0 0 5px 5px;}
.pageCont .tbType1 tbody tr td.sms_detail:hover .sms_detail_hover {display:-webkit-box;}
</style>
</head>
<body>
<form name="listForm" action="<c:url value='/uss/ion/msg/selectHoliMsgList.do'/>" method="post">
<input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/>
<input type="hidden" name="delFlag" value="Y" />
<input type="hidden" name="selectedId" />
<input type="hidden" name="pageType" />
<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
<input type="hidden" name="ntceBgnde" id="ntceBgnde" value="">
<input type="hidden" name="ntceEndde" id="ntceEndde" value="">
<input type="hidden" name="reserveYn" id="reserveYn" value="Y">
<input type="hidden" name="adminSmsNoticeYn" value=""/>
<input name="checkedIdForDel" type="hidden" />
<input type="hidden" name="todayYn" id="todayYn" value="N"/>
<div class="contWrap">
<div class="pageTitle">
<div class="pageIcon"><img src="/pb/img/pageTitIcon4.png" alt=""></div>
<h2 class="titType1 c_222222 fwBold">알림 미처리 문자 조회</h2>
<p class="tType6 c_999999">스미싱의심 알림 비활성화로 인해 발송된 문자리스트 현황을 파악할 수 있습니다.</p>
</div>
<div class="pageCont">
<div class="listSerch">
<div class="calendar_wrap">
<select name="setCalMonth" onchange="fnSetCalMonth(this.value)">
<option value="0">전체</option>
<option value="1">1개월</option>
<option value="3">3개월</option>
<option value="6">6개월</option>
</select>
<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceBgndeYYYMMDD);">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly=""
value="<c:out value="${searchVO.ntceBgnde}" />" >
<input type="button" class="calBtn">
</a>
<span class="line">~</span>
<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceEnddeYYYMMDD);">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly=""
value="<c:out value="${searchVO.ntceEndde}" />"
>
<input type="button" class="calBtn">
</a>
<a href="#" style="margin-left: 17px;" onclick="init_date(); return false;">
<img src="/pb/img/common/topTimeOut.png" alt="타임아웃 아이콘">
</a>
</div>
<br /><br />
<select name="mberSttus" class="select" title="회원상태(전체)" onchange="fn_search();">
<option value="" <c:if test="${searchVO.mberSttus == ''}">selected="selected"</c:if>>회원상태(전체)</option>
<option value="Y" <c:if test="${searchVO.mberSttus == 'Y'}">selected="selected"</c:if>>일반</option>
<option value="N" <c:if test="${searchVO.mberSttus == 'N'}">selected="selected"</c:if>>탈퇴</option>
<option value="B" <c:if test="${searchVO.mberSttus == 'B'}">selected="selected"</c:if>>이용정지</option>
</select>
<select name="searchCondition" class="select" title="검색조건 선택">
<option value="" <c:if test="${searchVO.searchCondition == ''}">selected="selected"</c:if>>ID/내용/발신번호(전체)</option>
<option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if>>사용자ID</option>
<option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if>>발신번호</option>
<option value="3" <c:if test="${searchVO.searchCondition == '3'}">selected="selected"</c:if>>전송내용</option>
</select>
<select name="searchCondition3" class="select" title="메세지타입(전체)" onchange="fn_search();">
<option value="" <c:if test="${searchVO.searchCondition3 == ''}">selected="selected"</c:if>>메세지타입(전체)</option>
<option value="1" <c:if test="${searchVO.searchCondition3 == '1'}">selected="selected"</c:if>>단문</option>
<option value="2" <c:if test="${searchVO.searchCondition3 == '2'}">selected="selected"</c:if>>장문</option>
<option value="3" <c:if test="${searchVO.searchCondition3 == '3'}">selected="selected"</c:if>>그림</option>
<option value="8" <c:if test="${searchVO.searchCondition3 == '8'}">selected="selected"</c:if>>알림톡</option>
<option value="9" <c:if test="${searchVO.searchCondition3 == '9'}">selected="selected"</c:if>>친구톡</option>
</select>
<select name="cancelResultYn" id="cancelResultYn" title="처리상태" onchange="fn_search();">
<option value="" <c:if test="${empty searchVO.cancelResultYn }">selected="selected"</c:if> >처리상태</option>
<option value="Y" <c:if test="${searchVO.cancelResultYn == 'Y'}">selected="selected"</c:if>>처리완료</option>
<option value="N" <c:if test="${searchVO.cancelResultYn == 'N'}">selected="selected"</c:if>>미처리</option>
</select>
<select id="sendKind" name="sendKind" onchange="fn_search();">
<option value=""<c:if test="${searchVO.sendKind eq ''}">selected="selected"</c:if>>발송방식 전체</option>
<option value="H"<c:if test="${searchVO.sendKind eq 'H'}">selected="selected"</c:if>>WEB</option>
<option value="A"<c:if test="${searchVO.sendKind eq 'A'}">selected="selected"</c:if>>API</option>
</select>
<input id="searchKeyword" name="searchKeyword" class="recentSearch" type="text" value="<c:out value='${searchVO.searchKeyword}'/>" size="15" title="검색" maxlength="100" />
<input type="button" class="btnType1" value="검색" onclick="fn_search(); return false;">
</div>
<div class="listTop">
<p class="tType5">
총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건
<c:if test="${todayYn eq 'Y' }">
(예약발송 : <fmt:formatNumber value="${msgGroupCntSum}" pattern="#,###" />건)
</c:if>
</p>
<div class="rightWrap">
<input type="button" style="cursor: pointer;" onclick="setToday();" value="Today">
<!-- <input type="button" class="printBtn"> -->
<select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);">
<option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option>
<option value='20' <c:if test="${searchVO.pageUnit == '20'}">selected</c:if>>20줄</option>
<option value='30' <c:if test="${searchVO.pageUnit == '30'}">selected</c:if>>30줄</option>
</select>
</div>
</div>
<div class="tableWrap">
<table class="tbType1">
<colgroup>
<col style="width: 3%">
<col style="width: 5%">
<col style="width: 15%">
<%-- <col style="width: 5%"> --%>
<col style="width: 7%">
<col style="width: 8%">
<col style="width: 10%">
<col style="width: 8%">
<col style="width: auto;">
<col style="width: 5%">
<col style="width: 5%">
<col style="width: 10%">
<col style="width: 5%">
<%--
<col style="width: 13%">
--%>
</colgroup>
<thead>
<tr>
<th><input type="checkbox" name="checkAll" id="checkAll" onclick="fnCheckAll();" /><label for="checkAll"></label></th>
<th>번호<input type="button" class="sort sortBtn" id="sort_msgGroupId"></th>
<th>아이디<input type="button" class="sort sortBtn" id="sort_userId"></th>
<!-- <th>회원상태<input type="button" class="sort sortBtn" id="sort_adminSmsNoticeYn"></th> -->
<th>발신번호<input type="button" class="sort sortBtn" id="sort_callFrom"></th>
<th>발송건수<input type="button" class="sort sortBtn" id="sort_msgGroupCnt"></th>
<th>요청시간<input type="button" class="sort sortBtn" id="sort_reqDate"></th>
<th>예약여부<input type="button" class="sort sortBtn" id="sort_reserveYn"></th>
<th>내용<input type="button" class="sort sortBtn" id="sort_smsTxt"></th>
<th>타입<input type="button" class="sort sortBtn" id="sort_msgTypeTxt"></th>
<th>처리상태<input type="button" class="sort sortBtn" id="sort_cancelResultYn"></th>
<th>등록일자<input type="button" class="sort sortBtn" id="sort_frstRegistPnttm"></th>
<th>방식<input type="button" class="sort sortBtn" id="sort_sendKind"></th>
<!-- <th>예약상태<input type="button" class="sort sortBtn" id="sort_conectMthdTxt"></th> -->
<!--
<th>취소일자<input type="button" class="sort sortBtn" id="sort_agentCodeTxt"></th>
-->
</tr>
</thead>
<tbody>
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td>
<input name="checkField" id="<c:out value="${result.userId}_${status.count}"/>" title="Check <c:out value="${status.count}"/>" type="checkbox"/><label for="<c:out value="${result.userId}"/>"></label>
<input name="checkId" type="hidden" class="${result.userId}" value="<c:out value='${result.userId}'/>§<c:out value='${result.msgGroupId}'/>§<c:out value='${result.reserveYn}'/>"/>
</td>
<td <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if>>
<c:if test="${searchVO.searchSortOrd eq 'desc' }">
<c:out value="${ ( paginationInfo.totalRecordCount - ((paginationInfo.currentPageNo -1)*paginationInfo.recordCountPerPage) ) - status.index }"/>
</c:if>
<c:if test="${searchVO.searchSortOrd eq 'asc' }">
<c:out value="${(paginationInfo.currentPageNo - 1) * paginationInfo.recordCountPerPage + status.count}"/>
</c:if>
</td>
<td <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if>>
<a href="#" onclick="javascript:fnSelectMber('<c:out value="${result.userId}"/>'); return false;">
<c:out value="${result.userId}"/>
(<c:out value="${result.userNm}"/>)
</a>
</td>
<%-- <td <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if>>
<c:choose>
<c:when test="${result.mberSttus eq 'Y'}">
일반
</c:when>
<c:when test="${result.mberSttus eq 'N'}">
탈퇴
</c:when>
<c:when test="${result.mberSttus eq 'B'}">
이용정지
</c:when>
<c:otherwise>
기타(${result.mberSttus})
</c:otherwise>
</c:choose>
</td> --%>
<td onclick="fn_detail_list('${result.msgGroupId}'); return false;" <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if><c:if test="${result.smishingYn eq 'N'}">style="cursor:pointer;"</c:if>>
<a href="#" onclick="fn_detail_list('${result.msgGroupId}'); return false;">
<c:out value="${result.callFrom}"/>
</a>
</td>
<td onclick="fn_detail_list('${result.msgGroupId}'); return false;" <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if><c:if test="${result.smishingYn eq 'N'}">style="cursor:pointer;"</c:if>>
<fmt:parseDate value="${result.reqDate}" var="reqDateValue" pattern="yyyy-MM-dd HH:mm"/>
<fmt:parseDate value="${result.nowDate}" var="nowDateValue" pattern="yyyy-MM-dd HH:mm"/>
<c:choose>
<c:when test="${nowDateValue < reqDateValue}">
<c:out value="${result.msgGroupCnt}"/>
</c:when>
<c:otherwise>
<c:out value="${result.msgGroupCnt}"/>(<fmt:formatNumber value="${(result.successCount / result.msgGroupCnt) * 100}" pattern="#,###" />%)
</c:otherwise>
</c:choose>
</td>
<td onclick="fn_detail_list('${result.msgGroupId}'); return false;" <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if><c:if test="${result.smishingYn eq 'N'}">style="cursor:pointer;"</c:if>>
<c:out value="${result.reqDate}"/>
</td>
<td <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if>>
<c:choose>
<c:when test="${result.reserveYn eq 'Y'}">
예약
<%-- <c:if test="${result.reserveCYn eq 'Y'}">
(취소)
</c:if> --%>
</c:when>
<c:otherwise>
즉시
</c:otherwise>
</c:choose>
</td>
<td class="sms_detail left" <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF;"</c:if>>
<c:choose>
<c:when test="${empty result.smsTxt}">
<c:choose>
<c:when test="${result.msgType eq '4'}">
내용없음
</c:when>
<c:otherwise>
그림문자
</c:otherwise>
</c:choose>
<div class="sms_detail_hover">
<c:if test="${not empty fn:split(result.atchFiles, '^')[0]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[0]}&fileSn=0" style="width: 120px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[1]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[1]}&fileSn=0" style="width: 120px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[2]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[2]}&fileSn=0" style="width: 120px;">
</c:if>
</div>
</c:when>
<c:otherwise>
<p><c:out value="${result.smsTxt}"/></p>
<div class="sms_detail_hover">
<c:if test="${not empty fn:split(result.atchFiles, '^')[0]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[0]}&fileSn=0" style="width: 120px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[1]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[1]}&fileSn=0" style="width: 120px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[2]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[2]}&fileSn=0" style="width: 120px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[0]}">
<br />
</c:if>
<c:out value="${fn:replace(fn:replace(result.smsTxt, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
</div>
</c:otherwise>
</c:choose>
</td>
<td <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if>>
<c:choose>
<c:when test="${result.msgTypeTxt eq 'SMS전송'}">
SMS
</c:when>
<c:when test="${result.msgTypeTxt eq 'MMS전송' && result.fileCnt eq '0'}">
LMS
</c:when>
<c:when test="${result.msgTypeTxt eq 'MMS전송' && result.fileCnt ne '0'}">
MMS
</c:when>
<c:when test="${result.msgTypeTxt eq '알림톡전송'}">
알림톡
</c:when>
<c:otherwise>
<c:out value="${result.msgTypeTxt}"/>
</c:otherwise>
</c:choose>
</td>
<td <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if>>
<c:choose>
<c:when test="${result.cancelResultYn eq 'Y'}">
처리완료
</c:when>
<c:when test="${result.cancelResultYn eq 'B'}">
이용정지
</c:when>
<c:when test="${result.cancelResultYn eq 'R'}">
예약취소
</c:when>
<c:otherwise>
미처리
</c:otherwise>
</c:choose>
</td>
<td <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if>>
<c:out value="${result.frstRegistPnttm}"/>
</td>
<td <c:if test="${result.smishingYn eq 'Y'}">style="color: #0000FF; cursor:pointer;"</c:if>>
<c:choose>
<c:when test="${result.sendKind eq 'A'}">
API
</c:when>
<c:when test="${result.sendKind eq 'H'}">
WEB
</c:when>
</c:choose>
</td>
</tr>
</c:forEach>
<c:if test="${empty resultList}">
<tr><td colspan="11"><spring:message code="common.nodata.msg" /></td></tr>
</c:if>
</tbody>
</table>
</div>
<div class="btnWrap" style="margin-bottom: 15px;">
<input type="button" class="btnType2" style="padding:5px 10px" onclick="fnUserMsgUpdt(); return false;" value="사용자 이용정지 및 예약문자 취소">
<input type="button" class="btnType2" style="padding:5px 10px" onclick="fnMsgStatusUpdt(); return false;" value="완료 처리">
</div>
<!-- 페이지 네비게이션 시작 -->
<c:if test="${!empty resultList}">
<div class="page">
<ul class="inline">
<ui:pagination paginationInfo = "${paginationInfo}" type="image" jsFunction="linkPage" />
</ul>
</div>
</c:if>
<!-- //페이지 네비게이션 끝 -->
</div>
</div>
</form>
<form name="modiForm" method="get" action="<c:url value='/uss/ion/msg/SendMsgDetailList.do'/>" >
<input name="msgId" type="hidden" />
<input name="msgGroupId" type="hidden" />
<input name="detailType" type="hidden" value="sendHoliMsgList" />
</form>
<form name="modiForm2" id="modiForm2" method="post">
<input name="mberId" type="hidden" />
</form>
</body>
</html>

View File

@ -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();
}
</script>

View File

@ -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) {
<c:if test="${result.reserveCYn eq 'N' && result.delayYn eq 'Y' && result.delayCompleteYn eq 'N'}">
<br />
<fmt:formatDate value="${now}" pattern="yyyyMMddhhmm" var="nowDate" />
<fmt:formatDate value="${now}" pattern="yyyyMMddHHmm" var="nowDate" />
<fmt:parseDate value="${result.reqFullDate}" pattern="yyyy-MM-dd HH:mm" var="checkValue" />
<fmt:formatDate value="${checkValue}" pattern="yyyyMMddhhmm" var="checkDate"/>
<fmt:formatDate value="${checkValue}" pattern="yyyyMMddHHmm" var="checkDate"/>
<c:if test="${nowDate < checkDate}">
<button type="button" class="fillBlue" onclick="fnMsgDelaySendArray('<c:out value="${result.msgGroupId}"/>','<c:out value="${result.userId}"/>'); return false;">발송승인</button>
<button type="button" class="fillRed" onclick="fnMsgDelayCancelArray('<c:out value="${result.msgGroupId}"/>','<c:out value="${result.userId}"/>'); return false;">발송취소</button>

View File

@ -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");
%>
<!DOCTYPE html>
<html lang="ko">
@ -35,7 +35,7 @@
html {
overflow-x: hidden;
overflow-y: auto;
}
}
</style>
<script src="/pb/js/jquery-3.5.0.js"></script>
@ -45,141 +45,153 @@ html {
<script type="text/javaScript" language="javascript">
$(document).ready(function() {
// change 함수
$("#changeWord").change(function() {
// 변경된 값으로 비교 후 alert 표출
if($(this).val() == ""){
$("#rejectReason").val('');
} else {
$("#rejectReason").val($(this).val());
}
});
// change 함수
/* 반려문구 수정으로 함수 새로 생성하여 사용 함 20240829
$("#changeWord").change(function() {
// 변경된 값으로 비교 후 alert 표출
if($(this).val() == ""){
$("#rejectReason").val('');
} else {
$("#rejectReason").val($(this).val());
}
}); */
});
//PdfView
function pdfViewPhonePop(atchFileId,fileSn) {
document.pdfForm.atchFileId.value = atchFileId;
document.pdfForm.fileSn.value = fileSn;
document.pdfForm.atchFileId.value = atchFileId;
document.pdfForm.fileSn.value = fileSn;
document.pdfForm.action = "<c:url value='/uss/ion/msg/pdfViewPhone.do'/>";
document.pdfForm.submit();
document.pdfForm.submit();
}
//기업회원 신청 승인/반려 처리
function updateAuthYn(phmId, authYn, userId) {
var form = document.authForm;
form.phmId.value = phmId;
form.authYn.value = authYn;
form.userId.value = userId;
var data = new FormData(form);
if (confirm("인증완료 하시겠습니까?")) {
$.ajax({
type: "POST",
url: "/uss/ion/msg/updateAuthYnAjax.do",
data: data,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success: function (data) {
if (data.result) {
alert(data.msg);
opener.location.reload();
self.close();
} else {
alert(data.msg);
}
},
error: function (e) {
alert("저장에 실패하였습니다.");
alert("ERROR : " + JSON.stringify(e));
}
});
}
var form = document.authForm;
form.phmId.value = phmId;
form.authYn.value = authYn;
form.userId.value = userId;
var data = new FormData(form);
if (confirm("인증완료 하시겠습니까?")) {
$.ajax({
type: "POST",
url: "/uss/ion/msg/updateAuthYnAjax.do",
data: data,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success: function (data) {
if (data.result) {
alert(data.msg);
opener.location.reload();
self.close();
} else {
alert(data.msg);
}
},
error: function (e) {
alert("저장에 실패하였습니다.");
alert("ERROR : " + JSON.stringify(e));
}
});
}
}
//기업회원 신청 승인/반려 처리
function authYnC() {
if( $("#rejectReason").val() == '' ){
alert("반려사유를 입력해주세요.");
return false;
}
if (confirm("반려 하시겠습니까?")) {
var form = document.returnPopForm;
form.authYn.value = "C"
var data = new FormData(form);
url = "/uss/ion/msg/updateAuthYnAjax.do";
$.ajax({
type: "POST",
url: url,
data: data,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success: function (data) {
if (data.result) {
// 초기화
alert(data.msg);
opener.location.reload();
self.close();
}
else {
alert(data.msg);
}
},
error: function (e) {
alert("저장에 실패하였습니다.");
alert("ERROR : " + JSON.stringify(e));
}
});
}
if( $("#rejectReason").val() == '' ){
alert("반려사유를 입력해주세요.");
return false;
}
if (confirm("반려 하시겠습니까?")) {
var form = document.returnPopForm;
form.authYn.value = "C"
var data = new FormData(form);
url = "/uss/ion/msg/updateAuthYnAjax.do";
$.ajax({
type: "POST",
url: url,
data: data,
dataType:'json',
async: false,
processData: false,
contentType: false,
cache: false,
success: function (data) {
if (data.result) {
// 초기화
alert(data.msg);
opener.location.reload();
self.close();
}
else {
alert(data.msg);
}
},
error: function (e) {
alert("저장에 실패하였습니다.");
alert("ERROR : " + JSON.stringify(e));
}
});
}
}
//반려화면 Call
function setRejectAreaCall(sType) {
if (sType == "SHOW") {
if ($("#rejectArea").css("display") == "block") {
//반려 Hide
setRejectAreaHide();
}
else {
// 반려 Show
setRejectAreaShow();
}
}
else {
//반려 Hide
setRejectAreaHide();
}
if (sType == "SHOW") {
if ($("#rejectArea").css("display") == "block") {
//반려 Hide
setRejectAreaHide();
}
else {
// 반려 Show
setRejectAreaShow();
}
}
else {
//반려 Hide
setRejectAreaHide();
}
}
// 반려 Show
function setRejectAreaShow() {
$("#rejectArea").show();
$("#btnReject").text("반려 CLOSE");
$("#btnReject").removeClass("btnType1");
$("#btnReject").addClass("btnType2");
$("#rejectArea").show();
$("#btnReject").text("반려 CLOSE");
$("#btnReject").removeClass("btnType1");
$("#btnReject").addClass("btnType2");
}
//반려 Hide
function setRejectAreaHide() {
$("#rejectArea").hide();
$("#rejectArea").hide();
$("#btnReject").text("반려 OPEN");
$("#btnReject").removeClass("btnType2");
$("#btnReject").addClass("btnType1");
$("#btnReject").text("반려 OPEN");
$("#btnReject").removeClass("btnType2");
$("#btnReject").addClass("btnType1");
}
//반려문구 줄바꿈 처리추가 20240829
function fnRejectResonInput(){
//각 문구 줄바꿈 처리 적용
var memo = $("#changeWord option:selected").val();
var spMemo = memo.split('<br/>').join("\r\n");
$("#rejectReason").html(spMemo);
}
</script>
@ -188,247 +200,247 @@ function setRejectAreaHide() {
<body>
<div class="pageCont" style="text-align: center; width: 1000px;">
<div class="listTop" style="float: left; margin-top: 0px; padding-top: 0px;">
<p class="tType5">발신번호 신청 정보</p>
</div>
<div class="tableWrap">
<table class="tbType1">
<colgroup>
<col style="width: 12%">
<col style="width: *%">
<col style="width: 11%">
<col style="width: 8%">
<col style="width: 8%">
<col style="width: 8%">
<col style="width: 8%">
<col style="width: 8%">
<col style="width: 15%">
</colgroup>
<thead>
<tr>
<th>발신번호</th>
<th>대표</th>
<th>담당자</th>
<th>회원</th>
<th>구분</th>
<th>인증방식</th>
<th>인증자</th>
<th>인증여부</th>
<th>다운로드</th>
</tr>
</thead>
<tbody>
<tr>
<td title="${phoneNumber}">${phoneNumber}</td>
<td title="${userName}">${userName}</td>
<td title="${managerNm}">${managerNm}</td>
<td>
<c:choose>
<c:when test="${dept == 'c'}">
기업
</c:when>
<c:otherwise>
개인
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${not empty nameType}">
<c:choose>
<c:when test="${nameType == '1'}">
당사
</c:when>
<c:when test="${nameType == '2'}">
대표
</c:when>
<c:when test="${nameType == '3'}">
직원
</c:when>
<c:when test="${nameType == '4'}">
타사
</c:when>
<c:when test="${nameType == '5'}">
본인
</c:when>
<c:otherwise>
타인
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
없음
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${phmAuthTypeTxt eq '휴대폰 인증'}">
휴대폰
</c:when>
<c:when test="${phmAuthTypeTxt eq '서류인증'}">
서류
</c:when>
<c:otherwise>
<c:out value="${phmAuthTypeTxt}"/>
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${phmAuthTypeTxt eq '서류인증'}">
</c:when>
<c:otherwise>
<c:out value="${ownerName}"/>
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${phmType eq '03'}">
발신번호 차단
</c:when>
<c:otherwise>
<c:if test="${authYnTxt eq '심사중'}">인증요청</c:if>
<c:if test="${authYnTxt ne '심사중'}"><c:out value="${authYnTxt}"/></c:if>
</c:otherwise>
</c:choose>
</td>
<td>
<c:import url="/cmm/fms/selectMberFileInfs.do" charEncoding="utf-8">
<c:param name="param_atchFileId" value="${atchFileId}" />
</c:import>
</td>
</tr>
</tbody>
</table>
</div>
<div class="listTop" style="float: left; margin-top: 0px; padding-top: 0px;">
<p class="tType5">발신번호 신청 정보</p>
</div>
<div class="tableWrap">
<table class="tbType1">
<colgroup>
<col style="width: 12%">
<col style="width: *%">
<col style="width: 11%">
<col style="width: 8%">
<col style="width: 8%">
<col style="width: 8%">
<col style="width: 8%">
<col style="width: 8%">
<col style="width: 15%">
</colgroup>
<thead>
<tr>
<th>발신번호</th>
<th>대표</th>
<th>담당자</th>
<th>회원</th>
<th>구분</th>
<th>인증방식</th>
<th>인증자</th>
<th>인증여부</th>
<th>다운로드</th>
</tr>
</thead>
<tbody>
<tr>
<td title="${phoneNumber}">${phoneNumber}</td>
<td title="${userName}">${userName}</td>
<td title="${managerNm}">${managerNm}</td>
<td>
<c:choose>
<c:when test="${dept == 'c'}">
기업
</c:when>
<c:otherwise>
개인
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${not empty nameType}">
<c:choose>
<c:when test="${nameType == '1'}">
당사
</c:when>
<c:when test="${nameType == '2'}">
대표
</c:when>
<c:when test="${nameType == '3'}">
직원
</c:when>
<c:when test="${nameType == '4'}">
타사
</c:when>
<c:when test="${nameType == '5'}">
본인
</c:when>
<c:otherwise>
타인
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
없음
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${phmAuthTypeTxt eq '휴대폰 인증'}">
휴대폰
</c:when>
<c:when test="${phmAuthTypeTxt eq '서류인증'}">
서류
</c:when>
<c:otherwise>
<c:out value="${phmAuthTypeTxt}"/>
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${phmAuthTypeTxt eq '서류인증'}">
</c:when>
<c:otherwise>
<c:out value="${ownerName}"/>
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${phmType eq '03'}">
발신번호 차단
</c:when>
<c:otherwise>
<c:if test="${authYnTxt eq '심사중'}">인증요청</c:if>
<c:if test="${authYnTxt ne '심사중'}"><c:out value="${authYnTxt}"/></c:if>
</c:otherwise>
</c:choose>
</td>
<td>
<c:import url="/cmm/fms/selectMberFileInfs.do" charEncoding="utf-8">
<c:param name="param_atchFileId" value="${atchFileId}" />
</c:import>
</td>
</tr>
</tbody>
</table>
</div>
<br /><br />
<!-- 필수서류 체크 -->
<div class="listTop" style="float: left; margin-top: 0px; padding-top: 0px;">
<p class="tType5">승인에 필요한 서류</p>
</div>
<div class="tableWrap">
<table class="tbType1">
<colgroup>
<col style="width: *%">
<col style="width: 25%">
</colgroup>
<thead>
<tr>
<td class="left" style="padding: 10px 0 10px 0; line-height: 1.6em;">${requiredDocuments}</td>
<td style="padding: 10px 0 10px 0; vertical-align: middle;">
<c:if test="${authYn eq 'H'}">
<button class="btnType1" onclick="updateAuthYn('<c:out value='${phmId}'/>', 'Y', '<c:out value='${userId}'/>'); return false;" style="background-color: blue;">인증완료</button>
<button class="btnType1" onclick="setRejectAreaCall('SHOW'); return false;" id="btnReject">반려 OPEN</button>
</c:if>
</td>
</tr>
</thead>
</tbody>
</table>
</div>
<!-- 반려 -->
<div id="rejectArea" class="rejectAreaClass" style="display: none;">
<br /><br />
<div class="listTop" style="float: left; margin-top: 0px; padding-top: 0px;">
<p class="tType5">반려</p>
</div>
<div class="tableWrap">
<form id="returnPopForm" name="returnPopForm" method="post">
<input type="hidden" name="phmId" id="phmId" value="${phmId}"/>
<input type="hidden" name="authYn" id="authYn"/>
<input type="hidden" name="userId" value="${userId}" />
<table class="tbType3">
<colgroup>
<col style="width: 15%">
<col style="width: *%">
</colgroup>
<thead>
<tr>
<th>반려문구</th>
<td class="left">
<c:if test="${authYn eq 'H'}">
<select id="changeWord" name="changeWord" style="width: 89%;">
<option value="">직접입력</option>
<c:choose>
<c:when test="${dept == 'c'}">
<option value='[문자온] 기업의 일반전화 발신번호 등록을 위해서는 "통신서비스이용증명원"이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>기업(회사 명의 일반전화)</option>
<option value='[문자온] 기업회원의 전화번호 중 직원명의로 가입된 일반전화의 발신번호 등록을 위해서는 "통신서비스이용증명원", "재직증명서류(재직증명서, 4대보험 가입증명서 등)"가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>기업(직원 명의 일반전화)</option>
<option value='[문자온] 기업 재직 직원명의의 휴대폰 발신번호를 등록하기 위해서는 "통신서비스이용증명원(직원 명의 본인의 휴대폰 인증 대체 가능)", "재직증명서류(재직증명서, 4대보험 가입증명서 등)"가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>기업(직원 명의 휴대폰)</option>
<option value='[문자온] 기업 자사 명의 외 타사 일반전화 및 타사 명의의 휴대폰 발신번호 등록을 위해서는 "거래관계확인서(계약서, 세금계산서 등)", "발신번호 명의업체의 사업자등록증", "대리인 신분증 사본(문자온에 가입하신 대리인의 신분증, 주민번호 뒷자리 마스킹 처리)", "발신번호 명의업체의 위임장", "통신서비스이용증명원"이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>기업(타사 일반전화 또는 타사 휴대폰)</option>
<option value='[문자온] 기업 자사 명의 외 타사 일반전화 및 타사 명의의 휴대폰 발신번호 등록을 위해서는 "거래관계확인서(계약서, 세금계산서 등)", "발신번호 명의업체의 사업자등록증", "대리인 신분증 사본(문자온에 가입하신 대리인의 신분증, 주민번호 뒷자리 마스킹 처리)", "발신번호 명의업체의 위임장", "통신서비스이용증명원", "재직증명서류(재직증명서, 4대보험 가입증명서 등)"가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>기업(타사 직원 일반전화 또는 타사 직원 휴대폰)</option>
</c:when>
<c:otherwise>
<option value='[문자온] 일반전화 발신번호 등록을 위해서는 "통신서비스이용증명원"이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>개인(본인 일반전화)</option>
<option value='[문자온] 타인의 일반전화 발신번호 등록을 위해서는 "통신서비스이용증명원", "발신번호 명의자의 위임장", "대리인 신분증 사본(문자온에 가입하신 대리인의 신분증, 주민번호 뒷자리 마스킹 처리)"이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>개인(타인 일반전화)</option>
<option value='[문자온] 타인 명의의 휴대폰 번호를 발신번호로 사용하실 경우 해당번호에 대한 "통신서비스이용증명원(타인 명의 본인의 휴대폰 인증 대체 가능)", "발신번호 명의자의 위임장", "대리인 신분증 사본(문자온에 가입하신 대리인의 신분증, 주민번호 뒷자리 마스킹 처리)"이 반드시 첨부되어야 됩니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>개인(타인 휴대폰)</option>
<option value='[문자온] 개인회원이 회사 명의의 일반전화 또는 회사 명의의 휴대폰 발신번호를 등록하기 위해서는 "통신서비스이용증명원", "사업자등록증", "재직증명서(문자온 회원 가입자가 사업자등록증 상의 대표자가 아닌 경우에 한함)"가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>개인(회사 일반전화 또는 회사 휴대폰, 재직증명가능)</option>
<option value='[문자온] 개인회원 중 재직증명서 제출이 불가한 자가(가족, 자원봉사자 등) 회사 명의의 일반전화 또는 회사 명의의 휴대폰 발신번호를 등록하기 위해서는 "통신서비스이용증명원", "발신번호 명의업체의 사업자등록증", "발신번호 명의자의 위임장", "대리인 신분증 사본(문자온에 가입하신 대리인의 신분증, 주민번호 뒷자리 마스킹 처리)"이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>개인(회사 일반전화 또는 회사 휴대폰, 재직증명불가)</option>
</c:otherwise>
</c:choose>
</select>
</c:if>
</td>
</tr>
<tr>
<th>반려사유</th>
<td class="left">
<textarea style="width: 87%; height: 160px" name="rejectReason" id="rejectReason" maxlength="1000" <c:if test="${authYn eq 'C'}">readonly</c:if>>${rejectReason}</textarea>
</td>
</tr>
</thead>
</table>
<div class="button_box" style="margin-top: 15px;">
<c:if test="${authYn eq 'H'}">
<button type="button" class="btnType btnType20" onClick="authYnC(); return false;" style="background-color: blue;">반려</button>
</c:if>
<button type="button" class="btnType btnType20" onClick="setRejectAreaCall('HIDE'); return false;">취소</button>
</div>
</form>
</div>
<br /><br />
</div>
<br /><br />
<!-- 필수서류 체크 -->
<div class="listTop" style="float: left; margin-top: 0px; padding-top: 0px;">
<p class="tType5">승인에 필요한 서류</p>
</div>
<div class="tableWrap">
<table class="tbType1">
<colgroup>
<col style="width: *%">
<col style="width: 25%">
</colgroup>
<thead>
<tr>
<td class="left" style="padding: 10px 0 10px 0; line-height: 1.6em;">${requiredDocuments}</td>
<td style="padding: 10px 0 10px 0; vertical-align: middle;">
<c:if test="${authYn eq 'H'}">
<button class="btnType1" onclick="updateAuthYn('<c:out value='${phmId}'/>', 'Y', '<c:out value='${userId}'/>'); return false;" style="background-color: blue;">인증완료</button>
<button class="btnType1" onclick="setRejectAreaCall('SHOW'); return false;" id="btnReject">반려 OPEN</button>
</c:if>
</td>
</tr>
</thead>
</tbody>
</table>
</div>
<!-- 반려 -->
<div id="rejectArea" class="rejectAreaClass" style="display: none;">
<br /><br />
<div class="listTop" style="float: left; margin-top: 0px; padding-top: 0px;">
<p class="tType5">반려</p>
</div>
<div class="tableWrap">
<form id="returnPopForm" name="returnPopForm" method="post">
<input type="hidden" name="phmId" id="phmId" value="${phmId}"/>
<input type="hidden" name="authYn" id="authYn"/>
<input type="hidden" name="userId" value="${userId}" />
<table class="tbType3">
<colgroup>
<col style="width: 15%">
<col style="width: *%">
</colgroup>
<thead>
<tr>
<th>반려문구</th>
<td class="left">
<c:if test="${authYn eq 'H'}">
<select id="changeWord" name="changeWord" style="width: 89%;" onchange="fnRejectResonInput();">
<option value="">직접입력</option>
<c:choose>
<c:when test="${dept == 'c'}">
<option value='[문자온] 회사 명의의 일반전화 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원”이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>기업(회사 명의 일반전화)</option>
<option value='[문자온] 회사 직원 명의의 일반전화 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원”, “재직증명서류”가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>기업(직원 명의 일반전화)</option>
<option value='[문자온] 회사 직원 명의의 휴대전화 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원(발신번호 명의자 휴대폰 인증 대체 가능)”, “재직증명서류”가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>기업(직원 명의 휴대폰)</option>
<option value='[문자온] 타사 명의의 발신번호 등록을 위해서는 “발신번호 명의업체의 사업자등록증“, “발신번호에 대한 통신서비스이용증명원”, “발신번호 명의업체의 위임장“, “대리인 신분증 사본(문자온 가입자 신분증, 주민번호 뒷자리 마스킹 처리)“이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>기업(타사 일반전화 또는 타사 휴대폰)</option>
<option value='[문자온] 타사 직원 명의의 발신번호 등록을 위해서는 “타사 사업자등록증과 직원의 재직증명서류“, “타사 직원의 통신서비스이용증명원(휴대폰 인증 대체 가능)”, “위임장(타사직원->문자온 가입자)“, “대리인 신분증 사본(문자온 가입자 신분증, 주민번호 뒷자리 마스킹 처리)“가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>기업(타사 직원 일반전화 또는 타사 직원 휴대폰)</option>
</c:when>
<c:otherwise>
<option value='[문자온] 본인 명의의 일반전화 발신번호 등록을 위해서는 “통신서비스이용증명원”이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>개인(본인 일반전화)</option>
<option value='[문자온] 타인 명의의 일반전화 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원”, “발신번호 명의자의 위임장“, “대리인 신분증 사본(문자온 가입자 신분증, 주민번호 뒷자리 마스킹 처리)”이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>개인(타인 일반전화)</option>
<option value='[문자온] 타인 명의의 휴대전화 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원(발신번호 명의자 휴대폰 인증 대체 가능)”, “발신번호 명의자의 위임장“, “대리인 신분증 사본(문자온 가입자 신분증, 주민번호 뒷자리 마스킹 처리)”이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>개인(타인 휴대폰)</option>
<option value='[문자온] 개인회원이 회사 명의의 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원”, “사업자등록증“, “재직증명서(문자온 가입자가 사업자등록증 상 대표자가 아닌 경우)”가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>개인(회사 일반전화 또는 회사 휴대폰, 재직증명가능)</option>
<option value='[문자온] 개인회원 중 재직증명서 제출이 불가한 자가(가족, 자원봉사자 등) 회사 명의의 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원“, “ 발신번호 명의업체의 사업자등록증“, “발신번호 명의업체의 위임장“, “대리인 신분증 사본(문자온 가입자 신분증, 주민번호 뒷자리 마스킹 처리)”이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>개인(회사 일반전화 또는 회사 휴대폰, 재직증명불가)</option>
</c:otherwise>
</c:choose>
</select>
</c:if>
</td>
</tr>
<tr>
<th>반려사유</th>
<td class="left">
<textarea style="width: 87%; height: 160px" name="rejectReason" id="rejectReason" maxlength="1000" <c:if test="${authYn eq 'C'}">readonly</c:if>>${rejectReason}</textarea>
</td>
</tr>
</thead>
</table>
<div class="button_box" style="margin-top: 15px;">
<c:if test="${authYn eq 'H'}">
<button type="button" class="btnType btnType20" onClick="authYnC(); return false;" style="background-color: blue;">반려</button>
</c:if>
<button type="button" class="btnType btnType20" onClick="setRejectAreaCall('HIDE'); return false;">취소</button>
</div>
</form>
</div>
<br /><br />
</div>
<c:if test="${not empty fileList}">
<div style="width: 100%; text-align: center; margin: 30px 0 30px 0;">
<c:set var="plusCnt" value="0"/>
<c:set var="btnClass" value="btnType1"/>
<c:forEach var="result" items="${fileList}" varStatus="status">
<c:choose>
<c:when test="${result.fileSn eq fileSn}">
<c:set var="btnClass" value="btnType2"/>
</c:when>
<c:otherwise>
<c:set var="btnClass" value="btnType1"/>
</c:otherwise>
</c:choose>
<c:set var="plusCnt" value="${plusCnt + 1}"/>
<button class="<c:out value="${btnClass}"/>" onclick="pdfViewPhonePop('${result.atchFileId}','${result.fileSn}'); return false;"> 첨부파일 <c:out value="${plusCnt}"/> </button>
</c:forEach>
</div>
</c:if>
<c:if test="${not empty fileList}">
<div style="width: 100%; text-align: center; margin: 30px 0 30px 0;">
<c:set var="plusCnt" value="0"/>
<c:set var="btnClass" value="btnType1"/>
<c:forEach var="result" items="${fileList}" varStatus="status">
<c:choose>
<c:when test="${result.fileSn eq fileSn}">
<c:set var="btnClass" value="btnType2"/>
</c:when>
<c:otherwise>
<c:set var="btnClass" value="btnType1"/>
</c:otherwise>
</c:choose>
<c:set var="plusCnt" value="${plusCnt + 1}"/>
<button class="<c:out value="${btnClass}"/>" onclick="pdfViewPhonePop('${result.atchFileId}','${result.fileSn}'); return false;"> 첨부파일 <c:out value="${plusCnt}"/> </button>
</c:forEach>
</div>
</c:if>
<c:if test="${fileType eq 'etc'}">
<div style="width: 100%; text-align: center; margin: 30px 0 30px 0; color: red;">
PDF 뷰어에서 지원하지 않는 형식의 파일입니다. 첨부파일 다운로드후 확인해주세요.
</div>
</c:if>
<canvas id="the-canvas" name="the-canvas" style="min-width: 600px; max-width: 1000px; margin-top: 25px; margin-bottom: 25px;"></canvas>
<c:if test="${fileType eq 'etc'}">
<div style="width: 100%; text-align: center; margin: 30px 0 30px 0; color: red;">
PDF 뷰어에서 지원하지 않는 형식의 파일입니다. 첨부파일 다운로드후 확인해주세요.
</div>
</c:if>
<canvas id="the-canvas" name="the-canvas" style="min-width: 600px; max-width: 1000px; margin-top: 25px; margin-bottom: 25px;"></canvas>
<div>
<button class="btnType" id="prev">Previous</button>
&nbsp;<span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>&nbsp;
<button class="btnType" id="next">Next</button>
<div style="float: right; margin-right: 10px;"><button onclick="javascript:opener.location.reload(); self.window.close();" class="btnType">CLOSE</button></div>
</div>
<div>
<button class="btnType" id="prev">Previous</button>
&nbsp;<span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>&nbsp;
<button class="btnType" id="next">Next</button>
<div style="float: right; margin-right: 10px;"><button onclick="javascript:opener.location.reload(); self.window.close();" class="btnType">CLOSE</button></div>
</div>
</div>
<br /><br />
@ -458,95 +470,101 @@ function setRejectAreaHide() {
</body>
</html>
<script type="text/javaScript" language="javascript">
var pdfDoc = null;
var pageNum = 1;
var pageRendering = false;
var pageNumPending = null;
var scale = 1.4;
var canvas = document.getElementById('the-canvas');
var ctx = canvas.getContext('2d');
/* var url = '/cmm/fms/FileDown.do?atchFileId=FILE_000000000019061&fileSn=0'; */
// var url = '/usr/local/tomcat/file/sht/pdf/2ccbb16e-62df-48c0-bbb1-3b6559bd4c36.pdf';
var url = '${pdfPath}';
<script type="text/javaScript" language="javascript">
var pdfDoc = null;
var pageNum = 1;
var pageRendering = false;
var pageNumPending = null;
var scale = 1.4;
var canvas = document.getElementById('the-canvas');
var ctx = canvas.getContext('2d');
/* var url = '/cmm/fms/FileDown.do?atchFileId=FILE_000000000019061&fileSn=0'; */
// var url = '/usr/local/tomcat/file/sht/pdf/2ccbb16e-62df-48c0-bbb1-3b6559bd4c36.pdf';
var url = '${pdfPath}';
/**
* Get page info from document, resize canvas accordingly, and render page.
* @param num Page number.
*/
function renderPage(num) {
pageRendering = true;
// Using promise to fetch the page
pdfDoc.getPage(num).then(function(page) {
var viewport = page.getViewport({scale: scale});
canvas.height = viewport.height;
canvas.width = viewport.width;
/**
* Get page info from document, resize canvas accordingly, and render page.
* @param num Page number.
*/
function renderPage(num) {
pageRendering = true;
// Using promise to fetch the page
pdfDoc.getPage(num).then(function(page) {
var viewport = page.getViewport({scale: scale});
canvas.height = viewport.height;
canvas.width = viewport.width;
// Render PDF page into canvas context
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
var renderTask = page.render(renderContext);
// Render PDF page into canvas context
var renderContext = {
canvasContext: ctx,
viewport: viewport
};
var renderTask = page.render(renderContext);
// Wait for rendering to finish
renderTask.promise.then(function() {
pageRendering = false;
if (pageNumPending !== null) {
// New page rendering is pending
renderPage(pageNumPending);
pageNumPending = null;
}
});
});
// Wait for rendering to finish
renderTask.promise.then(function() {
pageRendering = false;
if (pageNumPending !== null) {
// New page rendering is pending
renderPage(pageNumPending);
pageNumPending = null;
}
});
});
// Update page counters
document.getElementById('page_num').textContent = num;
}
// Update page counters
document.getElementById('page_num').textContent = num;
}
/**
* If another page rendering in progress, waits until the rendering is
* finised. Otherwise, executes rendering immediately.
*/
function queueRenderPage(num) {
if (pageRendering) {
pageNumPending = num;
} else {
renderPage(num);
}
}
/**
* If another page rendering in progress, waits until the rendering is
* finised. Otherwise, executes rendering immediately.
*/
function queueRenderPage(num) {
if (pageRendering) {
pageNumPending = num;
} else {
renderPage(num);
}
}
/**
* Displays previous page.
*/
function onPrevPage() {
if (pageNum <= 1) {
return;
}
pageNum--;
queueRenderPage(pageNum);
}
document.getElementById('prev').addEventListener('click', onPrevPage);
/**
* Displays previous page.
*/
function onPrevPage() {
if (pageNum <= 1) {
return;
}
pageNum--;
queueRenderPage(pageNum);
}
document.getElementById('prev').addEventListener('click', onPrevPage);
/**
* Displays next page.
*/
function onNextPage() {
if (pageNum >= pdfDoc.numPages) {
return;
}
pageNum++;
queueRenderPage(pageNum);
}
document.getElementById('next').addEventListener('click', onNextPage);
/**
* Asynchronously downloads PDF.
*/
pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
pdfDoc = pdfDoc_;
document.getElementById('page_count').textContent = pdfDoc.numPages;
/**
* Displays next page.
*/
function onNextPage() {
if (pageNum >= pdfDoc.numPages) {
return;
}
pageNum++;
queueRenderPage(pageNum);
}
document.getElementById('next').addEventListener('click', onNextPage);
/**
* Asynchronously downloads PDF.
*/
pdfjsLib.getDocument(
{
url: url,
cMapUrl: '/js/pdfjs-3.11.174/web/cmaps/',
cMapPacked: true
}
).promise.then(function(pdfDoc_) {
pdfDoc = pdfDoc_;
document.getElementById('page_count').textContent = pdfDoc.numPages;
// Initial/first page rendering
renderPage(pageNum);
});
</script>
// Initial/first page rendering
renderPage(pageNum);
});
</script>

View File

@ -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('<br/>').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('<br/>').join("\r\n");
$("#rejectReason").html(spMemo);
}
</script>
</head>
<body>
@ -113,20 +130,18 @@ function authYnC() {
<th>반려문구</th>
<td>
<c:if test="${mjPhoneMemberVO.authYn eq 'H'}">
<select id="changeWord" name="changeWord">
<select id="changeWord" name="changeWord" onchange="fnRejectResonInput();">
<option value="">직접입력</option>
<option value='[문자온] 일반전화 발신번호 등록을 위해서는 "통신서비스이용증명원"이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>개인(본인 일반전화)</option>
<option value='[문자온] 타인의 일반전화 발신번호 등록을 위해서는 "통신서비스이용증명원", "발신번호 명의자의 위임장", "대리인 신분증 사본(문자온에 가입하신 대리인의 신분증, 주민번호 뒷자리 마스킹 처리)"이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>개인(타인 일반전화)</option>
<option value='[문자온] 타인 명의의 휴대폰 번호를 발신번호로 사용하실 경우 해당번호에 대한 "통신서비스이용증명원(타인 명의 본인의 휴대폰 인증 대체 가능)", "발신번호 명의자의 위임장", "대리인 신분증 사본(문자온에 가입하신 대리인의 신분증, 주민번호 뒷자리 마스킹 처리)"이 반드시 첨부되어야 됩니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>개인(타인 휴대폰)</option>
<option value='[문자온] 개인회원이 회사 명의의 일반전화 또는 회사 명의의 휴대폰 발신번호를 등록하기 위해서는 "통신서비스이용증명원", "사업자등록증", "재직증명서(문자온 회원 가입자가 사업자등록증 상의 대표자가 아닌 경우에 한함)"가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>개인(회사 일반전화 또는 회사 휴대폰, 재직증명가능)</option>
<option value='[문자온] 개인회원 중 재직증명서 제출이 불가한 자가(가족, 자원봉사자 등) 회사 명의의 일반전화 또는 회사 명의의 휴대폰 발신번호를 등록하기 위해서는 "통신서비스이용증명원", "발신번호 명의업체의 사업자등록증", "발신번호 명의자의 위임장", "대리인 신분증 사본(문자온에 가입하신 대리인의 신분증, 주민번호 뒷자리 마스킹 처리)"이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다. '>개인(회사 일반전화 또는 회사 휴대폰, 재직증명불가)</option>
<option value='[문자온] 기업의 일반전화 발신번호 등록을 위해서는 "통신서비스이용증명원"이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>기업(회사 명의 일반전화)</option>
<option value='[문자온] 기업회원의 전화번호 중 직원명의로 가입된 일반전화의 발신번호 등록을 위해서는 "통신서비스이용증명원", "재직증명서류(재직증명서, 4대보험 가입증명서 등)"가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>기업(직원 명의 일반전화)</option>
<option value='[문자온] 기업 재직 직원명의의 휴대폰 발신번호를 등록하기 위해서는 "통신서비스이용증명원(직원 명의 본인의 휴대폰 인증 대체 가능)", "재직증명서류(재직증명서, 4대보험 가입증명서 등)"가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>기업(직원 명의 휴대폰)</option>
<option value='[문자온] 기업 자사 명의 외 타사 일반전화 및 타사 명의의 휴대폰 발신번호 등록을 위해서는 "거래관계확인서(계약서, 세금계산서 등)", "발신번호 명의업체의 사업자등록증", "대리인 신분증 사본(문자온에 가입하신 대리인의 신분증, 주민번호 뒷자리 마스킹 처리)", "발신번호 명의업체의 위임장", "통신서비스이용증명원"이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>기업(타사 일반전화 또는 타사 휴대폰)</option>
<option value='[문자온] 기업 자사 명의 외 타사 일반전화 및 타사 명의의 휴대폰 발신번호 등록을 위해서는 "거래관계확인서(계약서, 세금계산서 등)", "발신번호 명의업체의 사업자등록증", "대리인 신분증 사본(문자온에 가입하신 대리인의 신분증, 주민번호 뒷자리 마스킹 처리)", "발신번호 명의업체의 위임장", "통신서비스이용증명원", "재직증명서류(재직증명서, 4대보험 가입증명서 등)"가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다.'>기업(타사 직원 일반전화 또는 타사 직원 휴대폰)</option>
<option value='[문자온] 본인 명의의 일반전화 발신번호 등록을 위해서는 “통신서비스이용증명원”이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>개인(본인 일반전화)</option>
<option value='[문자온] 타인 명의의 일반전화 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원”, “발신번호 명의자의 위임장“, “대리인 신분증 사본(문자온 가입자 신분증, 주민번호 뒷자리 마스킹 처리)”이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>개인(타인 일반전화)</option>
<option value='[문자온] 타인 명의의 휴대전화 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원(발신번호 명의자 휴대폰 인증 대체 가능)”, “발신번호 명의자의 위임장“, “대리인 신분증 사본(문자온 가입자 신분증, 주민번호 뒷자리 마스킹 처리)”이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>개인(타인 휴대폰)</option>
<option value='[문자온] 개인회원이 회사 명의의 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원”, “사업자등록증“, “재직증명서(문자온 가입자가 사업자등록증 상 대표자가 아닌 경우)”가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>개인(회사 일반전화 또는 회사 휴대폰, 재직증명가능)</option>
<option value='[문자온] 개인회원 중 재직증명서 제출이 불가한 자가(가족, 자원봉사자 등) 회사 명의의 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원“, “ 발신번호 명의업체의 사업자등록증“, “발신번호 명의업체의 위임장“, “대리인 신분증 사본(문자온 가입자 신분증, 주민번호 뒷자리 마스킹 처리)”이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 승인 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>개인(회사 일반전화 또는 회사 휴대폰, 재직증명불가)</option>
<option value='[문자온] 회사 명의의 일반전화 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원”이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>기업(회사 명의 일반전화)</option>
<option value='[문자온] 회사 직원 명의의 일반전화 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원”, “재직증명서류”가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>기업(직원 명의 일반전화)</option>
<option value='[문자온] 회사 직원 명의의 휴대전화 발신번호 등록을 위해서는 “발신번호에 대한 통신서비스이용증명원(발신번호 명의자 휴대폰 인증 대체 가능)”, “재직증명서류”가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>기업(직원 명의 휴대폰)</option>
<option value='[문자온] 타사 명의의 발신번호 등록을 위해서는 “발신번호 명의업체의 사업자등록증“, “발신번호에 대한 통신서비스이용증명원”, “발신번호 명의업체의 위임장“, “대리인 신분증 사본(문자온 가입자 신분증, 주민번호 뒷자리 마스킹 처리)“이 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>기업(타사 일반전화 또는 타사 휴대폰)</option>
<option value='[문자온] 타사 직원 명의의 발신번호 등록을 위해서는 “타사 사업자등록증과 직원의 재직증명서류“, “타사 직원의 통신서비스이용증명원(휴대폰 인증 대체 가능)”, “위임장(타사직원->문자온 가입자)“, “대리인 신분증 사본(문자온 가입자 신분증, 주민번호 뒷자리 마스킹 처리)“가 반드시 첨부되어야 합니다. 해당 서류 첨부(문자온 로그인-마이페이지-발신번호관리 메뉴-서류제출-파일 등록)하여 재신청해 주시면 빠른 심사 도와드리겠습니다. <br/>*통신서비스이용증명원 발급 안내 : 이동통신사 고객센터 또는 홈페이지 통해 발급 가능'>기업(타사 직원 일반전화 또는 타사 직원 휴대폰)</option>
</select>
</c:if>
</td>

View File

@ -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="<c:url value='/uss/ion/pay/PayList.do'/>";
form.submit();
}
function fnGoPayRefundList(refundType, refundDate){
var form = document.payRefParamForm;
form.searchCondition2.value = refundType;
form.searchStartDate.value= refundDate;
form.searchEndDate.value= refundDate;
form.action="<c:url value='/uss/ion/pay/RefundList.do'/>";
form.submit();
}
function payDayExcelDownload(){
var form = document.payExcelDwnForm;
$('#excelNtceBgnde').val($('#ntceBgndeYYYMMDD').val()) ;
$('#excelNtceEndde').val($('#ntceEnddeYYYMMDD').val()) ;
form.action="<c:url value='/uss/ion/pay/payDayChartExcelDownload.do'/>";
form.submit();
}
</script>
<style>
.calBtn {
@ -169,34 +207,28 @@ function fnSetCalMonth(val) {
</div>
<div class="listTop">
<p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건</p>
<div style="float: right;">
카드 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtCardSumTot}" pattern="#,###" /></span>원,
휴대폰 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtCellSumTot}" pattern="#,###" /></span>원,
이체 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtBankSumTot}" pattern="#,###" /></span>원,
전용 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtVbankSumTot}" pattern="#,###" /></span>원,
간편 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtSpaySumTot}" pattern="#,###" /></span>원,
환불 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtRefundSumTot}" pattern="#,###" /></span>원,
합계 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtTotSumTot}" pattern="#,###" /></span>원
<%--
&nbsp;
<select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);" style="height: 30px !important; min-width: 40px !important;">
<div class="rightWrap">
<p style="vertical-align: bottom; margin-right:10px; margin-bottom:4px;">&nbsp;(단위 : 원)</p>
<input type="button" class="excelBtn" onclick="javascript:payDayExcelDownload();" style="cursor: pointer;" />
<select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);">
<option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option>
<option value='20' <c:if test="${searchVO.pageUnit == '20'}">selected</c:if>>20줄</option>
<option value='30' <c:if test="${searchVO.pageUnit == '30'}">selected</c:if>>30줄</option>
<option value='50' <c:if test="${searchVO.pageUnit == '50'}">selected</c:if>>50줄</option>
<option value='100' <c:if test="${searchVO.pageUnit == '100'}">selected</c:if>>100줄</option>
</select>
--%>
</div>
</div>
<div class="tableWrap">
<table class="tbType1">
<colgroup>
<col style="width: auto;">
<col style="width: 12.5%">
<col style="width: 12.5%">
<col style="width: 12.5%">
<col style="width: 12.5%">
<col style="width: 12.5%">
<col style="width: 12.5%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 13%">
</colgroup>
<thead>
@ -207,6 +239,7 @@ function fnSetCalMonth(val) {
<th>즉시이체<input type="button" class="sort sortBtn" id="sort_amtBankSum"></th>
<th>전용계좌<input type="button" class="sort sortBtn" id="sort_amtVbankSum"></th>
<th>간편결제<input type="button" class="sort sortBtn" id="sort_amtSpaySum"></th>
<th>후불결제<input type="button" class="sort sortBtn" id="sort_amtAfterPaySum"></th>
<th>환불<input type="button" class="sort sortBtn" id="sort_amtRefundSum"></th>
<th>합계(VAT 포함)<input type="button" class="sort sortBtn" id="sort_amtTotSum"></th>
</tr>
@ -215,7 +248,7 @@ function fnSetCalMonth(val) {
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td><c:out value="${result.regDate}"/></td>
<td>
<td <c:if test="${result.amtCardCnt > 0}"> onclick="fnGoPayList('CARD', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtCardSum}" pattern="#,###" />
<c:choose>
<c:when test="${result.amtCardCnt > 0}">
@ -223,7 +256,7 @@ function fnSetCalMonth(val) {
</c:when>
</c:choose>
</td>
<td>
<td <c:if test="${result.amtCellCnt > 0}"> onclick="fnGoPayList('CELLPHONE', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtCellSum}" pattern="#,###" />
<c:choose>
<c:when test="${result.amtCellCnt > 0}">
@ -231,7 +264,7 @@ function fnSetCalMonth(val) {
</c:when>
</c:choose>
</td>
<td>
<td <c:if test="${result.amtBankCnt > 0}"> onclick="fnGoPayList('BANK', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtBankSum}" pattern="#,###" />
<c:choose>
<c:when test="${result.amtBankCnt > 0}">
@ -239,7 +272,7 @@ function fnSetCalMonth(val) {
</c:when>
</c:choose>
</td>
<td>
<td <c:if test="${result.amtVbankCnt > 0}"> onclick="fnGoPayList('VBANK', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtVbankSum}" pattern="#,###" />
<c:choose>
<c:when test="${result.amtVbankCnt > 0}">
@ -247,7 +280,7 @@ function fnSetCalMonth(val) {
</c:when>
</c:choose>
</td>
<td>
<td <c:if test="${result.amtSpayCnt > 0}"> onclick="fnGoPayList('SPAY', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtSpaySum}" pattern="#,###" />
<c:choose>
<c:when test="${result.amtSpayCnt > 0}">
@ -255,7 +288,15 @@ function fnSetCalMonth(val) {
</c:when>
</c:choose>
</td>
<td>
<td <c:if test="${result.amtAfterPayCnt > 0}"> onclick="fnGoPayList('AFTERPAY', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtAfterPaySum}" pattern="#,###" />
<c:choose>
<c:when test="${result.amtAfterPayCnt > 0}">
(<fmt:formatNumber value="${result.amtAfterPayCnt}" pattern="#,###" />)
</c:when>
</c:choose>
</td>
<td <c:if test="${result.amtRefundCnt > 0}"> onclick="fnGoPayRefundList('1', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtRefundSum}" pattern="#,###" />
<c:choose>
<c:when test="${result.amtRefundCnt > 0}">
@ -273,8 +314,38 @@ function fnSetCalMonth(val) {
</td>
</tr>
</c:forEach>
<tr>
<td>
합&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;계
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtCardSumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtCellSumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtBankSumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtVbankSumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtSpaySumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtAfterPaySumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtRefundSumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtTotSumTot}" pattern="#,###" /></span>
</td>
</tr>
<c:if test="${empty resultList}">
<tr><td colspan="8"><spring:message code="common.nodata.msg" /></td></tr>
<tr><td colspan="9"><spring:message code="common.nodata.msg" /></td></tr>
</c:if>
</tbody>
</table>
@ -294,5 +365,27 @@ function fnSetCalMonth(val) {
</div>
</form>
</compress:html>
<form id="payParamForm" name="payParamForm" method="post">
<input type="hidden" id="searchCondition2" name="searchCondition2" value=""/><!-- 결제방식 -->
<input type="hidden" id="searchCondition3" name="searchCondition3" value="1"/><!-- 결제상태 : 결제완료 -->
<input type="hidden" id="searchStartDate" name="searchStartDate" value=""/><!-- 결제검색 시작일자 -->
<input type="hidden" id="searchEndDate" name="searchEndDate" value=""/><!-- 결제검색 종료일자 -->
<input type="hidden" id="baseMenuNo" name="baseMenuNo" value="4520000"/><!-- 결제상세 메뉴 번호 -->
</form>
<form id="payRefParamForm" name="payRefParamForm" method="post">
<input type="hidden" id="searchCondition2" name="searchCondition2" value=""/><!-- 구분방식 -->
<input type="hidden" id="searchRefundStatus" name="searchRefundStatus" value="3"/><!-- 처리상태 : 처리완료 -->
<input type="hidden" id="searchStartDate" name="searchStartDate" value=""/><!-- 환불검색 시작일자 -->
<input type="hidden" id="searchEndDate" name="searchEndDate" value=""/><!-- 환불검색 종료일자 -->
<input type="hidden" id="baseMenuNo" name="baseMenuNo" value="4550000"/><!-- 결제상세 메뉴 번호 -->
</form>
<form id="payExcelDwnForm" name="payExcelDwnForm" method="post">
<input type="hidden" name="ntceBgnde" id="excelNtceBgnde" value="<c:out value="${searchVO.ntceBgnde}" />">
<input type="hidden" name="ntceEndde" id="excelNtceEndde" value="<c:out value="${searchVO.ntceEndde}" />">
</form>
</body>
</html>

View File

@ -311,8 +311,8 @@ function fnSmishingUpdate(flag, id) {
<input type="button" class="excelBtn" onclick="javascript:sendMsgExcelDownload();" style="cursor: pointer;" />
<select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);">
<option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option>
<option value='20' <c:if test="${searchVO.pageUnit == '20'}">selected</c:if>>20줄</option>
<option value='30' <c:if test="${searchVO.pageUnit == '30'}">selected</c:if>>30줄</option>
<option value='50' <c:if test="${searchVO.pageUnit == '50'}">selected</c:if>>50줄</option>
<option value='100' <c:if test="${searchVO.pageUnit == '100'}">selected</c:if>>100줄</option>
</select>
</div>
</div>

View File

@ -58,6 +58,80 @@ $(document).ready(function(){
$('#ntceBgnde').val($('#searchYear option:selected').val());
listForm.submit();
}
function fnGoPayList(payType, payDate){
var form = document.payParamForm;
//월의 시작/마지막일 받아오기
var FLDate = getFLDate(payDate);
form.searchCondition2.value = payType;
form.searchStartDate.value= FLDate[0];
form.searchEndDate.value= FLDate[1];
console.log(form.searchCondition2.value);
form.action="<c:url value='/uss/ion/pay/PayList.do'/>";
form.submit();
}
function fnGoPayRefundList(refundType, refundDate){
var form = document.payRefParamForm;
//월의 시작/마지막일 받아오기
var FLDate = getFLDate(refundDate);
form.searchCondition2.value = refundType;
form.searchStartDate.value= FLDate[0];
form.searchEndDate.value= FLDate[1];
form.action="<c:url value='/uss/ion/pay/RefundList.do'/>";
form.submit();
}
function payMonthExcelDownload(){
var frm = document.payExcelDwnForm;
$('#excelNtceBgnde').val($('#searchYear option:selected').val());
frm.action = "<c:url value='/uss/ion/pay/payMonthChartExcelDownload.do'/>";
frm.submit();
}
//날짜 월의 첫번째 날짜와 마지막 날짜 생성하기
function getFLDate(date){
var splitDate = [];
splitDate = date.split("-");
var year = splitDate[0];
var month = Number(splitDate[1]-1);
//해당월의 첫째날 구하기
var firstDate = new Date(year, Number(month), 1);
//해당 월의 마지막날 구하기
var lastDate = new Date(year, Number(month)+1, 0);
//날짜 포맷 변환하기
var fDate = firstDate.getFullYear() +
"-" + ((firstDate.getMonth() + 1) > 9 ? (firstDate.getMonth() + 1).toString() : "0" + (firstDate.getMonth() + 1)) +
"-" + (firstDate.getDate() > 9 ? firstDate.getDate().toString() : "0" + firstDate.getDate().toString());
var lDate = lastDate.getFullYear() +
"-" + ((lastDate.getMonth() + 1) > 9 ? (lastDate.getMonth() + 1).toString() : "0" + (lastDate.getMonth() + 1)) +
"-" + (lastDate.getDate() > 9 ? lastDate.getDate().toString() : "0" + lastDate.getDate().toString());
var rtnDate = [];
rtnDate[0] = fDate;
rtnDate[1] = lDate;
return rtnDate;
}
</script>
<style>
@ -117,14 +191,14 @@ $(document).ready(function(){
<div class="listTop">
<p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건</p>
<div style="float: right;">
카드 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtCardSumTot}" pattern="#,###" /></span>원,
휴대폰 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtCellSumTot}" pattern="#,###" /></span>원,
이체 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtBankSumTot}" pattern="#,###" /></span>원,
전용 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtVbankSumTot}" pattern="#,###" /></span>원,
간편 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtSpaySumTot}" pattern="#,###" /></span>원,
환불 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtRefundSumTot}" pattern="#,###" /></span>원,
합계 : <span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtTotSumTot}" pattern="#,###" /></span>원
<div class="rightWrap">
<p style="vertical-align: bottom; margin-right:10px; margin-bottom:4px;">&nbsp;(단위 : 원)</p>
<input type="button" class="excelBtn" onclick="javascript:payMonthExcelDownload();" style="cursor: pointer;" />
<%-- <select name="pageUnit" id="pageUnit" class="select" title="검색조건선택" onchange="linkPage(1);">
<option value='10' <c:if test="${searchVO.pageUnit == '10' or searchVO.pageUnit == ''}">selected</c:if>>10줄</option>
<option value='50' <c:if test="${searchVO.pageUnit == '50'}">selected</c:if>>50줄</option>
<option value='100' <c:if test="${searchVO.pageUnit == '100'}">selected</c:if>>100줄</option>
</select> --%>
</div>
</div>
@ -133,12 +207,13 @@ $(document).ready(function(){
<table class="tbType1">
<colgroup>
<col style="width: auto;">
<col style="width: 12.5%">
<col style="width: 12.5%">
<col style="width: 12.5%">
<col style="width: 12.5%">
<col style="width: 12.5%">
<col style="width: 12.5%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 11%">
<col style="width: 13%">
</colgroup>
<thead>
@ -149,6 +224,7 @@ $(document).ready(function(){
<th>즉시이체<input type="button" class="sort sortBtn" id="sort_amtBankSum"></th>
<th>전용계좌<input type="button" class="sort sortBtn" id="sort_amtVbankSum"></th>
<th>간편결제<input type="button" class="sort sortBtn" id="sort_amtSpaySum"></th>
<th>후불결제<input type="button" class="sort sortBtn" id="sort_amtAfterPaySum"></th>
<th>환불<input type="button" class="sort sortBtn" id="sort_amtRefundSum"></th>
<th>합계(VAT 포함)<input type="button" class="sort sortBtn" id="sort_amtTotSum"></th>
</tr>
@ -156,13 +232,30 @@ $(document).ready(function(){
<tbody>
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td><c:out value="${result.regDate}"/></td>
<td><fmt:formatNumber value="${result.amtCardSum}" pattern="#,###" /></td>
<td><fmt:formatNumber value="${result.amtCellSum}" pattern="#,###" /></td>
<td><fmt:formatNumber value="${result.amtBankSum}" pattern="#,###" /></td>
<td><fmt:formatNumber value="${result.amtVbankSum}" pattern="#,###" /></td>
<td><fmt:formatNumber value="${result.amtSpaySum}" pattern="#,###" /></td>
<td><fmt:formatNumber value="${result.amtRefundSum}" pattern="#,###" /></td>
<td>
<c:out value="${result.regDate}"/>
</td>
<td <c:if test="${result.amtCardSum > 0}"> onclick="fnGoPayList('CARD', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtCardSum}" pattern="#,###" />
</td>
<td <c:if test="${result.amtCellSum > 0}"> onclick="fnGoPayList('CELLPHONE', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtCellSum}" pattern="#,###" />
</td>
<td <c:if test="${result.amtBankSum > 0}"> onclick="fnGoPayList('BANK', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtBankSum}" pattern="#,###" />
</td>
<td <c:if test="${result.amtVbankSum > 0}"> onclick="fnGoPayList('VBANK', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtVbankSum}" pattern="#,###" />
</td>
<td <c:if test="${result.amtSpaySum > 0}"> onclick="fnGoPayList('SPAY', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtSpaySum}" pattern="#,###" />
</td>
<td <c:if test="${result.amtAfterPaySum > 0}"> onclick="fnGoPayList('AFTERPAY', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtAfterPaySum}" pattern="#,###" />
</td>
<td <c:if test="${result.amtRefundSum >= 0}"> onclick="fnGoPayRefundList('1', '<c:out value="${result.regDate}"/>');" style="cursor:pointer;" </c:if> >
<fmt:formatNumber value="${result.amtRefundSum}" pattern="#,###" />
</td>
<td>
<c:choose>
<c:when test="${result.amtTotSum > 0}">
@ -175,8 +268,37 @@ $(document).ready(function(){
</td>
</tr>
</c:forEach>
<tr>
<td>
합&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;계
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtCardSumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtCellSumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtBankSumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtVbankSumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtSpaySumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtAfterPaySumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtRefundSumTot}" pattern="#,###" /></span>
</td>
<td>
<span class="tType5 c_456ded"><fmt:formatNumber value="${mjonPayVO.amtTotSumTot}" pattern="#,###" /></span>
</td>
</tr>
<c:if test="${empty resultList}">
<tr><td colspan="8"><spring:message code="common.nodata.msg" /></td></tr>
<tr><td colspan="9"><spring:message code="common.nodata.msg" /></td></tr>
</c:if>
</tbody>
</table>
@ -185,5 +307,25 @@ $(document).ready(function(){
</div>
</form>
</compress:html>
<form id="payParamForm" name="payParamForm" method="post">
<input type="hidden" id="searchCondition2" name="searchCondition2" value=""/><!-- 결제방식 -->
<input type="hidden" id="searchCondition3" name="searchCondition3" value="1"/><!-- 결제상태 : 결제완료 -->
<input type="hidden" id="searchStartDate" name="searchStartDate" value=""/><!-- 결제검색 시작일자 -->
<input type="hidden" id="searchEndDate" name="searchEndDate" value=""/><!-- 결제검색 종료일자 -->
<input type="hidden" id="baseMenuNo" name="baseMenuNo" value="4520000"/><!-- 결제상세 메뉴 번호 -->
</form>
<form id="payRefParamForm" name="payRefParamForm" method="post">
<input type="hidden" id="searchCondition2" name="searchCondition2" value=""/><!-- 구분방식 -->
<input type="hidden" id="searchRefundStatus" name="searchRefundStatus" value="3"/><!-- 처리상태 : 처리완료 -->
<input type="hidden" id="searchStartDate" name="searchStartDate" value=""/><!-- 환불검색 시작일자 -->
<input type="hidden" id="searchEndDate" name="searchEndDate" value=""/><!-- 환불검색 종료일자 -->
<input type="hidden" id="baseMenuNo" name="baseMenuNo" value="4550000"/><!-- 결제상세 메뉴 번호 -->
</form>
<form id="payExcelDwnForm" name="payExcelDwnForm" method="post">
<input type="hidden" name="ntceBgnde" id="excelNtceBgnde" value="<c:out value="${searchVO.ntceBgnde}" />">
</form>
</body>
</html>

View File

@ -163,12 +163,12 @@ function fnSelectMber(mberId) {
</select>
<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
<div class="calendar_box" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.searchStartDate);">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="searchStartDate" id="searchStartDate" size="4" maxlength="4" readonly="" value="<c:out value='${searchVO.searchStartDate}'/>">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="searchStartDate" id="searchStartDate" size="4" maxlength="4" readonly="" value="<c:out value='${RefundVO.searchStartDate}'/>">
<input type="button" class="calBtn">
</div>
<span class="line">~</span>
<div class="calendar_box" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.searchEndDate);">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="searchEndDate" id="searchEndDate" size="4" maxlength="4" readonly="" value="<c:out value='${searchVO.searchEndDate}'/>">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="searchEndDate" id="searchEndDate" size="4" maxlength="4" readonly="" value="<c:out value='${RefundVO.searchEndDate}'/>">
<input type="button" class="calBtn">
</div>
</div>

View File

@ -963,15 +963,15 @@ function actionLogin() {
<ul>
<li>
<div class="img_box"><img src="/publish/images/content/junk_agency001.png" alt="SK telecom" /></div>
<a href="http://www.tworld.co.kr/normal.do?serviceId=S_PROD2001&viewId=V_PROD7070&prod_id=NA00002121&uCode=u1_2" target="_blank" rel="nosublink">T월드 문자 스팸필터링 바로가기</a>
<a href="http://www.tworld.co.kr/normal.do?serviceId=S_PROD2001&viewId=V_PROD7070&prod_id=NA00002121&uCode=u1_2" target="_blank" >T월드 문자 스팸필터링 바로가기</a>
</li>
<li>
<div class="img_box"><img src="/publish/images/content/junk_agency002.png" alt="olleh KT" /></div>
<a href="https://product.kt.com/wDic/productDetail.do?ItemCode=479" target="_blank" rel="nosublink">KT (안심)스팸차단 바로가기</a>
<a href="https://product.kt.com/wDic/productDetail.do?ItemCode=479" target="_blank" >KT (안심)스팸차단 바로가기</a>
</li>
<li>
<div class="img_box"><img src="/publish/images/content/junk_agency003.png" alt="LG U+" /></div>
<a href="https://www.lguplus.com/plan/addon/addon-call-msg/LRZ0000277" target="_blank" rel="nosublink">U+ 스팸차단 바로가기</a>
<a href="https://www.lguplus.com/plan/addon/addon-call-msg/LRZ0000277" target="_blank" >U+ 스팸차단 바로가기</a>
</li>
</ul>
</li>
@ -979,7 +979,7 @@ function actionLogin() {
<dl>
<dt><img src="/publish/images/content/junk_agency001_01.png" alt="T world" /></dt>
<dd>
<p>Tworld<a href="https://www.tworld.co.kr" target="_blank" rel="nosublink">(www.tworld.co.kr)</a> 홈페이지 접속 → 로그인 → [스팸필터링] 검색<br>→ 부가서비스 - 문자 스팸필터링 → 설정 → SMS인증 → 스팸차단 메시지 확인</p>
<p>Tworld<a href="https://www.tworld.co.kr" target="_blank" >(www.tworld.co.kr)</a> 홈페이지 접속 → 로그인 → [스팸필터링] 검색<br>→ 부가서비스 - 문자 스팸필터링 → 설정 → SMS인증 → 스팸차단 메시지 확인</p>
</dd>
</dl>
</li>
@ -987,7 +987,7 @@ function actionLogin() {
<dl>
<dt><img src="/publish/images/content/junk_agency002_01.png" alt="olleh O" /></dt>
<dd>
<p>KT<a href="https://www.kt.com/" target="_blank" rel="nosublink">(www.kt.com)</a> 홈페이지 접속 → 로그인 →[스팸차단서비스] 검색<br>→ 스팸차단서비스 → 스팸메시지함 → 스팸차단 메시지 확인</p>
<p>KT<a href="https://www.kt.com/" target="_blank" >(www.kt.com)</a> 홈페이지 접속 → 로그인 →[스팸차단서비스] 검색<br>→ 스팸차단서비스 → 스팸메시지함 → 스팸차단 메시지 확인</p>
</dd>
</dl>
</li>
@ -995,7 +995,7 @@ function actionLogin() {
<dl>
<dt><img src="/publish/images/content/junk_agency003_01.png" alt="LG U+" /></dt>
<dd>
<p>U+<a href="https://www.uplus.co.kr" target="_blank" rel="nosublink">(www.uplus.co.kr)</a> 홈페이지 접속 → 로그인 → [스팸차단] 검색<br>→ 부가서비스 - 스팸차단 → 스팸내역 조회 → SMS인증 → 스팸차단 메시지 확인</p>
<p>U+<a href="https://www.uplus.co.kr" target="_blank" >(www.uplus.co.kr)</a> 홈페이지 접속 → 로그인 → [스팸차단] 검색<br>→ 부가서비스 - 스팸차단 → 스팸내역 조회 → SMS인증 → 스팸차단 메시지 확인</p>
</dd>
</dl>
</li>
@ -1062,15 +1062,15 @@ function actionLogin() {
<ul>
<li>
<div class="img_box"><img src="/publish/images/content/junk_agency001.png" alt="SKT" /></div>
<a href="http://www.tworld.co.kr/normal.do?serviceId=S_PROD2001&viewId=V_PROD7070&prod_id=NA00004406&uCode=u1_2" target="_blank" rel="nosublink">T번호도용문자차단 바로가기</a>
<a href="http://www.tworld.co.kr/normal.do?serviceId=S_PROD2001&viewId=V_PROD7070&prod_id=NA00004406&uCode=u1_2" target="_blank" >T번호도용문자차단 바로가기</a>
</li>
<li>
<div class="img_box"><img src="/publish/images/content/junk_agency002.png" alt="KT" /></div>
<a href="https://product.kt.com/wDic/productDetail.do?ItemCode=1047" target="_blank" rel="nosublink">KT번호도용문자차단 바로가기</a>
<a href="https://product.kt.com/wDic/productDetail.do?ItemCode=1047" target="_blank" >KT번호도용문자차단 바로가기</a>
</li>
<li>
<div class="img_box"><img src="/publish/images/content/junk_agency003.png" alt="Uplus" /></div>
<a href="https://www.lguplus.com/plan/addon/addon-call-msg/LRZ0002297" target="_blank" rel="nosublink">U+ 번호도용문자차단 바로가기</a>
<a href="https://www.lguplus.com/plan/addon/addon-call-msg/LRZ0002297" target="_blank" >U+ 번호도용문자차단 바로가기</a>
</li>
</ul>
</li>
@ -1078,7 +1078,7 @@ function actionLogin() {
<dl>
<dt><img src="/publish/images/content/junk_agency001_01.png" alt="tworld" /></dt>
<dd>
<p>Tworld<a href="https://www.tworld.co.kr" target="_blank" rel="nosublink">(www.tworld.co.kr)</a> 홈페이지 접속 → 로그인<br>→ [번호도용문자차단] 검색 → 부가서비스 → 번호도용문자차단 → 해지</p>
<p>Tworld<a href="https://www.tworld.co.kr" target="_blank" >(www.tworld.co.kr)</a> 홈페이지 접속 → 로그인<br>→ [번호도용문자차단] 검색 → 부가서비스 → 번호도용문자차단 → 해지</p>
</dd>
</dl>
</li>
@ -1086,7 +1086,7 @@ function actionLogin() {
<dl>
<dt><img src="/publish/images/content/junk_agency002_01.png" alt="kt" /></dt>
<dd>
<p>KT<a href="https://www.kt.com" target="_blank" rel="nosublink">(www.kt.com)</a> 홈페이지 접속 → 로그인<br>→ [번호도용문자차단] 검색 → 부가서비스 → 번호도용문자차단 → 해지</p>
<p>KT<a href="https://www.kt.com" target="_blank" >(www.kt.com)</a> 홈페이지 접속 → 로그인<br>→ [번호도용문자차단] 검색 → 부가서비스 → 번호도용문자차단 → 해지</p>
</dd>
</dl>
</li>
@ -1094,7 +1094,7 @@ function actionLogin() {
<dl>
<dt><img src="/publish/images/content/junk_agency003_01.png" alt="LGuplus" /></dt>
<dd>
<p>U+<a href="https://www.uplus.co.kr" target="_blank" rel="nosublink">(www.uplus.co.kr)</a> 홈페이지 접속 → 로그인 → [번호도용문자차단] 검색<br>→ 부가서비스 → 번호도용문자차단 → 해지</p>
<p>U+<a href="https://www.uplus.co.kr" target="_blank" >(www.uplus.co.kr)</a> 홈페이지 접속 → 로그인 → [번호도용문자차단] 검색<br>→ 부가서비스 → 번호도용문자차단 → 해지</p>
</dd>
</dl>
</li>
@ -1127,7 +1127,7 @@ function actionLogin() {
<!-- skip 메뉴 -->
<div class="skip_menu">
<a href="#cont" title="본문 바로가기" class="contGo" rel="nosublink">본문 바로가기</a>
<a href="#cont" title="본문 바로가기" class="contGo" >본문 바로가기</a>
</div><!--// skip 메뉴 -->
<!-- 요금안내 top 배너 시작 -->
@ -1157,20 +1157,20 @@ function actionLogin() {
<ul class="quickMenuIn">
<!--
<li>
<a href="#" rel="nosublink"><i class="quick2"></i><span>카톡상담</span></a>
<a href="#" ><i class="quick2"></i><span>카톡상담</span></a>
<div class="hover_cont">카톡상담</div>
</li>
<li>
<a href="#" rel="nosublink"><i class="quick3"></i><span>원격지원</span></a>
<a href="#" ><i class="quick3"></i><span>원격지원</span></a>
<div class="hover_cont">원격지원</div>
</li>
-->
<li id="quickPayGuide">
<a href="/web/mjon/custom/selectMsgCustomView.do" rel="nosublink"><i class="quick4"></i><span>맞춤제작</span></a>
<a href="/web/mjon/custom/selectMsgCustomView.do" ><i class="quick4"></i><span>맞춤제작</span></a>
<div class="hover_cont">맞춤제작</div>
</li>
<li>
<a href="/web/mjon/addr/selectAddrList.do" rel="nosublink"><i class="quick10"></i><span>주소록 관리</span></a>
<a href="/web/mjon/addr/selectAddrList.do" ><i class="quick10"></i><span>주소록 관리</span></a>
<div class="hover_cont">주소록 관리</div>
</li>
<li>
@ -1182,25 +1182,25 @@ function actionLogin() {
<div class="hover_cont">엑셀 대량전송</div>
</li>
<li>
<a href="/web/api/intrdView.do" rel="nosublink"><i class="quick7"></i><span>문자연동</span></a>
<a href="/web/api/intrdView.do" ><i class="quick7"></i><span>문자연동</span></a>
<div class="hover_cont">문자연동</div>
</li>
<li>
<a href="/web/member/pay/PayList.do" rel="nosublink"><i class="quick8"></i><span>결제관리</span></a>
<a href="/web/member/pay/PayList.do" ><i class="quick8"></i><span>결제관리</span></a>
<div class="hover_cont">결제관리</div>
</li>
<!--
<li>
<a href="/web/member/pay/BillPub.do" rel="nosublink"><i class="quick9"></i><span>계산서/영수증</span></a>
<a href="/web/member/pay/BillPub.do" ><i class="quick9"></i><span>계산서/영수증</span></a>
<div class="hover_cont">계산서/영수증</div>
</li>
-->
<li>
<a href="/web/member/pay/BillPub.do" rel="nosublink"><i class="quick9"></i><span>세금계산서</span></a>
<a href="/web/member/pay/BillPub.do" ><i class="quick9"></i><span>세금계산서</span></a>
<div class="hover_cont">세금계산서</div>
</li>
<li class="cscenter">
<a href="/web/cop/bbs/NoticeList.do" rel="nosublink"><i class="quick11"></i><span>고객센터</span></a>
<a href="/web/cop/bbs/NoticeList.do" ><i class="quick11"></i><span>고객센터</span></a>
<div class="hover_cont">
<div class="title">고객센터</div>
<div class="number">1551-8011</div>
@ -1211,15 +1211,15 @@ function actionLogin() {
<li>· 토, 일요일 및 법정공휴일 휴무</li>
</ul>
<div class="cskakao">
<a href="http://pf.kakao.com/_PxoTtb/chat" class="kakao" target="_blank" rel="nosublink">카톡 상담</a>
<a href="javascript:void(0);" class="remote" onclick="remotePop('https://939.co.kr/munjaon/');" rel="nosublink">원격지원</a>
<a href="http://pf.kakao.com/_PxoTtb/chat" class="kakao" target="_blank" >카톡 상담</a>
<a href="javascript:void(0);" class="remote" onclick="remotePop('https://939.co.kr/munjaon/');" >원격지원</a>
</div>
</div>
</li>
</ul>
<button type="button" class="goTop" title="맨 위로 이동">TOP<i></i></button>
</div>
<div class="quick_kakaobtn<c:if test="${fn:contains(pageContext.request.requestURL , 'web/main/mainPage.do')}"> main</c:if>"><a href="http://pf.kakao.com/_PxoTtb/chat" target="_blank" rel="nosublink">카카오톡 상담</a></div>
<div class="quick_kakaobtn<c:if test="${fn:contains(pageContext.request.requestURL , 'web/main/mainPage.do')}"> main</c:if>"><a href="http://pf.kakao.com/_PxoTtb/chat" target="_blank" >카카오톡 상담</a></div>
</div><!--// quick 메뉴 -->
<!-- header 영역 -->
@ -1282,16 +1282,16 @@ function actionLogin() {
<div class="header_top">
<div class="inner">
<ul class="menu_left">
<li><a href="#" id="favorite" rel="nosublink"><i class="hdTop_fav"></i>즐겨찾기추가</a></li>
<li><a href="<c:out value='/web/user/mberInfoIndex.do'/>" rel="nosublink"><i class="hdTop_mypage"></i>마이페이지</a></li>
<li><a href="<c:out value='/web/cop/bbs/NoticeList.do'/>" rel="nosublink"><i class="hdTop_center"></i>고객센터</a></li>
<li><a href="#" id="favorite" ><i class="hdTop_fav"></i>즐겨찾기추가</a></li>
<li><a href="<c:out value='/web/user/mberInfoIndex.do'/>" ><i class="hdTop_mypage"></i>마이페이지</a></li>
<li><a href="<c:out value='/web/cop/bbs/NoticeList.do'/>" ><i class="hdTop_center"></i>고객센터</a></li>
</ul>
<ul class="menu_right">
<li><a href="#" onclick="location.href='/web/member/pay/PayView.do'" rel="nosublink">충전하기</a></li>
<li class="SortLine"><a href="/web/pay/PayGuide.do" rel="nosublink">요금안내</a></li>
<li class="SortLine"><a href="/web/cop/bbs/FaqList.do" rel="nosublink">이용안내</a></li>
<li class="SortLine"><a href="/web/cop/bbs/QnaList.do" rel="nosublink">1:1 문의</a></li>
<li class="SortLine"><a href="/web/cop/bbs/SuggestList.do" rel="nosublink">불편신고</a></li>
<li><a href="#" onclick="location.href='/web/member/pay/PayView.do'" >충전하기</a></li>
<li class="SortLine"><a href="/web/pay/PayGuide.do" >요금안내</a></li>
<li class="SortLine"><a href="/web/cop/bbs/FaqList.do" >이용안내</a></li>
<li class="SortLine"><a href="/web/cop/bbs/QnaList.do" >1:1 문의</a></li>
<li class="SortLine"><a href="/web/cop/bbs/SuggestList.do" >불편신고</a></li>
</ul>
</div>
</div><!-- header top 영역 -->
@ -1322,26 +1322,26 @@ function actionLogin() {
<c:choose>
<c:when test="${fn:contains(resultListOne.url, '/web/mjon/msgcampain/selectMsgDataView.do')}">
<c:if test="${userCandidateYn eq 'Y'}">
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" rel="nosublink">${resultListOne.menuNm}</a>
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" >${resultListOne.menuNm}</a>
</c:if>
</c:when>
<c:when test="${fn:contains(resultListOne.url, '/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do')}">
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" rel="nosublink">${resultListOne.menuNm}</a>
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" >${resultListOne.menuNm}</a>
</c:when>
<c:when test="${fn:contains(resultListOne.url, '/web/mjon/fax/faxDataView.do')}">
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" rel="nosublink">${resultListOne.menuNm}</a>
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" >${resultListOne.menuNm}</a>
</c:when>
<c:when test="${fn:contains(resultListOne.url, '/web/mjon/custom/selectMsgCustomView.do')}">
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" rel="nosublink">${resultListOne.menuNm}</a>
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" >${resultListOne.menuNm}</a>
</c:when>
<c:when test="${fn:contains(resultListOne.url, '/web/mjon/addr/selectAddrList.do')}">
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" rel="nosublink">${resultListOne.menuNm}</a>
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" >${resultListOne.menuNm}</a>
</c:when>
<c:when test="${fn:contains(resultListOne.url, '/web/mjon/reservmsg/selectReservMsgView.do')}">
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" rel="nosublink">${resultListOne.menuNm}</a>
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" >${resultListOne.menuNm}</a>
</c:when>
<c:when test="${fn:contains(resultListOne.url, '/web/member/pay/PayList.do')}">
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" rel="nosublink">${resultListOne.menuNm}</a>
<a href="${empty resultListOne.url ? '#' : resultListOne.url }" >${resultListOne.menuNm}</a>
</c:when>
<c:otherwise>
<a href="${empty resultListOne.url ? '#' : resultListOne.url }">${resultListOne.menuNm}</a>
@ -1390,17 +1390,17 @@ function actionLogin() {
<p><i></i>인기검색어</p>
<!--
<ul class="popular_tag">
<li onClick="javascript:fnFavoritMsgSearch('5월'); return false;" rel="nosublink"><a href="#">#5월</a></li>
<li onClick="javascript:fnFavoritMsgSearch('경조사'); return false;" rel="nosublink"><a href="#">#경조사</a></li>
<li onClick="javascript:fnFavoritMsgSearch('사랑'); return false;" rel="nosublink"><a href="#">#사랑</a></li>
<li onClick="javascript:fnFavoritMsgSearch('봄'); return false;" rel="nosublink"><a href="#">#봄</a></li>
<li onClick="javascript:fnFavoritMsgSearch('5월'); return false;" ><a href="#">#5월</a></li>
<li onClick="javascript:fnFavoritMsgSearch('경조사'); return false;" ><a href="#">#경조사</a></li>
<li onClick="javascript:fnFavoritMsgSearch('사랑'); return false;" ><a href="#">#사랑</a></li>
<li onClick="javascript:fnFavoritMsgSearch('봄'); return false;" ><a href="#">#봄</a></li>
</ul>
-->
<ul class="popular_tag">
<c:forEach var="favoritWord" items="${resultSearchWordList}" varStatus="status">
<li onClick="javascript:fnFavoritMsgSearch('${favoritWord.searchWord}'); return false;" rel="nosublink"><a href="#">#${favoritWord.searchWord}</a></li>
<li onClick="javascript:fnFavoritMsgSearch('${favoritWord.searchWord}'); return false;" ><a href="#">#${favoritWord.searchWord}</a></li>
</c:forEach>
</ul>
@ -1427,11 +1427,11 @@ function actionLogin() {
</dl>
<c:if test="${userCandidateYn eq 'Y' }">
<dl>
<dt><a href="<c:out value='/web/mjon/msgcampain/selectMsgDataView.do'/>" rel="nosublink">선거문자</a></dt>
<dt><a href="<c:out value='/web/mjon/msgcampain/selectMsgDataView.do'/>" >선거문자</a></dt>
<dd>
<ul>
<li><a href="<c:out value='/web/mjon/msgcampain/selectMsgDataView.do'/>">단체문자</a></li>
<li><a href="<c:out value='/web/mjon/msgcampain/selectMsgTWDataView.do'/>" rel="nosublink">20건 문자</a></li>
<li><a href="<c:out value='/web/mjon/msgcampain/selectMsgTWDataView.do'/>" >20건 문자</a></li>
</ul>
</dd>
</dl>
@ -1441,52 +1441,52 @@ function actionLogin() {
<dd>
<ul>
<li><a href="<c:out value='/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do'/>">알림톡</a></li>
<li><a href="<c:out value='/web/mjon/kakao/stepinfo/selectKaKaoStepInfo.do'/>" rel="nosublink">카카오톡 설정</a></li>
<li><a href="<c:out value='/web/mjon/kakao/alimtalk/kakaoAlimtalkIntrdView.do'/>" rel="nosublink">알림톡 소개</a></li>
<li><a href="<c:out value='/web/mjon/kakao/stepinfo/selectKaKaoStepInfo.do'/>" >카카오톡 설정</a></li>
<li><a href="<c:out value='/web/mjon/kakao/alimtalk/kakaoAlimtalkIntrdView.do'/>" >알림톡 소개</a></li>
</ul>
</dd>
</dl>
</li>
<li>
<dl>
<dt><a href="<c:out value='/web/mjon/custom/selectMsgCustomView.do'/>" rel="nosublink">맞춤제작</a></dt>
<dt><a href="<c:out value='/web/mjon/custom/selectMsgCustomView.do'/>" >맞춤제작</a></dt>
<dd>
<ul>
<li><a href="<c:out value='/web/mjon/custom/selectMsgCustomView.do'/>" rel="nosublink">맞춤제작 샘플</a></li>
<li><a href="<c:out value='/web/mjon/custom/selectMsgCustomView.do?tap=2'/>" rel="nosublink">제작방법 및 이용안내</a></li>
<li><a href="<c:out value='/web/mjon/custom/selectMsgCustomView.do?tap=3'/>" rel="nosublink">내보관함</a></li>
<li><a href="<c:out value='/web/mjon/custom/selectMsgCustomView.do'/>" >맞춤제작 샘플</a></li>
<li><a href="<c:out value='/web/mjon/custom/selectMsgCustomView.do?tap=2'/>" >제작방법 및 이용안내</a></li>
<li><a href="<c:out value='/web/mjon/custom/selectMsgCustomView.do?tap=3'/>" >내보관함</a></li>
</ul>
</dd>
</dl>
<dl>
<dt><a href="/web/info/mjonInfo.do" rel="nosublink">문자온소개</a></dt>
<dt><a href="/web/info/mjonInfo.do" >문자온소개</a></dt>
<dd>
<ul>
<li><a href="/web/info/mjonInfo.do" rel="nosublink">서비스 소개</a></li>
<li><a href="/web/info/mjonFunc.do" rel="nosublink">주요기능</a></li>
<li><a href="/web/mjon/msgdata/selectBestMsgDataView.do" rel="nosublink">베스트문자샘플</a></li>
<li><a href="/web/info/mjonInfo.do" >서비스 소개</a></li>
<li><a href="/web/info/mjonFunc.do" >주요기능</a></li>
<li><a href="/web/mjon/msgdata/selectBestMsgDataView.do" >베스트문자샘플</a></li>
</ul>
</dd>
</dl>
<dl>
<dt><a href="/web/info/mjonInfo.do" rel="nosublink">팩스전송</a></dt>
<dt><a href="/web/info/mjonInfo.do" >팩스전송</a></dt>
<dd>
<ul>
<li><a href="/web/mjon/fax/faxDataView.do">팩스전송</a></li>
<li><a href="/web/mjon/fax/faxSendList.do" rel="nosublink">팩스전송내역</a></li>
<li><a href="/web/mjon/fax/faxSendList.do" >팩스전송내역</a></li>
</ul>
</dd>
</dl>
</li>
<li>
<dl>
<dt><a href="<c:out value='/web/mjon/addr/selectAddrList.do'/>" rel="nosublink">주소록관리</a></dt>
<dt><a href="<c:out value='/web/mjon/addr/selectAddrList.do'/>" >주소록관리</a></dt>
<dd>
<ul>
<li><a href="<c:out value='/web/mjon/addr/selectAddrList.do'/>" rel="nosublink">주소록관리</a></li>
<li><a href="<c:out value='/web/mjon/addrBlock/selectBlockList.do'/>" rel="nosublink">수신거부</a></li>
<li><a href="<c:out value='/web/mjon/addr/addrMobGuide.do'/>" rel="nosublink">폰주소록 등록</a></li>
<li><a href="<c:out value='/web/mjon/addragency/selectAddrAgencyList.do'/>" rel="nosublink">주소록 입력 대행(무료)</a></li>
<li><a href="<c:out value='/web/mjon/addr/selectAddrList.do'/>" >주소록관리</a></li>
<li><a href="<c:out value='/web/mjon/addrBlock/selectBlockList.do'/>" >수신거부</a></li>
<li><a href="<c:out value='/web/mjon/addr/addrMobGuide.do'/>" >폰주소록 등록</a></li>
<li><a href="<c:out value='/web/mjon/addragency/selectAddrAgencyList.do'/>" >주소록 입력 대행(무료)</a></li>
</ul>
</dd>
</dl>
@ -1511,51 +1511,51 @@ function actionLogin() {
</li>
<li>
<dl>
<dt><a href="<c:out value='/web/user/mberInfoIndex.do'/>" rel="nosublink">마이페이지</a></dt>
<dt><a href="<c:out value='/web/user/mberInfoIndex.do'/>" >마이페이지</a></dt>
<dd>
<ul>
<li><a href="<c:out value='/web/user/mberInfoChange.do'/>" rel="nosublink">회원정보 변경</a></li>
<li><a href="<c:out value='/web/user/mberInfoChange.do'/>" >회원정보 변경</a></li>
<!-- 개인회원 일때만 노출되는 영역 -->
<c:if test="${not empty LoginVO && LoginVO.dept eq 'p'}">
<li><a href="<c:out value='/web/user/membershipChange.do'/>" rel="nosublink">기업회원 전환</a></li>
<li><a href="<c:out value='/web/user/membershipChange.do'/>" >기업회원 전환</a></li>
</c:if>
<li><a href="<c:out value='/web/user/passwordChange.do'/>" rel="nosublink">비밀번호 변경</a></li>
<li><a href="<c:out value='/web/user/sendNumberManage.do'/>" rel="nosublink">발신번호 관리</a></li>
<li><a href="<c:out value='/web/user/notifyManage.do'/>" rel="nosublink">알림설정</a></li>
<%-- <li><a href="<c:out value='/web/user/mberSecession.do'/>" rel="nosublink">회원탈퇴</a></li> --%>
<li><a href="<c:out value='/web/user/kisaReport.do'/>" rel="nosublink">KISA 신고</a></li>
<li><a href="<c:out value='/web/user/passwordChange.do'/>" >비밀번호 변경</a></li>
<li><a href="<c:out value='/web/user/sendNumberManage.do'/>" >발신번호 관리</a></li>
<li><a href="<c:out value='/web/user/notifyManage.do'/>" >알림설정</a></li>
<%-- <li><a href="<c:out value='/web/user/mberSecession.do'/>" >회원탈퇴</a></li> --%>
<li><a href="<c:out value='/web/user/kisaReport.do'/>" >KISA 신고</a></li>
</ul>
</dd>
</dl>
</li>
<li>
<dl>
<dt><a href="<c:out value='/web/member/pay/PayList.do'/>" rel="nosublink">결제관리</a></dt>
<dt><a href="<c:out value='/web/member/pay/PayList.do'/>" >결제관리</a></dt>
<dd>
<ul>
<li><a href="<c:out value='/web/pay/PayGuide.do'/>" rel="nosublink">요금안내/견적내기</a></li>
<li><a href="<c:out value='/web/member/pay/PayView.do'/>" rel="nosublink">결제하기</a></li>
<li><a href="<c:out value='/web/member/pay/PayList.do'/>" rel="nosublink">요금 결제내역</a></li>
<li><a href="<c:out value='/web/member/pay/PayUserSWList.do'/>" rel="nosublink">요금 사용내역</a></li>
<li><a href="<c:out value='/web/pay/PayGuide.do'/>" >요금안내/견적내기</a></li>
<li><a href="<c:out value='/web/member/pay/PayView.do'/>" >결제하기</a></li>
<li><a href="<c:out value='/web/member/pay/PayList.do'/>" >요금 결제내역</a></li>
<li><a href="<c:out value='/web/member/pay/PayUserSWList.do'/>" >요금 사용내역</a></li>
<!-- 현금영수증 자동발행 주석 -->
<%-- <li><a href="<c:out value='/web/member/pay/BillPub.do'/>" rel="nosublink">계산서/현금영수증 발행 등록</a></li> --%>
<li><a href="<c:out value='/web/member/pay/BillPub.do'/>" rel="nosublink">세금계산서 발행</a></li>
<%-- <li><a href="<c:out value='/web/member/pay/BillPub.do'/>" >계산서/현금영수증 발행 등록</a></li> --%>
<li><a href="<c:out value='/web/member/pay/BillPub.do'/>" >세금계산서 발행</a></li>
</ul>
</dd>
</dl>
</li>
<li>
<dl>
<dt><a href="<c:out value='/web/cop/bbs/NoticeList.do'/>" rel="nosublink">고객센터</a></dt>
<dt><a href="<c:out value='/web/cop/bbs/NoticeList.do'/>" >고객센터</a></dt>
<dd>
<ul>
<li><a href="<c:out value='/web/cop/bbs/NoticeList.do'/>" rel="nosublink">공지사항</a></li>
<li><a href="<c:out value='/web/cop/bbs/TermsList.do'/>" rel="nosublink">이용약관</a></li>
<li><a href="<c:out value='/web/cop/bbs/FaqList.do'/>" rel="nosublink">자주하는 질문</a></li>
<li><a href="<c:out value='/web/cop/bbs/QnaList.do'/>" rel="nosublink">1:1 문의</a></li>
<li><a href="<c:out value='/web/cop/bbs/SuggestList.do'/>" rel="nosublink">불편신고</a></li>
<li><a href="<c:out value='/web/cop/bbs/EventList.do'/>" rel="nosublink">이벤트</a></li>
<li><a href="javascript:void(0);" onclick="remotePop('https://939.co.kr/munjaon/');" rel="nosublink">원격지원</a></li>
<li><a href="<c:out value='/web/cop/bbs/NoticeList.do'/>" >공지사항</a></li>
<li><a href="<c:out value='/web/cop/bbs/TermsList.do'/>" >이용약관</a></li>
<li><a href="<c:out value='/web/cop/bbs/FaqList.do'/>" >자주하는 질문</a></li>
<li><a href="<c:out value='/web/cop/bbs/QnaList.do'/>" >1:1 문의</a></li>
<li><a href="<c:out value='/web/cop/bbs/SuggestList.do'/>" >불편신고</a></li>
<li><a href="<c:out value='/web/cop/bbs/EventList.do'/>" >이벤트</a></li>
<li><a href="javascript:void(0);" onclick="remotePop('https://939.co.kr/munjaon/');" >원격지원</a></li>
</ul>
</dd>
</dl>
@ -1597,9 +1597,9 @@ function actionLogin() {
<label for="save_id">아이디 저장</label>
</div>
<div class="login_find">
<a href="<c:url value='/web/user/findUserId.do'/>" rel="nosublink">아이디찾기</a>
<a href="<c:url value='/web/user/findUserId.do'/>" >아이디찾기</a>
/
<a href="<c:url value='/web/user/rePassword.do'/>" rel="nosublink">비밀번호 재설정</a>
<a href="<c:url value='/web/user/rePassword.do'/>" >비밀번호 재설정</a>
</div>
<div>
<button type="button" class="btnType btnType2" onclick="location.href='/web/user/login/selectUserDept.do'">회원가입</button>

View File

@ -284,11 +284,14 @@ function fn_viewDataInit01(){
/**
* 먼저 불러온 DATA가 있으면 삭제
* !! 화면에 보이는 data만 삭제 !!
* 총건수, 중복건수 데이터 0으로 초기화
* 엑셀 불러오기 데이터
*/
function fn_viewDataInit02(){
$('.excelBody').remove();
$('#excelHead').empty();
$('#rowTotCnt').text("0");
$('#rowDupCnt').text("0");
}
/*
@ -1352,7 +1355,8 @@ function checkNumber(event) {
<div class="receipt_num_top">
<input type="text" placeholder="선택된 파일이 없습니다." onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;">
<button type="button" class="btnType btnType6" id="fileClick"/>파일선택</button>
<input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExport02(event); return false;" style="display:none"/>
<input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExportVarAjax(event); return false;" style="display:none"/>
<!-- <input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExport02(event); return false;" style="display:none"/> -->
</div>
<div class="receipt_num_midde">
<div class="listType list01" id="wrap02">
@ -1735,21 +1739,27 @@ function checkNumber(event) {
<div class="attachedFile">
<label for="" class="attachedFile_label">첨부파일</label>
<input type="text" id="excelNm01" value="" readonly>
<input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExport01(event); return false;" style="display:none"/>
<input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExportAjax(event); return false;" style="display:none"/>
<!-- <input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExport01(event); return false;" style="display:none"/> -->
<button type="button" class="btnType btnType6 c1">찾아보기</button>
<!-- <p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p> -->
<p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p>
</div>
</div><!--// 엑셀파일 불러오기 -->
<div class="popup_btn_wrap2">
<button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02" onclick="excelAdd()">추가</button>
<button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02" onclick="excelAddAjax()">추가</button>
<!-- <button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02" onclick="excelAdd()">추가</button> -->
<button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02">닫기</button>
</div>
</div>
</div>
</div><!--// 엑셀 불러오기 -->
</form>
<form id="excelVarFileForm" name="excelVarFileForm" method="post">
<input type="hidden" id="excelVarCnt" name="excelVarCnt" value="0"/>
<input type="hidden" id="excelVarList" name="excelVarList" value=""/>
</form>
<form id="msgResendForm" name="msgResendForm" method="post">
<input name="msgResendFlag" type="hidden" value="N"/>

View File

@ -143,7 +143,28 @@ $(document).ready(function(){
<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel"
value="${resultAllSentList.msgGroupId}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>>
</td>
<td rowspan="2"><p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p></td>
<td rowspan="2">
<c:choose>
<c:when test="${resultAllSentList.atDelayYn eq 'Y' && resultAllSentList.atDelayCompleteYn eq 'N'}">
<c:choose>
<c:when test="${resultAllSentList.curState eq '0'}">
<%--
20240906 추가
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
--%>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.atDelayOrgTime}" /></p>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</td>
<td rowspan="2">
<p class="c_222 fwRg">
<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>

View File

@ -240,7 +240,7 @@ function fn_click_banner_add_stat(bannerMenuCode){
console.log("fn_click_banner_add_stat 배너 선택 "+ bannerMenuCode) ;
if (bannerMenuCode == "001_02")
{
window.open("https://twww.one-keeper.co.kr/cp/munjaon/index.aspx"); // 새탭에서 열림
window.open("https://www.one-keeper.co.kr/cp/munjaon/index.aspx"); // 새탭에서 열림
} else if (bannerMenuCode == "002_02")
{
window.open("http://ganpandaum.co.kr"); // 새탭에서 열림

View File

@ -151,15 +151,15 @@ function selectUserPw(){
if(data.userSttus =="Y"){
kmcPopUp();
}else if(data.userSttus =="N"){
alert("탈퇴한 회원입니다.");
alert("문자온에서 탈퇴한 회원 정보입니다.");
userCheck = false;
return userCheck;
}else if(data.userSttus == "B"){
alert("이용정지 회원입니다.");
alert("문자온 이용정지 회원 정보입니다.");
userCheck = false;
return userCheck;
}else if(data.userSttus == null){
alert("입력하신 아이디/이름 정보에 맞는 회원이 없습니다.");
alert("입력하신 아이디/이름에 맞는 회원 정보가 없습니다.");
userCheck = false;
return userCheck;
}

View File

@ -338,7 +338,7 @@ $(document).ready(function(){
</div>
<div class="input_list_item2 number" style="height:auto;min-height:60px;">
<div class="input_left">사유</div>
<div class="input_right input_right_id" style="padding:14px 0;align-items:center;line-height:30px;word-break:break-all;">${spamMemberInfoVO.smiMemo}</div>
<div class="input_right input_right_id" style="padding:14px 0;align-items:center;line-height:30px;word-break:break-all; width:100%">${spamMemberInfoVO.smiMemo}</div>
</div>
<div class="noti">회원가입 시 동의하신 <strong>스팸 관련 규약 사항에 따라 잔액은 환불이 불가</strong>합니다.</div>
</div>

View File

@ -1080,7 +1080,7 @@ function fn_click_banner_add_stat(bannerMenuCode){
// 배너클릭 후 배너클릭통계 처리 성공과 관계없이 무조건 배너이동 함.
if (bannerMenuCode == "001_01")
{
window.open("https://twww.one-keeper.co.kr/cp/munjaon/index.aspx"); // 새탭에서 열림
window.open("https://www.one-keeper.co.kr/cp/munjaon/index.aspx"); // 새탭에서 열림
} else if (bannerMenuCode == "002_01")
{
window.open("http://ganpandaum.co.kr"); // 새탭에서 열림

View File

@ -182,7 +182,28 @@ $(document).ready(function(){
</td>
<td name="listTd">
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
<c:choose>
<c:when test="${resultAllSentList.delayYn eq 'Y' && resultAllSentList.delayCompleteYn eq 'N'}">
<c:choose>
<c:when test="${resultAllSentList.curState eq '0'}">
<%--
20240906 추가
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
--%>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.delayOrgTime}" /></p>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</td>
<td name="listTd">
<p>

View File

@ -152,6 +152,16 @@ $(document).ready(function(){
</td>
<td>
<%-- <c:choose>
<c:when test="${resultAllSentList.delayYn eq 'Y' && resultAllSentList.delayCompleteYn eq 'N'}">
20240906 추가
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.delayOrgTime}" /></p>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
</c:otherwise>
</c:choose> --%>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
</td>
<td>

View File

@ -140,6 +140,16 @@ $(document).ready(function(){
</td>
<td>
<%-- <c:choose>
<c:when test="${resultAllSentList.delayYn eq 'Y' && resultAllSentList.delayCompleteYn eq 'N'}">
20240906 추가
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.delayOrgTime}" /></p>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
</c:otherwise>
</c:choose> --%>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
</td>
<td>

View File

@ -152,7 +152,27 @@ $(document).ready(function(){
</td>
<td>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.regdate}" /></p>
<c:choose>
<c:when test="${resultAllSentList.delayYn eq 'Y' && resultAllSentList.delayCompleteYn eq 'N'}">
<c:choose>
<c:when test="${resultAllSentList.curState eq '0'}">
<%--
20240906 추가
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
--%>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.delayOrgTime}" /></p>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.regdate}" /></p>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.regdate}" /></p>
</c:otherwise>
</c:choose>
</td>
<td>
<p>

View File

@ -156,8 +156,7 @@ function f_print(){
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultList}">
<c:if test="${pageType != 'fax'}">
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td>${result.msgTypeName}</td>
@ -195,17 +194,38 @@ function f_print(){
<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.totalPrice}" var="totalPrice" />
<c:out value="${totalPrice}"/>
</td>
</tr>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
</c:if>
<c:if test="${empty pageType || pageType == 'fax'}">
<c:forEach var="resultFax" items="${payUserSumFaxList}" varStatus="status">
<c:if test="${resultFax.ftSendCount > 0}">
<tr>
<td>${resultFax.msgTypeName}</td>
<td>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${resultFax.ftSendCount}" var="ftSendCount" />
<c:out value="${ftSendCount}"/>
</td>
<td>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${resultFax.supplyPrice}" var="supplyPrice" />
<c:out value="${supplyPrice}"/>
</td>
<td>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${resultFax.totalPrice}" var="totalPrice" />
<c:out value="${totalPrice}"/>
</td>
</tr>
</c:if>
</c:forEach>
</c:if>
<c:if test="${empty resultList && empty payUserSumFaxList}">
<tr>
<td colspan="5">
거래내역이 없습니다.
</td>
</tr>
</c:otherwise>
</c:choose>
</c:if>
</tbody>
</table>
</div>

View File

@ -114,8 +114,7 @@ function f_print(){
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultList}">
<c:if test="${pageType != 'fax'}">
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td>${result.msgTypeName}</td>
@ -155,15 +154,35 @@ function f_print(){
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
</c:if>
<c:if test="${empty pageType || pageType == 'fax'}">
<c:forEach var="resultFax" items="${payUserSumFaxList}" varStatus="status">
<c:if test="${resultFax.ftSendCount > 0}">
<tr>
<td>${resultFax.msgTypeName}</td>
<td>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${resultFax.ftSendCount}" var="ftSendCount" />
<c:out value="${ftSendCount}"/>
</td>
<td>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${resultFax.supplyPrice}" var="supplyPrice" />
<c:out value="${supplyPrice}"/>
</td>
<td>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${resultFax.totalPrice}" var="totalPrice" />
<c:out value="${totalPrice}"/>
</td>
</tr>
</c:if>
</c:forEach>
</c:if>
<c:if test="${ empty resultList && empty payUserSumFaxList}">
<tr>
<td colspan="4">
사용내역이 없습니다.
</td>
</tr>
</c:otherwise>
</c:choose>
</c:if>
</tbody>
</table>
</div>
@ -182,7 +201,7 @@ function f_print(){
<td><span>${supplySumPrice}</span></td>
</tr>
<c:choose>
<c:when test="${not empty resultList}">
<c:when test="${not empty resultList || not empty payUserSumFaxList}">
<c:choose>
<c:when test="${searchVO.addVatType eq 'N'}">
<tr class="total_price">
@ -203,11 +222,13 @@ function f_print(){
</c:choose>
</c:when>
<c:otherwise>
<tr>
<td colspan="5">
사용내역이 없습니다.
</td>
</tr>
<c:if test="${ empty resultList && empty payUserSumFaxList}">
<tr>
<td colspan="5">
사용내역이 없습니다.
</td>
</tr>
</c:if>
</c:otherwise>
</c:choose>
</tbody>

View File

@ -198,7 +198,26 @@ $(document).ready(function(){
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.regdate}" /></p>
</td>
<td>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
<c:choose>
<c:when test="${resultAllResList.atDelayYn eq 'Y' && resultAllResList.atDelayCompleteYn eq 'N'}">
<c:choose>
<c:when test="${resultAllResList.curState eq '0'}">
<%--
20240906 추가
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
--%>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.atDelayOrgTime}" /></p>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</td>
<td>
<p>

View File

@ -169,7 +169,26 @@ function fnSearch(pageNo){
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.regdate}" /></p>
</td>
<td>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
<c:choose>
<c:when test="${resultAllResList.atDelayYn eq 'Y' && resultAllResList.atDelayCompleteYn eq 'N'}">
<c:choose>
<c:when test="${resultAllResList.curState eq '0'}">
<%--
20240906 추가
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
--%>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.atDelayOrgTime}" /></p>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</td>
<td>
<p>

View File

@ -202,7 +202,27 @@ $(document).ready(function(){
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.regdate}" /></p>
</td>
<td>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
<c:choose>
<c:when test="${resultAllResList.delayYn eq 'Y' && resultAllResList.delayCompleteYn eq 'N'}">
<c:choose>
<c:when test="${resultAllResList.curState eq '0'}">
<%--
20240906 추가
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
--%>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.delayOrgTime}" /></p>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</td>
<td>
<p>

View File

@ -175,7 +175,26 @@ function fnSearch(pageNo){
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.regdate}" /></p>
</td>
<td>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
<c:choose>
<c:when test="${resultAllResList.delayYn eq 'Y' && resultAllResList.delayCompleteYn eq 'N'}">
<c:choose>
<c:when test="${resultAllResList.curState eq '0'}">
<%--
20240906 추가
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
--%>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.delayOrgTime}" /></p>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllResList.reqdate}" /></p>
</c:otherwise>
</c:choose>
</td>
<td>
<p>

View File

@ -236,11 +236,11 @@ function fnOpenRejectPopup(id){
<caption>발신번호 관리 표</caption>
<colgroup>
<col style="width: 40px;">
<col style="width: 13%;">
<col style="width: 10%;">
<col style="width: 11%;">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: 10%;">
@ -310,7 +310,14 @@ function fnOpenRejectPopup(id){
</td>
<td class="input_wrap2">
<label for="" class="label">발신번호명</label>
<input type="text" value="<c:out value="${sendNumberInfo.userName}"/>" readonly="">
<%--
- 20240822 기업회원 전환인 경우 변경된 회사명이 나와야하는 부분이 있어서 일단 화면에서만 이름을 변경해서 보여주기로 함.
- 개인/기업 회원 정보의 mberNm 컬럼 값을 보여줌 , 데이터베이스를 변경하지는 않음
<input type="text" value="<c:out value="${sendNumberInfo.userName}"/>" readonly="">
--%>
<input type="text" value="<c:out value="${mberManageVO.mberNm}"/>" readonly="">
</td>
<td>
<ec:code code="${sendNumberInfo.phmAuthType}" codeId="ITN027"/>

View File

@ -48,6 +48,352 @@ function excelAdd(){
}
}
/*
* 신규 엑셀 파일 불러오기
* 기존 json 처리가 아닌 POI 방식으로 처리하기 위함
*
* */
function excelExportAjax(){
var data = new FormData(document.excelToolTipForm);
var fileValue = $("#excelFile01").val().split("\\");
var fileName = fileValue[fileValue.length-1];
var fileExt = fileName.split('.').pop().toLowerCase();
if(fileExt.length > 0){
if($.inArray(fileExt, ['xls','xlsx']) == -1) {
alert('xls, xlsx 파일만 업로드 할수 있습니다.');
return false;
}
}
fn_viewDataInit02();
$('#excelNm01').val(fileName);
}
function excelAddAjax(){
var data = new FormData(document.excelToolTipForm);
data.append("file0", $('#excelFile01').prop('files')[0]);
var url = "/web/mjon/alimtalk/sendAlimtalkExelFilePhoneNumAjax.do";
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: url,
data: data,
dataType:'json',
async: true,
processData: false,
contentType: false,
cache: false,
//timeout: 600000,
success: function (returnData, status) {
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
if(returnData.success){
var data = returnData.data;
var message = returnData.message;
if(message != '' ){
alert(returnData.message);
}
if(data != null){
//수신목록 Html 태그
var addHtml = '<div class="list_table list_body excelBody">'
+'\t<div class="cb_wrap">'
+'\t\t<label for="" class="label"></label>'
+'\t\t<input type="checkbox" class="wrap01C">'
+'\t</div>'
+'\t<div class="list_table_num phoneArea">'
+'\t\t<p>$PHONE$</p>'
+'\t</div>'
/*23.04.06 이름제거 요청으로인한 화면 이름 제거*/
/*+'\t<div class="list_table_name">'
+'\t\t<p>$NAME$</p>'
+'\t</div>'*/
+'</div>';
var totalDuplCnt = $('#rowDupCnt').text();//중복 건수 정보
var $excelBody = $('#wrap01_body');
var phoneNum;
$.each(data, function(i, item){
if(checkHpNum(item.phone)){
phoneNum = removeDash(item.phone);
if(!phoneDupl(phoneNum))
/*23.04.06 이름제거 요청으로인한 화면 이름 제거*/
// $excelBody.append(addHtml.replace('$PHONE$', phoneNum).replace('$NAME$', jsonData[bodyIndex]['이름'] ??= ''));
$excelBody.append(addHtml.replace('$PHONE$', phoneNum));
else
totalDuplCnt++;
} else{
alert("엑셀 파일 데이터의 형식이 맞지 않는 부분이 있습니다.");
excelAddr = []; //엑셀 데이터 저장 변수 초기화
$("#excelFile").val(""); //첨부파일 input 초기화
$("#excelNm").val(""); // 첨부파일 명 초기화
fileName = "";
return;
}
});
$('#rowDupCnt').text(totalDuplCnt);
$("#excelFile01").val(""); //첨부파일 input 초기화
$("#excelNm01").val(""); // 첨부파일 명 초기화
updateTotCnt();
}
}else{
alert(returnData.message);
// alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
excelAddr = []; //엑셀 데이터 저장 변수 초기화
$("#excelFile01").val(""); //첨부파일 input 초기화
$("#excelNm01").val(""); // 첨부파일 명 초기화
fileName = "";
return;
}
} else if(status== 'fail'){
alert("첨부파일 불러오는 중 오류가 발생하였습니다.1");
console.log("status : fail ~");
}
},
error: function (e) {
alert("첨부파일 불러오는 중 오류가 발생하였습니다2.");
console.log("ERROR : ", e);
},
beforeSend : function(xmlHttpRequest) {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete : function(xhr, textStatus) {
//로딩창 hide
$('.loading_layer').removeClass('active');
}
});
}
/*
* 신규 변수명 설정 엑셀 파일 불러오기
* 기존 json 처리가 아닌 POI 방식으로 처리하기 위함
*
* */
function excelExportVarAjax(){
var data = document.getElementById('excelFile').files;
var fileValue = $("#excelFile").val().split("\\");
var fileName = fileValue[fileValue.length-1];
var fileExt = fileName.split('.').pop().toLowerCase();
if(fileExt.length > 0){
if($.inArray(fileExt, ['xls','xlsx']) == -1) {
alert('xls, xlsx 파일만 업로드 할수 있습니다.');
return false;
}
}
fn_viewDataInit01();
excelAddVarAjax();
}
function excelAddVarAjax(){
var varList = $("#excelTemplateContent").val().match(/#\{([^}]+)\}/g);
var form = document.excelVarFileForm;
form.excelVarCnt.value = varList.length;
form.excelVarList.value = varList;
var data = new FormData(form);
data.append("file0", $('#excelFile').prop('files')[0]);
var url = "/web/mjon/alimtalk/sendAlimtalkExelVarFilePhoneNumAjax.do";
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: url,
data: data,
dataType:'json',
async: true,
processData: false,
contentType: false,
cache: false,
//timeout: 600000,
success: function (returnData, status) {
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
if(returnData.success){
var data = returnData.data;
var message = returnData.message;
if(message != '' ){
alert(returnData.message);
}
if(data != null){
//수신목록 Html 태그
// 엑셀 헤더
var excelTitleHeadText ='<div class="list_table_name">'
+'\t<p>$HEADTITLE$</p>'
+'</div>';
// 바디 row 수신자 tag
var excelBodyRowTextIndex00 ='<div class="list_table_name phoneArea">'
+'\t\t<p>$ROWTEXT$</p>'
+'\t</div>';
// 바디 row tag
var excelBodyRowTextIndex01 ='<div class="list_table_name transData">'
+'\t\t<p>$ROWTEXT$</p>'
+'\t</div>';
//맨 앞에 수신번호 배열 추가
varList.unshift('수신번호');
//변수 문자열 중복 제거
var newList = Array.from(new Set(varList));
//엑셀헤더 selector
var $excelHead = $('#excelHead');
//엑셀바디 selector
var $excelBody = $('#excelBody02');
// 엑셀 헤더 부분
$.each(newList, function(headerIndex, value) {
$excelHead.append(excelTitleHeadText.replace('$HEADTITLE$', value));
});
var totalDuplCnt = $('#rowDupCnt').text();//중복 건수 정보
var $excelBody = $('#excelBody02');
var bodyData;
var addDiv = "";
var phoneNum;
//입력데이터를 역정렬해준다.
data.reverse();
//변수명 추출해주기
var varListArr = [];
varListArr = form.excelVarList.value.split(",");
$.each(data, function(i, item){
if(checkHpNum(item.phone)){
phoneNum = removeDash(item.phone);
if(!phoneDupl(phoneNum)){
var varVal = item.varVal;
var lengthCheck =true;
/*23.04.06 이름제거 요청으로인한 화면 이름 제거*/
var excelBody = '<div class="list_table list_body excelBody">';
//수신번호 화면 태그 생성
excelBody += excelBodyRowTextIndex00.replace('$ROWTEXT$', removeDash(phoneNum));
//변수 데이터 태그 생성
var varValArr = []
varValArr = varVal.split("§");
for(var i=0; i < varValArr.length; i++){
var bodyData = varValArr[i];
// 기타변수는 50자리 까지 입력
if(bodyData.length > 100 || bodyData.length == 0){
alert("등록 변수[ "+varListArr[i]+" ] \n기타변수의 입력 값이 없거나 100자리를 초과하는 내용이 포함되어 해당 내용 제외되었습니다.");
lengthCheck = false;
break;
}
excelBody += excelBodyRowTextIndex01.replace('$ROWTEXT$', bodyData);
}
excelBody += '</div>';
if(lengthCheck){
addDiv += excelBody;
}
}
else
totalDuplCnt++;
} else{
alert("엑셀 파일 데이터의 형식이 맞지 않는 부분이 있습니다.");
excelAddr = []; //엑셀 데이터 저장 변수 초기화
$("#excelFile").val(""); //첨부파일 input 초기화
$("#excelNm").val(""); // 첨부파일 명 초기화
fileName = "";
return;
}
});
//화면에 수신번호 및 변수 데이터 추가해 주기
$excelBody.append(addDiv);
}
}else{
alert(returnData.message);
// alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
excelAddr = []; //엑셀 데이터 저장 변수 초기화
$("#excelFile01").val(""); //첨부파일 input 초기화
$("#excelNm01").val(""); // 첨부파일 명 초기화
fileName = "";
return;
}
} else if(status== 'fail'){
alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
console.log("status : fail ~");
}
},
error: function (e) {
alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
console.log("ERROR : ", e);
},
beforeSend : function(xmlHttpRequest) {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete : function(xhr, textStatus) {
//로딩창 hide
$('.loading_layer').removeClass('active');
}
});
}
/**
* 엑셀 파일 불러오기
*/
@ -337,7 +683,6 @@ function phoneDupl(data){
var resultBoo = true;
data = removeDash(data);
/*
* 중복체크
* 기존 데이터 배열화

View File

@ -1027,7 +1027,7 @@
.template_choice_popup .emphasis_type{width: 180px;}
.template_choice_popup .popup_search_wrap .template_name{width: 300px;}
.template_choice_popup .kakao_template_list{margin: 20px 0 0 0;}
.template_choice_popup .kakao_template_list li{position: relative; display: inline-block; width: calc((100% - 78px)/3); border-radius: 25px; box-shadow: inset 0 0px 8px rgba(0,0,0,0.2); padding: 8px 8px 16px 8px; margin: 0 11px 40px 0;}
.template_choice_popup .kakao_template_list li{position: relative; display: inline-block; width: calc((100% - 80px)/3); border-radius: 25px; box-shadow: inset 0 0px 8px rgba(0,0,0,0.2); padding: 8px 8px 16px 8px; margin: 0 11px 40px 0;}
.template_choice_popup .kakao_template_list li:nth-child(3n){margin: 0 0 0 0;}
.template_choice_popup .kakao_template_list li::after{position: absolute; content: " "; width: 100%; height: 18px; background: url(/publish/images/kakao_template_cont.png) no-repeat top center; top: 8px;}
.template_choice_popup .kakao_template_list .kakao_template_wrap{width: 100%; height: 370px; padding: 30px 0 15px 0; border-radius: 22px 22px 0 0; box-shadow: inset 0 2px 8px rgba(0,0,0,0.2); background: #b6cddd; overflow-y: auto; box-sizing: border-box;}

View File

@ -0,0 +1,394 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>추석 인사문자 추천 문구 모음 - 문자온</title>
<meta name="Keywords" content="문자전송, 문자발송, SMS, LMS, MMS, 문자보내기, 단체문자, 단체문자전송, 단체문자발송,단체문자사이트,문자사이트, 대량문자">
<meta name="description" content="녹음의 계절인 무더운 여름이 지나고 선선한 바람이 불어오는 가을은 연중 으뜸인 명절 추석이 있는데요, 추석은 글자 그대로 가을의 달빛이 가장 좋은 밤이라는 뜻을 가지고 있습니다. 기분 좋은 바람과 밝은 달을 보며 생각나는 감사한 주변 분들에게 마음을 담아 명절 인사를 보내는 건 어떠신가요? 뭐라고 보내면 좋을지 어려워하는 고객님들을 위해 저희 문자온에서는 여러가지 문자를 제공하고 있습니다.">
<meta property="og:type" content="website">
<meta property="og:title" content="추석 인사문자 추천 문구 모음 - 문자온">
<meta property="og:description" content="녹음의 계절인 무더운 여름이 지나고 선선한 바람이 불어오는 가을은 연중 으뜸인 명절 추석이 있는데요, 추석은 글자 그대로 가을의 달빛이 가장 좋은 밤이라는 뜻을 가지고 있습니다. 기분 좋은 바람과 밝은 달을 보며 생각나는 감사한 주변 분들에게 마음을 담아 명절 인사를 보내는 건 어떠신가요? 뭐라고 보내면 좋을지 어려워하는 고객님들을 위해 저희 문자온에서는 여러가지 문자를 제공하고 있습니다.">
<link rel="apple-touch-icon" sizes="57x57" href="/publish/images/favicon/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/publish/images/favicon/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/publish/images/favicon/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/publish/images/favicon/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/publish/images/favicon/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/publish/images/favicon/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/publish/images/favicon/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/publish/images/favicon/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/publish/images/favicon/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/publish/images/favicon/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/publish/images/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/publish/images/favicon/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/publish/images/favicon/favicon-16x16.png">
<link rel="manifest" href="/publish/images/favicon/manifest.json">
<link rel="stylesheet" href="/publish/publish_adv/css/reset.css">
<link rel="stylesheet" href="/publish/publish_adv/css/style.css">
<link rel="stylesheet" href="/publish/css/font.css">
<script src="/publish/js/jquery-3.5.0.js"></script>
<script>
function topBtn() {
$("html").scrollTop("0");
}
</script>
</head>
<body>
<div class="template_v1_content content_ten con_four">
<button type="button" class="top_btn" onclick="topBtn()" style="z-index: 2;"><br>TOP</button>
<header>
<div class="inner">
<a href="https://www.munjaon.co.kr">
<h1><img src="/publish/publish_adv/img/template_v1_header_logo.png" alt="문자온 로고"></h1>
</a>
</div>
</header>
<div class="visual">
<div class="inner">
<p class="keyword">keyword</p>
<h2>추석 인사문자 추천 문구 모음</h2>
<p class="sub_text obituary_te">녹음의 계절인 무더운 여름이 지나고 선선한 바람이 불어오는 가을은 연중 으뜸인 명절 추석이 있는데요, 추석은 글자 그대로 가을의 달빛이 가장 좋은 밤이라는 뜻을 가지고 있습니다. 기분 좋은 바람과 밝은 달을 보며 생각나는 감사한 주변 분들에게 마음을 담아 명절 인사를 보내는 건 어떠신가요? 뭐라고 보내면 좋을지 어려워하는 고객님들을 위해 저희 문자온에서는 여러가지 문자를 제공하고 있습니다.</p>
</div>
</div>
<div class="index">
<div class="inner">
<p>&ensp;</p>
<nav>
<ul>
<li><a href="#section01">추석문자 예시</a></li>
</ul>
</nav>
</div>
</div>
<!--연관 내용-->
<div class="ass">
<div class="inner">
<div class="ass_con">
<p class="title">연관 내용</p>
<p><a href="https://www.munjaon.co.kr/web/mjon/msgdata/selectBestMsgDataView.do?bestTagType=L&bestSearchKeyword=%EC%B6%94%EC%84%9D">- 더 많은 추석 문자 보기</a></p>
</div>
</div>
</div>
<section class="section section01" id="section01">
<div class="inner obituary_inner">
<h3>추석문자 예시</h3>
<div class="short">
<p class="text bold" style="margin: 0 0 8px 0;">[단문]</p>
<ul class="obituary">
<li>
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
평안함과 넉넉함이 함께하는 추석 보내시길 바랍니다!
<p class="date">PM 3:45</p>
</div>
</div>
<div class="people_01"></div>
<div class="speech_bubble"></div>
</li>
<li class="move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
한가위 보름달에 소원을 빌어봅니다. 올 한해 소원 성취하시고, 늘 건강하시길 바랍니다.
<p class="date">PM 5:30</p>
</div>
</div>
<div class="people_02"></div>
<div class="speech_bubble"></div>
</li>
<li class="move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
민족 최대의 명절 추석입니다. 긴 연휴인 만큼 정을 나누며 행복 가득한 날들로 채우세요^^
<p class="date">PM 1:46</p>
</div>
</div>
<div class="people_02"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
풍성한 오곡백과와 황금같은 연휴 덕택에 마음도 풍성한 추석입니다. 행복한 명절 되십시오~!
<p class="date">PM 2:15</p>
</div>
</div>
<div class="people_02"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
풍요로움과 즐거움이 보름달처럼 마음에 가득 차는 행복한 명절연휴 보내시기 바랍니다~^^
<p class="date">AM 9:30</p>
</div>
</div>
<div class="people_03"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
한 해의 풍요로움이 가득한 한가위입니다. 가득 차오른 보름달처럼 행복 가득한 명절 보내세요~
<p class="date">PM 2:15</p>
</div>
</div>
<div class="people_02"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
험난한 귀성길이지만 오랜만에 찾아뵐 부모님 생각에 마음이 따뜻해집니다. 안전하게 다녀오세요.
<p class="date">AM 6:15</p>
</div>
</div>
<div class="people_02"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
보름달처럼 둥글둥글하고 행복한 추석 보내세요^^
<p class="date">AM 9:30</p>
</div>
</div>
<div class="people_02"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
둥근 보름달 보며 소원하는 일 꼭 성취하시고 건강~웃음~행복이 가득한 추석 명절 보내세요*^^*♡
<p class="date">AM 11:10</p>
</div>
</div>
<div class="people_03"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
직접인사는 아니여도..메리추석요~~맛난거 많이 드시구요 해피한 한가위되세요~^o^~
<p class="date">PM 5:10</p>
</div>
</div>
<div class="people_03"></div>
<div class="speech_bubble"></div>
</li>
</ul>
</div>
<div class="line"></div>
<div class="long">
<p class="text bold" style="margin: 0 0 8px 0;">[장문]</p>
<ul class="obituary">
<li>
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
가을의 달빛이 가장 좋은 밤인 추석이 다가옵니다.<br>
당신의 마음에도 밝은 달이 비춘듯 환한 하루를 보내시길 바랍니다.
<p class="date">PM 1:10</p>
</div>
</div>
<div class="people_01"></div>
<div class="speech_bubble"></div>
</li>
<li class="move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
환하게 떠오른 보름달이 풍요로운 추석을 말해줍니다.<br><br>
이야기 보따리와 풍성한 음식으로 더욱 빛나는 추석!
항상 한가위처럼 즐겁고 정겨운 일이 가득하길 바랍니다.
<p class="date">AM 8:45</p>
</div>
</div>
<div class="people_02"></div>
<div class="speech_bubble"></div>
</li>
<li class="move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
온 겨레의 명절, 한가위를 맞이하여<br>
○○○님의 가정에 보름달만큼 풍성한 건강과 행복이 깃드시길 기원합니다.<br><br>
그동안 함께 하지 못했던 가족과의 편안한 시간 보내시고 돌아보지 못한 어려운 이웃과 따뜻하고 넉넉한 마음도 나누시길 바랍니다.
“더도 말고 덜도 말고 한가위만 같아라.”
<p class="date">PM 5:35</p>
</div>
</div>
<div class="people_01"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
즐거운 명절 추석입니다.<br>
풍성한 한가위 보름달처럼 당신의 마음도 풍성해졌으면 좋겠습니다.<br><br>
추석연휴만큼은 걱정근심 잠시 내려놓고, 사랑가득 넉넉한 마음으로 즐거운 한가위 보내시길 기원합니다.
<p class="date">AM 8:30</p>
</div>
</div>
<div class="people_02"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
해피 추석입니다~<br><br>
일상에 지친 몸과 마음, 가족과 함께 편안히 쉬시고 행복 가득한 추억만 가득히 채워 앞으로도 웃음 가득한 풍년 맞이하시기 바랍니다.(^0^)
<p class="date">AM 9:45</p>
</div>
</div>
<div class="people_03"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
추석이 다가왔습니다.<br><br>
그동안 편히 못 쉬었던 거 이번 추석 연휴에 푹 쉬시고!!!<br>
한가위 보름달처럼 웃음과 따뜻한 정을 느끼고 맛있는 명절 음식도 많이 드시길 바랍니다~^^
<p class="date">AM 10:33</p>
</div>
</div>
<div class="people_01"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
행복한 한가위가 우리곁으로 성큼 다가왔습니다.<br><br>
언제나 변함없이 보내주시는 관심과 사랑에 진심으로 감사드립니다.<br><br>
풍요로운 추석 뜻깊고 행복하게 보내시길 바랍니다.
<p class="date">PM 5:20</p>
</div>
</div>
<div class="people_02"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
가을과 함께 시작한 9월도 벌써 중순입니다.<br>
민족의 명절 추석도 다가옵니다.<br><br>
명절을 앞두고 고마웠던 분들께 감사 인사를 전해보세요~^^
<p class="date">PM 6:20</p>
</div>
</div>
<div class="people_03"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
무더웠던 여름이 지나 어느덧 대명절인 추석이 다가옵니다.<br><br>
그동안 힘들었던 일, 속상했던 일 선선히 마음을 간질이며 불어오는 가을 바람에 날려버리고 사랑하는 주변 사람들과 따뜻하고 행복한 추석 보내시길 마음속 깊이 바랍니다.
<p class="date">AM 11:45</p>
</div>
</div>
<div class="people_01"></div>
<div class="speech_bubble"></div>
</li>
<li class="second_line move_line">
<div class="wrap">
<div class="title">
<p class="text">추석문자</p>
</div>
<div class="inner_text">
결실의 계절과 함께 찾아온 추석!<br><br>
가족과 함께 편안한 연휴 보내시고, 뜻한 바 좋은 결실을 맺는 풍성한 가을 맞이하시길 바랍니다.<br>
고향길 안전하고 편안하게 다녀오시길 기원합니다.
<p class="date">AM 11:45</p>
</div>
</div>
<div class="people_01"></div>
<div class="speech_bubble"></div>
</li>
</ul>
</div>
<div class="line"></div>
<div class="drawing">
<p class="text bold" style="margin: 0 0 8px 0;">[그림문자]</p>
<img src="./img/template_v1_manuscript_23_section01_img01.png" alt="추석문자 그림문자">
</div>
</div>
</section>
<div class="btn_wrap">
<div class="inner">
<a href="https://www.munjaon.co.kr/web/mjon/msgdata/selectMsgDataView.do">추석문자 보내기</a>
</div>
</div>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB