Merge branch '5102_친구톡_발송속도_개선'

This commit is contained in:
hehihoho3@gmail.com 2025-08-18 18:53:15 +09:00
commit a8d0e123d4
53 changed files with 2336 additions and 1430 deletions

View File

@ -318,4 +318,17 @@ public final class MJUtil {
return dupliBlockList;
}
/**
* 사업자등록번호 대시('-') 추가
* 대시 유무 상관없음
* 유효성 맞지 않을시 변환안됨.
*/
public static String bizNoAddDash(String str) {
if(str == null) {
return str;
}
String regExp = "(\\d{3})(\\d{2})(\\d{5})$";
String chgf = "$1-$2-$3";
return str.replaceFirst(regExp, chgf);
}
}

View File

@ -38,5 +38,5 @@ public class MjonEventVO {
private String point; //사용자 포인트 정보
private String userId; //사용자 아이디
private String frstRegisterId; //등록자 아이디
}

View File

@ -1,9 +1,12 @@
package itn.let.mjo.pay.service;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import itn.let.mjo.msg.service.MjonMsgVO;
public interface MjonPayService {
List<MjonPayVO> selectPayList(MjonPayVO mjonPayVO) throws Exception;
@ -140,4 +143,11 @@ public interface MjonPayService {
//누적 납부금액 조회 (후불회원이 사용금액을 납부한 금액 합산 - 미납 금액 제외한 합산 금액)
public String selectTotSumPaymentAfterPay(String userId) throws Exception;
Map<String, Object> payUserSWList(MjonPayVO mjonPayVO) throws Exception;
Map<String, Object> payUserSWListAjax(MjonMsgVO mjonMsgVO) throws Exception;
//거래명세서 상세 조회
MjonPayVO selectPayDetail(MjonPayVO mjonPayVO) throws Exception;
}

View File

@ -241,5 +241,11 @@ public class MjonPayVO extends ComDefaultVO{
private String totChgPay; // 간편결제분류
// 거래명세서 내용
private String bizNo; // 사업자등록번호
private String managerNm; // 담당자명
private String prePaymentYn; // 선불결제여부 N:후불제고객
private String dept; // 회원종류 p:개인 c:기업
}

View File

@ -358,5 +358,8 @@ public class MjonPayDAO extends EgovAbstractDAO {
return result;
}
public MjonPayVO selectPayDetail(MjonPayVO mjonPayVO) throws Exception{
return (MjonPayVO)select("mjonPayDAO.selectPayDetail", mjonPayVO);
}
}

View File

