From 74076af6cc7433b8b5929e199c2d53d90b144213 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Tue, 25 Feb 2025 15:25:15 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp index b20ca1fd..4db78d99 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp @@ -4,6 +4,8 @@ <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%> + + + + + + + + + + + + + + +
+ + +
+ +
+ + + + +
+ +
+ + + +
+ +
+ + + +
+ 본문 바로가기 +
+ + +
+
+

QUICK
MENU

+

QUICK

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

발송결과 상세

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

발송정보

+

+
+
+
+
발송일시
+
2024-07-18 15:25
+
+
+
등록일시
+
2024-07-10 15:25
+
+
+
형태
+
친구톡
+
+
+
발송건수
+
100
+
+
+
채널정보
+
채널명(@채널ID)
+
+
+
진행상황 + +
+
예약
+
100,000건35분 간격
+
+ +
+ + +
+ +
+
+
+
+
발송요금(합계)
+
78,100
+ +
+
+
· 카카오톡
+
8,100
+
+
+
· 대체문자
+
8,100
+
+
+
+
+ + +
+
+
+

상세결과

+

+
+
+
+
+
전체건수
+
300,101
+
+
+
+
+
대기건수
+
300,000건(100%)
+
+
+
+
+
+
+
성공건수(카카오톡)
+
0건(0%)
+
+
+
+
+
실패건수(카카오톡)
+
1건(100%)
+
+
+
+
+
+
+
성공건수(대체문자)
+
0건(0%)
+
+
+
+
+
실패건수(대체문자)
+
1건(100%)
+
+
+
+

* 전체건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.

+
+
+ + +
+ + + +
+
+ +
+
    +
  • +
  • +
+
+ + + +
+ +
+
+

@munjaon

+ +
+
+ 알림톡 도착 +
+
+ + + +

강조표기 보조문구 미리보기

+

타이틀 미리보기

+

내용미리보기

+

부가정보내용

+

채널 추가 안내 메시지 미리보기

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

※ 단말기 설정에 따라 다르게 보일 수 있습니다

+

+ +
+ + + +
+
+
+

문자내용

+ + + + +
+ +
+

(광고)

+

내용을 입력해주세요.

+

+

무료 거부 080-0000-0000

+
+
+ +
+
+

※ 단말기 설정에 따라 다르게 보일 수 있습니다

+
+ +
+
+ +
+ + + + +
+ +
+ + +
+
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/src/main/webapp/publish/textingmsg_2025_list.html b/src/main/webapp/publish/textingmsg_2025_list.html index c4c40425..17728b10 100644 --- a/src/main/webapp/publish/textingmsg_2025_list.html +++ b/src/main/webapp/publish/textingmsg_2025_list.html @@ -220,8 +220,7 @@ @@ -613,7 +612,6 @@

- 최대 3개월간의 발송내역만 확인하실 수 있습니다.

- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.

-

- 단문문자는 최대 24시간, 장문 및 그림문자는 최대 72시간까지 결과값이 수신되지 않은 경우 실패(비과금) 처리됩니다.

@@ -638,11 +636,11 @@
- +
- +
@@ -728,44 +726,24 @@
-
+
  • -
  • -
  • -
  • +
- -
- -
-
-
[대기]
-
발송은 성공하였으며, 수신자측 통신사로부터 수신여부를 - 확인중인 상태
-
[성공]
-
발송 및 수신이 완료된 상태
-
[실패]
-
결번, 일시정지, 전화번호 오류 등의 사유로 발송이 - 불가한 상태
-
[예약]
-
예약 발송 대기 상태
-
-
-
- +

총 발송건수 171

-

※ 예약문자 발송취소는 예약 발송시간 기준 5분 전까지만 가능

+

※ 예약 발송취소는 예약 발송시간 기준 5분 전까지만 가능

- 카카오톡 결과 - 대체문자 결과 - 금액 - 예약관리 + 카카오톡결과 + 대체문자결과 + 금액(원) + 진행상황 대기 성공 실패 - 예약 성공 실패 + - + - + 2024-01-09 17:42 - 단문 - 내용을 클릭하면 상세보기 화면으로 이동합니다. - 125,895 + 알림톡 + + + + 0

0

@@ -850,40 +833,123 @@

0

-

0

+

0

-

125,895

- - - 8,485,258원 + 8,485,258

- + + + + + + + 2024-01-09 17:42 + 친구톡 + + + + 0 + +

0

+ + +

0

+ + +

0

+ + +

0

+ + +

0

+ + - + 예약취소 + + + + + + + 2024-01-09 17:42 + 친구톡 + + + + 458,002 + +

1

+ + +

458,000

+ + +

1

+ + +

1

+ + +

1

+ + 12,580 + 진행중 + + + + + + + 2024-01-09 17:42 + 친구톡 + + + + 458,002 + +

1

+ + +

458,000

+ + +

1

+ + +

1

+ + +

1

