api 관리자 테스트기능 진행중

This commit is contained in:
hehihoho3@gmail.com 2025-11-06 14:23:07 +09:00
parent f902aeafb2
commit ecb14325c9
14 changed files with 490 additions and 333 deletions

View File

@ -32,6 +32,8 @@ public interface ApiSmsTestMsgService {
Map<String, Object> selectSendHistry(ApiKeyVO searchVO) throws JsonParseException, JsonMappingException, IOException;
StatusResponse findByApiInfoWhereLogIdAjax(String logId) throws IOException;
// //api key list
// public List<ApiKeyVO> selectMberApiKeyList(ApiKeyVO apiKeyVO) throws Exception;

View File

@ -119,15 +119,118 @@ public class ReqCnVO {
private String dataFailCnt;
private String dataMsgType;
private String dataTestYn;
public String getsPrice() {
return sPrice;
}
public void setsPrice(String sPrice) {
this.sPrice = sPrice;
}
public String getmPrice() {
// 수신번호/본문(고정 필드 1~100)
private String callTo_1; private String smsTxt_1;
private String callTo_2; private String smsTxt_2;
private String callTo_3; private String smsTxt_3;
private String callTo_4; private String smsTxt_4;
private String callTo_5; private String smsTxt_5;
private String callTo_6; private String smsTxt_6;
private String callTo_7; private String smsTxt_7;
private String callTo_8; private String smsTxt_8;
private String callTo_9; private String smsTxt_9;
private String callTo_10; private String smsTxt_10;
private String callTo_11; private String smsTxt_11;
private String callTo_12; private String smsTxt_12;
private String callTo_13; private String smsTxt_13;
private String callTo_14; private String smsTxt_14;
private String callTo_15; private String smsTxt_15;
private String callTo_16; private String smsTxt_16;
private String callTo_17; private String smsTxt_17;
private String callTo_18; private String smsTxt_18;
private String callTo_19; private String smsTxt_19;
private String callTo_20; private String smsTxt_20;
private String callTo_21; private String smsTxt_21;
private String callTo_22; private String smsTxt_22;
private String callTo_23; private String smsTxt_23;
private String callTo_24; private String smsTxt_24;
private String callTo_25; private String smsTxt_25;
private String callTo_26; private String smsTxt_26;
private String callTo_27; private String smsTxt_27;
private String callTo_28; private String smsTxt_28;
private String callTo_29; private String smsTxt_29;
private String callTo_30; private String smsTxt_30;
private String callTo_31; private String smsTxt_31;
private String callTo_32; private String smsTxt_32;
private String callTo_33; private String smsTxt_33;
private String callTo_34; private String smsTxt_34;
private String callTo_35; private String smsTxt_35;
private String callTo_36; private String smsTxt_36;
private String callTo_37; private String smsTxt_37;
private String callTo_38; private String smsTxt_38;
private String callTo_39; private String smsTxt_39;
private String callTo_40; private String smsTxt_40;
private String callTo_41; private String smsTxt_41;
private String callTo_42; private String smsTxt_42;
private String callTo_43; private String smsTxt_43;
private String callTo_44; private String smsTxt_44;
private String callTo_45; private String smsTxt_45;
private String callTo_46; private String smsTxt_46;
private String callTo_47; private String smsTxt_47;
private String callTo_48; private String smsTxt_48;
private String callTo_49; private String smsTxt_49;
private String callTo_50; private String smsTxt_50;
private String callTo_51; private String smsTxt_51;
private String callTo_52; private String smsTxt_52;
private String callTo_53; private String smsTxt_53;
private String callTo_54; private String smsTxt_54;
private String callTo_55; private String smsTxt_55;
private String callTo_56; private String smsTxt_56;
private String callTo_57; private String smsTxt_57;
private String callTo_58; private String smsTxt_58;
private String callTo_59; private String smsTxt_59;
private String callTo_60; private String smsTxt_60;
private String callTo_61; private String smsTxt_61;
private String callTo_62; private String smsTxt_62;
private String callTo_63; private String smsTxt_63;
private String callTo_64; private String smsTxt_64;
private String callTo_65; private String smsTxt_65;
private String callTo_66; private String smsTxt_66;
private String callTo_67; private String smsTxt_67;
private String callTo_68; private String smsTxt_68;
private String callTo_69; private String smsTxt_69;
private String callTo_70; private String smsTxt_70;
private String callTo_71; private String smsTxt_71;
private String callTo_72; private String smsTxt_72;
private String callTo_73; private String smsTxt_73;
private String callTo_74; private String smsTxt_74;
private String callTo_75; private String smsTxt_75;
private String callTo_76; private String smsTxt_76;
private String callTo_77; private String smsTxt_77;
private String callTo_78; private String smsTxt_78;
private String callTo_79; private String smsTxt_79;
private String callTo_80; private String smsTxt_80;
private String callTo_81; private String smsTxt_81;
private String callTo_82; private String smsTxt_82;
private String callTo_83; private String smsTxt_83;
private String callTo_84; private String smsTxt_84;
private String callTo_85; private String smsTxt_85;
private String callTo_86; private String smsTxt_86;
private String callTo_87; private String smsTxt_87;
private String callTo_88; private String smsTxt_88;
private String callTo_89; private String smsTxt_89;
private String callTo_90; private String smsTxt_90;
private String callTo_91; private String smsTxt_91;
private String callTo_92; private String smsTxt_92;
private String callTo_93; private String smsTxt_93;
private String callTo_94; private String smsTxt_94;
private String callTo_95; private String smsTxt_95;
private String callTo_96; private String smsTxt_96;
private String callTo_97; private String smsTxt_97;
private String callTo_98; private String smsTxt_98;
private String callTo_99; private String smsTxt_99;
private String callTo_100; private String smsTxt_100;
public String getsPrice() {
return sPrice;
}
public void setsPrice(String sPrice) {
this.sPrice = sPrice;
}
public String getmPrice() {
return mPrice;
}
public void setmPrice(String mPrice) {

View File

@ -32,20 +32,6 @@ import lombok.ToString;
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResCnVO {
// ===== 요청정보(AccessKey) =====
private String accessNo;
private String mberId;
private String accessKey;
private String useYn;
private String frstRegistPnttm;
private String frstRegisterId;
private String lastUpdtPnttm;
private String lastUpdusrId;
private String accessToken;
private String tokenObj;
private String expirePnttm;
private String callInfo;
private String remainMsgCnt;
// ===== 최상위 응답 =====
private String resultCode;

View File

@ -33,20 +33,17 @@ import lombok.ToString;
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResData {
// ===== 최상위 응답 =====
private String resultCode;
private List<Integer> localDateTime;
private List<ResMsgObj> objectList;
private String msgGroupId;
private List<String> msgGroupIdList;
private String successCnt;
private String blockCnt;
private String failCnt;
private String msgType;
private List<String> msgTypeList;
@JsonProperty("test_yn")
private String testYn;
@JsonProperty("next_yn")
private String nextYn;
private String resultCode; // "1020"
private String msg; // 추가: "수신자 전화번호 오류"
private String msgGroupId;
private List<String> msgGroupIdList;
private Integer successCnt;
private Integer blockCnt;
private Integer failCnt;
private String msgType;
private List<String> msgTypeList;
@JsonProperty("test_yn")
private String testYn;
@JsonProperty("next_yn")
private String nextYn;
}

View File

@ -35,4 +35,8 @@ public class ApiSmsTestMsgDAO extends EgovComAbstractDAO{
public List<ApiAccLogVO> selectSendHistry(ApiKeyVO apiKeyVO) {
return (List<ApiAccLogVO>) list("apiSmsTestMsgDAO.selectSendHistry", apiKeyVO);
}
public ApiAccLogVO findByApiInfoWhereLogIdAjax(String logId) {
return (ApiAccLogVO) select("apiSmsTestMsgDAO.findByApiInfoWhereLogIdAjax", logId);
}
}

View File

@ -2,9 +2,7 @@ package itn.let.mjo.api.sms.service.impl;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import javax.annotation.Resource;
@ -22,7 +20,6 @@ import itn.let.mjo.apikey.service.ApiKeyVO;
import lombok.extern.slf4j.Slf4j;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -68,22 +65,27 @@ public class ApiSmsTestMsgServiceImpl extends EgovAbstractServiceImpl implements
public Map<String, Object> selectSendHistry(ApiKeyVO apiKeyVO) throws JsonParseException, JsonMappingException, IOException {
Map<String, Object> resultMap = new HashMap<>();
String reqMeth = apiKeyVO.getReqMeth();
if (reqMeth != null && !reqMeth.trim().isEmpty()) {
List<String> reqMethList;
if (reqMeth.contains("|")) {
reqMethList = Arrays.asList(reqMeth.split("\\|"));
} else {
reqMethList = Collections.singletonList(reqMeth); // String을 List로 변환
}
apiKeyVO.setReqMethList(reqMethList);
log.info("reqMethList: {}", reqMethList);
}
List<ApiAccLogVO> apiInfoListVO = apiSmsTestMsgDAO.selectSendHistry(apiKeyVO);
ObjectMapper mapper = new ObjectMapper();
for (ApiAccLogVO vo : apiInfoListVO) {
if (vo.getReqCnStr() != null) {
log.info("vo.getReqCnStr() : [{}]", vo.getReqCnStr());
vo.setReqCn(mapper.readValue(vo.getReqCnStr(), ReqCnVO.class));
}
if (vo.getResCnStr() != null) {
vo.setResCn(mapper.readValue(vo.getResCnStr(), ResCnVO.class));
}
}
apiInfoListVO.stream().forEach(t->System.out.println(" t.toString() :: "+ t.toString()));
apiInfoListVO = this.voListPreprocessing(apiInfoListVO);
resultMap.put("apiInfoListVO", apiInfoListVO);
resultMap.put("listSize", apiInfoListVO.size());
@ -92,6 +94,46 @@ public class ApiSmsTestMsgServiceImpl extends EgovAbstractServiceImpl implements
return resultMap;
}
@Override
public StatusResponse findByApiInfoWhereLogIdAjax(String logId) throws IOException {
ApiAccLogVO apiInfoVO = apiSmsTestMsgDAO.findByApiInfoWhereLogIdAjax(logId);
apiInfoVO = this.voPreprocessing(apiInfoVO);
return new StatusResponse(HttpStatus.OK, apiInfoVO, LocalDateTime.now());
}
public ApiAccLogVO voPreprocessing(ApiAccLogVO apiInfoVO) throws IOException {
List<ApiAccLogVO> list = new ArrayList<>();
list.add(apiInfoVO);
List<ApiAccLogVO> apiAccLogList = this.voListPreprocessing(list);
return apiAccLogList.get(0);
}
public List<ApiAccLogVO> voListPreprocessing(List<ApiAccLogVO> apiAccLogList) throws IOException {
ObjectMapper mapper = new ObjectMapper();
for (ApiAccLogVO vo : apiAccLogList) {
if (vo.getReqCnStr() != null) {
log.info("vo.getReqCnStr() : [{}]", vo.getReqCnStr());
vo.setReqCn(mapper.readValue(vo.getReqCnStr(), ReqCnVO.class));
}
if (vo.getResCnStr() != null) {
vo.setResCn(mapper.readValue(vo.getResCnStr(), ResCnVO.class));
}
}
apiAccLogList.stream().forEach(t->{
System.out.println(" t.toString() :: "+ t.getLogId());
});
return apiAccLogList;
}
}

View File

@ -72,7 +72,7 @@ public class ApiSmsTestMsgController {
HttpServletRequest request ,
ModelMap model) throws Exception{
model.addAttribute("reqUrl", "/api/send/sendMsg");
model.addAttribute("reqMeth", "sendMsgData_advc|sendMsgData");
return "/uss/ion/api/test/sms/sendMsgForm";
}
@ -123,9 +123,6 @@ public class ApiSmsTestMsgController {
HttpServletRequest request ,
ModelMap model) throws Exception{
log.info("searchVO getReqUrl : [{}]", searchVO.getReqUrl());
log.info("searchVO getMberId : [{}]", searchVO.getMberId());
log.info("searchVO getAccessKey : [{}]", searchVO.getAccessKey());
Map<String,Object> resultMap = apiSmsTestMsgService.selectSendHistry(searchVO);
model.addAttribute("listSize", resultMap.get("listSize"));
@ -139,6 +136,10 @@ public class ApiSmsTestMsgController {
public ResponseEntity<StatusResponse> selectMberIdAjax(@RequestParam String checkId) throws Exception {
return ResponseEntity.ok().body(apiSmsTestMsgService.findByApiInfoWhereMberIdAjax(checkId));
}
@RequestMapping(value = "/uss/ion/api/test/sms/findByApiInfoWhereLogIdAjax.do")
public ResponseEntity<StatusResponse> findByApiInfoWhereLogIdAjax(@RequestParam String logId) throws Exception {
return ResponseEntity.ok().body(apiSmsTestMsgService.findByApiInfoWhereLogIdAjax(logId));
}

View File

@ -4,6 +4,8 @@ import itn.com.cmm.ComDefaultVO;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* api key 관리
* @since 2009.04.10
@ -52,7 +54,9 @@ public class ApiKeyVO extends ComDefaultVO{
private String callType; //IP/URL
private String callInfo; //주소 또는 IP 정보(referer)
private String reqUrl; //주소 또는 IP 정보(referer)
private String reqMeth; //검색 조건 메소드
private List<String> reqMethList; //검색 조건 메소드
}

View File

@ -168,9 +168,9 @@ public class MjonMsgController {
public String sendMsgList(@ModelAttribute("searchVO") MjonMsgVO searchVO,
HttpServletRequest request ,
ModelMap model) throws Exception{
//value 가져오기
//value 가져오기
// String pattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE) ;
/** pageing */
PaginationInfo paginationInfo = new PaginationInfo();
paginationInfo.setCurrentPageNo(searchVO.getPageIndex());

View File

@ -63,16 +63,46 @@
RES_UPDUSR_ID AS resUpdusrId
FROM lettngnrlmber_access_log
WHERE REQ_USER_ID = #mberId#
and ACCESS_KEY = #accessKey#
and REQ_URL = #reqUrl#
and ACCESS_KEY = #accessKey#
<dynamic>
<isNotEmpty property="reqMethList">
AND (
<iterate property="reqMethList" conjunction="OR">
REQ_INFO_METH LIKE '%$reqMethList[]$%'
</iterate>
)
</isNotEmpty>
</dynamic>
ORDER BY REQ_REGIST_PNTTM DESC
</select>
<select id="apiSmsTestMsgDAO.findByApiInfoWhereLogIdAjax" parameterClass="String" resultClass="apiAccLogVO" remapResults="true">
SELECT
LOG_ID AS logId,
ACCESS_TYPE AS accessType,
ACCESS_KEY AS accessKey,
ACCESS_TOKEN AS accessToken,
REQ_USER_ID AS reqUserId,
REQ_CN AS reqCnStr,
REQ_INFO_METH AS reqInfoMeth,
REQ_URL AS reqUrl,
RES_CN AS resCnStr,
RES_CODE AS resCode,
DATE_FORMAT(REQ_REGIST_PNTTM, '%Y-%m-%d %H:%i:%s') AS reqRegistPnttm,
REQ_REGISTER_ID AS reqRegisterId,
DATE_FORMAT(RES_UPDT_PNTTM, '%Y-%m-%d %H:%i:%s') AS resUpdtPnttm,
RES_UPDUSR_ID AS resUpdusrId
FROM lettngnrlmber_access_log
where LOG_ID = #logId#
</select>
</sqlMap>

View File

@ -140,7 +140,7 @@ $(function() {
<form id="apiInfoFomr">
<input type="hidden" name="mberId" value=""/>
<input type="hidden" name="accessKey" value=""/>
<input type="hidden" name="reqUrl" value=""/>
<input type="hidden" name="reqMeth" value=""/>
</form>

View File

@ -51,6 +51,10 @@
<script type="text/javascript" src="<c:url value='/js/EgovCalPopup.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/ncms_common.js' />"></script>
<script type="text/javaScript" language="javascript">
function fn_openerSendInfo(p_logId){
window.opener.fn_findBySendInfo(p_logId);
}
/*
function fn_search(){
var searchKeyword = $('input[name=searchKeyword]').val();
@ -286,18 +290,6 @@ function fnGoMsgGroupList(msgGroupId){
</script>
<style>
.calBtn{
border: none;
background-color: transparent !important;
background-image: url(/pb/img/common/calendarIcon.png);
background-repeat: no-repeat;
width: 25px;
height: 25px !important;
vertical-align: middle;
margin-left: -38px !important;
margin-top: -2px !important;
cursor: pointer;
}
.pageCont {width:100%;padding:50px 30px;box-sizing:border-box;}
.tableWrapTotal {margin:0 0 20px;}
.tableWrapTotal .tbType1 thead tr:first-child {border-width:1px;}
@ -330,20 +322,7 @@ function fnGoMsgGroupList(msgGroupId){
<div class="text">Loading</div>
</div>
</div>
<%-- <form name="listForm" action="<c:url value='/uss/umt/user/EgovGnrlselectedUserMsgDataListAjax.do'/>" method="post"> --%>
<form name="listForm" action="" method="post">
<%-- <input name="pageIndex" type="hidden" value="<c:out value='${searchVO.pageIndex}'/>"/> --%>
<!-- <input type="hidden" name="delFlag" value="Y" /> -->
<!-- <input type="hidden" name="selectedId" /> -->
<%-- <input type="hidden" id="mberId" name="mberId" value="<c:out value='${searchVO.userId}'/>"/> --%>
<!-- <input type="hidden" name="pageType" /> -->
<%-- <input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" /> --%>
<%-- <input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" /> --%>
<%-- <input type="hidden" name="mberSttus" value="<c:out value='${mberSttus}'/>"/> --%>
<!-- <input type="hidden" name="ntceBgnde" id="ntceBgnde" value=""> -->
<!-- <input type="hidden" name="ntceEndde" id="ntceEndde" value=""> -->
<%-- <input type="hidden" name="reserveType" id="reserveType" value="${searchVO.reserveType}"> --%>
<div class="contWrap" style="width:100%;position:relative;left:inherit;top:inherit;min-height:auto;padding:40px;">
<div class="pageTitle">
@ -352,41 +331,6 @@ function fnGoMsgGroupList(msgGroupId){
<!-- <p class="tType6 c_999999">문자전송리스트 현황을 파악할 수 있습니다.</p> -->
</div>
<div class="pageCont">
<%--
<div class="listSerch">
<select id="sendKind" name="sendKind" class="select" title="검색조건 선택">
<option value="" <c:if test="${searchVO.sendKind == ''}">selected="selected"</c:if>>발송방식 전체</option>
<option value="H" <c:if test="${searchVO.sendKind == 'H'}">selected="selected"</c:if>>WEB</option>
<option value="A" <c:if test="${searchVO.sendKind == 'A'}">selected="selected"</c:if>>API</option>
</select>
<select id="searchCondition" name="searchCondition" class="select" title="검색조건 선택">
<option value="" <c:if test="${searchVO.searchCondition == ''}">selected="selected"</c:if>>발신번호/내용</option>
<option value="1" <c:if test="${searchVO.searchCondition == '1'}">selected="selected"</c:if>>발신번호</option>
<option value="2" <c:if test="${searchVO.searchCondition == '2'}">selected="selected"</c:if>>전송내용</option>
</select>
<input id="searchKeyword" name="searchKeyword" class="recentSearch" type="text" value="<c:out value='${searchVO.searchKeyword}'/>" size="25" title="검색" maxlength="100" />
<input type="button" class="btnType1" value="검색" onclick="fn_search(); return false;">
<input type="hidden" name="cal_url" id="cal_url" value="/sym/cmm/EgovNormalCalPopup.do">
<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceBgndeYYYMMDD);">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceBgndeYYYMMDD" id="ntceBgndeYYYMMDD" size="4" maxlength="4" readonly=""
value="<c:out value="${searchVO.ntceBgnde}" />" >
<input type="button" class="calBtn">
</a>
&nbsp;&nbsp;~
<a href="#" onclick="javascript:fn_egov_NormalCalendar(document.forms.listForm, document.forms.listForm.ntceEnddeYYYMMDD);">
<input style="width:auto;min-width: 83px;" type="text" class="date_format" name="ntceEnddeYYYMMDD" id="ntceEnddeYYYMMDD" size="4" maxlength="4" readonly=""
value="<c:out value="${searchVO.ntceEndde}" />" >
<input type="button" class="calBtn">
</a>
<a href="#" style="margin-left: 17px;" onclick="init_date(); return false;">
<img src="/pb/img/common/topTimeOut.png" alt="타임아웃 아이콘">
</a>
</div> --%>
<div class="listTop">
<p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${listSize}" pattern="#,###" /></span>건</p>
<%-- <p class="tType5">총 <span class="tType4 c_456ded fwBold"><fmt:formatNumber value="${paginationInfo.totalRecordCount}" pattern="#,###" /></span>건</p>
@ -405,17 +349,11 @@ function fnGoMsgGroupList(msgGroupId){
<colgroup>
<col style="width: 4%">
<col style="width: 9%">
<col style="width: 8%">
<col style="width: 4%">
<col style="width: 11%">
<col style="width: 9%">
<col style="width: 6%">
<col style="width: auto">
<col style="width: 6%">
<%-- <col style="width: 8%"> --%>
<%-- <col style="width: 6%"> --%>
<col style="width: 6%">
<col style="width: 8%">
<col style="width: 7%">
<col style="width: 15%">
<col style="width: 7%">
<col style="width: 15%">
<col style="width: 7%">
</colgroup>
<thead>
@ -431,190 +369,192 @@ function fnGoMsgGroupList(msgGroupId){
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>01000000000</td>
<td>100</td>
<td>09-09</td>
<td>테스트</td>
<td>응답실패</td>
<td>지환 데이터 오류</td>
<td>버튼</td>
</tr>
<%-- <c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td>
<c:if test="${searchVO.searchSortOrd eq 'desc' }">
<c:out value="${ ( paginationInfo.totalRecordCount - ((paginationInfo.currentPageNo -1)*paginationInfo.recordCountPerPage) ) - status.index }"/>
</c:if>
<c:if test="${searchVO.searchSortOrd eq 'asc' }">
<c:out value="${(paginationInfo.currentPageNo - 1) * paginationInfo.recordCountPerPage + status.count}"/>
</c:if>
</td>
<td>
<c:out value="${result.callFrom}"/>
</td>
<td title="<c:out value="${result.regDate}"/>">
<fmt:parseDate value="${result.regDate}" var="regDateValue" pattern="yyyy-MM-dd HH:mm"/>
<fmt:formatDate value="${regDateValue}" pattern="MM-dd HH:mm"/>
</td>
<td>
<c:choose>
<c:when test="${result.reserveCYn eq 'Y'}">
<c:out value="${result.cancelDate}"/>
</c:when>
<c:when test="${result.reserveYn eq 'Y' && result.reserveCYn eq 'N'}">
<c:out value="${result.reqDate}"/>
</c:when>
<c:when test="${result.delayYn eq 'Y' && result.delayCompleteYn eq 'Y' && not empty result.cancelDate}">
<c:out value="${result.cancelDate}"/>
</c:when>
<c:otherwise>
<c:out value="${result.reqDate}"/>
</c:otherwise>
</c:choose>
</td>
<td>
<fmt:formatNumber value="${result.msgGroupSCnt}" pattern="#,###" />/<fmt:formatNumber value="${result.msgGroupFWCnt}" pattern="#,###" />(<fmt:formatNumber value="${(result.msgGroupSCnt / (result.msgGroupSCnt + result.msgGroupFWCnt)) * 100}" pattern="#,###" />%)
</td>
<td>
<c:choose>
<c:when test="${result.reserveCYn eq 'Y'}">
예약취소
</c:when>
<c:when test="${result.reserveYn eq 'Y' && result.reserveCYn eq 'N'}">
예약
</c:when>
<c:otherwise>
즉시
</c:otherwise>
</c:choose>
</td>
<td class="sms_detail left" onclick="fnGoMsgGroupList('<c:out value="${result.msgGroupId}"/>');" style="cursor:pointer;">
<c:choose>
<c:when test="${empty result.smsTxt}">
<c:choose>
<c:when test="${result.msgType eq '4'}">
내용없음
</c:when>
<c:otherwise>
그림문자
</c:otherwise>
</c:choose>
<div class="sms_detail_hover">
<c:if test="${not empty fn:split(result.atchFiles, '^')[0]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[0]}&fileSn=0" style="width: 100px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[1]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[1]}&fileSn=0" style="width: 100px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[2]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[2]}&fileSn=0" style="width: 100px;">
</c:if>
</div>
</c:when>
<c:otherwise>
<p><c:out value="${result.smsTxt}"/></p>
<div class="sms_detail_hover">
<c:if test="${not empty fn:split(result.atchFiles, '^')[0]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[0]}&fileSn=0" style="width: 100px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[1]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[1]}&fileSn=0" style="width: 100px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[2]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[2]}&fileSn=0" style="width: 100px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[0]}">
<br />
</c:if>
<c:out value="${fn:replace(fn:replace(result.smsTxt, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
</div>
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${result.msgType eq '4'}">
단문
</c:when>
<c:when test="${result.msgType eq '6' && result.fileCnt > 0}">
그림(<c:out value="${result.fileCnt}"/>장)
</c:when>
<c:otherwise>
장문
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${result.sendKind eq 'A'}">
API
</c:when>
<c:when test="${result.sendKind eq 'H'}">
WEB
</c:when>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${result.delayYn eq 'Y'}">
<c:choose>
<c:when test="${result.delayCompleteYn eq 'Y' && not empty result.cancelDate}">
<span style="color: blue;">
[발송취소]<br/>
<c:out value="${result.cancelDate}"/>
</span>
</c:when>
<c:when test="${result.delayCompleteYn eq 'N'}">
[미처리]
</c:when>
<c:otherwise>
<span style="color: blue;">[승인]</span>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
-
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${mberSttus eq 'B'}">
<c:if test="${not empty result.smiId}">
<button type="button" class="btnType btnType21">
정지
</button>
</c:if>
<c:if test="${empty result.smiId}">
-
</c:if>
</c:when>
<c:otherwise>
<button type="button" class="btnType btnType20" onclick="fn_updateMberSttus('<c:out value="${result.msgGroupId}"/>'); return false;">
정지
</button>
-
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${result.reserveYn eq 'Y' && result.reserveCYn eq 'N'}">
<button type="button" class="btnType btnType20" onclick="fn_updateSendRealTime('<c:out value="${searchVO.userId}"/>','<c:out value="${result.msgGroupId}"/>'); return false;">
즉시발송
</button>
</c:when>
</c:choose>
</td>
</tr>
</c:forEach>
<c:if test="${empty resultList}">
<tr><td colspan="12"><spring:message code="common.nodata.msg" /></td></tr>
</c:if> --%>
<c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td>${status.count}</td>
<td>${result.reqCn.callFrom}</td>
<td>${empty result.resCn.data.msgGroupIdList ? 0 : fn:length(result.resCn.data.msgGroupIdList)}</td>
<td>${result.reqRegistPnttm}</td>
<td title="${result.reqCn.smsTxt}">${result.reqCn.smsTxt}</td>
<td>${result.resCn.data.resultCode == '0' ? '성공' : '실패'}</td>
<td>${result.resCn.data.msg}</td>
<td><input type="button" class="btnType1" value="선택" onclick="fn_openerSendInfo('${result.logId}'); return false;"></td>
</tr>
</c:forEach>
<%-- <c:forEach var="result" items="${resultList}" varStatus="status">
<tr>
<td>
<c:if test="${searchVO.searchSortOrd eq 'desc' }">
<c:out value="${ ( paginationInfo.totalRecordCount - ((paginationInfo.currentPageNo -1)*paginationInfo.recordCountPerPage) ) - status.index }"/>
</c:if>
<c:if test="${searchVO.searchSortOrd eq 'asc' }">
<c:out value="${(paginationInfo.currentPageNo - 1) * paginationInfo.recordCountPerPage + status.count}"/>
</c:if>
</td>
<td>
<c:out value="${result.callFrom}"/>
</td>
<td title="<c:out value="${result.regDate}"/>">
<fmt:parseDate value="${result.regDate}" var="regDateValue" pattern="yyyy-MM-dd HH:mm"/>
<fmt:formatDate value="${regDateValue}" pattern="MM-dd HH:mm"/>
</td>
<td>
<c:choose>
<c:when test="${result.reserveCYn eq 'Y'}">
<c:out value="${result.cancelDate}"/>
</c:when>
<c:when test="${result.reserveYn eq 'Y' && result.reserveCYn eq 'N'}">
<c:out value="${result.reqDate}"/>
</c:when>
<c:when test="${result.delayYn eq 'Y' && result.delayCompleteYn eq 'Y' && not empty result.cancelDate}">
<c:out value="${result.cancelDate}"/>
</c:when>
<c:otherwise>
<c:out value="${result.reqDate}"/>
</c:otherwise>
</c:choose>
</td>
<td>
<fmt:formatNumber value="${result.msgGroupSCnt}" pattern="#,###" />/<fmt:formatNumber value="${result.msgGroupFWCnt}" pattern="#,###" />(<fmt:formatNumber value="${(result.msgGroupSCnt / (result.msgGroupSCnt + result.msgGroupFWCnt)) * 100}" pattern="#,###" />%)
</td>
<td>
<c:choose>
<c:when test="${result.reserveCYn eq 'Y'}">
예약취소
</c:when>
<c:when test="${result.reserveYn eq 'Y' && result.reserveCYn eq 'N'}">
예약
</c:when>
<c:otherwise>
즉시
</c:otherwise>
</c:choose>
</td>
<td class="sms_detail left" onclick="fnGoMsgGroupList('<c:out value="${result.msgGroupId}"/>');" style="cursor:pointer;">
<c:choose>
<c:when test="${empty result.smsTxt}">
<c:choose>
<c:when test="${result.msgType eq '4'}">
내용없음
</c:when>
<c:otherwise>
그림문자
</c:otherwise>
</c:choose>
<div class="sms_detail_hover">
<c:if test="${not empty fn:split(result.atchFiles, '^')[0]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[0]}&fileSn=0" style="width: 100px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[1]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[1]}&fileSn=0" style="width: 100px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[2]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[2]}&fileSn=0" style="width: 100px;">
</c:if>
</div>
</c:when>
<c:otherwise>
<p><c:out value="${result.smsTxt}"/></p>
<div class="sms_detail_hover">
<c:if test="${not empty fn:split(result.atchFiles, '^')[0]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[0]}&fileSn=0" style="width: 100px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[1]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[1]}&fileSn=0" style="width: 100px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[2]}">
<img class="MyMsgImg1" src="/cmm/fms/getImage2.do?atchFileId=${fn:split(result.atchFiles, '^')[2]}&fileSn=0" style="width: 100px;">
</c:if>
<c:if test="${not empty fn:split(result.atchFiles, '^')[0]}">
<br />
</c:if>
<c:out value="${fn:replace(fn:replace(result.smsTxt, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
</div>
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${result.msgType eq '4'}">
단문
</c:when>
<c:when test="${result.msgType eq '6' && result.fileCnt > 0}">
그림(<c:out value="${result.fileCnt}"/>장)
</c:when>
<c:otherwise>
장문
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${result.sendKind eq 'A'}">
API
</c:when>
<c:when test="${result.sendKind eq 'H'}">
WEB
</c:when>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${result.delayYn eq 'Y'}">
<c:choose>
<c:when test="${result.delayCompleteYn eq 'Y' && not empty result.cancelDate}">
<span style="color: blue;">
[발송취소]<br/>
<c:out value="${result.cancelDate}"/>
</span>
</c:when>
<c:when test="${result.delayCompleteYn eq 'N'}">
[미처리]
</c:when>
<c:otherwise>
<span style="color: blue;">[승인]</span>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
-
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${mberSttus eq 'B'}">
<c:if test="${not empty result.smiId}">
<button type="button" class="btnType btnType21">
정지
</button>
</c:if>
<c:if test="${empty result.smiId}">
-
</c:if>
</c:when>
<c:otherwise>
<button type="button" class="btnType btnType20" onclick="fn_updateMberSttus('<c:out value="${result.msgGroupId}"/>'); return false;">
정지
</button>
-
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${result.reserveYn eq 'Y' && result.reserveCYn eq 'N'}">
<button type="button" class="btnType btnType20" onclick="fn_updateSendRealTime('<c:out value="${searchVO.userId}"/>','<c:out value="${result.msgGroupId}"/>'); return false;">
즉시발송
</button>
</c:when>
</c:choose>
</td>
</tr>
</c:forEach>
<c:if test="${empty resultList}">
<tr><td colspan="12"><spring:message code="common.nodata.msg" /></td></tr>
</c:if> --%>
</tbody>
</table>
</div>

View File

@ -12,7 +12,56 @@
<script type="text/javascript" src="<c:url value='/js/web_common.js' />"></script>
<script type="text/javascript" src="<c:url value='/js/EgovMultiFile.js'/>"></script>
<script type="text/javascript" src="<c:url value='/js/uss/ion/api/test/sms/cmn.js'/>"></script>
<script>
function fn_findBySendInfo(p_logId){
console.log(p_logId);
$.ajax({
type:"POST",
url:"/uss/ion/api/test/sms/findByApiInfoWhereLogIdAjax.do",
data:{
"logId": p_logId
},
dataType:'json',
timeout:(1000*30),
success:function(data){
console.log('data ', data);
// if(data?.message)
// {
// alert(data.message);
// return false;
// }
// else
// {
//
// var object = data.object;
// console.log('object : ', object);
// console.log('object.accessKey : ', object.accessKey);
//
// $('#mberId').val(object.mberId);
// $('#apiKey').val(object.accessKey);
// $('#useYn').val(object.useYn);
// $('#callInfo').val(object.callInfo);
//
//
// $('.mask, .window').hide();
// }
},
error:function(request , status, error){
console.log(' error ?');
console.log('request : ', request);
console.log('status : ', status);
}
});
}
</script>
<!-- <meta http-equiv="content-type" content="text/html; charset=utf-8"> -->
@ -289,7 +338,7 @@
</div>
</div>
<input type="hidden" id="reqUrl" value="${reqUrl}"/>
<input type="hidden" id="reqMeth" value="${reqMeth}"/>
<%@include file="/WEB-INF/jsp/uss/ion/api/test/sms/include/popupCmn.jsp" %>
</body>
</html>

View File

@ -48,7 +48,6 @@ $(document).ready(function(){
function fn_searchUser(){
$.ajax({
type:"POST",
// url:"<c:url value='/uss/ion/pay/cancelRegistIdChkAjax.do' />",
url:"/uss/ion/api/test/sms/findByApiInfoWhereMberIdAjax.do",
data:{
"checkId": $("#checkIdModal").val()
@ -94,7 +93,7 @@ function fnSelectSendHistry() {
var p_mberId = $('#mberId').val();
var p_apiKey = $('#apiKey').val();
var p_reqUrl = $('#reqUrl').val();
var p_reqMeth = $('#reqMeth').val();
if (!p_mberId?.trim() || !p_apiKey?.trim()) {
alert("회원ID 또는 API Key가 비어있습니다.");
@ -103,7 +102,7 @@ function fnSelectSendHistry() {
$('#apiInfoFomr').find('input[name="mberId"]').val(p_mberId);
$('#apiInfoFomr').find('input[name="accessKey"]').val(p_apiKey);
$('#apiInfoFomr').find('input[name="reqUrl"]').val(p_reqUrl);
$('#apiInfoFomr').find('input[name="reqMeth"]').val(p_reqMeth);
var url = "/uss/ion/api/test/sms/selectSendHistryAjax.do";