@ -7,11 +7,16 @@ import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@ -25,11 +30,15 @@ import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import itn.com.cmm.LoginVO;
import itn.com.cmm.util.DateUtils;
import itn.com.cmm.util.MJUtil;
import itn.com.cmm.util.PayUtils;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.mjo.event.service.MjonEventVO;
import itn.let.mjo.event.service.impl.MjonEventDAO;
import itn.let.mjo.msg.service.MjonMsgVO;
import itn.let.mjo.msgcampain.service.MjonCandidateVO;
import itn.let.mjo.msgcampain.service.impl.MjonCandidateDAO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.msgdata.service.impl.MjonMsgDataDAO;
import itn.let.mjo.pay.service.MjonPayService;
@ -94,6 +103,10 @@ public class MjonPayServiceImpl extends EgovAbstractServiceImpl implements MjonP
@Resource(name = "mberGrdService")
MberGrdService mberGrdService;
@Resource(name="mjonCandidateDAO")
private MjonCandidateDAO mjonCandidateDAO;
@Override
public List<MjonPayVO> selectPayList(MjonPayVO mjonPayVO) throws Exception {
return mjonPayDAO.selectPayList(mjonPayVO);
@ -2839,6 +2852,144 @@ public class MjonPayServiceImpl extends EgovAbstractServiceImpl implements MjonP
}
@Override
public Map<String, Object> payUserSWList(MjonPayVO mjonPayVO) throws Exception{
String userId = mjonPayVO.getUserId();
// 사용금액
List<MjonPayVO> usedCashTotList = mjonPayDAO.selectUsedCashWithKakaoTotCnt(mjonPayVO);
// 사용가능한 금액
// mberManageVO.prePaymentYn 선불 후불 회원 구분으로 인해 select함
MberManageVO mberManageVO = mjonMsgDataDAO.selectMberManageInfo(userId);
// 선거 후보자 정보 조회
MjonCandidateVO mjonCandidateVO = new MjonCandidateVO();
if("p".equals(mberManageVO.getDept())) { //개인회원 선거 후보자 정보 불러오기
mjonCandidateVO = mjonCandidateDAO.selectCandidateDataInfo(userId);
if(mjonCandidateVO != null) {
mjonCandidateVO.setRegidentNo1(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()));
mjonCandidateVO.setRegidentNo2(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()));
}
}
/**
* 후불제 회원 관련 사용 요금 내역 정보 조회하기
* 20231228 우영두 추가
* 누적사용금액, 누적 납부금액, 당월 납부 예상금액 정보 조회
*
* */
//누적 사용금액 조회 (캐시 테이블에서 현재까지 사용된 금액 합산 - 캐시 테이블에서 "-" 사용된 금액만 합산)
String totSumCashAfterPay = mjonPayDAO.selectTotalSumCashForAfterPay(userId);
//누적 사용 포인트 조회 (포인트 테이블에서 현재까지 사용된 포인트 합산 - 회원 포인트 정보 업데이트시 사용되는 쿼리 이용)
String totSumPointAfterPay = mjonPayDAO.selectTotalSumPointForAfterPay(userId);
//누적 납부금액 조회 (후불회원이 사용금액을 납부한 금액 합산 - 미납 금액 제외한 합산 금액)
String totSumPaymentAfterPay = mjonPayDAO.selectTotSumPaymentAfterPay(userId);
//누적 납부 포인트 조회 ( 누적 납부금액 합산에 대한 2% 포인트 정보 계산)
float p_i_re_point = 0;
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
if (sysJoinSetVO != null) {
p_i_re_point = sysJoinSetVO.getPointPer();
}
int paymentPointAfterPay = Math.round((Float.parseFloat(totSumPaymentAfterPay) * p_i_re_point / 100));
//당월 납부 예상금액 (누적 사용금액 합산 - 누적 납부금액 합산 정보 계산)
float unPaymentAfterPay = Float.parseFloat(totSumCashAfterPay) - Float.parseFloat(totSumPaymentAfterPay);
//당월 납부 예상 포인트 (당월 납부 예상 금액에 대한 2% 포인트 정보 계산)
int unPaymentPointAfterPay = Math.round((unPaymentAfterPay * p_i_re_point / 100));
/*
* 2024.02.06 후불제 회원 협의단가를 사용하는 회원은 포인트 적립이 되지 않아야함.
* 후불제 협의 단가 여부 체크
* 모든 협의 단가 금액을 합산하여 0보다 크면 협의단가 있음.
* */
float shortPrice = mberManageVO.getShortPrice();
float longPrice = mberManageVO.getLongPrice();
float picturePrice = mberManageVO.getPicturePrice() + mberManageVO.getPicture2Price() + mberManageVO.getPicture3Price();
float kakaoAtPrice = mberManageVO.getKakaoAtPrice();
float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
float totPrice = shortPrice + longPrice + picturePrice + kakaoAtPrice + kakaoFtPrice;
String negoPriceYn = "N";
if(totPrice > 0) {
negoPriceYn = "Y";
}
Map<String, Object> returnData = new HashMap<>();
returnData.put("usedCashTotList", usedCashTotList);
returnData.put("mberManageVO", mberManageVO);
returnData.put("mjonCandidateVO", mjonCandidateVO);
returnData.put("totSumCashAfterPay", totSumCashAfterPay);
returnData.put("totSumPointAfterPay", totSumPointAfterPay);
returnData.put("totSumPaymentAfterPay", totSumPaymentAfterPay);
returnData.put("sumPaymentPointAfterPay", paymentPointAfterPay);
returnData.put("unPaymentAfterPay", unPaymentAfterPay);
returnData.put("unPaymentPointAfterPay", unPaymentPointAfterPay);
returnData.put("negoPriceYn", negoPriceYn);
// 초기 날짜 셋팅
returnData.put("startDate", DateUtils.getDateMonthsAgo(1));
returnData.put("endDate", DateUtils.getCurrentDate());
// TODO Auto-generated method stub
return returnData;
}
@Override
public Map<String, Object> payUserSWListAjax(MjonMsgVO mjonMsgVO) throws Exception{
if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
mjonMsgVO.setSearchSortCnd("regDate");
mjonMsgVO.setSearchSortOrd("desc");
}
Map<String, Object> returnData = new HashMap<>();
// 검색 데이터가 없거나
// 시작일자가 종료일자보다 이후이거나
// 기간이 365일이 넘으면 현재일부터 365일 날짜를 넣어서 검색
if(!DateUtils.dateChkAndValueChk(mjonMsgVO.getStartDate(),mjonMsgVO.getEndDate(), 12 )) {
mjonMsgVO.setStartDate(DateUtils.getDateMonthsAgo(12));
mjonMsgVO.setEndDate(DateUtils.getCurrentDate());
};
List<MjonMsgVO> payUserSWList = mjonMsgDataDAO.selectPayUserSWList(mjonMsgVO);
returnData.put("payUserSWList", payUserSWList);
returnData.put("totCnt", payUserSWList.size()> 0 ? payUserSWList.get(0).getTotCnt() : 0);
returnData.put("totSuccSendPrice", payUserSWList.size() > 0 ? PayUtils.getTrimToFirstDecimal(payUserSWList.get(0).getTotSuccSendPrice()) : 0);
return returnData;
}
@Override
public MjonPayVO selectPayDetail(MjonPayVO mjonPayVO) throws Exception {
MjonPayVO result = mjonPayDAO.selectPayDetail(mjonPayVO);
/* 후불제 고객의 사용기한 조회(결제일의 전달 1일 ~ 말일) */
if("N".equals(result.getPrePaymentYn())) {
String regDateStr = result.getRegDate();
LocalDateTime regDate = Timestamp.valueOf(regDateStr).toLocalDateTime();
LocalDate lastMonth = regDate.toLocalDate().withDayOfMonth(1).minusMonths(1);
LocalDate startDate = lastMonth.withDayOfMonth(1);
LocalDate endDate = lastMonth.withDayOfMonth(lastMonth.lengthOfMonth());
result.setStartDate(startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
result.setEndDate(endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}
return result;
}
}

View File

@ -2603,15 +2603,16 @@ public class MjonPayController {
* 2023.12.22 우영두
* @param mjonMsgVO
* @param model
* @return "/web/member/pay/PayUserSWList.do"
* @return "/web/member/pay/payUserSWList.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/member/pay/PayUserSWList.do"})
public String PayUserSWList(@ModelAttribute("mjonMsgVO") MjonMsgVO mjonMsgVO,
@RequestMapping(value= {"/web/member/pay/payUserSWList.do"})
public String payUserSWList(@ModelAttribute("mjonMsgVO") MjonMsgVO mjonMsgVO,
MjonPayVO mjonPayVO,
MberManageVO mberManageVO, RedirectAttributes redirectAttributes,
HttpServletRequest request,
ModelMap model) throws Exception{
/*LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();*/
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
@ -2621,117 +2622,26 @@ public class MjonPayController {
return "redirect:/web/user/login/login.do";
}
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
mjonMsgVO.setUserId(userId);
/*
{ // 충전캐시
String sumPayMoney = mjonPayService.selectAgentSumPayMoney(userId);
model.addAttribute("sumPayMoney", sumPayMoney);
}
mjonPayVO.setUserId(userId);
{ // 충전포인트
String sumPoint = mjonPayService.selectSumPoint(userId);
model.addAttribute("sumPoint", sumPoint);
}
*/
{ // 사용금액
mjonPayVO.setUserId(userId);
List<MjonPayVO> usedCashTotList = mjonPayService.selectUsedCashWithKakaoTotCnt(mjonPayVO);
model.addAttribute("usedCashTotList", usedCashTotList);
}
{ // 사용가능한 금액
// mberManageVO.prePaymentYn 선불 후불 회원 구분으로 인해 select함
mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
model.addAttribute("mberManageVO", mberManageVO);
}
/*
{ // 발송건수
mjonMsgVO.setReserveYn("N");
List<MjonMsgVO> sendTotList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
model.addAttribute("sendTotList", sendTotList);
}
{ // 예약건수
mjonMsgVO.setReserveYn("Y");
List<MjonMsgVO> reservToList = mjonMsgService.selectWithKakaoSendTotCnt(mjonMsgVO);
model.addAttribute("reservToList", reservToList);
}
*/
{// 선거 후보자 정보 조회
MjonCandidateVO mjonCandidateVO = new MjonCandidateVO();
if("p".equals(mberManageVO.getDept())) { //개인회원 선거 후보자 정보 불러오기
mjonCandidateVO = mjonCandidateService.selectCandidateDataInfo(userId);
if(mjonCandidateVO != null) {
mjonCandidateVO.setRegidentNo1(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo1()));
mjonCandidateVO.setRegidentNo2(egovCryptoUtil.decrypt(mjonCandidateVO.getRegidentNo2()));
}
}
model.addAttribute("mjonCandidateVO", mjonCandidateVO);
}
{
/**
* 후불제 회원 관련 사용 요금 내역 정보 조회하기
* 20231228 우영두 추가
* 누적사용금액, 누적 납부금액, 당월 납부 예상금액 정보 조회
*
* */
//누적 사용금액 조회 (캐시 테이블에서 현재까지 사용된 금액 합산 - 캐시 테이블에서 "-" 사용된 금액만 합산)
String totSumCashAfterPay = mjonPayService.selectTotalSumCashForAfterPay(userId);
model.addAttribute("totSumCashAfterPay", totSumCashAfterPay);
//누적 사용 포인트 조회 (포인트 테이블에서 현재까지 사용된 포인트 합산 - 회원 포인트 정보 업데이트시 사용되는 쿼리 이용)
String totSumPointAfterPay = mjonPayService.selectTotalSumPointForAfterPay(userId);
model.addAttribute("totSumPointAfterPay", totSumPointAfterPay);
//누적 납부금액 조회 (후불회원이 사용금액을 납부한 금액 합산 - 미납 금액 제외한 합산 금액)
String totSumPaymentAfterPay = mjonPayService.selectTotSumPaymentAfterPay(userId);
model.addAttribute("totSumPaymentAfterPay", totSumPaymentAfterPay);
//누적 납부 포인트 조회 ( 누적 납부금액 합산에 대한 2% 포인트 정보 계산)
float p_i_re_point = 0;
JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
if (sysJoinSetVO != null) {
p_i_re_point = sysJoinSetVO.getPointPer();
}
int paymentPointAfterPay = Math.round((Float.parseFloat(totSumPaymentAfterPay) * p_i_re_point / 100));
model.addAttribute("sumPaymentPointAfterPay", paymentPointAfterPay);
//당월 납부 예상금액 (누적 사용금액 합산 - 누적 납부금액 합산 정보 계산)
float unPaymentAfterPay = Float.parseFloat(totSumCashAfterPay) - Float.parseFloat(totSumPaymentAfterPay);
model.addAttribute("unPaymentAfterPay", unPaymentAfterPay);
//당월 납부 예상 포인트 (당월 납부 예상 금액에 대한 2% 포인트 정보 계산)
int unPaymentPointAfterPay = Math.round((unPaymentAfterPay * p_i_re_point / 100));
model.addAttribute("unPaymentPointAfterPay", unPaymentPointAfterPay);
/*
* 2024.02.06 후불제 회원 협의단가를 사용하는 회원은 포인트 적립이 되지 않아야함.
* 후불제 협의 단가 여부 체크
* 모든 협의 단가 금액을 합산하여 0보다 크면 협의단가 있음.
* */
float shortPrice = mberManageVO.getShortPrice();
float longPrice = mberManageVO.getLongPrice();
float picturePrice = mberManageVO.getPicturePrice() + mberManageVO.getPicture2Price() + mberManageVO.getPicture3Price();
float kakaoAtPrice = mberManageVO.getKakaoAtPrice();
float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
float totPrice = shortPrice + longPrice + picturePrice + kakaoAtPrice + kakaoFtPrice;
String negoPriceYn = "N";
if(totPrice > 0) {
negoPriceYn = "Y";
}
model.addAttribute("negoPriceYn", negoPriceYn);
}
{
// 초기 날짜 셋팅
model.addAttribute("startDate", DateUtils.getDateMonthsAgo(12));
model.addAttribute("endDate", DateUtils.getCurrentDate());
}
// // 비즈니스 로직 부분
Map<String, Object> resultMap = mjonPayService.payUserSWList(mjonPayVO);
model.addAttribute("usedCashTotList", resultMap.get("usedCashTotList"));
model.addAttribute("mjonCandidateVO", resultMap.get("mjonCandidateVO"));
model.addAttribute("mberManageVO", resultMap.get("mberManageVO"));
model.addAttribute("totSumCashAfterPay", resultMap.get("totSumCashAfterPay"));
model.addAttribute("totSumPointAfterPay", resultMap.get("totSumPointAfterPay"));
model.addAttribute("totSumPaymentAfterPay", resultMap.get("totSumPaymentAfterPay"));
model.addAttribute("sumPaymentPointAfterPay", resultMap.get("sumPaymentPointAfterPay"));
model.addAttribute("unPaymentAfterPay", resultMap.get("unPaymentAfterPay"));
model.addAttribute("unPaymentPointAfterPay", resultMap.get("unPaymentPointAfterPay"));
model.addAttribute("negoPriceYn", resultMap.get("negoPriceYn"));
model.addAttribute("startDate", resultMap.get("startDate"));
model.addAttribute("endDate", resultMap.get("endDate"));
return "/web/pay/PayUserSWList";
}
@ -2749,8 +2659,8 @@ public class MjonPayController {
* @return "/web/member/pay/PayUserSWListAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/member/pay/PayUserSWListAjax.do"})
public String PayUserSWListAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
@RequestMapping(value= {"/web/member/pay/payUserSWListAjax.do"})
public String payUserSWListAjax(@ModelAttribute("searchVO") MjonMsgVO mjonMsgVO,
HttpServletRequest request,
ModelMap model) throws Exception{
@ -2774,29 +2684,12 @@ public class MjonPayController {
mjonMsgVO.setLastIndex(paginationInfo.getLastRecordIndex());
mjonMsgVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
if("".equals(mjonMsgVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
mjonMsgVO.setSearchSortCnd("regDate");
mjonMsgVO.setSearchSortOrd("desc");
}
Map<String, Object> resultMap = mjonPayService.payUserSWListAjax(mjonMsgVO);
// 검색 데이터가 없거나
// 시작일자가 종료일자보다 이후이거나
// 기간이 365일이 넘으면 현재일부터 365일 날짜를 넣어서 검색
if(!DateUtils.dateChkAndValueChk(mjonMsgVO.getStartDate(),mjonMsgVO.getEndDate(), 12 )) {
mjonMsgVO.setStartDate(DateUtils.getDateMonthsAgo(12));
mjonMsgVO.setEndDate(DateUtils.getCurrentDate());
};
List<MjonMsgVO> payUserSWList = mjonMsgDataService.selectPayUserSWList(mjonMsgVO);
paginationInfo.setTotalRecordCount(payUserSWList.size()> 0 ? payUserSWList.get(0).getTotCnt() : 0);
paginationInfo.setTotalRecordCount((int)resultMap.get("totCnt"));
model.addAttribute("paginationInfo", paginationInfo);
model.addAttribute("payUserSWList", payUserSWList);
model.addAttribute("totSuccSendPrice", payUserSWList.size() > 0 ? PayUtils.getTrimToFirstDecimal(payUserSWList.get(0).getTotSuccSendPrice()) : 0);
model.addAttribute("payUserSWList", resultMap.get("payUserSWList"));
model.addAttribute("totSuccSendPrice", resultMap.get("totSuccSendPrice"));
model.addAttribute("mjonMsgVO", mjonMsgVO);
@ -2878,7 +2771,7 @@ public class MjonPayController {
font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold
sheet.setColumnWidth(1, 5000); // 칼럼의 조절
sheet.setColumnWidth(4, 10000); // 칼럼의 조절
sheet.setColumnWidth(3, 10000); // 칼럼의 조절
try{
@ -2903,6 +2796,7 @@ public class MjonPayController {
sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //셀병합
sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); //셀병합
cell = row.createCell(0);
@ -2910,46 +2804,29 @@ public class MjonPayController {
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue("날짜");
cell.setCellValue("발송일시");
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue("문자유");
cell.setCellValue("");
cell.setCellStyle(style);
cell = row.createCell(3);
cell.setCellValue("발송건수");
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue("내용");
cell.setCellStyle(style);
/*cell = row.createCell(5);
cell.setCellValue("충전");
sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); //셀병합
cell = row.createCell(4);
cell.setCellValue("발송건수");
sheet.addMergedRegion(new CellRangeAddress(0,0,4,5)); //셀병합
cell.setCellStyle(style);
cell = row.createCell(6);
cell.setCellStyle(style);*/
cell = row.createCell(5);
cell.setCellValue("사용");
sheet.addMergedRegion(new CellRangeAddress(0,0,5,6)); //셀병합
cell.setCellStyle(style);
cell = row.createCell(6);
cell.setCellValue("금액(원)");
cell.setCellStyle(style);
/*cell = row.createCell(9);
cell.setCellValue("잔액");
sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); //셀병합
cell.setCellStyle(style);
cell = row.createCell(10);
cell.setCellStyle(style);*/
row = sheet.createRow(1);
cell = row.createCell(0);
@ -2965,32 +2842,16 @@ public class MjonPayController {
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(5);
cell.setCellValue("충전금");
cell.setCellValue("실패");
cell.setCellStyle(style);
cell = row.createCell(6);
cell.setCellValue("포인트");
cell.setCellStyle(style);
/*cell = row.createCell(9);
cell.setCellValue("충전금");
cell.setCellStyle(style);
cell = row.createCell(10);
cell.setCellValue("포인트");
cell.setCellStyle(style);*/
DecimalFormat formatter = new DecimalFormat("###,###.##");
String befCash = "";
String befPoint = "";
@ -3033,15 +2894,11 @@ public class MjonPayController {
if(j==0) cell.setCellValue(i+1); //번호
if(j==1) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getRegDate()); //결제일시
if(j==2) cell.setCellValue(msgType); //문자유형
if(j==3) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendCnt()); //발송건수
if(j==4) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSmsTxt()); //내용
if(j==5) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendPrice()); //충전 - 충전금
if(j==6) cell.setCellValue(0); //충전 - 포인트
/*if(j==7) cell.setCellValue(totPrice); //사용 - 충전금
if(j==8) cell.setCellValue(0); //사용 - 포인트
if(j==9) cell.setCellValue(thisPoint); //잔액 - 충전금
if(j==10) cell.setCellValue(befPoint); //잔액 - 포인트
*/ }
if(j==3) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSmsTxt()); //내용
if(j==4) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendCnt()); //성공건수
if(j==5) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getFailSendCnt()); //실패건수
if(j==6) cell.setCellValue(((MjonMsgVO)payUserList.get(i)).getSuccSendPrice()); //금액
}
}
}
response.setHeader("Set-Cookie", "fileDownload=true; path=/");
@ -5051,28 +4908,11 @@ public class MjonPayController {
model.addAttribute("resultList", payUserSumList);
// 수신자 정보
String mberNm = ""; // 회사명
String managerNm = ""; // 담당자명
String moblphonNo = ""; // 연락처
MberManageVO mberManageVO = new MberManageVO();
mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
if (mberManageVO != null) {
// 회원종류 p-개인 c-기업
if (mberManageVO.getDept().equals("c")) {
mberNm = mberManageVO.getMberNm();
managerNm = mberManageVO.getManagerNm();
moblphonNo = mberManageVO.getMoblphonNo();
}
else {
mberNm = mberManageVO.getMberNm();
managerNm = mberManageVO.getMberNm();
moblphonNo = mberManageVO.getMoblphonNo();
}
}
model.addAttribute("mberNm", mberNm);
model.addAttribute("managerNm", managerNm);
model.addAttribute("moblphonNo", moblphonNo);
MJUtil mjUtil = new MJUtil();
MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
mberManageVO.setMoblphonNo(mjUtil.addDash(mberManageVO.getMoblphonNo()));
mberManageVO.setBizNo(mjUtil.bizNoAddDash(mberManageVO.getBizNo()));
model.addAttribute("mberManageVO", mberManageVO);
//부가세 포함 가격 정보 계산
double addTax = Math.round(totalSumPrice * 0.1);
@ -6190,7 +6030,42 @@ public class MjonPayController {
return "/uss/ion/pay/cashPointSendList";
}
/**
* * 거래명세서 팝업
* @param searchVO
* @param model
* @return "/web/member/pay/payInvoicePopupAjax.do"
* @throws Exception
*/
@RequestMapping(value= {"/web/member/pay/payInvoicePopupAjax.do"})
public String printInvoiceAjax(
@ModelAttribute("searchVO") MjonPayVO mjonPayVO
, RedirectAttributes redirectAttributes
, ModelMap model) throws Exception {
//로그인 권한정보 불러오기
LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(loginVO == null) {
//redirectAttributes.addFlashAttribute("message", "문자온 서비스는 로그인 후 이용 가능합니다.");
return "redirect:/web/user/login/login.do";
}
mjonPayVO.setUserId(userId);
//결제 정보 불러오기
MJUtil mjUtil = new MJUtil();
MjonPayVO result = mjonPayService.selectPayDetail(mjonPayVO);
result.setMbtlNum(mjUtil.addDash(result.getMbtlNum()));
result.setBizNo(mjUtil.bizNoAddDash(result.getBizNo()));
model.addAttribute("result", result);
return "web/pay/payInvoicePrintPopup";
}
/**
* @param p_pattern
* @param p_mjonPayVO

View File

@ -278,6 +278,8 @@ public class MjonPayV2Controller {
try {
// 다음 결제시 결제수단 SELECT
nextPayMethod = userManageService.selectNextPayMethod(userId);
// 실제 마지막 결제 방식 -
}
catch(Exception e) {
isSuccess = false;
@ -1640,6 +1642,45 @@ public class MjonPayV2Controller {
return "web/cop/kgmV2/bankOkUrl";
}
/**
* 마지막 결제수단 SELECT
* @throws Exception
*/
@RequestMapping(value = "/web/member/pay/selectLastPayMethodAjax.do")
public ModelAndView selectLastPayMethodAjax(MjonPayVO mjonPayVO,
HttpServletRequest request ) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("jsonView");
boolean isSuccess = true;
String msg = "";
String nextPayMethod = "";
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
if(userId == null) {
isSuccess = false;
msg = "로그인이 필요합니다.";
}
try {
// 다음 결제시 결제수단 SELECT
nextPayMethod = userManageService.selectLastPayMethod(userId);
}
catch(Exception e) {
isSuccess = false;
msg = e.getMessage();
}
modelAndView.addObject("isSuccess", isSuccess);
modelAndView.addObject("msg", msg);
modelAndView.addObject("nextPayMethod", nextPayMethod);
return modelAndView;
}
// Get Server Path
public static String getKgServerPath(HttpServletRequest request) {
String kgmPath = request.getScheme() + "://" + request.getServerName() +":" + request.getServerPort();

View File

@ -1,5 +1,10 @@
package itn.let.uat.uia.service.impl;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.List;
import javax.annotation.Resource;
@ -11,14 +16,16 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import itn.com.cmm.util.StringUtil;
import itn.com.uss.olh.hpc.service.HackIpService;
import itn.com.uss.olh.hpc.service.HackIpVO;
import itn.com.utl.fcc.service.EgovStringUtil;
import itn.let.mjo.cert.service.CertVO;
import itn.let.mjo.msgdata.service.MjonMsgDataService;
import itn.let.mjo.msgsent.service.MjonMsgSentVO;
import itn.let.mjo.pay.service.KmcVO;
import itn.let.sec.rgm.service.AuthorGroup;
import itn.let.sec.rgm.service.EgovAuthorGroupService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.uat.uia.service.AuthCertVO;
import itn.let.uss.umt.service.AdmProcHstryVO;
import itn.let.uss.umt.service.EgovMberManageService;
@ -82,6 +89,10 @@ public class EgovMberManageServiceImpl extends EgovAbstractServiceImpl implement
@Resource(name = "hackIpService")
private HackIpService hackIpService;
/* MjonMsgDataService */
@Resource(name = "MjonMsgDataService")
private MjonMsgDataService mjonMsgDataService;
@Override
public int insertMber(MberManageVO mberManageVO) throws Exception {
@ -621,4 +632,71 @@ public class EgovMberManageServiceImpl extends EgovAbstractServiceImpl implement
return mberManageDAO.findTopByregDateFromCertLog(authCertVO);
}
public MberManageVO selectMberHeaderInfo(String mberId) throws Exception {
//회원 단가, 이벤트 단가, 이벤트 종료일 조회
MberManageVO headerInfo = mberManageDAO.selectMberHeaderInfo(mberId);
//기본 단가 조회
JoinSettingVO sysPrice = mjonMsgDataService.selectJoinSettingInfo();
//이벤트 종료까지 남은 계산
long eventLeftDay = calculateEventLeftDay(headerInfo.getEventEndDate());
headerInfo.setEventLeftDay(String.valueOf(eventLeftDay));
//이벤트 유무에 따라 이벤트 잔액 or 잔액 사용
boolean isEventActive = eventLeftDay > 0;
double money = isEventActive ? headerInfo.getEventRemainCash() : headerInfo.getUserMoney();
//이벤트, 회원 단가가 0일 기본 단가 사용
setPrices(headerInfo, sysPrice, isEventActive);
//발송가능 건수 조회
calculateAvailableCounts(headerInfo, money);
return headerInfo;
}
private long calculateEventLeftDay(String eventEndDateStr) {
if (StringUtil.isEmpty(eventEndDateStr)) return 0;
LocalDate today = LocalDate.now();
LocalDate eventEndDate = LocalDate.parse(eventEndDateStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
return ChronoUnit.DAYS.between(today, eventEndDate);
}
private void setPrices(MberManageVO headerInfo, JoinSettingVO sysPrice, boolean isEventActive) {
if (isEventActive) {
headerInfo.setHeaderShortPrice(priceChk(headerInfo.getEventShortPrice(), sysPrice.getShortPrice()));
headerInfo.setHeaderLongPrice(priceChk(headerInfo.getEventLongPrice(), sysPrice.getLongPrice()));
headerInfo.setHeaderPicturePrice(priceChk(headerInfo.getEventPicturePrice(), sysPrice.getPicturePrice()));
headerInfo.setHeaderPicture2Price(priceChk(headerInfo.getEventPicture2Price(), sysPrice.getPicture2Price()));
headerInfo.setHeaderPicture3Price(priceChk(headerInfo.getEventPicture3Price(), sysPrice.getPicture3Price()));
} else {
headerInfo.setHeaderShortPrice(priceChk(headerInfo.getShortPrice(), sysPrice.getShortPrice()));
headerInfo.setHeaderLongPrice(priceChk(headerInfo.getLongPrice(), sysPrice.getLongPrice()));
headerInfo.setHeaderPicturePrice(priceChk(headerInfo.getPicturePrice(), sysPrice.getPicturePrice()));
headerInfo.setHeaderPicture2Price(priceChk(headerInfo.getPicture2Price(), sysPrice.getPicture2Price()));
headerInfo.setHeaderPicture3Price(priceChk(headerInfo.getPicture3Price(), sysPrice.getPicture3Price()));
}
// 카카오, 팩스 단가는 기본 단가 고정
headerInfo.setHeaderKakaoAtPrice(sysPrice.getKakaoAtPrice());
headerInfo.setHeaderFaxPrice(sysPrice.getFaxPrice());
}
private float priceChk(float price, float sysPrice) {
return price > 0 ? price : sysPrice;
}
private void calculateAvailableCounts(MberManageVO headerInfo, double money) {
headerInfo.setHeaderShortCnt(calcCount(money, headerInfo.getHeaderShortPrice()));
headerInfo.setHeaderLongCnt(calcCount(money, headerInfo.getHeaderLongPrice()));
headerInfo.setHeaderPictureCnt(calcCount(money, headerInfo.getHeaderPicturePrice()));
headerInfo.setHeaderPicture2Cnt(calcCount(money, headerInfo.getHeaderPicture2Price()));
headerInfo.setHeaderPicture3Cnt(calcCount(money, headerInfo.getHeaderPicture3Price()));
headerInfo.setHeaderKakaoAtCnt(calcCount(money, headerInfo.getHeaderKakaoAtPrice()));
headerInfo.setHeaderFaxCnt(calcCount(money, headerInfo.getHeaderFaxPrice()));
}
private int calcCount(double money, double price) {
if (price <= 0) return 0;
return (int) Math.floor(money / price);
}
}

View File

@ -345,5 +345,8 @@ public class MberManageDAO extends EgovComAbstractDAO{
public String findTopByregDateFromCertLog(AuthCertVO authCertVO) {
return (String)select("mberManageDAO.findTopByregDateFromCertLog", authCertVO);
}
public MberManageVO selectMberHeaderInfo(String mberId) {
return (MberManageVO) select("mberManageDAO.selectMberHeaderInfo", mberId);
}
}

View File

@ -251,4 +251,6 @@ public interface EgovMberManageService {
public String findTopByregDateFromCertLog(AuthCertVO authCertVO);
//사용자 헤더 정보(단가, 이벤트 활성화 기간)
public MberManageVO selectMberHeaderInfo(String mberId) throws Exception;
}

View File

@ -220,4 +220,6 @@ public interface EgovUserManageService {
public Map<String, Object> selectFaxSendList(FaxGroupDataVO faxGroupDataVO);
// 마지막 결제수단 조회
public String selectLastPayMethod(String mberId) throws Exception;
}

View File

@ -512,6 +512,39 @@ public class MberManageVO extends UserDefaultVO{
*/
private String secuLoginFlag;
/**
* 회원 이벤트 정보
*/
private String eventEndDate; //회원 이벤트 종료일자
private double eventRemainCash; //이벤트 차감 남은 Cash
private float eventShortPrice; //이벤트 단문 가격
private float eventLongPrice; //이벤트 장문 가격
private float eventPicturePrice; //이벤트 그림 1장 가격
private float eventPicture2Price; //이벤트 그림 2장 가격
private float eventPicture3Price; //이벤트 그림 3장 가격
private String eventLeftDay; //이벤트 남은 기간
/**
* 헤더 영역 정보(단가, 발송가능 건수)
*/
private float headerShortPrice;
private float headerLongPrice;
private float headerPicturePrice;
private float headerPicture2Price;
private float headerPicture3Price;
private float headerKakaoAtPrice;
private float headerKakaoFtPrice;
private float headerFaxPrice;
private int headerShortCnt;
private int headerLongCnt;
private int headerPictureCnt;
private int headerPicture2Cnt;
private int headerPicture3Cnt;
private int headerKakaoAtCnt;
private int headerKakaoFtCnt;
private int headerFaxCnt;
public String getSmsCode() {
return smsCode;
}
@ -1804,6 +1837,150 @@ public class MberManageVO extends UserDefaultVO{
public void setSecuLoginFlag(String secuLoginFlag) {
this.secuLoginFlag = secuLoginFlag;
}
public String getEventEndDate() {
return eventEndDate;
}
public void setEventEndDate(String eventEndDate) {
this.eventEndDate = eventEndDate;
}
public double getEventRemainCash() {
return eventRemainCash;
}
public void setEventRemainCash(double eventRemainCash) {
this.eventRemainCash = eventRemainCash;
}
public float getEventShortPrice() {
return eventShortPrice;
}
public void setEventShortPrice(float eventShortPrice) {
this.eventShortPrice = eventShortPrice;
}
public float getEventLongPrice() {
return eventLongPrice;
}
public void setEventLongPrice(float eventLongPrice) {
this.eventLongPrice = eventLongPrice;
}
public float getEventPicturePrice() {
return eventPicturePrice;
}
public void setEventPicturePrice(float eventPicturePrice) {
this.eventPicturePrice = eventPicturePrice;
}
public float getEventPicture2Price() {
return eventPicture2Price;
}
public void setEventPicture2Price(float eventPicture2Price) {
this.eventPicture2Price = eventPicture2Price;
}
public float getEventPicture3Price() {
return eventPicture3Price;
}
public void setEventPicture3Price(float eventPicture3Price) {
this.eventPicture3Price = eventPicture3Price;
}
public String getEventLeftDay() {
return eventLeftDay;
}
public void setEventLeftDay(String eventLeftDay) {
this.eventLeftDay = eventLeftDay;
}
public float getHeaderShortPrice() {
return headerShortPrice;
}
public void setHeaderShortPrice(float headerShortPrice) {
this.headerShortPrice = headerShortPrice;
}
public float getHeaderLongPrice() {
return headerLongPrice;
}
public void setHeaderLongPrice(float headerLongPrice) {
this.headerLongPrice = headerLongPrice;
}
public float getHeaderPicturePrice() {
return headerPicturePrice;
}
public void setHeaderPicturePrice(float headerPicturePrice) {
this.headerPicturePrice = headerPicturePrice;
}
public float getHeaderPicture2Price() {
return headerPicture2Price;
}
public void setHeaderPicture2Price(float headerPicture2Price) {
this.headerPicture2Price = headerPicture2Price;
}
public float getHeaderPicture3Price() {
return headerPicture3Price;
}
public void setHeaderPicture3Price(float headerPicture3Price) {
this.headerPicture3Price = headerPicture3Price;
}
public int getHeaderShortCnt() {
return headerShortCnt;
}
public void setHeaderShortCnt(int headerShortCnt) {
this.headerShortCnt = headerShortCnt;
}
public int getHeaderLongCnt() {
return headerLongCnt;
}
public void setHeaderLongCnt(int headerLongCnt) {
this.headerLongCnt = headerLongCnt;
}
public int getHeaderPictureCnt() {
return headerPictureCnt;
}
public void setHeaderPictureCnt(int headerPictureCnt) {
this.headerPictureCnt = headerPictureCnt;
}
public int getHeaderPicture2Cnt() {
return headerPicture2Cnt;
}
public void setHeaderPicture2Cnt(int headerPicture2Cnt) {
this.headerPicture2Cnt = headerPicture2Cnt;
}
public int getHeaderPicture3Cnt() {
return headerPicture3Cnt;
}
public void setHeaderPicture3Cnt(int headerPicture3Cnt) {
this.headerPicture3Cnt = headerPicture3Cnt;
}
public float getHeaderKakaoAtPrice() {
return headerKakaoAtPrice;
}
public void setHeaderKakaoAtPrice(float headerKakaoAtPrice) {
this.headerKakaoAtPrice = headerKakaoAtPrice;
}
public float getHeaderKakaoFtPrice() {
return headerKakaoFtPrice;
}
public void setHeaderKakaoFtPrice(float headerKakaoFtPrice) {
this.headerKakaoFtPrice = headerKakaoFtPrice;
}
public float getHeaderFaxPrice() {
return headerFaxPrice;
}
public void setHeaderFaxPrice(float headerFaxPrice) {
this.headerFaxPrice = headerFaxPrice;
}
public int getHeaderKakaoAtCnt() {
return headerKakaoAtCnt;
}
public void setHeaderKakaoAtCnt(int headerKakaoAtCnt) {
this.headerKakaoAtCnt = headerKakaoAtCnt;
}
public int getHeaderKakaoFtCnt() {
return headerKakaoFtCnt;
}
public void setHeaderKakaoFtCnt(int headerKakaoFtCnt) {
this.headerKakaoFtCnt = headerKakaoFtCnt;
}
public int getHeaderFaxCnt() {
return headerFaxCnt;
}
public void setHeaderFaxCnt(int headerFaxCnt) {
this.headerFaxCnt = headerFaxCnt;
}
}

View File

@ -882,5 +882,11 @@ public class EgovUserManageServiceImpl extends EgovAbstractServiceImpl implement
return resultMap;
}
// 마지막 결제수단 SELECT
@Override
public String selectLastPayMethod(String mberId) throws Exception {
return userManageDAO.selectLastPayMethod(mberId);
}
}