+ + 12,580 + 완료 + -
+
+
-
- - - - +
+
- - +
-
- +
    From c74c63ed4386e5a071ab4e0e583929a06d54d0ed Mon Sep 17 00:00:00 2001 From: Eunjipark Date: Wed, 12 Mar 2025 15:27:13 +0900 Subject: [PATCH 3/8] =?UTF-8?q?2025/03/12=20=EB=AC=B8=EC=9E=90=EC=98=A8=20?= =?UTF-8?q?=EB=AA=A8=EB=B0=94=EC=9D=BC=20=ED=99=8D=EB=B3=B4=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20>=20=EC=A0=84=ED=99=94=EB=B2=88=ED=98=B8?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../publish/publish_m/munjaon_intro_03.html | 287 +++++++++--------- 1 file changed, 142 insertions(+), 145 deletions(-) diff --git a/src/main/webapp/publish/publish_m/munjaon_intro_03.html b/src/main/webapp/publish/publish_m/munjaon_intro_03.html index 0ef2f99b..8f7f3de1 100644 --- a/src/main/webapp/publish/publish_m/munjaon_intro_03.html +++ b/src/main/webapp/publish/publish_m/munjaon_intro_03.html @@ -1,146 +1,143 @@ - - - - - - - 프리미엄 문자 발송 서비스 문자온 - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    -
    -
    -

    프리미엄 문자
    발송 서비스

    - - -
    -
    -
    -
    -
    -

    1

    -

    특장점

    -
    -
    -
    -

    편리한 20건 선거문자 발송

    -

    (자동분류, 전체선택 가능)

    -
    -
    -

    업계 최저가 요금

    -

    (현 요금보다 저렴하게 제공)

    -
    -
    -

    단문(SMS), 장문(LMS), 그림문자(MMS), 카카오 알림톡, 팩스 발송 기능 제공

    -
    -
    -

    최신 트렌드 반영 서비스 제공

    -
    -

    - 주소록 입력 대행(무료)

    -

    - 예약발송 기능 제공(분 단위)

    -

    - 문자메시지 지도‧약도 자동 첨부 가능

    -

    - 그림문자 주문제작 서비스 제공

    -

    - 다양한 결제수단 제공(신용카드, 휴대폰 결제, 전용계좌, 즉시이체, 간편결제 등)

    -

    - 무제한 발송량 제공

    -

    - 특정 공통문구(이름, 일시, 비용 등) 일괄 변경 기능 제공

    -
    -
    -
    -

    기업‧단체‧공공기관 B2B 전용라인 제공

    -
    -
    -
    -
    -
    -
    -
    -

    2

    -

    이용고객

    -
    -
    -
    -

    개인(사업자)

    -
    -

    - 동호회, 동문회, 향우회, 병원, 부동산, 음식점, 마트, 대리점, 숙박업, 전문직 사무실, 소셜커머스 사업자, 교육시설(학원, 학교, 유치원, 어린이집), 스포츠시설(골프장, 피트니스) 등

    -
    -
    -
    -

    기업‧협회‧단체

    -
    -

    - 기업(대‧중‧소기업), 협회, 조합, 비영리단체, 종교단체(교회, 사찰), 은행, 카드사, 쇼핑몰, 택배사, 보험사, 리서치사 등

    -
    -
    -
    -

    공공

    -
    -

    - 정부, 지방자치단체, 국회, 지방의회, 법원, 공공기관, 공직유관단체, 도서관, 미술관, 전시관, 공연시설, 영화관 등

    -
    -
    -
    -
    -
    - -
    - - + + + + + + + 프리미엄 문자 발송 서비스 문자온 + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    +
    +

    프리미엄 문자
    발송 서비스

    + + +
    +
    +
    +
    +
    +

    1

    +

    특장점

    +
    +
    +
    +

    편리한 20건 선거문자 발송

    +

    (자동분류, 전체선택 가능)

    +
    +
    +

    업계 최저가 요금

    +

    (현 요금보다 저렴하게 제공)

    +
    +
    +

    단문(SMS), 장문(LMS), 그림문자(MMS), 카카오 알림톡, 팩스 발송 기능 제공

    +
    +
    +

    최신 트렌드 반영 서비스 제공

    +
    +

    - 주소록 입력 대행(무료)

    +

    - 예약발송 기능 제공(분 단위)

    +

    - 문자메시지 지도‧약도 자동 첨부 가능

    +

    - 그림문자 주문제작 서비스 제공

    +

    - 다양한 결제수단 제공(신용카드, 휴대폰 결제, 전용계좌, 즉시이체, 간편결제 등)

    +

    - 무제한 발송량 제공

    +

    - 특정 공통문구(이름, 일시, 비용 등) 일괄 변경 기능 제공

    +
    +
    +
    +

    기업‧단체‧공공기관 B2B 전용라인 제공

    +
    +
    +
    +
    +
    +
    +
    +

    2

    +

    이용고객

    +
    +
    +
    +

    개인(사업자)

    +
    +

    - 동호회, 동문회, 향우회, 병원, 부동산, 음식점, 마트, 대리점, 숙박업, 전문직 사무실, 소셜커머스 사업자, 교육시설(학원, 학교, 유치원, 어린이집), 스포츠시설(골프장, 피트니스) 등

    +
    +
    +
    +

    기업‧협회‧단체

    +
    +

    - 기업(대‧중‧소기업), 협회, 조합, 비영리단체, 종교단체(교회, 사찰), 은행, 카드사, 쇼핑몰, 택배사, 보험사, 리서치사 등

    +
    +
    +
    +

    공공

    +
    +

    - 정부, 지방자치단체, 국회, 지방의회, 법원, 공공기관, 공직유관단체, 도서관, 미술관, 전시관, 공연시설, 영화관 등

    +
    +
    +
    +
    +
    +
    +
    + 고객센터 아이콘 +

    고객센터

    +
    + +

    주식회사 아이티앤

    +
    +
    + + \ No newline at end of file From c5fe69fa43736a305ef8ed3c141538feedc9e5cb Mon Sep 17 00:00:00 2001 From: Eunjipark Date: Wed, 12 Mar 2025 15:36:04 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=EB=AC=B8=EC=9E=90=EC=98=A8=20=EB=AA=A8?= =?UTF-8?q?=EB=B0=94=EC=9D=BC=20=ED=99=8D=EB=B3=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20>=20'munjaon=5Fintro=5F03=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EB=AA=85'=20>=20'munjaon=5Fintro=5Fe'=20=EB=A1=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../publish_m/{munjaon_intro_03.html => munjaon_intro_e.html} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/webapp/publish/publish_m/{munjaon_intro_03.html => munjaon_intro_e.html} (100%) diff --git a/src/main/webapp/publish/publish_m/munjaon_intro_03.html b/src/main/webapp/publish/publish_m/munjaon_intro_e.html similarity index 100% rename from src/main/webapp/publish/publish_m/munjaon_intro_03.html rename to src/main/webapp/publish/publish_m/munjaon_intro_e.html From 72365d96451c56e5cdfebe126db777acbf2a85d1 Mon Sep 17 00:00:00 2001 From: Eunjipark Date: Wed, 12 Mar 2025 15:43:42 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=EB=AC=B8=EC=9E=90=EC=98=A8=20=EB=AA=A8?= =?UTF-8?q?=EB=B0=94=EC=9D=BC=20=ED=99=8D=EB=B3=B4=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20>=20'munjaon=5Fintro=5Fe=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EB=AA=85'=20>=20'munjaon=5Fintro=5Fcampaign'=20=EB=A1=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{munjaon_intro_e.html => munjaon_intro_campaign.html} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/webapp/publish/publish_m/{munjaon_intro_e.html => munjaon_intro_campaign.html} (100%) diff --git a/src/main/webapp/publish/publish_m/munjaon_intro_e.html b/src/main/webapp/publish/publish_m/munjaon_intro_campaign.html similarity index 100% rename from src/main/webapp/publish/publish_m/munjaon_intro_e.html rename to src/main/webapp/publish/publish_m/munjaon_intro_campaign.html From 5eea5ca7e3aedabc8015eb21e2fa324e9b8e503f Mon Sep 17 00:00:00 2001 From: kmg Date: Tue, 18 Mar 2025 14:06:12 +0900 Subject: [PATCH 6/8] =?UTF-8?q?2025/03/18=20=EC=B9=B4=EC=B9=B4=EC=98=A4?= =?UTF-8?q?=ED=86=A1=20=EB=B0=9C=EC=86=A1=EA=B2=B0=EA=B3=BC=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EB=B0=8F=20=EC=83=81=EC=84=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/css/content.css | 9 ++- .../publish/images/content/kakaoBg_01.png | Bin 0 -> 20187 bytes .../publish/textingmsg_2025_detail_kakao.html | 74 ++++++------------ .../webapp/publish/textingmsg_2025_list.html | 47 ++++++----- 4 files changed, 59 insertions(+), 71 deletions(-) create mode 100644 src/main/webapp/publish/images/content/kakaoBg_01.png diff --git a/src/main/webapp/publish/css/content.css b/src/main/webapp/publish/css/content.css index 8bdcd5d9..8d263e18 100644 --- a/src/main/webapp/publish/css/content.css +++ b/src/main/webapp/publish/css/content.css @@ -2126,7 +2126,10 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px .res_info .res_info_in .res_info_btm {margin:20px 0 0 0;padding:10px;background:#fff;border-radius:5px;box-sizing:border-box;} .res_info .res_info_in .res_info_btm dl {display:flex;padding:8px 10px;font-size:16px;font-weight:300;justify-content:space-between; color:#222;} -.res_info .res_info_in .res_info_btm dl.charge_line {border-top:1px solid #e6e6e6; text-align:center;} +.res_info .res_info_in .res_info_btm .charge_line {border-top:1px solid #e6e6e6; text-align:center; margin:0 10px; padding:7px 0 5px 0; } +.res_info .res_info_in .res_info_btm .charge_line dl {padding:7px 0 5px 10px; } +.res_info .res_info_in .res_info_btm .charge_line dl dt {font-size:15px;} +.res_info .res_info_in .res_info_btm .charge_line dl dd {padding:0; font-size:16px;} .res_info .res_info_in .res_info_btm dl dt.charge_title {font-size:15px; padding:0 0 0 5px;} .res_info .res_info_in .res_info_btm dl dt {font-weight:400;} .res_info .res_info_in .res_info_btm dl dt.btm_charge {font-size:16px;} @@ -2182,7 +2185,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px /* 알림톡 미리보기 */ .send_top .resultcont_right .phone_kakao {width: 374px; position: absolute; right:0; top: 0;} -.send_top .resultcont_right .phone_kakako .phoneIn{height: 720px; width:346px; background-image: url(/publish/images/content/kakaoBg.png); padding: 27px 25px 0 25px; margin:0 0 0 -12px;} +.send_top .resultcont_right .phone_kakako .phoneIn{height: 720px; width:346px; background-image: url(/publish/images/content/kakaoBg_01.png); padding: 27px 25px 0 25px; margin:0 0 0 -12px;} .send_top .resultcont_right .phone_kakako .prev_p{padding: 0 0 0 10px; border: 0; letter-spacing: -0.25px;} .send_top .resultcont_right .phone_kakako .prev_p img{margin: 0 10px 0 0;} .send_top .resultcont_right .phone_kakako .allimtalk_title{position: relative; width: calc(100% - 20px); background-color: #fae100; font-family: 'LotteMartDream'; font-size: 18px; padding: 12px 21px; border-radius: 5px 5px 0 0; box-sizing: border-box;} @@ -2206,7 +2209,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px .send_top .resultcont_right .phone_kakako .phoneIn .text_preview .allimtalk_content .btn_kakao_type{width: calc(100% - 20px); height: 40px; font-size: 15px; border-radius: 5px; background-color: #ededed;} .send_top .resultcont_right .phone_kakako .phoneIn .template_info_wrap{display: flex; width: calc(85% + 13px); height: auto; padding: 6px 15px 6px 23px; justify-content: space-between; align-items: center; background-color: #fae100; margin: -5px 0 0 -3px; border-radius: 0 0 25px 25px;} .send_top .resultcont_right .phone_kakako .phoneIn .template_info_wrap .btn_template_choice{width: 120px; height: 36px; font-size: 16px; color: #fae100; background-color: #302218; border-radius: 5px;} -.send_top .resultcont_right .phone_kakako .addText{color: #002c9a;text-align: center; font-size: 14px; padding-top: 2px; margin:10px 0 10px 0;} +.send_top .resultcont_right .phone_kakako .addText{color: #002c9a;text-align: center; font-size: 14px; padding-top: 2px; margin:-27px 0 10px 0;} .btn_list_type1 {border-top:solid 1px #e5e5e5; text-align: right; padding:26px 0 0 0; margin:60px 0 0 0;} .btn_list_type1 .btnType.btnType17 {width:100px; } diff --git a/src/main/webapp/publish/images/content/kakaoBg_01.png b/src/main/webapp/publish/images/content/kakaoBg_01.png new file mode 100644 index 0000000000000000000000000000000000000000..acd7212b9226e6de6e341301bc16d150eb42a2dd GIT binary patch literal 20187 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/publish/textingmsg_2025_detail_kakao.html b/src/main/webapp/publish/textingmsg_2025_detail_kakao.html index ec56b532..284fed01 100644 --- a/src/main/webapp/publish/textingmsg_2025_detail_kakao.html +++ b/src/main/webapp/publish/textingmsg_2025_detail_kakao.html @@ -775,7 +775,7 @@
    채널정보
    -
    채널명(@채널ID)
    +
    @채널ID
    진행상황 @@ -798,14 +798,16 @@
    78,100
    -
    -
    · 카카오톡
    -
    8,100
    -
    -
    -
    · 대체문자
    -
    8,100
    -
    +
    +
    +
    · 카카오톡
    +
    8,100
    +
    +
    +
    · 대체문자
    +
    8,100
    +
    +
@@ -821,48 +823,34 @@
전체건수
-
300,101
+
300,001
-
대기건수
-
300,000건(100%)
+
성공건수
+
300,000건(100%)
-
성공건수(카카오톡)
-
0건(0%)
+
대기건수
+
0건(0%)
-
실패건수(카카오톡)
+
실패건수
1건(100%)
-
-
-
-
-
성공건수(대체문자)
-
0건(0%)
-
-
-
-
-
실패건수(대체문자)
-
1건(100%)
-
-
-
+

* 전체건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.

- + @@ -891,9 +879,9 @@ 알림톡 도착
- - - +
+ +

강조표기 보조문구 미리보기

타이틀 미리보기

내용미리보기

@@ -901,13 +889,6 @@

채널 추가 안내 메시지 미리보기

- - - - - - -
@@ -923,7 +904,7 @@

문자내용

-

(광고)

-

내용을 입력해주세요.

-

+

대체문자 내용 미리보기

무료 거부 080-0000-0000

diff --git a/src/main/webapp/publish/textingmsg_2025_list.html b/src/main/webapp/publish/textingmsg_2025_list.html index 17728b10..18a98ad6 100644 --- a/src/main/webapp/publish/textingmsg_2025_list.html +++ b/src/main/webapp/publish/textingmsg_2025_list.html @@ -575,7 +575,7 @@
- +
@@ -638,8 +638,6 @@
@@ -790,13 +805,13 @@
- 카카오톡결과 + 대기 + 카카오톡결과 대체문자결과 금액(원) 진행상황 - 대기 성공 실패 성공 @@ -820,9 +835,7 @@
0 - -

0

- + 0

0

@@ -856,9 +869,7 @@ 0 - -

0

- + 0

0

@@ -887,9 +898,7 @@ 458,002 - -

1

- + 0

458,000

@@ -918,9 +927,7 @@ 458,002 - -

1

- + 0

458,000

@@ -938,7 +945,7 @@ - + @@ -947,7 +954,7 @@
- +
From 7d1cdedf03b7705c9d8bc08bddbbce058fc1b9ec Mon Sep 17 00:00:00 2001 From: kmg Date: Tue, 18 Mar 2025 14:22:04 +0900 Subject: [PATCH 7/8] =?UTF-8?q?2025/03/18=20=EC=B9=B4=EC=B9=B4=EC=98=A4?= =?UTF-8?q?=ED=86=A1=20=EA=B2=B0=EA=B3=BC=20=EC=83=81=EC=84=B8=20css=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/css/content.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/publish/css/content.css b/src/main/webapp/publish/css/content.css index 8d263e18..64912e99 100644 --- a/src/main/webapp/publish/css/content.css +++ b/src/main/webapp/publish/css/content.css @@ -2154,7 +2154,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px /* phone 기본 -- sticky */ .send_top .resultcont_right .phone {width: 374px; position: absolute; right: -2px; top: 0;} .send_top .resultcont_right .phone .phoneIn {background-image: url(/publish/images/content/phoneBg.png); height: 720px; background-size: 100% auto; background-repeat: no-repeat; } -.send_top .resultcont_right .phone .phoneIn>div {padding: 45px 30px 0 30px; position: relative; height: 96%; box-sizing: border-box;} +.send_top .resultcont_right .phone .phoneIn>div {padding: 45px 30px 25px 30px; position: relative; height: 96%; box-sizing: border-box;} .send_top .resultcont_right .phone .prev_p {font-size: 20px;font-weight: 500;padding-bottom: 12px;border-bottom: 1px solid #e5e5e5;} .send_top .resultcont_right .phone .text_length2 {padding: 12px 0;} .send_top .resultcont_right .phone .text_length2>span {float: left;line-height: 27px;} From a67c970812d4c68b9878edcf5cd19ecf9e574625 Mon Sep 17 00:00:00 2001 From: tolag3 Date: Mon, 24 Mar 2025 09:38:10 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=EB=B0=9C=EC=86=A1=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EC=95=8C=EB=A6=BC=ED=86=A1=20=EC=84=B1=EB=8A=A5=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/kakaoAt/service/MjonKakaoATVO.java | 16 + .../java/itn/let/kakao/kakaoComm/KakaoVO.java | 43 + .../web/KakaoAlimTalkSendController.java | 98 ++ .../user/sent/service/KakaoSentDetailVO.java | 51 + .../user/sent/service/KakaoSentService.java | 7 + .../kakao/user/sent/service/KakaoSentVO.java | 473 +-------- .../user/sent/service/impl/KakaoSentDAO.java | 40 + .../service/impl/KakaoSentServiceImpl.java | 325 +++++- .../user/sent/web/KakaoSentController.java | 146 ++- .../let/mjo/kakao/KakaoSent_SQL_Mysql.xml | 559 +++++++++- .../sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml | 3 + .../msgdata/at/KakaoAlimtalkMsgDataView.jsp | 56 + .../at/KakaoAlimtalkMsgDataView_tmp.jsp | 219 ++++ .../web/kakao/sent/KakaoSentAllListAjax.jsp | 431 +++----- .../sent/KakaoSentAllListAjax_back_250318.jsp | 405 +++++++ .../web/kakao/sent/KakaoSentDetailPopAjax.jsp | 209 ++-- .../KakaoSentDetailPopAjax_back_250320.jsp | 115 ++ .../web/kakao/sent/KakaoSentDetailView.jsp | 922 ++++++++++++++++ .../jsp/web/kakao/sent/KakaoSentView.jsp | 802 ++++---------- .../kakao/sent/KakaoSentView_back_250305.jsp | 996 ++++++++++++++++++ .../jsp/web/msgsent/MsgSentDetailView.jsp | 1 + 21 files changed, 4460 insertions(+), 1457 deletions(-) create mode 100644 src/main/java/itn/let/kakao/user/sent/service/KakaoSentDetailVO.java create mode 100644 src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax_back_250318.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax_back_250320.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp create mode 100644 src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView_back_250305.jsp diff --git a/src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java b/src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java index 0054fb9a..712e0b91 100644 --- a/src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java +++ b/src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java @@ -151,6 +151,8 @@ public class MjonKakaoATVO extends ComDefaultVO{ private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */ private String bizKakaoJsonFile; //카카오 친구톡 Json 파일 경로 + private String yellowId; + private String bizKakaoResendTypeCnt; public String getMsgDiv() { return msgDiv; @@ -1273,5 +1275,19 @@ public class MjonKakaoATVO extends ComDefaultVO{ public void setBizKakaoJsonFile(String bizKakaoJsonFile) { this.bizKakaoJsonFile = bizKakaoJsonFile; } + public String getYellowId() { + return yellowId; + } + public void setYellowId(String yellowId) { + this.yellowId = yellowId; + } + public String getBizKakaoResendTypeCnt() { + return bizKakaoResendTypeCnt; + } + public void setBizKakaoResendTypeCnt(String bizKakaoResendTypeCnt) { + this.bizKakaoResendTypeCnt = bizKakaoResendTypeCnt; + } + + } diff --git a/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java b/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java index e6dd28a3..fd0a935f 100644 --- a/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java +++ b/src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java @@ -246,6 +246,14 @@ public class KakaoVO extends MjonMsgVO{ private String successCntDay; private String successCntMonth; private String successCntYear; + + + + //재전송 영역 + private String msgResendAllFlag; + private String msgResendAllGroupId; + private String msgResendAllTmpKey; + private String msgResendAllYellowId; public String getSuccessDay() { return successDay; @@ -1238,4 +1246,39 @@ public class KakaoVO extends MjonMsgVO{ public void setPhmType(String phmType) { this.phmType = phmType; } + + public String getMsgResendAllFlag() { + return msgResendAllFlag; + } + + public void setMsgResendAllFlag(String msgResendAllFlag) { + this.msgResendAllFlag = msgResendAllFlag; + } + + public String getMsgResendAllGroupId() { + return msgResendAllGroupId; + } + + public void setMsgResendAllGroupId(String msgResendAllGroupId) { + this.msgResendAllGroupId = msgResendAllGroupId; + } + + public String getMsgResendAllTmpKey() { + return msgResendAllTmpKey; + } + + public void setMsgResendAllTmpKey(String msgResendAllTmpKey) { + this.msgResendAllTmpKey = msgResendAllTmpKey; + } + + public String getMsgResendAllYellowId() { + return msgResendAllYellowId; + } + + public void setMsgResendAllYellowId(String msgResendAllYellowId) { + this.msgResendAllYellowId = msgResendAllYellowId; + } + + + } diff --git a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java index bb32b5d1..ea1bb737 100644 --- a/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java +++ b/src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java @@ -46,6 +46,8 @@ import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; +import com.fasterxml.jackson.databind.ObjectMapper; + import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; @@ -216,6 +218,26 @@ public class KakaoAlimTalkSendController { model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId)); } + if("Y".equals(kakaoVO.getMsgResendAllFlag())) { + List resendList = new ArrayList(); + + MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO(); + mjonMsgDataVO.setMsgGroupId(kakaoVO.getMsgResendAllGroupId()); + mjonMsgDataVO.setUserId(userId); + resendList = mjonMsgDataService.selectMjMsgListByResend(mjonMsgDataVO); + + ObjectMapper mapper = new ObjectMapper(); + try { + String resendListJson = mapper.writeValueAsString(resendList); + model.addAttribute("resendListJson", resendListJson); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + + return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView"; } @@ -1403,4 +1425,80 @@ public class KakaoAlimTalkSendController { return modelAndView; } + + + @RequestMapping(value= {"/web/mjon/alimtalk/kakaoAlimtalkMsgDataView_test_set.do"}) + public String kakaoAlimtalkMsgDataView_test_set(ModelMap model + , @ModelAttribute("kakaoVO") KakaoVO kakaoVO) throws Exception { + + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority()); + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + + model.addAttribute("loginVO", loginVO); +/* if(userId == "") { + return "redirect:/web/user/login/login.do"; + }*/ + + + //2.사용자 개인 단가 정보 불러오기 + if(!userId.equals("") && !author.equals("ROLE_ADMIN")) { + + // 사용자 아이디를 이용한 발신프로필 조회 + kakaoVO.setUserId(userId); + List selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO); + model.addAttribute("kakaoProfileList", selectKakaoProfileList); + + //발신번호 불러오기 + //아이디 발신번호 리스트 불러오기. + List resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId); + List resultPhonList = new ArrayList(); + MJUtil mjUtil = new MJUtil(); + + for(String phone : resultSendPhonList) { + + resultPhonList.add(mjUtil.addDash(phone)); + + } + model.addAttribute("resultPhonList", resultPhonList); + + + MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId); + + model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn()); + + //3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용 + Float shortPrice = mberManageVO.getShortPrice(); + Float longPrice = mberManageVO.getLongPrice(); + Float picturePrice = mberManageVO.getPicturePrice(); + Float picture2Price = mberManageVO.getPicture2Price(); + Float picture3Price = mberManageVO.getPicture3Price(); + BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN); + + model.addAttribute("userMoney", userMoney); + + + ////////////////////////////////////////////////////////////////// + + //최근 전송 내역 + MjonMsgDataVO searchVO = new MjonMsgDataVO(); + Calendar cal = Calendar.getInstance(); + Date now = new Date(); + SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); + cal.setTime(now); + cal.add(Calendar.DATE, -3); + String chkDate = format.format(cal.getTime()); + searchVO.setUserId(userId); + searchVO.setMyMsgStDt(chkDate); //검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작 + model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO)); + + //자주보내는 번호 + model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO)); + + // 사용자 저으이 + model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId)); + } + + return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp"; + } } diff --git a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentDetailVO.java b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentDetailVO.java new file mode 100644 index 00000000..f5cc4dde --- /dev/null +++ b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentDetailVO.java @@ -0,0 +1,51 @@ +package itn.let.kakao.user.sent.service; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class KakaoSentDetailVO extends KakaoSentVO{ + + private static final long serialVersionUID = 1L; + + private String msgGroupId; + private String reqDate; + private String regDate; + private String msgGroupCnt; + private String reserveYn; + private String reserveCYn; + private String canceldate; + private String callFrom; + private String userId; + private String smsTxt; + private String subject; + private String subjectChkYn; + private String msgType; + private String fileCnt; + private String msgKind; + private String eachPrice; + private String filePath1; + private String filePath2; + private String filePath3; + + private String callTo; + private String statusTxt; + private String addrNm; + + private String successPct; + private String failedPct; + private String waitingPct; + + private String statusCd; // 진행상태 코드 + private String divideYn; + private String divideText; + private String totPrice; + private String yellowId; + private String msgNoticetalkTmpKey; + + // FileInfo 리스트 필드 추가 +// private List fileInfos; + + +} diff --git a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java index aa488b38..61308a39 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java +++ b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java @@ -1,6 +1,7 @@ package itn.let.kakao.user.sent.service; import java.util.List; +import java.util.Map; import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; @@ -31,5 +32,11 @@ public interface KakaoSentService { //예약 결과 전체 발송 리스트 불러오기 public List selectReservKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception; + public Map selectKakaoSentCntAll_Advc(KakaoSentVO kakaoSentVO) throws Exception; + + public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception; + + //발송 관리 문자발송 내용 상세보기 팝업 + public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO kakaoSentVO) throws Exception; } diff --git a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java index d5cf36fa..f600ebae 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java +++ b/src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java @@ -4,7 +4,11 @@ import java.util.Date; import java.util.List; import itn.let.uss.umt.service.UserDefaultVO; +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter public class KakaoSentVO extends UserDefaultVO{ private static final long serialVersionUID = 1L; @@ -90,6 +94,7 @@ public class KakaoSentVO extends UserDefaultVO{ private int successCount; private int waitCount; private int failCount; + private int allCount; private String bizUmid; private int kakaoResendSuccCount; @@ -103,471 +108,11 @@ public class KakaoSentVO extends UserDefaultVO{ private String atDelayCompleteYn; //알림톡 30분 지연 승인/취소 처리 여부 private Date atDelayOrgTime; //알림톡 30분 지연에 대한 원래 시간 (-30분 처리된 시간) - public String getCallToComma() { - return callToComma; - } - public void setCallToComma(String callToComma) { - this.callToComma = callToComma; - } - public String getCallFromComma() { - return callFromComma; - } - public void setCallFromComma(String callFromComma) { - this.callFromComma = callFromComma; - } + private String statusCd; - public String getAtchFiles() { - return atchFiles; - } - public void setAtchFiles(String atchFiles) { - this.atchFiles = atchFiles; - } + private int successPrice; + private int kakaoResendSuccPrice; - public String getMsgId() { - return msgId; - } - public void setMsgId(String msgId) { - this.msgId = msgId; - } - public int getSuccessCnt() { - return successCnt; - } - public void setSuccessCnt(int successCnt) { - this.successCnt = successCnt; - } - public String getMsgTypeName() { - return msgTypeName; - } - public void setMsgTypeName(String msgTypeName) { - this.msgTypeName = msgTypeName; - } - public int getOrderByCode() { - return orderByCode; - } - public void setOrderByCode(int orderByCode) { - this.orderByCode = orderByCode; - } - public String getAtchFileId() { - return atchFileId; - } - public void setAtchFileId(String atchFileId) { - this.atchFileId = atchFileId; - } - public String getFileSn() { - return fileSn; - } - public void setFileSn(String fileSn) { - this.fileSn = fileSn; - } - public String getUserId() { - return userId; - } - public void setUserId(String userId) { - this.userId = userId; - } - public String getAddrNm() { - return addrNm; - } - public void setAddrNm(String addrNm) { - this.addrNm = addrNm; - } - public String getMsgSeq() { - return msgSeq; - } - public void setMsgSeq(String msgSeq) { - this.msgSeq = msgSeq; - } - public String getMsgGroupId() { - return msgGroupId; - } - public void setMsgGroupId(String msgGroupId) { - this.msgGroupId = msgGroupId; - } - public List getMsgGroupIdList() { - return msgGroupIdList; - } - public void setMsgGroupIdList(List msgGroupIdList) { - this.msgGroupIdList = msgGroupIdList; - } - public String getSmsTxt() { - return smsTxt; - } - public void setSmsTxt(String smsTxt) { - this.smsTxt = smsTxt; - } - public String getSubject() { - return subject; - } - public void setSubject(String subject) { - this.subject = subject; - } - public Date getRegdate() { - return regdate; - } - public void setRegdate(Date regdate) { - this.regdate = regdate; - } - public Date getReqdate() { - return reqdate; - } - public void setReqdate(Date reqdate) { - this.reqdate = reqdate; - } - public String getCallFrom() { - return callFrom; - } - public void setCallFrom(String callFrom) { - this.callFrom = callFrom; - } - public String getCallTo() { - return callTo; - } - public void setCallTo(String callTo) { - this.callTo = callTo; - } - public List getCallToList() { - return callToList; - } - public void setCallToList(List callToList) { - this.callToList = callToList; - } - public String getTotPrice() { - return totPrice; - } - public void setTotPrice(String totPrice) { - this.totPrice = totPrice; - } - public String getEachPrice() { - return eachPrice; - } - public void setEachPrice(String eachPrice) { - this.eachPrice = eachPrice; - } - public String getDelFlag() { - return delFlag; - } - public void setDelFlag(String delFlag) { - this.delFlag = delFlag; - } - public String getTotMsgPrice() { - return totMsgPrice; - } - public void setTotMsgPrice(String totMsgPrice) { - this.totMsgPrice = totMsgPrice; - } - public String getRsltCode() { - return rsltCode; - } - public void setRsltCode(String rsltCode) { - this.rsltCode = rsltCode; - } - public String getRsltCode2() { - return rsltCode2; - } - public void setRsltCode2(String rsltCode2) { - this.rsltCode2 = rsltCode2; - } - public String getMsgType() { - return msgType; - } - public void setMsgType(String msgType) { - this.msgType = msgType; - } - public String getMsgGroupCnt() { - return msgGroupCnt; - } - public void setMsgGroupCnt(String msgGroupCnt) { - this.msgGroupCnt = msgGroupCnt; - } - public String getFileCnt() { - return fileCnt; - } - public void setFileCnt(String fileCnt) { - this.fileCnt = fileCnt; - } - public String getTotMsgCnt() { - return totMsgCnt; - } - public void setTotMsgCnt(String totMsgCnt) { - this.totMsgCnt = totMsgCnt; - } - public String getCurState() { - return curState; - } - public void setCurState(String curState) { - this.curState = curState; - } - public String getReserveYn() { - return reserveYn; - } - public void setReserveYn(String reserveYn) { - this.reserveYn = reserveYn; - } - public String getReserveCYn() { - return reserveCYn; - } - public void setReserveCYn(String reserveCYn) { - this.reserveCYn = reserveCYn; - } - public String getFilePath1() { - return filePath1; - } - public void setFilePath1(String filePath1) { - this.filePath1 = filePath1; - } - public String getFilePath2() { - return filePath2; - } - public void setFilePath2(String filePath2) { - this.filePath2 = filePath2; - } - public String getFilePath3() { - return filePath3; - } - public void setFilePath3(String filePath3) { - this.filePath3 = filePath3; - } - public Date getSentDate() { - return sentDate; - } - public void setSentDate(Date sentDate) { - this.sentDate = sentDate; - } - public String getAgentCode() { - return agentCode; - } - public void setAgentCode(String agentCode) { - this.agentCode = agentCode; - } - public String getUserData() { - return userData; - } - public void setUserData(String userData) { - this.userData = userData; - } - public List getUserDataList() { - return userDataList; - } - public void setUserDataList(List userDataList) { - this.userDataList = userDataList; - } - public Date getCancelDate() { - return cancelDate; - } - public void setCancelDate(Date cancelDate) { - this.cancelDate = cancelDate; - } - public String getStartDate() { - return startDate; - } - public void setStartDate(String startDate) { - this.startDate = startDate; - } - public String getEndDate() { - return endDate; - } - public void setEndDate(String endDate) { - this.endDate = endDate; - } - public String getSearchMsgType() { - return searchMsgType; - } - public void setSearchMsgType(String searchMsgType) { - this.searchMsgType = searchMsgType; - } - public String getTabType() { - return tabType; - } - public void setTabType(String tabType) { - this.tabType = tabType; - } - public String getStateType() { - return stateType; - } - public void setStateType(String stateType) { - this.stateType = stateType; - } - public String getListType() { - return listType; - } - public void setListType(String listType) { - this.listType = listType; - } - public String getResultType() { - return resultType; - } - public void setResultType(String resultType) { - this.resultType = resultType; - } - public String getMsgResultCnt() { - return msgResultCnt; - } - public void setMsgResultCnt(String msgResultCnt) { - this.msgResultCnt = msgResultCnt; - } - public String getMsgResultSts() { - return msgResultSts; - } - public void setMsgResultSts(String msgResultSts) { - this.msgResultSts = msgResultSts; - } - public String getAddrGrpNm() { - return addrGrpNm; - } - public void setAddrGrpNm(String addrGrpNm) { - this.addrGrpNm = addrGrpNm; - } - public int getOrderByrsltCode() { - return orderByrsltCode; - } - public void setOrderByrsltCode(int orderByrsltCode) { - this.orderByrsltCode = orderByrsltCode; - } - public String getMsgResult() { - return msgResult; - } - public void setMsgResult(String msgResult) { - this.msgResult = msgResult; - } - 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 String getMsgKind() { - return msgKind; - } - public void setMsgKind(String msgKind) { - this.msgKind = msgKind; - } - 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 String getBizKakaoResendYn() { - return bizKakaoResendYn; - } - public void setBizKakaoResendYn(String bizKakaoResendYn) { - this.bizKakaoResendYn = bizKakaoResendYn; - } - public String getBizKakaoResendType() { - return bizKakaoResendType; - } - public void setBizKakaoResendType(String bizKakaoResendType) { - this.bizKakaoResendType = bizKakaoResendType; - } - public String getBizKakaoResendData() { - return bizKakaoResendData; - } - public void setBizKakaoResendData(String bizKakaoResendData) { - this.bizKakaoResendData = bizKakaoResendData; - } - public String getCallStatus() { - return callStatus; - } - public void setCallStatus(String callStatus) { - this.callStatus = callStatus; - } - public String getBizKakaoAtPrice() { - return bizKakaoAtPrice; - } - public void setBizKakaoAtPrice(String bizKakaoAtPrice) { - this.bizKakaoAtPrice = bizKakaoAtPrice; - } - public String getBizKakaoFtPrice() { - return bizKakaoFtPrice; - } - public void setBizKakaoFtPrice(String bizKakaoFtPrice) { - this.bizKakaoFtPrice = bizKakaoFtPrice; - } - public String getBizSmsPrice() { - return bizSmsPrice; - } - public void setBizSmsPrice(String bizSmsPrice) { - this.bizSmsPrice = bizSmsPrice; - } - public String getDiffMin() { - return diffMin; - } - public void setDiffMin(String diffMin) { - this.diffMin = diffMin; - } - public String getBizMmsPrice() { - return bizMmsPrice; - } - public void setBizMmsPrice(String bizMmsPrice) { - this.bizMmsPrice = bizMmsPrice; - } - public int getSuccessCount() { - return successCount; - } - public void setSuccessCount(int successCount) { - this.successCount = successCount; - } - public String getBizUmid() { - return bizUmid; - } - public void setBizUmid(String bizUmid) { - this.bizUmid = bizUmid; - } - public int getKakaoResendSuccCount() { - return kakaoResendSuccCount; - } - public void setKakaoResendSuccCount(int kakaoResendSuccCount) { - this.kakaoResendSuccCount = kakaoResendSuccCount; - } - public int getKakaoResendFailCount() { - return kakaoResendFailCount; - } - public void setKakaoResendFailCount(int kakaoResendFailCount) { - this.kakaoResendFailCount = kakaoResendFailCount; - } - public int getWaitCount() { - return waitCount; - } - public void setWaitCount(int waitCount) { - this.waitCount = waitCount; - } - public int getFailCount() { - return failCount; - } - 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; - } - - + private String divideYn; } diff --git a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java index 969bdb6b..d2a47e18 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java +++ b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Repository; import egovframework.rte.psl.dataaccess.EgovAbstractDAO; import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; +import itn.let.kakao.user.sent.service.KakaoSentDetailVO; import itn.let.kakao.user.sent.service.KakaoSentVO; @Repository("KakaoSentDAO") @@ -45,6 +46,10 @@ public class KakaoSentDAO extends EgovAbstractDAO { public List selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{ return (List) list("KakaoSentDAO.selectAllKakaoSentList",kakaoSentVO); } + @SuppressWarnings("unchecked") + public List selectAllKakaoSentList_advc(KakaoSentVO kakaoSentVO) throws Exception{ + return (List) list("KakaoSentDAO.selectAllKakaoSentList_advc",kakaoSentVO); + } @SuppressWarnings("unchecked") public List selectAllPrivateKakaoSentList(KakaoSentVO KakaoSentVO) throws Exception{ @@ -90,4 +95,39 @@ public class KakaoSentDAO extends EgovAbstractDAO { return (List) list("KakaoSentDAO.selectReservKakaoSentList",kakaoSentVO); } + @SuppressWarnings("unchecked") + public List selectKakaoSentCntAll_advc(KakaoSentVO kakaoSentVO) throws Exception{ + + List result = new ArrayList(); + + try { + + result = (List) list("KakaoSentDAO.selectKakaoSentCntAll_advc", kakaoSentVO); + + } catch (Exception e) { + + throw new Exception("++++++++++ ErrorService DAO :: " + e); + + } + + return result; + } + + public KakaoSentVO selectKakaoSentCntEachCnt_advc(KakaoSentVO kakaoSentVO) throws Exception{ + return (KakaoSentVO) select("KakaoSentDAO.selectKakaoSentCntEachCnt_advc",kakaoSentVO); + } + + public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception{ + return (KakaoSentDetailVO) select("KakaoSentDAO.selectKakaoSentDetailView", kakaoSentDetailVO); + } + + public List findByReqDateWhereMsgGroupId(String msgGroupId) { + return (List) list("KakaoSentDAO.findByReqDateWhereMsgGroupId", msgGroupId); + } + + //발송 관리 문자발송 내용 상세보기 팝업[그룹] + public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO KakaoSentVO) throws Exception{ + return (MjonKakaoATVO) select("KakaoSentDAO.selectKakaoSentDetailViewPhoneAjax", KakaoSentVO); + } + } diff --git a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java index 3bbcf29e..0a622283 100644 --- a/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java +++ b/src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java @@ -1,7 +1,15 @@ package itn.let.kakao.user.sent.service.impl; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import javax.annotation.Resource; @@ -10,6 +18,7 @@ import org.springframework.stereotype.Service; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; import egovframework.rte.fdl.idgnr.EgovIdGnrService; import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO; +import itn.let.kakao.user.sent.service.KakaoSentDetailVO; import itn.let.kakao.user.sent.service.KakaoSentService; import itn.let.kakao.user.sent.service.KakaoSentVO; @@ -29,7 +38,8 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka try { - result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO); +// result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO); + result = kakaoSentDAO.selectKakaoSentCntAll_advc(kakaoSentVO); } catch (Exception e) { throw new Exception("++++++++++ ErrorService Impl :: " + e); @@ -38,30 +48,83 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka return result; } + public Map selectKakaoSentCntAll_Advc(KakaoSentVO kakaoSentVO) throws Exception{ + + List result = new ArrayList(); + Map returnMap = new HashMap(); + + try { + +// result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO); + result = kakaoSentDAO.selectKakaoSentCntAll_advc(kakaoSentVO); + + + KakaoSentVO allVO = new KakaoSentVO(); + KakaoSentVO atVO = new KakaoSentVO(); + KakaoSentVO ftVO = new KakaoSentVO(); + + result.stream() + .forEach(t -> + { + Integer rsultCnt = Integer.parseInt(t.getMsgResultCnt()); + + if(Integer.parseInt(t.getFilePath1()) > 0) { + if("S".equals(t.getMsgResultSts())) { + atVO.setSuccessCount(atVO.getSuccessCount()+rsultCnt); + }else if("W".equals(t.getMsgResultSts())) { + atVO.setWaitCount(atVO.getWaitCount()+rsultCnt); + }else { + atVO.setFailCount(atVO.getFailCount()+rsultCnt); + } + + atVO.setAllCount(atVO.getAllCount()+rsultCnt); + allVO.setAllCount(allVO.getAllCount()+rsultCnt); + + }else { + if("S".equals(t.getMsgResultSts())) { + ftVO.setSuccessCount(ftVO.getSuccessCount()+rsultCnt); + }else if("W".equals(t.getMsgResultSts())) { + ftVO.setWaitCount(ftVO.getWaitCount()+rsultCnt); + }else { + ftVO.setFailCount(ftVO.getFailCount()+rsultCnt); + } + + ftVO.setAllCount(ftVO.getAllCount()+rsultCnt); + allVO.setAllCount(allVO.getAllCount()+rsultCnt); + + } + }); + + allVO.setSuccessCount(atVO.getSuccessCount()+ftVO.getSuccessCount()); + allVO.setWaitCount(atVO.getWaitCount()+ftVO.getWaitCount()); + allVO.setFailCount(atVO.getFailCount()+ftVO.getFailCount()); + + //전체 성공건, 실패건 불러오기 + returnMap.put("allCnt", allVO); + + //알림톡 성공건, 실패건 불러오기 + returnMap.put("atCnt", atVO); + + //친구톡 성공건, 실패건 불러오기 + returnMap.put("ftCnt", ftVO); + + + } catch (Exception e) { + throw new Exception("++++++++++ ErrorService Impl :: " + e); + } + + return returnMap; + } + //발송 관리 전체 발송 리스트 불러오기 public List selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{ List resultList = new ArrayList(); - String listType = kakaoSentVO.getListType(); - String stateType = kakaoSentVO.getStateType(); + resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO); - if(stateType.equals("fail")) { - - listType = "privateList"; - - } - - System.out.println("listType : "+ listType); - if(listType.equals("groupList")) {//전송건별 리스트 불러오기 - - resultList = kakaoSentDAO.selectAllKakaoSentList(kakaoSentVO); - - }else {//개인별 리스트 불러오기 - - resultList = kakaoSentDAO.selectAllPrivateKakaoSentList(kakaoSentVO); - - } + //totPrice 계산 및 상태코드 set + resultList = resultList.stream().map(t -> setPriceNCode(t)).collect(Collectors.toList()); return resultList; } @@ -149,5 +212,229 @@ public class KakaoSentServiceImpl extends EgovAbstractServiceImpl implements Ka return kakaoSentDAO.selectReservKakaoSentList(kakaoSentVO); } + + @Override + public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception{ + + KakaoSentDetailVO resultVO = kakaoSentDAO.selectKakaoSentDetailView(kakaoSentDetailVO); + + int total = Integer.parseInt(resultVO.getMsgGroupCnt()); // 전체 건수 + int success = 0; // 성공 건수 + int waiting = 0; // 대기 건수 + int failed = 0; // 실패 건수 + if("Y".equals(resultVO.getBizKakaoResendYn())) { + success = resultVO.getSuccessCount() + resultVO.getKakaoResendSuccCount(); + failed = resultVO.getKakaoResendFailCount(); + }else { + success = resultVO.getSuccessCount(); + failed = resultVO.getFailCount(); + } + waiting = resultVO.getWaitCount(); // 대기 건수 + + String successPct = total > 0 ? String.format("%.1f%%", (success / (double) total) * 100) : "0.0%"; + String waitingPct = total > 0 ? String.format("%.1f%%", (waiting / (double) total) * 100) : "0.0%"; + String failedPct = total > 0 ? String.format("%.1f%%", (failed / (double) total) * 100) : "0.0%"; + + resultVO.setSuccessPct(successPct); + resultVO.setFailedPct(waitingPct); + resultVO.setWaitingPct(failedPct); + + resultVO.setTotPrice(this.priceProc(resultVO.getSuccessPrice(), resultVO.getKakaoResendSuccPrice())); + + resultVO = this.codeProc(resultVO); + + // 분할문자인 경우 + if("Y".equals(resultVO.getDivideYn())) { + String divideText = calculateBatchInfo(resultVO); + resultVO.setDivideText(divideText); + } + + return resultVO; + } + + //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) + public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO kakaoSentVO) throws Exception{ + + return kakaoSentDAO.selectKakaoSentDetailViewPhoneAjax(kakaoSentVO); + } + + + // 공통코드 ITN057에 대한 코드화 진행 + /* + * CODE_ID CODE CODE_NM CODE_DC + * ITN057 01 진행중 진행중 + * ITN057 02 완료 완료출해야함 + * ITN057 03 예약대기 예약대기(발송전) 버튼으로 노출해야함 + * ITN057 04 - 예약취소 ( - 으로 노출 ) + * */ + private KakaoSentVO setPriceNCode(KakaoSentVO result) { + + //성공 건수 세팅 + KakaoSentVO eachCnt = new KakaoSentVO(); + eachCnt.setMsgGroupId(result.getMsgGroupId()); + try { + eachCnt = kakaoSentDAO.selectKakaoSentCntEachCnt_advc(eachCnt); + } catch (Exception e) { + System.out.println("setPriceNCode error!!"); + } + + result.setSuccessCount(eachCnt.getSuccessCount()); + result.setWaitCount(eachCnt.getWaitCount()); + result.setFailCount(eachCnt.getFailCount()); + result.setKakaoResendSuccCount(eachCnt.getKakaoResendSuccCount()); + result.setKakaoResendFailCount(eachCnt.getKakaoResendFailCount()); + + + //완료상태 시작 + result = this.codeProc(result); + + //완료상태 끝 + //======================================================= + + //총금액 시작 + result.setTotPrice(this.priceProc(eachCnt.getSuccessPrice(), eachCnt.getKakaoResendSuccPrice())); + + + return result; + + } + + private String priceProc(int successPrice, int kakaoResendSuccPrice) { + + String totPrice = "-"; + + //총금액 시작 + //======================================================= + // TotPrice : 성공건수에 대한 금액 곱하기 + BigDecimal atPrice = new BigDecimal(successPrice); + BigDecimal kakaoResendPrice = new BigDecimal(kakaoResendSuccPrice); + BigDecimal totalPrice = atPrice.add(kakaoResendPrice); + // 소수점 한 자리로 설정 (반올림)// totalPrice 값을 소수점 한 자리까지 반올림하여 roundedTotalPrice에 저장 + // RoundingMode.HALF_UP: 반올림 방식으로, 소수점 기준 5 이상이면 올림, 그렇지 않으면 내림 + BigDecimal roundedTotalPrice = totalPrice.setScale(1, RoundingMode.HALF_UP); + + // roundedTotalPrice가 0인지 확인 + // BigDecimal.compareTo(BigDecimal.ZERO)는 값을 비교하는 메서드 + // 결과: + // - 반환 값이 0이면 두 값이 같음 + // - 반환 값이 음수이면 roundedTotalPrice가 0보다 작음 + // - 반환 값이 양수이면 roundedTotalPrice가 0보다 큼 + if (roundedTotalPrice.compareTo(BigDecimal.ZERO) == 0) { + // roundedTotalPrice 값이 0이면, "-" 문자열을 totPrice에 설정 + totPrice = "-"; + } else { + // roundedTotalPrice 값이 0이 아닌 경우 + // 반올림된 BigDecimal 값을 toPlainString()을 사용하여 문자열로 변환 후 totPrice에 설정 + // toPlainString(): 지수 표기법 없이 일반적인 문자열 형태로 반환 + totPrice = roundedTotalPrice.toPlainString(); + } + //총금액 끝 + //======================================================= + + + return totPrice; + } + + private KakaoSentVO codeProc(KakaoSentVO result) { + //======================================================= + String returnCode; + if ("Y".equals(result.getReserveCYn())) { + returnCode = "04"; // 예약취소 코드 + } else if ( + "Y".equals(result.getReserveYn()) + && "N".equals(result.getReserveCYn()) + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getWaitCount()) + && Integer.valueOf(result.getDiffMin()) < -5 // 예약 시간이 5분 이상인 것들만 + ) { + returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 ) + } else if ( + //대체문자 발송 Y일때 + ("Y".equals(result.getBizKakaoResendYn()) + //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount()) + //알림톡 발송 실패건 == 대체문자 발송 성공건 + 대체문자 발송 실패건 + && result.getFailCount() == (result.getKakaoResendSuccCount() + result.getKakaoResendFailCount()) + ) + || + //대체문자 발송 N일때 + ("N".equals(result.getBizKakaoResendYn()) + //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount())) + ) { + returnCode = "02"; // 완료 코드 + } else { + returnCode = "01"; // 진행중 코드 + } + + result.setStatusCd(returnCode); + + return result; + } + private KakaoSentDetailVO codeProc(KakaoSentDetailVO result) { + //======================================================= + String returnCode; + if ("Y".equals(result.getReserveCYn())) { + returnCode = "04"; // 예약취소 코드 + } else if ( + "Y".equals(result.getReserveYn()) + && "N".equals(result.getReserveCYn()) + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getWaitCount()) + && Integer.valueOf(result.getDiffMin()) < -5 // 예약 시간이 5분 이상인 것들만 + ) { + returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 ) + } else if ( + //대체문자 발송 Y일때 + ("Y".equals(result.getBizKakaoResendYn()) + //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount()) + //알림톡 발송 실패건 == 대체문자 발송 성공건 + 대체문자 발송 실패건 + && result.getFailCount() == (result.getKakaoResendSuccCount() + result.getKakaoResendFailCount()) + ) + || + //대체문자 발송 N일때 + ("N".equals(result.getBizKakaoResendYn()) + //알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건 + && Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount())) + ) { + returnCode = "02"; // 완료 코드 + } else { + returnCode = "01"; // 진행중 코드 + } + + result.setStatusCd(returnCode); + + return result; + } + + private String calculateBatchInfo(KakaoSentDetailVO resultVO) { + + String msgGroupId = resultVO.getMsgGroupId(); + + + List requestTimes = kakaoSentDAO.findByReqDateWhereMsgGroupId(msgGroupId); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"); + Map timeCountMap = new LinkedHashMap<>(); + + // REQ_DATE 그룹화 (같은 시간대 몇 건인지) + for (String timeStr : requestTimes) { + LocalDateTime time = LocalDateTime.parse(timeStr, formatter); + timeCountMap.put(time, timeCountMap.getOrDefault(time, 0) + 1); + } + + // 가장 첫 번째 시간 & 간격 계산 + List sortedKeys = new ArrayList<>(timeCountMap.keySet()); + if (sortedKeys.size() < 2) { + return "데이터 부족 (분석 불가)"; + } + + int batchSize = timeCountMap.get(sortedKeys.get(0)); // 한 번에 보낸 건수 + int intervalMinutes = sortedKeys.get(1).getMinute() - sortedKeys.get(0).getMinute(); // 시간 간격 계산 +// int batchCount = sortedKeys.size(); // 총 몇 번 보냈는지 + +// return String.format("%,d건씩 %d분 간격 (%d회 발송)", batchSize, intervalMinutes, batchCount); + return String.format("%,d건씩 %d분 간격", batchSize, intervalMinutes); + + } } diff --git a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java index ec57539a..39dddf44 100644 --- a/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java +++ b/src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java @@ -8,6 +8,7 @@ import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; +import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -26,6 +27,8 @@ import org.json.simple.parser.JSONParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; @@ -43,6 +46,7 @@ import itn.let.kakao.kakaoComm.KakaoButtonVO; import itn.let.kakao.kakaoComm.KakaoReturnVO; import itn.let.kakao.kakaoComm.KakaoVO; import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate; +import itn.let.kakao.user.sent.service.KakaoSentDetailVO; import itn.let.kakao.user.sent.service.KakaoSentService; import itn.let.kakao.user.sent.service.KakaoSentVO; @@ -82,26 +86,26 @@ public class KakaoSentController { //전체 발송 건수 통계 불러오기 kakaoSentVO.setMsgType(""); - List totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO); - model.addAttribute("totalMsgCnt", totalMsgCnt); - - List atCnt = new ArrayList(); - List ftCnt = new ArrayList(); - - - totalMsgCnt.forEach(t->{ - if (Integer.parseInt(t.getFilePath1())>0) { - atCnt.add(t); - } else if (Integer.parseInt(t.getFilePath2())>0) { - ftCnt.add(t); - } - }); - - //알림톡 성공건, 실패건 불러오기 - model.addAttribute("atCnt", atCnt); - - //친구톡 성공건, 실패건 불러오기 - model.addAttribute("ftCnt", ftCnt); +// List totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO); +// model.addAttribute("totalMsgCnt", totalMsgCnt); +// +// List atCnt = new ArrayList(); +// List ftCnt = new ArrayList(); +// +// +// totalMsgCnt.forEach(t->{ +// if (Integer.parseInt(t.getFilePath1())>0) { +// atCnt.add(t); +// } else if (Integer.parseInt(t.getFilePath2())>0) { +// ftCnt.add(t); +// } +// }); +// +// //알림톡 성공건, 실패건 불러오기 +// model.addAttribute("atCnt", atCnt); +// +// //친구톡 성공건, 실패건 불러오기 +// model.addAttribute("ftCnt", ftCnt); // 검색 리스트 불러오기 if(kakaoSentVO.getPageUnit() != 10) kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit()); @@ -193,7 +197,7 @@ public class KakaoSentController { List resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO); System.out.println("??"); model.addAttribute("resultAllSentList", resultAllSentList); - model.addAttribute("resultAllSentCnt", resultAllSentList.size()); +// model.addAttribute("resultAllSentCnt", resultAllSentList.size()); model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword()); paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); @@ -984,5 +988,105 @@ public class KakaoSentController { } + @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do"}) + public ResponseEntity selectKakaoSentViewTotalSumAjax( + KakaoSentVO kakaoSentVO + ) throws Exception{ + //로그인 권한정보 불러오기 + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + if(loginVO == null) { +// return "redirect:/web/user/login/login.do"; + } + + kakaoSentVO.setUserId(userId); + + Map returnMap = kakaoSentService.selectKakaoSentCntAll_Advc(kakaoSentVO); + + return new ResponseEntity<>(returnMap, HttpStatus.OK); + } + /** + * 발송관리 상세화면 + * @param searchVO + * @param model + * @return "/web/kakao/sent/selectKakaoSentDetailView.do" + * @throws Exception + */ + @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailView.do"}) + public String selectKakaoSentDetailView(@ModelAttribute("searchVO") KakaoSentDetailVO kakaoSentDetailVO, + RedirectAttributes redirectAttributes, ModelMap model) throws Exception{ + //로그인 권한정보 불러오기 + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + if(loginVO == null) { + return "redirect:/web/user/login/login.do"; + } + + kakaoSentDetailVO.setUserId(userId); + + model.addAttribute("result", kakaoSentService.selectKakaoSentDetailView(kakaoSentDetailVO)); + + return "web/kakao/sent/KakaoSentDetailView"; + } + + + /** + * @methodName : selectMsgSentDetailDataAjax + * @author : 이호영 + * @date : 2023.03.06 + * @description : 알림톡 전송 - 내용 상세 팝업 [전송건별] + * @param mjonKakaoATVO + * @param model + * @return + * @throws Exception + */ + @RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailViewPhoneAjax.do"}) + public String selectKakaoSentDetailViewPhoneAjax(@ModelAttribute("searchVO") MjonKakaoATVO mjonKakaoATVO, ModelMap model) throws Exception{ + + //로그인 권한정보 불러오기 + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + mjonKakaoATVO.setUserId(userId); + + + + //발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA) + MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailDataAjax(mjonKakaoATVO); + // 대체문자 엔터키 치환 + mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt())); + model.addAttribute("resultMsgDetail", mjonKakaoATResultVO); + + String msgType = mjonKakaoATResultVO.getMsgType(); + + if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리 + + // 템플릿 api 가져오기 + KakaoVO kakaoVO = new KakaoVO(); + kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey()); + kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey()); + + KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO); + + model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); + // //템플릿 api 가져오기 + + }else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리 + + //String smsTxt = mjonKakaoATResultVO.getSmsTxt(); + + KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO); + //kakaoTemplateInfo.setTemplateContent(smsTxt); + + model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo); + + }else { + + model.addAttribute("kakaoTemplateInfo", ""); + + } + + model.addAttribute("msgType", msgType); + return "web/kakao/sent/KakaoSentDetailPopAjax"; + } } diff --git a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml index 723ae746..4223f1d2 100644 --- a/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml @@ -4,11 +4,13 @@ ========= ======= ================================================= 2023.02.17 안주영 --> - + + + @@ -1350,4 +1352,559 @@ ) M2 + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml index 49205e36..dd0d98b6 100644 --- a/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml @@ -485,6 +485,9 @@ ]]> + + AND B.MSG_TYPE in ('4', '6') + = DATE_FORMAT(#searchStartDate#, '%Y-%m-%d') diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp index 391e7a03..4fb0fd35 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp @@ -1076,6 +1076,62 @@ function checkNumber(event) { return true; } +//재전송 스크립트 수정 +$(window).on('load', function() { + if("${msgResendAllFlag eq 'Y'}") { + // 채널 ID 및 템플릿 선택 코드는 유지 + $("#selectKakaoProfileList option").filter(function() { + return $(this).text() === '${kakaoVO.msgResendAllYellowId}'; + }).prop('selected', true).parent().trigger("click"); + + // 템플릿 선택 + $("#selectTemplateList option").remove(); + selectTemplateList(); + $("#selectTemplateList").val("${kakaoVO.msgResendAllTmpKey}"); + selectTemplateInfo("${kakaoVO.msgResendAllTmpKey}"); + fn_viewDataInit02(); + priceInit(); + + try { + // JSON 파싱 + var resendListObj = JSON.parse('${resendListJson}'); + var listCnt = resendListObj.length; + + // 중복 제거 - Set 사용 + var uniquePhones = new Set(); + var uniqueResendList = []; + + // 중복 제거 로직 + for(var i = 0; i < resendListObj.length; i++) { + var phone = removeDash(resendListObj[i].callTo); + if(!uniquePhones.has(phone)) { + uniquePhones.add(phone); + uniqueResendList.push(resendListObj[i]); + } + } + + + // 중복 제거된 데이터로 처리 + for(var i = 0; i < uniqueResendList.length; i++) { + var phoneNumber = removeDash(uniqueResendList[i].callTo); + + // callTo 입력 필드에 값 설정 후 번호추가 버튼 클릭 + $("#callTo").val(phoneNumber); + $(".addCallToF").trigger("click"); + + } + + // 총 건수 확인 + setTimeout(function() { + updateTotCnt(); + }, 500); + + } catch(e) { + console.error("재전송 데이터 처리 오류:", e); + } + } +}); +
diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp.jsp new file mode 100644 index 00000000..b6d64ba6 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp.jsp @@ -0,0 +1,219 @@ +<%@ 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" %> + + + + + + + + + + + +
+
+
+
Loading
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> + + +
+
+
+
+
+
+
+
    +
  • + +
  • +
  • + +
  • +
+
+
+ + + +
+
+
+
+ 날짜 : +
+ +
+ +
+ + + +
+
+
+ + + + + + +
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp index 38fbb9f0..10115704 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp @@ -3,6 +3,7 @@ <%@ 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" %> +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> <%@ page import="itn.com.cmm.LoginVO" %> @@ -48,102 +49,145 @@ $(document).ready(function(){ } }); - - if($("#tdType").val() == "groupList" || $("#tdType").val() == ""){ - $("#privateListTable").hide(); - $("#groupListTable").show(); - }else{ - $("#privateListTable").show(); - $("#groupListTable").hide(); - } }); +function fnReservCancel(msgGroupId){ + + var form = document.resCancelForm; + var loginVO = '${LoginVO}'; + + form.msgGroupId.value = msgGroupId; + + if(loginVO == "" || loginVO == null){ + + alert("로그인 후 이용이 가능합니다."); + return false; + + } + + var data = new FormData(form); + url = "/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do"; + + if(confirm("정말 예약을 취소하시겠습니까?")){ + + $.ajax({ + type: "POST", + url: url, + data: data, + dataType:'json', + async: false, + processData: false, + contentType: false, + cache: false, + success: function (returnData, status) { + if(status == 'success'){ + if("fail"==returnData.result){ + + alert(returnData.message); + return false; + } + + var smsCnt = returnData.resultSts; + + alert("예약 발송이 정상적으로 취소 되었습니다."); + + linkPage(1); + + } else if(status== 'fail'){ + alert(returnData.message); + } + }, + error: function (e) { alert("예약 취소에 실패하였습니다."); console.log("ERROR : ", e); } + }); + + } + +} + +function fn_sentDetailView(msgGroupId) { + // msgGroupId 값을 form에 설정 + $("#searchForm #msgGroupId").val(msgGroupId); + + // form을 해당 URL로 제출 + $("#searchForm").attr("action", "/web/kakao/sent/selectKakaoSentDetailView.do"); + $("#searchForm").submit(); +} + -
- -

-
- - + - -
-
- -
+ +
+
+ +
- - - - - - - + - + - <%-- --%> + + + + + + + - - - - - - - + - - - - - + + + + + + + + + + + + - - - - - + - + + + + + + - - - - - - - - - - <%-- --%> - - - - - - - <%----%> - +
+ - 발송일시 + 발송일시
- 형태 + 형태
- +
내용 - 받는사람 -
- -
-
- 발신번호 -
- -
-
- 발송건수 + 내용발송건수
카카오톡 결과건수대체문자 결과건수대기카카오톡결과대체문자결과금액(원)진행상황
성공실패성공실패
+ - disabled> + disabled> + @@ -165,240 +209,89 @@ $(document).ready(function(){ -

- 알림톡 - 친구톡 -

+
+ 알림톡 + 친구톡 -<%-- --%> - + +
+ + 예약 + + + 분할 + + + + + +
+
+ + + + +

+
+

+
+

+
+

+
+ + + + + - + + - -

- - - - - - - - 명 -

-
- -

+ + -

+

정상수신

- -

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"> -

-

정상수신

- -

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"> -

-
-

- - 0 -

-

실패/대기

- -

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"> - /

-

실패

-

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"> -

-

- - 0 -

-
발송 내역이 없습니다.발송 내역이 없습니다.
- - - - - + +
-
- - - - - +
+
- - +
-
+
+
+ +
+ +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax_back_250318.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax_back_250318.jsp new file mode 100644 index 00000000..43cfa302 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax_back_250318.jsp @@ -0,0 +1,405 @@ +<%@ 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" %> + + + + +
+ +

+
+ + +
+
+ +
+ + + + + + + + + + + + + + <%-- --%> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <%-- --%> + + + + + + + <%----%> + + + + + + + + + +
+ + + + 발송일시 +
+ +
+
+ 형태 +
+ +
+
내용 + 받는사람 +
+ +
+
+ 발신번호 +
+ +
+
+ 발송건수 +
+ +
+
카카오톡 결과건수대체문자 결과건수
+ + disabled> + + + + + + <%-- + 20240906 추가 + 발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다. + 30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌 + --%> +

+
+ +

+
+
+
+ +

+
+
+
+

+ 알림톡 + 친구톡 +

+
+<%-- --%> + + + + +

+ + + + + + + + 명 +

+
+ +

+
+ +

+
+
+<%--

${resultAllSentList.msgGroupId}

--%> +

정상수신

+ +

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"> +

+

정상수신

+ +

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"> +

+
+

+ + 0 +

+

실패/대기

+ +

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"> + /

+

실패

+

onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"> +

+

+ + 0 +

+
발송 내역이 없습니다.
+
+ + + + + + +
+
+ + + + + +
+
+ + +
+
+ +
    + +
+
diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp index f594a247..d8354c3c 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp @@ -5,111 +5,112 @@ <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <% pageContext.setAttribute("newLineChar", "\n"); %> -
- -
    -
  • - -
  • -
    -
-
+
+ +
+
    +
  • + +
  • +
    +
+
+ -
-
-
- - - - - 알림톡 - - - 친구톡 - - - - - -
-
-
-
- - - - 알림톡 도착 - - - 친구톡 도착 - - - - -
-
- - - - -

-

-
- -
- -
-
- - -
- - -

- - - -

- - - - - -

-
- - -

-
- - -
- - - - - - - - - - - - -
-
-
-
-
-
-
-
- - 대체문자 -
-
- ${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "
")} -
+ +
+
+
+

+ +
+
+ + + 알림톡 도착 + 친구톡 도착 + +
+
+ + +

+

+
+ +
+ +
+
+
+ +

+ +

+ + + +

+
+ +

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

※ 단말기 설정에 따라 다르게 보일 수 있습니다

+
+
+ + + +
+
+
+

문자내용

+
+ + + + 단문 + 장문 + + + 단문 + + + 장문 + + + +
+ 글자크기 + +
+
+
+

${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "
")}

+
+
+
+
+

※ 단말기 설정에 따라 다르게 보일 수 있습니다

+
+ +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax_back_250320.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax_back_250320.jsp new file mode 100644 index 00000000..f594a247 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax_back_250320.jsp @@ -0,0 +1,115 @@ +<%@ 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" %> +<% pageContext.setAttribute("newLineChar", "\n"); %> + +
+ +
    +
  • + +
  • +
    +
+
+ +
+
+
+ + + + + 알림톡 + + + 친구톡 + + + + + +
+
+
+
+ + + + 알림톡 도착 + + + 친구톡 도착 + + + + +
+
+ + + + +

+

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

+ + + +

+ + + + + +

+
+ + +

+
+ + +
+ + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + 대체문자 +
+
+ ${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "
")} +
+
+
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp new file mode 100644 index 00000000..c00dd4d1 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp @@ -0,0 +1,922 @@ +<%@ 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" %> +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> +<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ page import="itn.com.cmm.LoginVO" %> +<% pageContext.setAttribute("newLineChar", "\n"); %> + + + + + + +
+ + + + +
+ +
+
+

발송결과 상세

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

발송정보

+

+
+
+
+
발송일시
+
${result.reqDate}
+
+ +
+
등록일시
+
${result.regDate}
+
+
+
+
형태
+
+ 알림톡 + 친구톡 +
+
+
+
발송건수
+
+
+
+
채널정보
+
+
+
+
진행상황 + + +
+
예약
+ + +
+ +
+ ${result.divideText } +
+
+
+
+
+ +
+
+ + + + 예약취소() + + + + + +

+
+
+
+
+
+
+
+
발송요금(합계)
+
+ + + + + 0 + +
+ +
+
+
+
· 카카오톡
+
+ +
+
+
+
· 대체문자
+
+ +
+
+
+
+
+
+ + +
+
+
+

상세결과

+

+
+
+
+
+
전체건수
+
+
+
+
+
+
성공건수
+
건(${result.successPct})
+
+
+
+
+
+
+
대기건수
+
건(${result.waitingPct})
+
+
+
+
+
실패건수
+
건(${result.failedPct})
+
+
+
+

* 전체건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.

+
+
+ +
+ + + +
+ +
+ +
+ + + + +
+ +
+ + +
+
+ +
+ + + + +
+ +
+ + + +
+ +
+ + + +
+ " /> + + + + + + + + + +
+ + +
+ +
+ + +
+ + + + +
+ +
+ + +
+ diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp index ea518568..d418e9f5 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp @@ -45,20 +45,6 @@ $(document).ready(function(){ threefulstday = prevMonth(3); threefuledday = today(); - /* 목록 정렬 항목 아이콘 표시 */ - /* var searchSortCnd = $("[name='searchSortCnd']").val(); - var searchSortOrd = $("[name='searchSortOrd']").val(); - - if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd != undefined && searchSortOrd != undefined) { - var $sort_div = $("#sort_"+ searchSortCnd); - var sortClass = 'sortBtn' ; - - if (searchSortOrd == "desc") sortClass = "sortBtnDesc"; - - $sort_div.replaceClass('sortBtn' , sortClass) ; - $sort_div.attr("sortOrd", searchSortOrd); - } */ - // 정렬 항목 이벤트 $(document).on('click', '.sort', function (){ listSortOrd(this); @@ -101,6 +87,9 @@ $(document).ready(function(){ }); + //발송건수 셋 + cntSet(); + }); //오늘날짜 구하기 @@ -147,56 +136,16 @@ function linkPage(pageNo){ form.pageIndex.value = pageNo; var sendData = $(document.searchForm).serializeArray(); - $(".msgSentAllLoad").html('
LOADING...
'); +// $(".msgSentAllLoad").html('
LOADING...
'); + $(".msgSentAllLoad tbody:first").html('LOADING...'); $(".msgSentAllLoad").load("/web/kakao/sent/selectKakaoSentListViewAjax.do", sendData ,function(response, status, xhr){ + if (status === 'success') { + $(this).html(response); + } }); } -//선택 삭제 실행 - -/* -function fnDelete(){ - - var msgId = []; - if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ - alert("한 개 이상의 전송 내역을 선택하세요"); - return; - } - - $("input:checkbox[name='msgSentDel']:checked").each(function(index){ - var disabledChk = $(this).prop('disabled'); - if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 - msgId[index] = $(this).val(); - } - }); - - if(msgId.length > 0){ - - //22.04.25 구글 독스 alert 기준으로 이지우가 수정 - // if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) - if(confirm("선택한 목록을 삭제하시겠습니까?")){ - - document.searchForm.msgGroupIdList.value = msgId; - var sendData = $(document.searchForm).serializeArray(); - - $(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){ - }); - -// var form = document.searchForm; -// form.action="/web/mjon/msgsent/selectMsgSentView.do"; -// form.submit(); - } - - }else{ - - alert("삭제할 문자를 선택해 주세요."); - return false; - - } - -} - */ //상세보기 버튼 실행 function fnRevDetailPop(msgGroupId, msgId){ document.resPopForm.msgGroupId.value = msgGroupId; @@ -204,20 +153,11 @@ function fnRevDetailPop(msgGroupId, msgId){ var sendData = $(document.resPopForm).serializeArray(); var form = document.searchForm; - if (form.listType.value == "privateList") { - // 개인별 - $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailData2Ajax.do", sendData ,function(response, status, xhr){ - $('#tooltopClick').trigger('click'); - }); - } - else { - // 전송건별 - $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){ - // 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정 - popupTab($('#atBtn'),'1'); - $('#tooltopClick').trigger('click'); - }); - } + $("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){ + // 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정 + popupTab($('#atBtn'),'1'); + $('#tooltopClick').trigger('click'); + }); } @@ -231,12 +171,6 @@ function fnListLoad(pageType, tabNum){ $tab.siblings("li.btn_tab").removeClass("active"); $tab.siblings("li.tab").find("button").removeAttr("title"); - if(pageType == 'fail'){ - form.listType.value = "privateList"; - $(".tab_depth1").hide(); - } else { - $(".tab_depth1").show(); - } form.stateType.value = pageType; linkPage(1); @@ -311,182 +245,6 @@ $(document).on('click', '.msgGgoupList', function(){ }); -$(document).on('click', '.msgPrivateList', function(){ - - var form = document.searchForm; - form.listType.value = "privateList"; - linkPage(1); - -}); - - -function fnDeleteAddrNo(listType){ - - var msgId = []; - if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ - alert("한 개 이상의 전송 내역을 선택하세요"); - return; - } - - $("input:checkbox[name='msgSentDel']:checked").each(function(index){ - - var disabledChk = $(this).prop('disabled'); - if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 - - msgId[index] = $(this).val(); - - } - - }); - - if(msgId.length > 0){ - - //22.04.25 구글 독스 alert 기준으로 이지우가 수정 - /* if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){ */ - if(confirm("선택하신 번호를 주소록에서 삭제하시겠습니까?")){ - - var form = document.searchForm; - - form.msgGroupIdList.value = msgId; - form.listType.value = listType; - - var data = new FormData(form); - url = "/web/mjon/msgsent/deleteAddrNoDataAjax.do"; - - $.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 if(returnData.resultCnt == '0'){ - - alert("주소록에 삭제할 연락처가 없습니다."); - return false; - - }else{ - - alert(returnData.message); - return false; - - } - - } else if(status== 'fail'){ - alert(returnData.message); - } - }, - error: function (e) { alert("주소록 삭제에 실패하였습니다."); console.log("ERROR : ", e); } - }); - - } - - }else{ - - alert("삭제할 문자를 선택해 주세요."); - return false; - - } - -} - -function fnAddBlockNo(listType){ - - var msgId = []; - if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ - alert("선택된 항목이 없습니다."); - return; - } - - $("input:checkbox[name='msgSentDel']:checked").each(function(index){ - - var disabledChk = $(this).prop('disabled'); - if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 - - msgId[index] = $(this).val(); - - } - - }); - - if(msgId.length > 0){ - - //if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){ - - var form = document.searchForm; - - form.msgGroupIdList.value = msgId; - form.listType.value = listType; - - var data = new FormData(form); - url = "/web/mjon/msgsent/insertAddBlockNoDataAjax.do"; - - $.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 if(returnData.resultCnt == '0'){ - - alert("주소록에 삭제할 연락처가 없습니다."); - return false; - - }else{ - - alert(returnData.message); - return false; - - } - - } else if(status== 'fail'){ - alert(returnData.message); - } - }, - error: function (e) { alert("수신거부번호 등록에 실패하였습니다."); console.log("ERROR : ", e); } - }); - - //} - - }else{ - - alert("수신거부번호를 등록할 문자를 선택해 주세요."); - return false; - - } - - -} - function fnReSendMsg(){ var msgSeq = []; @@ -514,27 +272,6 @@ function fnReSendMsg(){ } -function fnMsgSFDetailList(msgGroupId, resultType){ - - var form = document.resPopForm; - form.msgGroupId.value = msgGroupId; - form.resultType.value = resultType; - - //만들려는 팝업의 크기 - var popup_wid = '1280'; - var popup_ht = '700'; - - var popup_left = (window.screen.width / 2) - (popup_wid / 2); - var popup_top =(window.screen.height / 2) - (popup_ht / 2); - - $("#resPopForm").attr("target","msgSFDetailPop"); - - window.open('', 'msgSFDetailPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top ); - $("#resPopForm").attr({"action":"/web/kakao/sent/selectKakaoSentSFDetailListAjax.do", "method":"post"}).submit(); - -} - - /* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */ function fnShowPrintPopup(tabType, type) { //만들려는 팝업의 크기 @@ -552,129 +289,6 @@ function fnShowPrintPopup(tabType, type) { } -function addrGroupDuplCnt() { - document.searchForm.addrGrpNm.value = $('#grpNm').val(); - - var data = $('#searchForm').serialize(); - //var data = new FormData(form); - - var flag = true; - var url = "/web/addr/selectDuplAddrGroupNameAjax.do"; - - $.ajax({ - async: false, - type: "post", - url: url, - data: data, - dataType:"JSON", -// contentType: false, -// processData: false, - cache: false, - success: function (returnData, status) { - if("dupl"==returnData.result1) { - flag = false; - } - }, - error: function (e) { - alert("error"); - console.log("ERROR : ", e); - } - }); - - return flag; -} - -//주소록 그룹 등록 기능 -function fnAddAddrNo(){ - - var addrGrpNm = $('#grpNm').val(); //입력 그룹 이름 불러오기 - - var msgId = []; - if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ - alert("한 개 이상의 전송 내역을 선택하세요"); - return; - } - - - $("input:checkbox[name='msgSentDel']:checked").each(function(index){ - - var disabledChk = $(this).prop('disabled'); - if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 - - msgId[index] = $(this).val(); - - } - - }); - - if(msgId.length > 0 && addrGrpNm != ''){ - - - //주소록 그룹명 중복체크 - if(!addrGroupDuplCnt()) { - alert("이미 등록되어있는 주소록입니다."); - return false; - } - - - var form = document.searchForm; - - form.msgGroupIdList.value = msgId; - form.addrGrpNm.value = addrGrpNm; - - var data = new FormData(form); - url = "/web/mjon/msgsent/insertAddAddrGrpDataAjax.do"; - - $.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 if(returnData.resultCnt == '0'){ - - alert("주소록에 등록할 연락처가 없습니다."); - return false; - - }else{ - - alert(returnData.message); - $('#grpNm').val(""); //입력한 그룹명 초기화 - $(".tooltip-close").trigger("click"); - return false; - - } - - } else if(status== 'fail'){ - alert(returnData.message); - } - }, - error: function (e) { alert("주소록 등록에 실패하였습니다."); console.log("ERROR : ", e); } - }); - }else{ - - alert("등록할 문자를 선택해 주세요."); - return false; - - } - -} - /* 윈도우팝업 열기 */ function infoPop(pageUrl){ document.popForm.pageType.value = pageUrl; @@ -685,33 +299,90 @@ function infoPop(pageUrl){ document.popForm.submit(); } +function cntSet(){ + + $('#ntceBgnde').val($('#startDate').val()); + $('#ntceEndde').val($('#endDate').val()); + + $.ajax({ + url: '/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do', + type: 'POST', +// contentType: 'application/json', + contentType: false, + processData: false, + data: new FormData(document.searchForm), + success: function(response) { + + cntView('allCnt', response.allCnt); + cntView('atCnt', response.atCnt); + //cntView('ftCnt', response.ftCnt); + }, + error: function(error) { + alert("error"); + }, + beforeSend : function(xmlHttpRequest) { + //로딩창 show + $('#lodingBefore').show(); + $('#lodingAfter').hide(); + }, + complete : function(xhr, textStatus) { + //로딩창 hide + $('#lodingBefore').hide(); + $('#lodingAfter').show(); + } + }); +} + +function cntView(type, obj){ + $('#'+type+' span[name="allCnt"]').text(obj.allCount.toLocaleString()); + $('#'+type+' span[name="waitCnt"]').text(obj.waitCount.toLocaleString()); + $('#'+type+' span[name="succCnt"]').text(obj.successCount.toLocaleString()); + $('#'+type+' span[name="failCnt"]').text(obj.failCount.toLocaleString()); +} + +//선택 삭제 실행 +function fnDelete(){ + + var msgId = []; + if($("input:checkbox[name='msgSentDel']").is(":checked")==false){ + alert("한 개 이상의 전송 내역을 선택하세요"); + return; + } + + $("input:checkbox[name='msgSentDel']:checked").each(function(index){ + var disabledChk = $(this).prop('disabled'); + if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 + msgId[index] = $(this).val(); + } + }); + + console.log('msgId : ', msgId); + + if(msgId.length < 1){ + alert("삭제할 문자를 선택해 주세요."); + return false; + } + + //22.04.25 구글 독스 alert 기준으로 이지우가 수정 + /* if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) */ + if(confirm("선택한 목록을 삭제하시겠습니까?\n삭제한 목록은 복구가 불가합니다.")){ + + document.searchForm.msgGroupIdList.value = msgId; + var sendData = $(document.searchForm).serializeArray(); + + $(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){ + }); + + alert("삭제되었습니다."); + var form = document.searchForm; + form.action="/web/kakao/sent/selectKakaoSentView.do"; + form.submit(); + } + +} + - -
- -
- - - - - +
@@ -763,154 +434,19 @@ function infoPop(pageUrl){ - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-

전체

-

-
-
-
-
대기
-
-
-
-
성공
-
-
-
-
실패
-
-
-
-
-
-
-

알림톡

-

-
-
-
-
대기
-
-
-
-
성공
-
-
-
-
실패
-
-
-
-
- <%--
-
-

친구톡

-

-
-
-
-
대기
-
-
-
-
성공
-
-
-
-
실패
-
-
-
-
--%> + + +
+

- 최대 3개월간의 발송내역만 확인하실 수 있습니다.

+

- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.

- + +
@@ -931,6 +467,8 @@ function infoPop(pageUrl){
+ +
+
+
+

전체

+

+
+
+
LOADING...
+
+
+
+
+

알림톡

+

+
+
+
LOADING...
+
+
+
+ + +
    @@ -953,22 +576,43 @@ function infoPop(pageUrl){
-
+
- --> + + + + + + + +
    +
  • + +
  • + +
  • + +
  • +
  • + +
  • +
diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView_back_250305.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView_back_250305.jsp new file mode 100644 index 00000000..d3c53069 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView_back_250305.jsp @@ -0,0 +1,996 @@ +<%@ 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" %> + + + + + +
+ +
+ + + + + + + +
+ +
+
+ +
+ +
+
+

발송결과

+ + +
+
+ + <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp" %> + +
+
+ + + " /> + " /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+

전체

+

+
+
+
+
대기
+
+
+
+
성공
+
+
+
+
실패
+
+
+
+
+
+
+

알림톡

+

+
+
+
+
대기
+
+
+
+
성공
+
+
+
+
실패
+
+
+
+
+ <%--
+
+

친구톡

+

+
+
+
+
대기
+
+
+
+
성공
+
+
+
+
실패
+
+
+
+
--%> +
+ +
+
+
+ 기간선택 +
+ + ~ + +
+ + + + + + +
+
+ + + +
+
+
+
+ +
    +
  • +
  • +<%-- --%> + +<%-- --%> +
+
+ +
+ +
+
    +
  • +
  • +
  • +
  • +
  • +
+
+ 받는사람(전송건별) + + 받는사람(개인별) +
받는사람(전송건별)
+
+
+ +
+
+ +
+ +
+
+
+
+
+ + + + +
+
+ + +
+
+ +
+ \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp index 8cfe3e41..bfdf9ff4 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp @@ -610,6 +610,7 @@ function getFilteredDataByTab() { // 탭 필터 적용하여 데이터 필터링 (수신번호 필터는 무시) return allData.filter(row => tabFilter ? row.result.includes(tabFilter.value) : true); } +