View File

@ -320,5 +320,9 @@ public class UserManageDAO extends EgovAbstractDAO{
public int selectUserPrePaymentPGdataCount(String userId) throws Exception{
return (int) select("userManageDAO.selectUserPrePaymentPGdataCount", userId);
}
// 마지막 결제수단 SELECT
public String selectLastPayMethod(String mberId) throws Exception{
return (String) select("userManageDAO.selectLastPayMethod", mberId);
}
}

View File

@ -12,6 +12,9 @@ import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@ -106,6 +109,7 @@ import itn.let.lett.service.LetterVO;
import itn.let.mjo.addr.service.AddrTransHistService;
import itn.let.mjo.addr.service.AddrTransHistVO;
import itn.let.mjo.event.service.MjonEventService;
import itn.let.mjo.event.service.MjonEventVO;
import itn.let.mjo.kisa.service.KisaService;
import itn.let.mjo.kisa.service.KisaVO;
import itn.let.mjo.mjocommon.MjonForienIpChk;
@ -130,6 +134,7 @@ import itn.let.sym.mnu.mpm.service.MenuManageVO;
import itn.let.sym.prm.service.EgovProgrmManageService;
import itn.let.sym.prm.service.ProgrmManageVO;
import itn.let.sym.site.service.EgovSiteManagerService;
import itn.let.sym.site.service.JoinSettingVO;
import itn.let.sym.site.service.MetaTagVO;
import itn.let.sym.site.service.SiteManagerVO;
import itn.let.uss.umt.service.EgovMberManageService;
@ -1256,6 +1261,16 @@ public class MainController {
model.addAttribute("mberManageVO", userManageService.selectUserInfo(mberManageVO));
}
/*
* 회원별 단가, 기본 단가, 이벤트 정보 조회
* 2025.07.25 이지우 추가
* */
MberManageVO mberHeaderInfoVO = new MberManageVO();
if(loginVO != null) {
mberHeaderInfoVO = mberManageService.selectMberHeaderInfo(loginVO.getId());
}
model.addAttribute("mberHeaderInfoVO", mberHeaderInfoVO);
return "web/com/webCommonHeader";
}

View File

@ -569,10 +569,8 @@
on A.ADDR_GRP_ID = mag.ADDR_GRP_ID
WHERE
A.MBER_ID = #mberId#
AND (A.RECV_STATUS = 'Y'
or A.RECV_STATUS = 'S'
or A.RECV_STATUS is null)
AND mag.DELETE_YN = 'N'
AND (A.RECV_STATUS IN ('Y', 'S') OR A.RECV_STATUS IS NULL)
AND (A.ADDR_GRP_ID IS NULL OR MAG.DELETE_YN = 'N')
</select>
<!-- 주소록 상세 조회 -->
@ -1354,34 +1352,32 @@
, BOOKMARK
, RECV_STATUS
)
SELECT
ADDR_GRP_ID
, MBER_ID
, ADDR_NM
, ADDR_PHONE_NO
, ADDR_INFO1
, ADDR_INFO2
, ADDR_INFO3
, ADDR_INFO4
, ADDR_COMMENT
, FRST_REGIST_PNTTM
, FRST_REGISTER_ID
, LAST_UPDT_PNTTM
, LAST_UPDUSR_ID
, DELETE_YN
, BOOKMARK
, RECV_STATUS
FROM TEMP_MJ_ADDR
WHERE MBER_ID = #mberId#
AND ADDR_GRP_ID = #addrGrpId#
AND BOOKMARK = #bookmark#
AND ADDR_PHONE_NO NOT IN
(
SELECT ADDR_PHONE_NO FROM MJ_ADDR
WHERE MBER_ID = #mberId#
AND ADDR_GRP_ID = #addrGrpId#
AND BOOKMARK = #bookmark#
)
SELECT t.ADDR_GRP_ID,
t.MBER_ID,
t.ADDR_NM,
FN_GETHYPHEN(t.ADDR_PHONE_NO),
t.ADDR_INFO1,
t.ADDR_INFO2,
t.ADDR_INFO3,
t.ADDR_INFO4,
t.ADDR_COMMENT,
t.FRST_REGIST_PNTTM,
t.FRST_REGISTER_ID,
t.LAST_UPDT_PNTTM,
t.LAST_UPDUSR_ID,
t.DELETE_YN,
t.BOOKMARK,
t.RECV_STATUS
FROM TEMP_MJ_ADDR AS t
LEFT JOIN MJ_ADDR AS m
ON m.MBER_ID = t.MBER_ID
AND m.ADDR_GRP_ID = t.ADDR_GRP_ID
AND m.BOOKMARK = t.BOOKMARK
AND replace(m.ADDR_PHONE_NO, '-', '') = replace(t.ADDR_PHONE_NO, '-', '')
WHERE t.MBER_ID = #mberId#
AND t.ADDR_GRP_ID = #addrGrpId#
AND t.BOOKMARK = #bookmark#
AND m.MBER_ID IS NULL
</insert>

View File

@ -2184,6 +2184,8 @@
, BLINE_CODE AS blineCode
, AT_SMISHING_YN AS atSmishingYn
, PRE_PAYMENT_YN AS prePaymentYn
, BIZ_NO AS bizNo
, MBER_EMAIL_ADRES AS mberEmailAdres
FROM LETTNGNRLMBER
WHERE MBER_ID = #userId#
@ -3172,6 +3174,7 @@
WHERE 1 = 1
AND pf.SentEA > 0
AND mjf.USER_ID = #userId#
AND mjf.RESERVE_C_YN = 'N'
) AS pay
WHERE 1=1
@ -3281,7 +3284,7 @@
, M.fileName3 AS fileName3
, M.orderByCode AS orderByCode
, M.msgId AS msgId
, M.reqDate AS reqDate
, DATE_FORMAT(M.reqDate, '%Y-%m-%d %H:%i') AS reqDate
FROM
(SELECT
DATE_FORMAT(B.REGDATE, '%Y-%m-%d %H:%i' ) AS regDate
@ -3322,7 +3325,7 @@
/*and A.DEL_FLAG = 'N'*/
AND A.USER_ID = #userId#
AND B.USER_ID = #userId#
/*AND B.RESERVE_C_YN = 'N'*/
AND B.RESERVE_C_YN = 'N'
ORDER BY 1=1
, msgGroupId DESC
, sentDate DESC
@ -3370,6 +3373,7 @@
WHERE 1 = 1
AND pf.SentEA > 0
AND mjf.USER_ID = #userId#
AND mjf.RESERVE_C_YN = 'N'
) AS pay
WHERE 1=1
@ -3595,9 +3599,9 @@
, MIN(DATE_FORMAT(M.REQ_DATE, '%Y-%m-%d' )) AS minRegDate
, M.msgTypeName
, M.orderByCode
, SUM(IF(M.msgTypeName = '단문(SMS)', 1, 0)) AS shtSendCount
, SUM(IF(M.msgTypeName = '장문(LMS)', 1, 0)) AS longSendCount
, SUM(IF(M.msgTypeName = '그림(MMS)', 1, 0)) AS pictSendCount
, SUM(IF(M.msgTypeName = '단문', 1, 0)) AS shtSendCount
, SUM(IF(M.msgTypeName = '장문', 1, 0)) AS longSendCount
, SUM(IF(M.msgTypeName = '그림', 1, 0)) AS pictSendCount
, SUM(IF(M.msgTypeName = '알림톡', 1, 0)) AS atSendCount
, SUM(IF(M.msgTypeName = '친구톡', 1, 0)) AS ftSendCount
<!-- , SUM(M.MSG_GROUP_CNT) AS sendCount -->
@ -3616,14 +3620,14 @@
, B.MSG_TYPE
, CASE
WHEN B.MSG_TYPE = '6' AND B.FILE_CNT > 0
THEN '그림(MMS)'
THEN '그림'
WHEN B.MSG_TYPE = '6' AND B.FILE_CNT = 0
THEN '장문(LMS)'
THEN '장문'
WHEN B.MSG_TYPE = '8'
THEN '알림톡'
WHEN B.MSG_TYPE = '9'
THEN '친구톡'
ELSE '단문(SMS)'
ELSE '단문'
END msgTypeName
, CASE
WHEN B.MSG_TYPE = '6' AND B.FILE_CNT > 0

View File

@ -101,6 +101,7 @@
, D.CODE_NM AS rcptTypeTxt
, E.CONFIRM_YN AS confirmYn
, E.RCPT_TYPE AS rcptType
, E.CONFIRM_DATE AS confirmDate
, IFNULL(MP.POINT, '0') AS point
, EMI.EVENT_PG_MOID AS eventMoid
, mber.SMISHING_YN AS smishingYn
@ -149,6 +150,7 @@
MOID
, CONFIRM_YN
, RCPT_TYPE
, CONFIRM_DATE
FROM
MJ_TAX
WHERE 1=1
@ -2373,4 +2375,27 @@
</select>
<select id="mjonPayDAO.selectPayDetail" parameterClass="mjonPayVO" resultClass="mjonPayVO">
SELECT
LM.BIZ_NO AS bizNo
, LM.MBER_NM AS mberNm
, LM.MANAGER_NM AS managerNm
, LM.MBTLNUM AS mbtlNum
, LM.MBER_EMAIL_ADRES AS email
, LM.PRE_PAYMENT_YN AS prePaymentYn
, LM.DEPT AS dept
, LM.USER_MONEY AS userMoney
, MP.REG_DATE AS regDate
, MP.AMT AS amt
, MP.CASH AS cash
, MP.PG_STATUS AS pgStatus
FROM LETTNGNRLMBER LM
LEFT JOIN MJ_PG MP
ON MP.USER_ID = LM.MBER_ID
WHERE LM.MBER_ID = #userId#
AND MP.MOID = #moid#
</select>
</sqlMap>

View File

@ -2142,4 +2142,38 @@
</update>
<select id="mberManageDAO.selectMberHeaderInfo" resultClass="itn.let.uss.umt.service.MberManageVO" parameterClass="String">
SELECT
L.SHORT_PRICE AS shortPrice
, L.LONG_PRICE AS longPrice
, L.PICTURE_PRICE AS picturePrice
, L.PICTURE2_PRICE AS picture2Price
, L.PICTURE3_PRICE AS picture3Price
, L.PRE_PAYMENT_YN AS prePaymentYn
, L.USER_MONEY AS userMoney
, IFNULL(MEMI.EVENT_SHORT_PRICE, 0) AS eventShortPrice
, IFNULL(MEMI.EVENT_LONG_PRICE, 0) AS eventLongPrice
, IFNULL(MEMI.EVENT_PICTURE_PRICE, 0) AS eventPicturePrice
, IFNULL(MEMI.EVENT_PICTURE2_PRICE, 0) AS eventPicture2Price
, IFNULL(MEMI.EVENT_PICTURE3_PRICE, 0) AS eventPicture3Price
, IFNULL(MEMI.EVENT_REMAIN_CASH, 0) AS eventRemainCash
, DATE_FORMAT(MEMI.EVENT_END_DATE, '%Y-%m-%d') AS eventEndDate
FROM
LETTNGNRLMBER L
LEFT JOIN
MJ_EVENT_MBER_INFO MEMI
ON L.MBER_ID = MEMI.MBER_ID
AND MEMI.EVENT_INFO_ID = (
SELECT
MAX(EVENT_INFO_ID)
FROM
MJ_EVENT_MBER_INFO
WHERE
MBER_ID = #mberID#
AND EVENT_STATUS = 'Y'
)
WHERE L.MBER_ID = #mberId#
</select>
</sqlMap>

View File

@ -1458,5 +1458,15 @@
AND MONTH(REG_DATE) = MONTH(CURRENT_DATE)
</select>
<!-- 마지막 결제수단 SELECT -->
<select id="userManageDAO.selectLastPayMethod" parameterClass="String" resultClass="String">
SELECT
IFNULL(PAY_METHOD, '') AS nextPayMethod
FROM MJ_PG
WHERE
USER_ID = #userId#
ORDER BY REG_DATE DESC LIMIT 1
</select>
</sqlMap>

View File

@ -112,16 +112,17 @@ function insertAddrAjax() {
// return;
//}
if(!checkHpNum(form.addrPhoneNo.value)){//휴대폰 유효성 검사
if(!checkNorPhoneNum(form.addrPhoneNo.value)){//일반전화 유효성 검사
if(!isValidPhoneNumber(form.addrPhoneNo.value)){//일반전화 유효성 검사
const formattedNumber =formatPhoneNumber(form.addrPhoneNo.value); // 번호 표준화
if(!isValidPhoneNumber(formattedNumber)){
alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다.");
return false;
}
}
//휴대폰번호 포맷 맞추기
form.addrPhoneNo.value = formatPhoneNumber(form.addrPhoneNo.value);
var data = new FormData(form);
$.ajax({

View File

@ -1398,14 +1398,14 @@ function actionLogin_end(){
<div class="inner">
<ul class="menu_left">
<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>
<li><a href="<c:out value='/web/user/mberInfoChange.do'/>" ><i class="hdTop_mypage"></i>마이페이지</a></li>
<li><a href="<c:out value='/web/cop/bbs/QnaList.do'/>" ><i class="hdTop_center"></i>1:1 문의</a></li>
</ul>
<ul class="menu_right">
<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/NoticeList.do" >고객센터</a></li>
<li class="SortLine"><a href="/web/cop/bbs/SuggestList.do" >불편신고</a></li>
</ul>
</div>
@ -1627,7 +1627,9 @@ function actionLogin_end(){
</li>
<li>
<dl>
<dt><a href="<c:out value='/web/user/mberInfoIndex.do'/>" >마이페이지</a></dt>
<%-- 250724 마이페이지 대시보드 삭제 --%>
<%-- <dt><a href="<c:out value='/web/user/mberInfoIndex.do'/>" >마이페이지</a></dt> --%>
<dt><a href="<c:out value='/web/user/mberInfoChange.do'/>" >마이페이지</a></dt>
<dd>
<ul>
<li><a href="<c:out value='/web/user/mberInfoChange.do'/>" >회원정보 변경</a></li>
@ -1637,7 +1639,7 @@ function actionLogin_end(){
</c:if>
<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/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>
@ -1652,7 +1654,7 @@ function actionLogin_end(){
<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/payUserSWList.do'/>" >요금 사용내역</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>
@ -1744,8 +1746,9 @@ function actionLogin_end(){
<div class="login_left">
<div class="login_info">
<input type="hidden" id="loginId" name="loginId" value="${LoginVO.id}">
<i><img src="/publish/images/mypageIcon2.png" id="commonHeaderGradeIcon" /></i>
<!-- <i><img src="/publish/images/mypageIcon2.png" id="commonHeaderGradeIcon" /></i> -->
<div class="login2_name" onclick="location.href='/web/user/mberInfoChange.do'" style="cursor:pointer;">
<i class="icon_user"></i>
<p><c:out value="${LoginVO.name}"/></p>
<c:choose>
<c:when test="${LoginVO.dept == 'p'}">
@ -1765,8 +1768,8 @@ function actionLogin_end(){
<img src="/pb/img/common/topTimeOut.png" alt="타임아웃 아이콘">
</a> -->
</div>
<button type="button" class="btnType btnType3" onclick="location.href='/web/user/mberInfoIndex.do'">마이페이지</button>
<button type="button" class="btnType btnType2" onclick="location.href='/web/uat/uia/actionLogout.do'">로그아웃</button>
<!-- <button type="button" class="btnType btnType3" onclick="location.href='/web/user/mberInfoIndex.do'">마이페이지</button> -->
<button type="button" class="btnType btn_36 fill_gray" onclick="location.href='/web/uat/uia/actionLogout.do'">로그아웃</button>
<div class="security_box">
@ -1778,34 +1781,89 @@ function actionLogin_end(){
</div>
<div class="login_pay">
<div class="check_money">
<div class="holdingsum_box">
<div class="holdingsum_box">
<i></i>
<div class="user_money_wrap">
보유잔액
<div class="hover_content_wrap">
<i class="qmMark">?</i>
<div class="hover_content">
<p class="hover_content_title">
<img src="/publish/images/content/icon_mypage_message.png" alt=""> 나의단가 <span>(발송가능 건수)</span>
</p>
<ul class="send_available_number">
<li>
<p class="title">· 단문</p>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerShortPrice}" var="shortPrice" />
<p class="number"><span class="c_002c9a fwBold"><c:out value="${shortPrice}"/></span>원
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerShortCnt}" var="shortCnt" />
(<c:out value="${shortCnt}"/>건)</p>
</li>
<li>
<p class="title">· 장문</p>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerLongPrice}" var="LongPrice" />
<p class="number"><span class="c_002c9a fwBold"><c:out value="${LongPrice}"/></span>원
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerLongCnt}" var="LongCnt" />
(<c:out value="${LongCnt}"/>건)</p>
</li>
<li>
<p class="title">· 그림(1장)</p>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPicturePrice}" var="picturePrice" />
<p class="number"><span class="c_002c9a fwBold"><c:out value="${picturePrice}"/></span>원
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPictureCnt}" var="pictureCnt" />
(<c:out value="${pictureCnt}"/>건)</p>
</li>
<li>
<p class="title">· 그림(2장)</p>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPicture2Price}" var="picture2Price" />
<p class="number"><span class="c_002c9a fwBold"><c:out value="${picture2Price}"/></span>원
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPicture2Cnt}" var="picture2Cnt" />
(<c:out value="${picture2Cnt}"/>건)</p>
</li>
<li>
<p class="title">· 그림(3장)</p>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPicture3Price}" var="picture3Price" />
<p class="number"><span class="c_002c9a fwBold"><c:out value="${picture3Price}"/></span>원
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerPicture3Cnt}" var="picture3Cnt" />
(<c:out value="${picture3Cnt}"/>건)</p>
</li>
<li>
<p class="title">· 알림톡</p>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerKakaoAtPrice}" var="kakaoAtPrice" />
<p class="number"><span class="c_002c9a fwBold"><c:out value="${kakaoAtPrice}"/></span>원
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerKakaoAtCnt}" var="kakaoAtCnt" />
(<c:out value="${kakaoAtCnt}"/>건)</p>
</li>
<li>
<p class="title">· 팩스</p>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerFaxPrice}" var="faxPrice" />
<p class="number"><span class="c_002c9a fwBold"><c:out value="${faxPrice}"/></span>원
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.headerFaxCnt}" var="faxCnt" />
(<c:out value="${faxCnt}"/>건)</p>
</li>
</ul>
<c:if test="${prePaymentYn eq 'Y' and mberHeaderInfoVO.eventLeftDay > 0}">
<fmt:formatNumber type="number" maxFractionDigits="3" value="${mberHeaderInfoVO.eventRemainCash}" var="eventRemainCash" />
<div class="event_term"><p>이벤트<span class="fwBold">(D-${mberHeaderInfoVO.eventLeftDay})</span></p><p><span class="fwBold price">${eventRemainCash}</span>원</p></div>
</c:if>
<c:if test="${prePaymentYn eq 'N'}">
<div class="event_term" style="display:block">후불제(매월 1일 자동충전)</div>
</c:if>
</div>
</div>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${userMoney}" var="commaPrice" />
<p>보유잔액<!-- <em>(캐시)</em> --> <span class="fwMd" id="hdUserMoney"><c:out value="${commaPrice}"/></span>원</p>
<c:if test="${prePaymentYn eq 'N'}">
<dl>
<dd>후불제 고객의 보유잔액(캐시)은 당월 발송 가능<br>금액을 말하며 <span>매월 1일 자동으로 충전</span>됩니다.</dd>
</dl>
</c:if>
</div>
<span class="fwMd" id="hdUserMoney"><c:out value="${commaPrice}"/></span>원
</ >
</div>
<button type="button" class="btnType btnType3" onclick="location.href='/web/member/pay/PayView.do'">충전</button>
<div class="account_box">
<button type="button" class="btnType btnType3" onclick="location.href='/web/member/pay/PayView.do?tabType=2'">전용계좌</button>
<c:if test="${not empty myBankList}">
<dl>
<dt>전용계좌</dt>
<dd><c:out value="${myBankList[0].codeNm}"/> <c:out value="${myBankList[0].acctNo}"/></dd>
</dl>
</c:if>
</div>
</div>
<div class="point">
<i></i>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${userPoint}" var="commaPoint" />
<p><!-- <em>적립</em> -->포인트 <span class="fwMd"><c:out value="${commaPoint}"/></span>원</p>
<button type="button" data-tooltip="popup04" class="btnType btnType3">교환</button>
</div>
</div>
<div class="point">
<i></i>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${userPoint}" var="commaPoint" />
<p><!-- <em>적립</em> -->포인트 <span class="fwMd"><c:out value="${commaPoint}"/></span>원</p>
<button type="button" data-tooltip="popup04" class="btnType btnType3">교환</button>
</div>
<!-- <div class="event">
<span><i></i>이달의 이벤트</span>
<button type="button" class="btnType btnType2" onclick="location.href='/web/cop/bbs/EventList.do'">GO</button>

View File

@ -26,13 +26,6 @@
<p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt=""><c:out value="${searchVO.yellowId}"/></p>
<!-- 텍스트 미리보기 -->
<div class="text_preview">
<%--< div class="allimtalk_title">
<img src="/publish/images/content/icon_allimtalk.png" alt="">
<c:choose>
<c:when test="${msgType eq '8'}">알림톡 도착</c:when>
<c:when test="${msgType eq '9'}">친구톡 도착</c:when>
</c:choose>
</div> --%>
<c:if test="${resultMsgDetail.adFlag eq 'Y'}">
<p class="friend_talk_title"><span>(광고)</span></p>
</c:if>
@ -92,8 +85,8 @@
<!-- <div class="tab_phone" id="tab_phone_2" style="display:none" > -->
<div class="phoneIn">
<div>
<p class="prev_p"><img src="/publish/images/search.png"> 문자내용</p>
<div class="text_length2 clearfix">
<span>발송일시 : <fmt:formatDate value="${parsedDate}" pattern="yyyy-MM-dd HH:mm:ss"/></span>
<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
<c:choose>
<c:when test="${resultMsgDetail.bizKakaoResendType eq 'SMS'}">
@ -105,15 +98,15 @@
</c:choose>
<%-- <c:choose>
<c:when test="${resultMsgDetail.bizKakaoResendTypeCnt > 1}">
<span class="msg_com msg_short">단문</span>
<span class="msg_com msg_long">장문</span>
<span class="msg_com msg_short" style="float:right;">단문</span>
<span class="msg_com msg_long" style="float:right;">장문</span>
</c:when>
<c:when test="${resultMsgDetail.bizKakaoResendTypeCnt < 2
&& resultMsgDetail.bizKakaoResendType eq 'SMS'}">
<span class="msg_com msg_short">단문</span>
<span class="msg_com msg_short" style="float:right;">단문</span>
</c:when>
<c:otherwise>
<span class="msg_com msg_long">장문</span>
<span class="msg_com msg_long" style="float:right;">장문</span>
</c:otherwise>
</c:choose> --%>
</c:if>

View File

@ -273,7 +273,7 @@ $(document).ready(function(){
</div>
<!-- 관리자가 문자 상세에서 이용정지 처리 시 내용(문자 내용 안내) -->
<c:if test="${not empty spamMemberInfoVO.msgGroupId}">
<%-- <c:if test="${not empty spamMemberInfoVO.msgGroupId}">
<div class="input_list listType2">
<div class="input_list_item">
<div class="input_left">회원님의 아이디로 발송된 <strong>정보통신망법 제50조 위반</strong> 문자내용</div>
@ -323,7 +323,7 @@ $(document).ready(function(){
</div>
</div>
</div>
</c:if>
</c:if> --%>
<!-- 관리자가 사용자 상세에서 이용정지 처리 시 내용(관리자가 작성한 사유 안내) -->
<c:if test="${not empty spamMemberInfoVO.smiMemo}">

View File

@ -495,7 +495,7 @@
<li class="tab"><button type="button" onclick="location.href='/web/pay/PayGuide.do'">요금안내/견적내기</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayView.do'">결제하기</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayList.do'">요금 결제내역</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayUserSWList.do'">요금 사용내역</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/payUserSWList.do'">요금 사용내역</button></li>
<!-- <li class="tab active"><button type="button">계산서/현금영수증 발행 등록</button></li> -->
<li class="tab active"><button type="button">세금계산서 발행 등록</button></li>
</ul><!--// tab button -->

View File

@ -68,22 +68,60 @@ function f_print(){
</colgroup>
<tbody>
<tr>
<th>수<span class="blank"></span>신</th>
<td>${mberNm}</td>
<th>등록번호</th>
<td>
<c:choose>
<c:when test="${mberManageVO.dept eq'c'}">
<c:out value="${mberManageVO.bizNo}"/>
</c:when>
<c:otherwise>
-
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>참<span class="blank"></span>조</th>
<td>담당자 ${managerNm} 님</td>
<th>상<span class="blank"></span>호</th>
<td>
<c:choose>
<c:when test="${mberManageVO.dept eq'c'}">
<c:out value="${mberManageVO.mberNm}"/>
</c:when>
<c:otherwise>
-
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>거래일자</th>
<td>${startDate}~${endDate}</td>
<th>성<span class="blank"></span>명</th>
<td>
<c:choose>
<c:when test="${mberManageVO.dept eq'c'}">
<c:out value="${mberManageVO.managerNm}"/>
</c:when>
<c:otherwise>
<c:out value="${mberManageVO.mberNm}"/>
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>전화번호</th>
<td><c:out value="${mberManageVO.moblphonNo}"/></td>
</tr>
<tr>
<th style="letter-spacing:-0.85px;">이&ensp;메&ensp;일</th>
<td><c:out value="${mberManageVO.mberEmailAdres}"/></td>
</tr>
<tr>
<td colspan="2" style="text-align:center;"><span><c:out value="${mberManageVO.mberNm}"/></span>님의 사용내역(<c:out value="${startDate}"/>~<c:out value="${endDate}"/>)을 아래와 같이 확인합니다.</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="cont2 clearfix">
<%-- <div class="cont2 clearfix">
<p>총 사용금액</p>
<c:choose>
<c:when test="${searchVO.addVatType eq 'N'}">
@ -93,24 +131,22 @@ function f_print(){
<p><span>${addTaxSumPrice}</span> 원(VAT 포함)</p>
</c:otherwise>
</c:choose>
</div>
</div> --%>
<div class="cont3">
<p>(단위 : 원, 건)</p>
<div class="est_table2_wrap">
<table class="est_table2">
<caption>품목, 발송건수, 공급가액, 부가세, 금액 정보를 제공하는 표</caption>
<colgroup>
<col style="width:20%;">
<col style="width:20%;">
<col style="width:20%;">
<col style="width:30%;">
<col style="width:30%;">
<col style="width:auto;">
</colgroup>
<thead>
<tr>
<th scope="col">품목</th>
<th scope="col">문자유형</th>
<th scope="col">발송건수</th>
<th scope="col">공급가액</th>
<th scope="col">금액</th>
<th scope="col">사용금액</th>
</tr>
</thead>
<tbody>
@ -120,15 +156,15 @@ function f_print(){
<td>${result.msgTypeName}</td>
<td>
<c:choose>
<c:when test="${result.msgTypeName eq '단문(SMS)'}">
<c:when test="${result.msgTypeName eq '단문'}">
<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.shtSendCount}" var="shtSendCount" />
<c:out value="${shtSendCount}"/>
</c:when>
<c:when test="${result.msgTypeName eq '장문(LMS)'}">
<c:when test="${result.msgTypeName eq '장문'}">
<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.longSendCount}" var="longSendCount" />
<c:out value="${longSendCount}"/>
</c:when>
<c:when test="${result.msgTypeName eq '그림(MMS)'}">
<c:when test="${result.msgTypeName eq '그림'}">
<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.pictSendCount}" var="pictSendCount" />
<c:out value="${pictSendCount}"/>
</c:when>
@ -144,10 +180,6 @@ function f_print(){
<%-- <fmt:formatNumber type="number" maxFractionDigits="3" value="${result.sendCount}" var="sendCount" />
<c:out value="${sendCount}"/> --%>
</td>
<td>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.supplyPrice}" var="supplyPrice" />
<c:out value="${supplyPrice}"/>
</td>
<td>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.totalPrice}" var="totalPrice" />
<c:out value="${totalPrice}"/>
@ -188,52 +220,13 @@ function f_print(){
</div>
</div>
<div class="cont4">
<table class="est_table">
<caption>공급가액, 총 결제금액에 대한 표</caption>
<colgroup>
<col style="width: 100px;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>공급가액</th>
<td><span>${supplySumPrice}</span></td>
</tr>
<c:choose>
<c:when test="${not empty resultList || not empty payUserSumFaxList}">
<c:choose>
<c:when test="${searchVO.addVatType eq 'N'}">
<tr class="total_price">
<th>총 사용금액</th>
<td><span>${totalSumPrice}</span></td>
</tr>
</c:when>
<c:otherwise>
<tr>
<th>세액(부가세)</th>
<td>${addTax}</td>
</tr>
<tr class="total_price">
<th>총 사용금액</th>
<td><span>${addTaxSumPrice}</span></td>
</tr>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:if test="${ empty resultList && empty payUserSumFaxList}">
<tr>
<td colspan="5">
사용내역이 없습니다.
</td>
</tr>
</c:if>
</c:otherwise>
</c:choose>
</tbody>
</table>
<div class="cont2 clearfix">
<p>총 사용금액 <span>(VAT 별도)</span></p>
<p><span>
<c:out value="${totalSumPrice}"/>
</span>원</p>
</div>
<div class="cont5">
<p><span>${year} 년&nbsp;&nbsp;<span>${month}</span> 월&nbsp;&nbsp;<span>${day}</span> 일</p>
<div>

File diff suppressed because it is too large Load Diff

View File

@ -141,21 +141,11 @@ function fnShowPointPrintPopup(){
}
//환불요청 내역 프린트 출력 팝업
function fnShowRefundPrintPopup(){
//날자 체크
if( $('#startDate').val() != '' && $('#endDate').val() != '' ){
var iChkBeginDe = Number($('#startDate').val().replaceAll("/", ""));
var iChkEndDe = Number($('#endDate').val().replaceAll("/", ""));
if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
alert("기간설정의 시작일자는 종료일자 보다 클수 없습니다.");
return;
}
}
function fnShowRefundPrintPopup(moid){
//만들려는 팝업의 크기
var popup_wid = '840';
var popup_ht = '900';
var popup_wid = '790';
var popup_ht = '800';
var popup_left = (window.screen.width / 2) - (popup_wid / 2);
var popup_top =(window.screen.height / 2) - (popup_ht / 2);
@ -165,6 +155,23 @@ function fnShowRefundPrintPopup(){
$("#listForm").attr({"action":"/web/member/pay/PayPrintRefundListPopUpAjax.do", "method":"post"}).submit();
}
//거래명세서 팝업
function fnShowPayInvoicePrintPopup(moid){
//만들려는 팝업의 크기
var popup_wid = '790';
var popup_ht = '800';
var popup_left = (window.screen.width / 2) - (popup_wid / 2);
var popup_top =(window.screen.height / 2) - (popup_ht / 2);
document.invoiceForm.moid.value = moid;
$("#invoiceForm").attr("target","invoicePrint");
window.open('', 'invoicePrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top +',scrollbars=1');
$("#invoiceForm").attr({"action":"/web/member/pay/payInvoicePopupAjax.do", "method":"post"}).submit();
}
</script>
<!-- content 영역 -->
@ -176,7 +183,7 @@ function fnShowRefundPrintPopup(){
<li class="tab"><button type="button" onclick="location.href='/web/pay/PayGuide.do'">요금안내/견적내기</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayView.do'">결제하기</button></li>
<li class="tab active"><button type="button" >요금 결제내역</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayUserSWList.do'">요금 사용내역</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/payUserSWList.do'">요금 사용내역</button></li>
<!-- 현금영수증 자동발행 주석 -->
<!-- <li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">계산서/현금영수증 발행 등록</button></li> -->
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">세금계산서 발행 등록</button></li>

View File

@ -409,13 +409,13 @@ function getMberGrdChk() {
</tbody>
</table>
<div class="excel_middle">
<div class="select_btnWrap clearfix">
<div class="select_btnWrap">
<div class="add_text2" style="line-height: 1.3em;">
※ 요금 결제내역은 결제일을 기준으로 최대 6개월까지만 조회가능합니다.
<br />
<c:choose>
<c:when test="${prePaymentYn eq 'Y'}">
※ 간편결제 영수증은 결제하신 서비스를 통해 제공됩니다.
※ 간편결제 영수증은 결제하신 서비스를 통해 제공됩니다.<br />
</c:when>
<c:otherwise>
※ 후불제 고객의 사용금액 결제수단은 계좌이체만 가능합니다. <br />
@ -423,6 +423,7 @@ function getMberGrdChk() {
<p class="accountinfo"><span>-입금은행:</span>우리은행<span>-입금계좌:</span>1005-904-154328<span>-받는사람:</span>주식회사 아이티앤</p>
</c:otherwise>
</c:choose>
※ 거래명세서는 세금계산서 발행일로부터 30일 이내에만 출력 가능합니다.
</div>
<div style="padding-top: 10px;">
<button type="button" class="level_btn" data-tooltip="level_check_popup01" id="levelIconBtn" style="display: none;">
@ -447,15 +448,13 @@ function getMberGrdChk() {
<div class="tb_wrap pay3_list">
<table class="tType4">
<colgroup>
<%-- <col style="width: 40px;"> --%>
<col style="width: 5%;">
<col style="width: 18%;">
<col style="width: 20%;">
<col style="width: 15%;">
<col style="width: 15%;">
<col style="width: 15%;">
<%-- <col style="width: 30%;"> --%>
<col style="width: 20%;">
<col style="width: 25%;">
</colgroup>
<thead>
<tr>
@ -506,7 +505,25 @@ function getMberGrdChk() {
<tbody>
<c:choose>
<c:when test="${not empty resultList}">
<!-- 오늘날짜 - 거래명세서 버튼 조건으로 사용 -->
<c:set var="now" value="<%=new java.util.Date()%>" />
<c:forEach var="result" items="${resultList}" varStatus="status">
<!-- 거래명세서 버튼 조건(250723)
1.전용계좌 or 즉시이체
2.세금계산서 발행 완료 이후 30일간 노출
3.발행 최대 횟수 2회 -->
<c:set var="invoiceYn" value="N"/>
<c:if test="${(result.payMethod eq 'BANK' or result.payMethod eq 'VBANK' or result.payMethod eq 'AFTERPAY')
and (result.confirmYn eq 'Y' and result.rcptType eq '9')}">
<c:set var="confirmDateStr" value="${fn:substring(result.confirmDate,0,10)}" />
<fmt:parseDate value="${confirmDateStr}" pattern="yyyy-MM-dd" var="confirmDateObj" />
<c:set var="dayDiff" value="${(now.time - confirmDateObj.time) / (1000*60*60*24)}" />
<c:if test="${dayDiff <= 31}">
<c:set var="invoiceYn" value="Y"/>
</c:if>
</c:if>
<tr class="tType3_bd">
<%-- <td>
<label for="" class="label">한 줄 전체 선택</label> <input type="checkbox" name="eachChk">
@ -628,7 +645,7 @@ function getMberGrdChk() {
</c:if>
<!-- 발행완료 -->
<c:if test="${result.confirmYn eq 'Y'}">
<c:if test="${result.rcptType eq '9'}">
<c:if test="${result.rcptType eq '9' and invoiceYn eq 'N'}">
<p class="fwRg c_002c9a">세금계산서 발행완료</p>
</c:if>
<c:if test="${result.rcptType eq '1' || result.rcptType eq '2'}">
@ -694,7 +711,7 @@ function getMberGrdChk() {
</c:if>
<!-- 발행완료 -->
<c:if test="${result.confirmYn eq 'Y'}">
<c:if test="${result.rcptType eq '9'}">
<c:if test="${result.rcptType eq '9' and invoiceYn eq 'N'}">
<p class="fwRg c_002c9a">세금계산서 발행완료</p>
</c:if>
<c:if test="${result.rcptType eq '1' || result.rcptType eq '2'}">
@ -712,7 +729,13 @@ function getMberGrdChk() {
</c:if>
</c:if>
</c:otherwise>
</c:choose>
</c:choose>
<c:if test="${invoiceYn eq 'Y'}">
<!-- <button class="btnType btnType20 btn_use_status" onclick="window.open('/publish/transaction_statement.html','','width=790,height=800')">거래명세서</button> -->
<button class="btnType btnType20 btn_use_status" onclick="fnShowPayInvoicePrintPopup('<c:out value="${result.moid}"/>'); return false;">거래명세서</button>
</c:if>
</td>
</tr>
</c:forEach>
@ -1065,4 +1088,8 @@ function getMberGrdChk() {
</div>
</div>
</div>
<!-- 거래명세서 팝업 -->
<form id="invoiceForm" name="invoiceForm" method="post">
<input type="hidden" id="moid" name="moid" value=""/>
</form>
<!-- 등급 및 누적결제액 확인 팝업 data-tooltip:level_check_popup01 끝 -->

View File

@ -24,6 +24,9 @@ var lastfulstday = "";
var lastfuledday = "";
var thisfulstlday = "";
var thisfuledtlday = "";
var threefulstday = "";
var threefuledday = "";
$(document).ready(function(){
payUserListAjax(1);
var date = new Date() ;
@ -47,8 +50,34 @@ $(document).ready(function(){
thisYearStart = date.getFullYear() + "/01/01" ;
thisYearEnd = date.getFullYear() + "/12/31" ;
//시작일 3개월 / 종료일 현재 조회
var threeMonthAgo = new Date(date);
threeMonthAgo.setMonth(threeMonthAgo.getMonth() - 3);
threeMonthAgo.setDate(threeMonthAgo.getDate() + 1); //하루 더하기
threefulstday = threeMonthAgo.getFullYear() + "/";
threefulstday += (threeMonthAgo.getMonth() + 1) < 10 ? "0" + (threeMonthAgo.getMonth() + 1) : (threeMonthAgo.getMonth() + 1) + "";
threefulstday += "/";
threefulstday += threeMonthAgo.getDate() < 10 ? "0" + threeMonthAgo.getDate() : threeMonthAgo.getDate();
threefuledday = date.getFullYear() + "/";
threefuledday += (date.getMonth() + 1) < 10 ? "0" + (date.getMonth() + 1) : (date.getMonth() + 1) + "";
threefuledday += "/";
threefuledday += date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
$(document).on('change','#pageUnitS', function(){
setPageUnit($(this).val());
payUserListAjax(1);
});
});
function setPageUnit(val){
$('#pageUnit').val(val);
}
// 기간 요일 지정
function setCalVal(val,targetObj){
$('input[name='+targetObj+']').val(val) ;
@ -61,10 +90,16 @@ function payUserListAjax(pageNo){
return;
};
if(!fn_G_limitDateChk("startDate", 3)){
return;
};
document.listForm.pageIndex.value = pageNo;
var sendData= $(document.listForm).serializeArray();
$("#payUserListLoad").load("/web/member/pay/PayUserSWListAjax.do", sendData ,function(response, status, xhr){
//조회 완료 인지를 위하여 hide show로 화면 변화 추가
$("#payUserListLoad").hide();
$("#payUserListLoad").load("/web/member/pay/payUserSWListAjax.do", sendData ,function(response, status, xhr){
$("#payUserListLoad").show();
});
}
@ -74,7 +109,7 @@ function payUserListTabMoveAjax(pageNo){
document.listForm.pageIndex.value = pageNo;
var sendData= $(document.listForm).serializeArray();
$("#payUserListLoad").load("/web/member/pay/PayUserSWListAjax.do", sendData ,function(response, status, xhr){
$("#payUserListLoad").load("/web/member/pay/payUserSWListAjax.do", sendData ,function(response, status, xhr){
});
}
@ -92,42 +127,6 @@ function payUserTab(obj, pageType){
}
function getUsedCashTotList(){
var sendData = {
"startDate" : $("#startDate").val(),
"endDate" : $("#endDate").val()
};
console.log('sendData : ', sendData);
// url: '/web/member/pay/getUsedCashTotList.do',
$.ajax({
type:"POST",
url:"<c:url value='/web/member/pay/getUsedCashTotList.do' />",
data: sendData,
dataType:'json',
success:function(data){
console.log('data :: ', data);
if(data.status == 'OK') {
// 성공 처리
} else {
// 오류 처리
}
},
error: function(jqXHR, textStatus, errorThrown) {
console.error("AJAX Error:", textStatus, errorThrown);
console.error("Response:", jqXHR.responseText);
}
});
}
/* 윈도우팝업 열기 */
function infoPop(pageUrl){
document.infoPopForm.pageType.value = pageUrl;
@ -534,6 +533,7 @@ function fnRevDetailPop03(msgGroupId){
<form id="listForm" name="listForm" method="post">
<input type="hidden" id="pageType" name="pageType" value="<c:out value='${searchVO.pageType}'/>"/>
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value='${searchVO.pageIndex}'/>"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="10"/>
<div class="excel_middle">
<div class="select_btnWrap clearfix">
<div class="btn_left">
@ -543,9 +543,9 @@ function fnRevDetailPop03(msgGroupId){
<span class="dateEtc">~</span>
<input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="endDate" value="${endDate }" data-datecontrol="true">
</div>
<button type="button" onclick="setCalVal(thisYearStart,'startDate');setCalVal( thisYearEnd,'endDate'); return false;" class="btnType btnType19">이번년도</button>
<button type="button" onclick="setCalVal(lastfulstday,'startDate');setCalVal( lastfuledday,'endDate'); return false;" class="btnType btnType19">전월</button>
<button type="button" onclick="setCalVal(thisfulstlday,'startDate');setCalVal( thisfuledtlday,'endDate'); return false;" class="btnType btnType19">당월</button>
<button type="button" onclick="setCalVal(threefulstday,'startDate');setCalVal( threefuledday,'endDate'); return false;" class="btnType btnType19">3개월</button>
<button type="button" class="btnType6" onclick="payUserListAjax(1); return false;">조회</button>
<span class="reqTxt4">
<span class="vMiddle">*</span> 조회기간의 사용내역만 보여집니다.

View File

@ -91,8 +91,39 @@ $(document).ready(function(){
});
/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */
/* 250530 - 거래명세서, 사용내역서 분리 */
function fnShowPrintPopup() {
//만들려는 팝업의 크기
var url = "printMsgUsageDetailsAjax.do";
var popup_wid = '790';
var popup_ht = '800';
var popup_left = (window.screen.width/2)-(popup_wid/2);
var popup_top =(window.screen.height/2)-(popup_ht/2);
//날짜 체크
if(($('#startDate').val() != '' && $('#endDate').val() == '') || ($('#startDate').val() == '' && $('#endDate').val() != '')){
alert("기간설정을 정상적으로 선택해 주세요.");
return;
}
if( $('#startDate').val() != '' && $('#endDate').val() != '' ){
var iChkBeginDe = Number($('#startDate').val().replaceAll("/", ""));
var iChkEndDe = Number($('#endDate').val().replaceAll("/", ""));
if(iChkBeginDe > iChkEndDe || iChkEndDe < iChkBeginDe ){
alert("기간설정의 시작일자는 종료일자 보다 클수 없습니다.");
return;
}
}
document.listForm.action = url;
document.listForm.method = "post";
window.open("about:blank", 'printPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top + ', fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
document.listForm.target = "printPop";
document.listForm.submit();
}
/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */
/* function fnShowPrintPopup() {
//만들려는 팝업의 크기
var url = "";
var popup_wid = '830';
@ -131,7 +162,7 @@ function fnShowPrintPopup() {
window.open("about:blank", 'printPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top + ', fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
document.listForm.target = "printPop";
document.listForm.submit();
}
} */
/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */
function fnShowPrintPopup_OLD() {
@ -214,41 +245,48 @@ function fnShowPdfPrintPopup(){
<div class="pay_cont current" id="listTab2_1">
<input type="hidden" id="searchSortCnd" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
<input type="hidden" id="searchSortOrd" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
<input type="hidden" id="addVatType" name="addVatType" value="N" />
<div class="list_info">
<p>총 <span>${paginationInfo.totalRecordCount}</span>건 &nbsp; (<fmt:formatNumber value="${totSuccSendPrice}" pattern="" /> 원)</p>
<div>
<button type="button" class="print_btn" onclick="javascript:fnPayUserPrintPopup();">
<!-- <button type="button" class="print_btn" onclick="javascript:fnPayUserPrintPopup();">
<i class="print_img"></i>인쇄하기
</button>
<button type="button" class="pdf_btn" onclick="javascript:fnShowPdfPrintPopup();">
<i class="pdf_img"></i>PDF저장
</button>
</button> -->
<c:choose>
<c:when test="${not empty payUserSWList}">
<button type="button" class="btnType btn_36 border_gray btnType12" onclick="fnShowPrintPopup(); return false;">사용내역서</button>
</c:when>
<c:otherwise>
<button type="button" class="btnType btn_36 border_gray btnType12" onclick="alert('선택한 조회기간의 요금사용내역이 없습니다.');">사용내역서</button>
</c:otherwise>
</c:choose>
<button type="button" class="excel_btn">
<i class="downroad"></i>엑셀 다운로드
</button>
<label for="pageUnitS" class="label">검색조건 선택</label>
<select id="pageUnitS" class="selType2">
<option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10줄</option>
<option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20줄</option>
<option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30줄</option>
<option value="100" <c:if test="${paginationInfo.recordCountPerPage == '100'}">selected</c:if> >100줄</option>
</select>
</div>
</div>
<div class="tb_wrap">
<table class="tType4">
<colgroup>
<%-- <col style="width: 5%;"> --%>
<col style="width: *%;">
<col style="width: 15%;">
<col style="width: 15%;">
<col style="width: 15%;">
<col style="width: 20%;">
<%-- <col style="width: 20%;"> --%>
<%-- <col style="width: 10%;">
<col style="width: auto;">
<col style="width: 9%;">
<col style="width: 10%;">
<col style="width: 10%;">
<col style="width: 10%;"> --%>
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: 16%;">
</colgroup>
<thead>
<tr>
<%-- <th rowspan="2">
<label for="" class="label">전체 선택</label>
<input type="checkbox" id="chkAll">
</th> --%>
<th rowspan="2">
발송일시
<div class="sort_wrap">
@ -256,28 +294,18 @@ function fnShowPdfPrintPopup(){
</div>
</th>
<th rowspan="2">
문자유
<div class="sort_wrap">
<input type="button" class="sort sortBtn" id="sort_orderByCode">
</div>
</th>
<th rowspan="2">내용</th>
<th rowspan="2">발송건수</th>
<!-- <th colspan="2">충전</th>
<th colspan="2">사용</th>
<th colspan="2">잔액</th> -->
<!-- <th colspan="2">사용</th> -->
<th>사용</th>
<!-- <th>반환(실패)</th> -->
<!-- <th colspan="2">잔액</th> -->
<th colspan="2">발송건수</th>
<th rowspan="2">금액(원)</th>
</tr>
<tr>
<th>충전금</th>
<!-- <th>포인트</th> -->
<!-- <th>캐시</th> -->
<!-- <th>포인트</th> -->
<!-- <th>충전금</th>
<th>포인트</th> -->
<th>성공</th>
<th style="border-right:1px solid #ccc;">실패</th>
</tr>
</thead>
<tbody>
@ -285,10 +313,6 @@ function fnShowPdfPrintPopup(){
<c:when test="${not empty payUserSWList}">
<c:forEach var="payUserInfo" items="${payUserSWList}" varStatus="status">
<tr>
<%-- <td>
<label for="" class="label">선택</label>
<input type="checkbox" name="eachChk">
</td> --%>
<td>
<p><c:out value="${payUserInfo.reqDate}"/></p>
</td>
@ -339,11 +363,11 @@ function fnShowPdfPrintPopup(){
<c:if test="${payUserInfo.msgTypeTxt eq 'fax'}">
(<c:out value="${payUserInfo.fileCnt}"/>매)
</c:if>
/ <c:out value="${payUserInfo.failSendCnt}"/>
<%-- <c:out value="${payUserInfo.sendCount}"/>
<c:if test="${payUserInfo.msgTypeTxt eq 'fax'}">
(<c:out value="${payUserInfo.fileCnt}"/>)
</c:if> --%>
</p>
</td>
<td>
<p class="fwRg c_222">
<c:out value="${payUserInfo.failSendCnt}"/>
</p>
</td>
<td>
@ -352,58 +376,12 @@ function fnShowPdfPrintPopup(){
<c:out value="${succCash}"/>
</p>
</td>
<%-- <td>
<p class="fwRg c_002c9a">
<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.failSendPrice}" var="failPrice" />
<c:out value="${failPrice}"/>
</p>
</td> --%>
<!-- <td>
<p class="fwRg c_002c9a">
0
</p>
</td> -->
<%-- <td>
<p>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befCash}" var="befCash" />
<c:out value="${befCash}"/>
</p>
</td>
<td>
<p>
<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befPoint}" var="befPoint" />
<c:out value="${befPoint}"/>
</p>
</td>
<td>
<p class="fwRg c_002c9a">
<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.totPrice}" var="totPrice" />
<c:out value="${totPrice}"/>
</p>
</td>
<td>
<p class="fwRg c_002c9a">
0
</p>
</td> --%>
<%-- <td>
<p class="fwRg c_222">
<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.thisPoint}" var="thisPoint" />
<c:out value="${thisPoint}"/>
</p>
</td>
<td>
<p class="fwRg c_222">
<fmt:formatNumber type="number" maxFractionDigits="3" value="${payUserInfo.befPoint}" var="befPoint" />
<c:out value="${befPoint}"/>
</p>
</td> --%>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="5">
<td colspan="6">
검색 결과가 없습니다.
</td>
</tr>
@ -412,7 +390,9 @@ function fnShowPdfPrintPopup(){
</tbody>
</table>
</div>
<div class="publish_btn clearfix">
<!-- 250530 - 거래명세서, 사용내역서 분리 -->
<%-- <div class="publish_btn clearfix">
<div>
<input type="radio" name="publish" id="publish1" value="statement">
<label for="publish1">거래명세서</label>
@ -434,7 +414,7 @@ function fnShowPdfPrintPopup(){
</c:otherwise>
</c:choose>
</div>
</div>
</div> --%>
<!-- pagination -->
<c:if test="${!empty payUserSWList}">

View File

@ -41,7 +41,7 @@ function getNextPayMethod() {
var nextPayMethod = "";
$.ajax({
type: "POST",
url: "/web/member/pay/selectNextPayMethodAjax.do",
url: "/web/member/pay/selectLastPayMethodAjax.do",
data: {},
dataType:'json',
async: false,
@ -817,7 +817,7 @@ function fnShowVaViewPrintPopup() {
<li class="tab"><button type="button" onclick="location.href='/web/pay/PayGuide.do'">요금안내/견적내기</button></li>
<li class="tab active"><button type="button">결제하기</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayList.do'">요금 결제내역</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/PayUserSWList.do'">요금 사용내역</button></li>
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/payUserSWList.do'">요금 사용내역</button></li>
<!-- 현금영수증 자동발행 주석 -->
<!-- <li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">계산서/현금영수증 발행 등록</button></li> -->
<li class="tab"><button type="button" onclick="location.href='/web/member/pay/BillPub.do'">세금계산서 발행 등록</button></li>

View File

@ -0,0 +1,384 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ page import="itn.com.cmm.LoginVO" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>거래명세서</title>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/publish/css/reset.css">
<link rel="stylesheet" href="/publish/css/common.css">
<link rel="stylesheet" href="/publish/css/estimate.css">
<link rel="stylesheet" href="/publish/css/font.css">
<link rel="stylesheet" href="/publish/css/button.css">
</head>
<script type="text/javascript">
function f_print(){
document.getElementById('est_btn_wrap').style.display = 'none';
var initBody = document.body.innerHTML;
window.onbeforeprint = function(){
// print_area는 인쇄하고자 하는 영역의 ID를 말합니다.( 필수 )
// document.body.innerHTML = document.getElementById("print_area").innerHTML;
}
window.onafterprint = function(){
document.body.innerHTML = initBody;
}
window.print();
document.getElementById('est_btn_wrap').style.display = '';
}
</script>
<body>
<!-- 견적서 -->
<div class="estimate_wrap">
<div class="estimate">
<div class="est_head clearfix">
<img src="/publish/images/CI.png" alt="문자온 CI">
<div class="clearfix">
<p>(12248) 경기도 남양주시 다산순환로 20, A동 735호(다산동, 현대프리미어캠퍼스)</p>
<p>TEL 1551-8011</p>
</div>
</div>
<div class="est_body">
<h2>거래명세서<span style="font-size:20px;font-weight:400;">(공급받는자 보관용)</span></h2>
<div class="cont1 tb_ver2" style="display:flex;">
<div style="width:calc((100% - 40px)/2);">
<p>공급받는 자</p>
<table class="est_table">
<caption>등록번호, 상호, 성명, 전화번호, 이메일 정보 제공</caption>
<colgroup>
<col style="width: 60px;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>등록번호</th>
<td>
<c:choose>
<c:when test="${result.dept eq 'c'}">
<c:out value="${result.bizNo}"/>
</c:when>
<c:otherwise>
-
</c:otherwise>
</c:choose>
<!--(개인회원인 경우 하이픈(-) 처리)-->
</td>
</tr>
<tr>
<th style="letter-spacing:-0.69px;">상&ensp;&ensp;&ensp;&nbsp;&nbsp;호</th>
<td>
<c:choose>
<c:when test="${result.dept eq 'c'}">
<c:out value="${result.mberNm}"/>
</c:when>
<c:otherwise>
-
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th style="letter-spacing:-0.69px;">성&ensp;&ensp;&ensp;&nbsp;&nbsp;명</th>
<td>
<c:choose>
<c:when test="${result.dept eq 'c'}">
<c:out value="${result.managerNm}"/>
</c:when>
<c:otherwise>
<c:out value="${result.mberNm}"/>
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>전화번호</th>
<td>
<c:out value="${result.mbtlNum}"/>
</td>
</tr>
<tr>
<th style="letter-spacing:-0.85px;">이&ensp;메&ensp;일</th>
<td>
<c:out value="${result.email}"/>
</td>
</tr>
</tbody>
</table>
</div>
<div style="width:calc((100% - 40px)/2);">
<p>공급자</p>
<img src="/publish/images/content/stamp.png" alt="도장" class="stamp mCS_img_loaded">
<table class="est_table">
<caption>등록번호, 상호, 성명, 전화번호, 이메일 정보 제공</caption>
<colgroup>
<col style="width: 60px;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>등록번호</th>
<td>653-87-00858</td>
</tr>
<tr>
<th style="letter-spacing:-0.69px;">상&ensp;&ensp;&ensp;&nbsp;&nbsp;호</th>
<td>주식회사 아이티앤</td>
</tr>
<tr>
<th style="letter-spacing:-0.69px;">성&ensp;&ensp;&ensp;&nbsp;&nbsp;명</th>
<td>유인식</td>
</tr>
<tr>
<th>전화번호</th>
<td>1551-8011</td>
</tr>
<tr>
<th style="letter-spacing:-0.85px;">이&ensp;메&ensp;일</th>
<td>help@iten.co.kr</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="cont3">
<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.amt}" var="commaAmt" />
<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.cash}" var="commaCash" />
<fmt:formatNumber type="number" maxFractionDigits="3" value="${result.amt - result.cash}" var="commaETC" />
<div class="est_table2_wrap">
<table class="est_table2">
<caption>작성일자, 공급가액, 세액, 비고 정보를 제공하는 표</caption>
<colgroup>
<col style="width: 25%;">
<col style="width: 25%;">
<col style="width: 25%;">
</colgroup>
<thead>
<tr>
<th scope="col">작성일자</th>
<th scope="col">공급가액</th>
<th scope="col">세액</th>
</tr>
</thead>
<tbody>
<fmt:parseDate value="${result.regDate}" pattern="yyyy-MM-dd HH:mm:ss.S" var="parsedDate"/>
<tr>
<td><fmt:formatDate value="${parsedDate}" pattern="yyyy-MM-dd"/></td>
<td><c:out value="${commaCash}"/></td>
<td><c:out value="${commaETC}"/></td>
</tr>
</tbody>
<tfoot>
<tr>
<th>비고</th>
<td style="padding:0 0 0 20px;">
<c:choose>
<c:when test="${result.prePaymentYn eq 'N'}">
사용기간(${result.startDate} ~ ${result.endDate})
</c:when>
<c:otherwise>
-
</c:otherwise>
</c:choose>
</td>
</tr>
</tfoot>
</table>
</div>
<div class="est_table2_wrap" style="margin:20px 0 0 0;">
<table class="est_table2">
<caption>월, 일, 품목, 규격, 수량, 단가, 공급가액, 세액, 비고 정보를 제공하는 표</caption>
<colgroup>
<col style="width: 60px;">
<col style="width: 60px;">
<col style="width: auto;">
<col style="width: 60px;">
<col style="width: 60px;">
<col style="width: 60px;">
<col style="width: 100px;">
<col style="width: 60px;">
<col style="width: 70px;">
</colgroup>
<thead>
<tr>
<th scope="col">월</th>
<th scope="col">일</th>
<th scope="col">품목</th>
<th scope="col">규격</th>
<th scope="col">수량</th>
<th scope="col">단가</th>
<th scope="col">공급가액</th>
<th scope="col">세액</th>
<th scope="col">비고</th>
</tr>
</thead>
<tbody>
<tr>
<td><fmt:formatDate value="${parsedDate}" pattern="M"/></td>
<td><fmt:formatDate value="${parsedDate}" pattern="d"/></td>
<td>문자온 메시징 서비스 이용료</td>
<td></td>
<td></td>
<td></td>
<td><c:out value="${commaCash}"/></td>
<td><c:out value="${commaETC}"/></td>
<td>-</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
<!-- 후불제 -->
<!-- <tfoot>
<tr>
<th colspan="2">합계금액</th>
<th>전잔액</th>
<th colspan="2">입금액</th>
<th colspan="2">현잔액</th>
<th colspan="2" rowspan="2" style="background:#fff;vertical-align:middle;">이 금액을 [<span>청&ensp;구</span>]함</th>
</tr>
<tr>
<td style="text-align:center;" colspan="2">550,000</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;" colspan="2">-</td>
<td style="text-align:center;" colspan="2">550,000</td>
</tr>
</tfoot> -->
<!-- //후불제 -->
<!-- 일반회원(선불제) -->
<tfoot>
<tr>
<th colspan="2">합계금액</th>
<th>전잔액</th>
<th colspan="2">입금액</th>
<th colspan="2">현잔액</th>
<th colspan="2" rowspan="2" style="background:#fff;vertical-align:middle;">
<c:choose>
<c:when test="${result.prePaymentYn eq 'N' and result.pgStatus ne '1'}">
이 금액을 [<span>청&ensp;구</span>]함
</c:when>
<c:otherwise>
이 금액을 [<span>영&ensp;수</span>]함
</c:otherwise>
</c:choose>
</th>
</tr>
<tr>
<td style="text-align:center;" colspan="2">
<c:out value="${commaAmt}"/>
</td>
<td style="text-align:center;">-</td>
<td style="text-align:center;" colspan="2">-</td>
<td style="text-align:center;" colspan="2">
<c:out value="${commaAmt}"/>
</td>
</tr>
</tfoot>
<!-- //일반회원(선불제) -->
</table>
</div>
</div>
<!-- <div class="cont5">
<p><span>2021</span> 년&nbsp;&nbsp;<span>6</span> 월&nbsp;&nbsp;<span>17</span> 일</p>
<div>
<span></span>
<span>주식회사 아이티앤</span>
<span>유&nbsp;&nbsp;인&nbsp;&nbsp;식&nbsp;&nbsp;(인)</span>
</div>
</div> -->
</div>
<div class="est_btn_wrap">
<button type="button" class="btnType" onclick="window.print();"><i class="print_img"></i>인쇄하기</button>
</div>
</div>
</div>
<!--// 견적서 -->
</body>
</html>

View File

@ -242,25 +242,17 @@ function updateUserInfo(){
$("#receivemail").val("N");
}
if($("#emailId").val() == ""){
alert("이메일을 입력해주세요.");
if($("#emailId").val().trim() == "" || $("#emailAdd").val().trim() == ""){
alert("이메일은 필수 입력 항목입니다.")
return false;
}
if($("#emailId").val() != ""|| $("#emailAdd").val() != ""){
if($("#emailAdd").val() != ""){
var email = $("#emailId").val() + "@" + $("#emailAdd").val();
var taxExptext = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
if(taxExptext.test(email)==false){
alert("이메일주소 형식이 올바르지 않습니다.");
return false;
}
$("#mberEmailAdres").val(email);
}else{
alert("이메일 주소를 확인해 주세요");
}else {
var email = $("#emailId").val() + "@" + $("#emailAdd").val();
var taxExptext = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
if(taxExptext.test(email)==false){
alert("이메일주소 형식이 올바르지 않습니다.");
return false;
}
$("#mberEmailAdres").val(email);
}
if("${cmpPhoneChangeManageVO.hstSttus}" == '03'){
@ -678,7 +670,7 @@ function changeValueWork(obj){
</c:if>
<div class="input_list_item emailWrap">
<div>
<div class="input_left"><span class="essential">*</span>이메일</div>
<div class="input_left">이메일</div>
<div class="input_right">
<div class="email">
<label for="" class="label">이메일 주소 앞자리</label>

View File

@ -149,21 +149,17 @@ function updateUserInfo(){
$("#receivemail").val("N");
}
if($("#emailId").val() != ""|| $("#emailAdd").val() != ""){
if($("#emailAdd").val() != ""){
var email = $("#emailId").val() + "@" + $("#emailAdd").val();
var taxExptext = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
if(taxExptext.test(email)==false){
alert("이메일주소 형식이 올바르지 않습니다.");
return false;
}
$("#mberEmailAdres").val(email);
}else{
alert("이메일 주소를 확인해 주세요");
if($("#emailId").val().trim() == "" || $("#emailAdd").val().trim() == ""){
alert("이메일은 필수 입력 항목입니다.")
return false;
}else {
var email = $("#emailId").val() + "@" + $("#emailAdd").val();
var taxExptext = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
if(taxExptext.test(email)==false){
alert("이메일주소 형식이 올바르지 않습니다.");
return false;
}
$("#mberEmailAdres").val(email);
}
if("${userInfo.moblphonNo}" != $("#moblphonNo").val()){

View File

@ -671,7 +671,7 @@ function callTo() {
</c:otherwise>
</c:choose>
<button type="button" onclick="location.href='/web/member/pay/PayUserSWList.do';">
<button type="button" onclick="location.href='/web/member/pay/payUserSWList.do';">
<img src="/publish/images/content/mypage_plus.png" alt="더보기">
</button>
<div class="table_wrap" id="send_reserv">

View File

@ -30,9 +30,6 @@ $(document).ready(function(){
<li class="tab" id="sendNumberManage">
<button type="button" onclick="TabType5(this,'4'); location.href='/web/user/sendNumberManage.do'">발신번호 관리</button>
</li>
<li class="tab" id="notifyManage">
<button type="button" onclick="TabType5(this,'5'); location.href='/web/user/notifyManage.do'">알림설정</button>
</li>
<li class="tab" id="mberSecession">
<button type="button" onclick="TabType5(this,'6'); location.href='/web/user/mberSecession.do'">회원탈퇴</button>
</li>

View File

@ -112,3 +112,26 @@ function getDateStr(myDate){
return ( year + '/' + month + '/' + day );
}
/**
* 검색 날짜관련 ID로 검색 시작일 최대 기간을 제한 function
* @param {String} a 검색 시작 ID
* @param {String} b 최대 기간
* @returns {Boolean} a날짜와 현재 날짜를 비교해서 차이가 b월 이상이면 false 이하면 true
*/
function fn_G_limitDateChk(startId, limitMonth) {
// 시작일자 가져오기
var startDate = document.getElementById(startId).value;
// 날짜 형식으로 변환 및 현재 날짜 설정
var start = new Date(startDate);
var today = new Date();
var maxDate = new Date(today);
maxDate.setMonth(maxDate.getMonth() - limitMonth);
if(start < maxDate){
alert("검색 시작일자를 최근 "+limitMonth+"개월 이내로 입력해주세요.");
return false;
}
return true;
}