--- src/main/java/itn/com/cmm/util/DateUtils.java
+++ src/main/java/itn/com/cmm/util/DateUtils.java
... | ... | @@ -3,6 +3,7 @@ |
| 3 | 3 |
import java.text.ParseException; |
| 4 | 4 |
import java.text.SimpleDateFormat; |
| 5 | 5 |
import java.time.LocalDate; |
| 6 |
+import java.time.LocalDateTime; |
|
| 6 | 7 |
import java.time.format.DateTimeFormatter; |
| 7 | 8 |
import java.time.temporal.ChronoUnit; |
| 8 | 9 |
import java.util.Date; |
... | ... | @@ -185,4 +186,20 @@ |
| 185 | 186 |
|
| 186 | 187 |
return isValid; |
| 187 | 188 |
} |
| 189 |
+ |
|
| 190 |
+ public static String setStrToDataFormatter(String str, String formatter) {
|
|
| 191 |
+ |
|
| 192 |
+ // 입력 문자열을 LocalDateTime으로 변환 |
|
| 193 |
+ DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
| 194 |
+ LocalDateTime dateTime = LocalDateTime.parse(str, inputFormatter); |
|
| 195 |
+ |
|
| 196 |
+ // 원하는 출력 포맷 적용 |
|
| 197 |
+ DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(formatter); |
|
| 198 |
+ String formattedDate = dateTime.format(outputFormatter); |
|
| 199 |
+ |
|
| 200 |
+ return formattedDate; |
|
| 201 |
+ } |
|
| 202 |
+ |
|
| 203 |
+ |
|
| 204 |
+ |
|
| 188 | 205 |
} |
--- src/main/java/itn/com/cmm/util/FileUtil.java
+++ src/main/java/itn/com/cmm/util/FileUtil.java
... | ... | @@ -25,45 +25,44 @@ |
| 25 | 25 |
*/ |
| 26 | 26 |
public final class FileUtil {
|
| 27 | 27 |
|
| 28 |
- /** |
|
| 29 |
- * @methodName : downLoad |
|
| 30 |
- * @author : 이호영 |
|
| 31 |
- * @date : 2023.04.06 |
|
| 32 |
- * @description : 파일 다운로드 |
|
| 33 |
- * @param response |
|
| 34 |
- * @param fileInfo |
|
| 35 |
- * @param fileName |
|
| 36 |
- * @throws Exception |
|
| 37 |
- */ |
|
| 38 |
- public static void downLoad(HttpServletResponse response, String fileInfo, String fileNameP) throws Exception {
|
|
| 39 |
- |
|
| 40 |
- |
|
| 41 |
- try {
|
|
| 42 |
- String path = fileInfo; // 경로에 접근할 때 역슬래시('\') 사용
|
|
| 43 |
- |
|
| 44 |
- File file = new File(path); |
|
| 45 |
- |
|
| 46 |
- String fileName = ""; |
|
| 47 |
- if(StringUtils.isNotEmpty(fileNameP)) |
|
| 48 |
- fileName = URLEncoder.encode(fileNameP,"UTF-8").replaceAll("\\+", "%20");
|
|
| 49 |
- else |
|
| 50 |
- fileName = file.getName(); |
|
| 51 |
- |
|
| 52 |
- response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 다운로드 되거나 로컬에 저장되는 용도로 쓰이는지를 알려주는 헤더
|
|
| 53 |
- |
|
| 54 |
- FileInputStream fileInputStream = new FileInputStream(path); // 파일 읽어오기 |
|
| 55 |
- OutputStream out = response.getOutputStream(); |
|
| 56 |
- |
|
| 57 |
- int read = 0; |
|
| 58 |
- byte[] buffer = new byte[1024]; |
|
| 59 |
- while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음
|
|
| 60 |
- out.write(buffer, 0, read); |
|
| 61 |
- } |
|
| 62 |
- |
|
| 63 |
- } catch (Exception e) {
|
|
| 64 |
- throw new Exception("download error");
|
|
| 65 |
- } |
|
| 28 |
+ /** |
|
| 29 |
+ * @methodName : downLoad |
|
| 30 |
+ * @author : 이호영 |
|
| 31 |
+ * @date : 2023.04.06 |
|
| 32 |
+ * @description : 파일 다운로드 |
|
| 33 |
+ * @param response |
|
| 34 |
+ * @param fileInfo |
|
| 35 |
+ * @param fileName |
|
| 36 |
+ * @throws Exception |
|
| 37 |
+ */ |
|
| 38 |
+ public static void downLoad(HttpServletResponse response, String fileInfo, String fileNameP) throws Exception {
|
|
| 39 |
+ |
|
| 40 |
+ |
|
| 41 |
+ try {
|
|
| 42 |
+ String path = fileInfo; // 경로에 접근할 때 역슬래시('\') 사용
|
|
| 43 |
+ |
|
| 44 |
+ File file = new File(path); |
|
| 45 |
+ |
|
| 46 |
+ String fileName = ""; |
|
| 47 |
+ if(StringUtils.isNotEmpty(fileNameP)) |
|
| 48 |
+ fileName = URLEncoder.encode(fileNameP,"UTF-8").replaceAll("\\+", "%20");
|
|
| 49 |
+ else |
|
| 50 |
+ fileName = file.getName(); |
|
| 51 |
+ |
|
| 52 |
+ response.setHeader("Content-Disposition", "attachment;filename=" + fileName); // 다운로드 되거나 로컬에 저장되는 용도로 쓰이는지를 알려주는 헤더
|
|
| 53 |
+ |
|
| 54 |
+ FileInputStream fileInputStream = new FileInputStream(path); // 파일 읽어오기 |
|
| 55 |
+ OutputStream out = response.getOutputStream(); |
|
| 56 |
+ |
|
| 57 |
+ int read = 0; |
|
| 58 |
+ byte[] buffer = new byte[1024]; |
|
| 59 |
+ while ((read = fileInputStream.read(buffer)) != -1) { // 1024바이트씩 계속 읽으면서 outputStream에 저장, -1이 나오면 더이상 읽을 파일이 없음
|
|
| 60 |
+ out.write(buffer, 0, read); |
|
| 61 |
+ } |
|
| 62 |
+ } catch (Exception e) {
|
|
| 63 |
+ throw new Exception("download error");
|
|
| 64 |
+ } |
|
| 66 | 65 |
} |
| 67 |
- |
|
| 68 |
- |
|
| 66 |
+ |
|
| 67 |
+ |
|
| 69 | 68 |
} |
--- src/main/java/itn/com/cmm/util/MsgSendUtils.java
+++ src/main/java/itn/com/cmm/util/MsgSendUtils.java
... | ... | @@ -276,7 +276,6 @@ |
| 276 | 276 |
for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) {
|
| 277 | 277 |
String placeholder = entry.getKey(); |
| 278 | 278 |
String value = entry.getValue().apply(sendVO); |
| 279 |
- System.out.println("");
|
|
| 280 | 279 |
// log.info(" + smsTxtTemp [{}]", smsTxtTemp);
|
| 281 | 280 |
// log.info(" + placeholder [{}]", placeholder);
|
| 282 | 281 |
// log.info(" + value [{}]", value);
|
+++ src/main/java/itn/let/cmm/vo/FileInfoVO.java
... | ... | @@ -0,0 +1,32 @@ |
| 1 | +package itn.let.cmm.vo; | |
| 2 | + | |
| 3 | +import java.io.Serializable; | |
| 4 | + | |
| 5 | +import lombok.Getter; | |
| 6 | +import lombok.Setter; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * | |
| 10 | + * @author : 이호영 | |
| 11 | + * @fileName : FileInfoVO.java | |
| 12 | + * @date : 2025.01.17 | |
| 13 | + * @description : 파일 풀 경로에서 파일명만 가져와 ID 가져올때 사용하는 VO | |
| 14 | + * MjonMsgDetailSentVO 참고 | |
| 15 | + * =========================================================== | |
| 16 | + * DATE AUTHOR NOTE | |
| 17 | + * ----------------------------------------------------------- * | |
| 18 | + * 2025.01.17 이호영 최초 생성 | |
| 19 | + * | |
| 20 | + * | |
| 21 | + * | |
| 22 | + */ | |
| 23 | +@Getter | |
| 24 | +@Setter | |
| 25 | +public class FileInfoVO implements Serializable { | |
| 26 | + | |
| 27 | + private static final long serialVersionUID = 1L; | |
| 28 | + | |
| 29 | + private String atchFileId; // 첨부파일 ID | |
| 30 | + private String fileSn; // 파일 순번 | |
| 31 | + | |
| 32 | +} |
--- src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
+++ src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
... | ... | @@ -498,7 +498,6 @@ |
| 498 | 498 |
* 발송관리 엑셀다운로드 기능 - 카카오톡 |
| 499 | 499 |
* @param searchVO |
| 500 | 500 |
* @param model |
| 501 |
- * @return "/web/mjon/msgsent/msgSentExcelDownLoadAjax.do" |
|
| 502 | 501 |
* @throws Exception |
| 503 | 502 |
*/ |
| 504 | 503 |
@RequestMapping(value= {"/web/mjon/msgsent/kakaoSentExcelDownLoadAjax.do"})
|
--- src/main/java/itn/let/mjo/addr/service/AddrService.java
+++ src/main/java/itn/let/mjo/addr/service/AddrService.java
... | ... | @@ -109,4 +109,8 @@ |
| 109 | 109 |
void deleteAddr_advc(AddrGroupVO addrGroupVO) throws Exception; |
| 110 | 110 |
|
| 111 | 111 |
int getAddrCount(AddrGroupVO addrGroupVO) throws Exception; |
| 112 |
+ |
|
| 113 |
+ StatusResponse insertByAddrGrpDataAndAddrDataAjax(AddrVO addrVO) throws Exception; |
|
| 114 |
+ |
|
| 115 |
+ StatusResponse deleteAddrNoDataAjax(AddrVO addrVO) throws Exception; |
|
| 112 | 116 |
} |
--- src/main/java/itn/let/mjo/addr/service/impl/AddrDAO.java
+++ src/main/java/itn/let/mjo/addr/service/impl/AddrDAO.java
... | ... | @@ -292,5 +292,9 @@ |
| 292 | 292 |
return (Integer)select("AddrDAO.getAddrCount", addrVO);
|
| 293 | 293 |
} |
| 294 | 294 |
|
| 295 |
+ public int deleteAddrPhoneNo(AddrVO addrVO) {
|
|
| 296 |
+ return update("AddrDAO.deleteAddrPhoneNo", addrVO);
|
|
| 297 |
+ } |
|
| 298 |
+ |
|
| 295 | 299 |
|
| 296 | 300 |
} |
--- src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java
+++ src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java
... | ... | @@ -34,6 +34,8 @@ |
| 34 | 34 |
import itn.let.mjo.addr.service.AddrService; |
| 35 | 35 |
import itn.let.mjo.addr.service.AddrTransHistVO; |
| 36 | 36 |
import itn.let.mjo.addr.service.AddrVO; |
| 37 |
+import itn.let.mjo.msgsent.service.MjonMsgSentVO; |
|
| 38 |
+import lombok.extern.slf4j.Slf4j; |
|
| 37 | 39 |
|
| 38 | 40 |
/** |
| 39 | 41 |
* 주소록 관리를 위한 서비스 구현 클래스 |
... | ... | @@ -49,6 +51,7 @@ |
| 49 | 51 |
* 2021.04.08 ITN 최초 생성 |
| 50 | 52 |
* </pre> |
| 51 | 53 |
*/ |
| 54 |
+@Slf4j |
|
| 52 | 55 |
@Service("AddrService")
|
| 53 | 56 |
public class AddrServiceImpl extends EgovAbstractServiceImpl implements AddrService {
|
| 54 | 57 |
|
... | ... | @@ -644,5 +647,81 @@ |
| 644 | 647 |
|
| 645 | 648 |
return aa; |
| 646 | 649 |
} |
| 650 |
+ |
|
| 651 |
+ @Override |
|
| 652 |
+ public StatusResponse insertByAddrGrpDataAndAddrDataAjax(AddrVO addrVO) throws Exception {
|
|
| 653 |
+ |
|
| 654 |
+ String userId = addrVO.getMberId(); |
|
| 655 |
+ |
|
| 656 |
+ log.info("addrVO.getAddrGrpId() :: [{}]", addrVO.getAddrGrpId());
|
|
| 657 |
+ |
|
| 658 |
+ // 새로운 그룹 생성 |
|
| 659 |
+ if ("NEW".equals(addrVO.getAddrGrpId())) {
|
|
| 660 |
+ |
|
| 661 |
+ |
|
| 662 |
+ AddrGroupVO addrGroupVO = new AddrGroupVO(); |
|
| 663 |
+ addrGroupVO.setMberId(userId); |
|
| 664 |
+ addrGroupVO.setAddrGrpNm(addrVO.getAddrGrpNm()); |
|
| 665 |
+ addrGroupVO.setFrstRegisterId(userId); |
|
| 666 |
+ |
|
| 667 |
+ int usedCnt = addrGroupDAO.selectDuplAddrGroupCnt(addrGroupVO); |
|
| 668 |
+ if(usedCnt > 0) {
|
|
| 669 |
+ return new StatusResponse(HttpStatus.BAD_REQUEST, "이미 등록되어있는 그룹이름입니다.", LocalDateTime.now()); |
|
| 670 |
+ } |
|
| 671 |
+ |
|
| 672 |
+ int nextOrderNumber = addrGroupDAO.selectMaxOrderNumber(addrGroupVO); |
|
| 673 |
+ addrGroupVO.setGrpOrder(nextOrderNumber); |
|
| 674 |
+ |
|
| 675 |
+ String addrGrpIdTemp = addrGroupDAO.insertAddrGroup(addrGroupVO); |
|
| 676 |
+ |
|
| 677 |
+ |
|
| 678 |
+ addrVO.setAddrGrpId(addrGrpIdTemp); |
|
| 679 |
+ |
|
| 680 |
+ } |
|
| 681 |
+ else if ("bookmark".equals(addrVO.getAddrGrpId()))
|
|
| 682 |
+ {// 자주 보내는 그룹
|
|
| 683 |
+ addrVO.setBookmark("Y");
|
|
| 684 |
+ addrVO.setAddrGrpId("0");
|
|
| 685 |
+ } |
|
| 686 |
+ else |
|
| 687 |
+ {
|
|
| 688 |
+ addrVO.setBookmark("N");
|
|
| 689 |
+ } |
|
| 690 |
+ |
|
| 691 |
+ String bookmark = addrVO.getBookmark(); |
|
| 692 |
+ String addrGrpId = addrVO.getAddrGrpId(); |
|
| 693 |
+ |
|
| 694 |
+ List<AddrVO> addrDataInfo = new ArrayList<AddrVO>(); |
|
| 695 |
+ |
|
| 696 |
+ for(String phone : addrVO.getAddrPhones()) {
|
|
| 697 |
+ AddrVO addrTempVO = new AddrVO(); |
|
| 698 |
+ addrTempVO.setAddrPhoneNo(phone); |
|
| 699 |
+ addrTempVO.setAddrGrpId(addrGrpId); |
|
| 700 |
+ addrTempVO.setBookmark(bookmark); |
|
| 701 |
+ addrTempVO.setFrstRegisterId(userId); |
|
| 702 |
+ addrTempVO.setMberId(userId); |
|
| 703 |
+ addrDataInfo.add(addrTempVO); |
|
| 704 |
+ } |
|
| 705 |
+ |
|
| 706 |
+ int resultCnt = addrDAO.insertAddrList(addrDataInfo); |
|
| 707 |
+ |
|
| 708 |
+ |
|
| 709 |
+ |
|
| 710 |
+ return new StatusResponse(HttpStatus.OK, "총" + resultCnt + "건의 주소록 등록이 완료되었습니다.", addrVO); |
|
| 711 |
+ |
|
| 712 |
+ } |
|
| 713 |
+ |
|
| 714 |
+ @Override |
|
| 715 |
+ public StatusResponse deleteAddrNoDataAjax(AddrVO addrVO) throws Exception {
|
|
| 716 |
+ |
|
| 717 |
+// AddrPhones |
|
| 718 |
+ //아이디 저장 |
|
| 719 |
+ |
|
| 720 |
+ //주소록 디비에서 연락처 정보를 delete 시킴 |
|
| 721 |
+ int resultCnt = addrDAO.deleteAddrPhoneNo(addrVO); |
|
| 722 |
+ |
|
| 723 |
+ |
|
| 724 |
+ return new StatusResponse(HttpStatus.OK, "총 " + resultCnt + "건의 주소록을 삭제하였습니다.", addrVO); |
|
| 725 |
+ } |
|
| 647 | 726 |
|
| 648 | 727 |
} |
--- src/main/java/itn/let/mjo/addr/web/AddrController.java
+++ src/main/java/itn/let/mjo/addr/web/AddrController.java
... | ... | @@ -4,6 +4,7 @@ |
| 4 | 4 |
import java.io.InputStreamReader; |
| 5 | 5 |
import java.io.OutputStream; |
| 6 | 6 |
import java.text.SimpleDateFormat; |
| 7 |
+import java.time.LocalDateTime; |
|
| 7 | 8 |
import java.util.ArrayList; |
| 8 | 9 |
import java.util.Calendar; |
| 9 | 10 |
import java.util.Date; |
... | ... | @@ -31,10 +32,13 @@ |
| 31 | 32 |
import org.apache.poi.xssf.usermodel.XSSFRow; |
| 32 | 33 |
import org.apache.poi.xssf.usermodel.XSSFSheet; |
| 33 | 34 |
import org.apache.poi.xssf.usermodel.XSSFWorkbook; |
| 35 |
+import org.springframework.http.HttpStatus; |
|
| 36 |
+import org.springframework.http.ResponseEntity; |
|
| 34 | 37 |
import org.springframework.stereotype.Controller; |
| 35 | 38 |
import org.springframework.ui.Model; |
| 36 | 39 |
import org.springframework.ui.ModelMap; |
| 37 | 40 |
import org.springframework.web.bind.annotation.ModelAttribute; |
| 41 |
+import org.springframework.web.bind.annotation.RequestBody; |
|
| 38 | 42 |
import org.springframework.web.bind.annotation.RequestMapping; |
| 39 | 43 |
import org.springframework.web.bind.annotation.RequestParam; |
| 40 | 44 |
import org.springframework.web.bind.annotation.ResponseBody; |
... | ... | @@ -52,12 +56,14 @@ |
| 52 | 56 |
import itn.com.cmm.util.StringUtil; |
| 53 | 57 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 54 | 58 |
import itn.let.fax.addr.service.FaxAddrVO; |
| 59 |
+import itn.let.mail.service.StatusResponse; |
|
| 55 | 60 |
import itn.let.mjo.addr.service.AddrGroupService; |
| 56 | 61 |
import itn.let.mjo.addr.service.AddrGroupVO; |
| 57 | 62 |
import itn.let.mjo.addr.service.AddrService; |
| 58 | 63 |
import itn.let.mjo.addr.service.AddrTransHistVO; |
| 59 | 64 |
import itn.let.mjo.addr.service.AddrVO; |
| 60 | 65 |
import itn.let.mjo.msgdata.service.PhoneVO; |
| 66 |
+import lombok.extern.slf4j.Slf4j; |
|
| 61 | 67 |
|
| 62 | 68 |
/** |
| 63 | 69 |
* 주소록 관한 controller 클래스를 정의한다. |
... | ... | @@ -75,6 +81,7 @@ |
| 75 | 81 |
* |
| 76 | 82 |
* </pre> |
| 77 | 83 |
*/ |
| 84 |
+@Slf4j |
|
| 78 | 85 |
@Controller |
| 79 | 86 |
public class AddrController {
|
| 80 | 87 |
|
... | ... | @@ -2223,6 +2230,47 @@ |
| 2223 | 2230 |
return modelAndView; |
| 2224 | 2231 |
} |
| 2225 | 2232 |
|
| 2233 |
+ |
|
| 2234 |
+ @RequestMapping(value = {"/web/mjon/addr/insertByAddrGrpDataAndAddrDataAjax.do"})
|
|
| 2235 |
+ public ResponseEntity<StatusResponse> insertByAddrGrpDataAndAddrDataAjax(@RequestBody AddrVO addrVO) throws Exception {
|
|
| 2236 |
+ |
|
| 2237 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 2238 |
+ modelAndView.setViewName("jsonView");
|
|
| 2239 |
+ |
|
| 2240 |
+ //로그인 권한정보 불러오기 |
|
| 2241 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 2242 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 2243 |
+ |
|
| 2244 |
+ if(userId == null) {
|
|
| 2245 |
+ if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); |
|
| 2246 |
+ } |
|
| 2247 |
+ |
|
| 2248 |
+ addrVO.setMberId(userId); |
|
| 2249 |
+ |
|
| 2250 |
+ |
|
| 2251 |
+ return ResponseEntity.ok().body(addrService.insertByAddrGrpDataAndAddrDataAjax(addrVO)); |
|
| 2252 |
+ } |
|
| 2253 |
+ |
|
| 2254 |
+ @RequestMapping(value = {"/web/mjon/addr/deleteAddrNoDataAjax.do"})
|
|
| 2255 |
+ public ResponseEntity<StatusResponse> deleteAddrNoDataAjax(@RequestBody AddrVO addrVO) throws Exception {
|
|
| 2256 |
+ |
|
| 2257 |
+ ModelAndView modelAndView = new ModelAndView(); |
|
| 2258 |
+ modelAndView.setViewName("jsonView");
|
|
| 2259 |
+ |
|
| 2260 |
+ //로그인 권한정보 불러오기 |
|
| 2261 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 2262 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 2263 |
+ |
|
| 2264 |
+ if(userId == null) {
|
|
| 2265 |
+ if(StringUtils.isEmpty(userId)) return ResponseEntity.ok().body(new StatusResponse(HttpStatus.BAD_REQUEST, "로그인 후 이용해 주세요", LocalDateTime.now())); |
|
| 2266 |
+ } |
|
| 2267 |
+ |
|
| 2268 |
+ addrVO.setMberId(userId); |
|
| 2269 |
+ |
|
| 2270 |
+ return ResponseEntity.ok().body(addrService.deleteAddrNoDataAjax(addrVO)); |
|
| 2271 |
+ } |
|
| 2272 |
+ |
|
| 2273 |
+ |
|
| 2226 | 2274 |
|
| 2227 | 2275 |
|
| 2228 | 2276 |
public boolean getNameRepLenChk(String type, String value) {
|
--- src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
+++ src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
... | ... | @@ -34,6 +34,7 @@ |
| 34 | 34 |
private String[] callToList; // '수신번호리스트', |
| 35 | 35 |
private String callFrom; // '발신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)', |
| 36 | 36 |
private String subject; // 'MMS용 메시지제목', |
| 37 |
+ private String subjectChkYn; // 'MMS용 메시지제목', |
|
| 37 | 38 |
private String smsTxt; // 'SMS용 메시지본문', |
| 38 | 39 |
private String smsTxtArea;//문자 작성 화면 본문 내용 |
| 39 | 40 |
private String msgType; // '메시지의 (4: SMS 전송, 5: URL 전송, 6: MMS전송, 7: BARCODE전송, 8: 카카오 알림톡 전송)', |
--- src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataVO.java
+++ src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataVO.java
... | ... | @@ -28,6 +28,7 @@ |
| 28 | 28 |
private List msgIdList; |
| 29 | 29 |
private List msgSeqList; |
| 30 | 30 |
private String subject; |
| 31 |
+ private String subjectChkYn; |
|
| 31 | 32 |
private String mmsSubject; |
| 32 | 33 |
private String smsTxt; |
| 33 | 34 |
private String smsLen; |
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
... | ... | @@ -4150,6 +4150,7 @@ |
| 4150 | 4150 |
|
| 4151 | 4151 |
instTotalCnt += instCnt; |
| 4152 | 4152 |
this.insertMsgGroupDataTb_advc(instCnt, mjonMsgVO, groupedMsgList); |
| 4153 |
+ log.info(" :: group data insert :: ");
|
|
| 4153 | 4154 |
|
| 4154 | 4155 |
// 금액 및 포인트 insert |
| 4155 | 4156 |
priceAndPoint.insertCashAndPoint( |
--- src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
+++ src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
... | ... | @@ -114,8 +114,9 @@ |
| 114 | 114 |
import itn.let.uss.umt.service.MberManageVO; |
| 115 | 115 |
import itn.let.uss.umt.service.UserManageVO; |
| 116 | 116 |
import itn.let.utl.sim.service.EgovClntInfo; |
| 117 |
+import lombok.extern.slf4j.Slf4j; |
|
| 117 | 118 |
|
| 118 |
- |
|
| 119 |
+@Slf4j |
|
| 119 | 120 |
@Controller |
| 120 | 121 |
public class MjonMsgDataController {
|
| 121 | 122 |
|
... | ... | @@ -816,6 +817,7 @@ |
| 816 | 817 |
|
| 817 | 818 |
mjonMsgDataVO.setMsgSeqList(tempList); |
| 818 | 819 |
|
| 820 |
+ log.info("===================================================");
|
|
| 819 | 821 |
List<MjonMsgVO> resultList = mjonMsgDataService.selectReSendMsgDataList(mjonMsgDataVO); |
| 820 | 822 |
|
| 821 | 823 |
//문자발송 이미지 처리 - 사용하지 않아서 주석처리함. |
... | ... | @@ -5961,7 +5963,6 @@ |
| 5961 | 5963 |
* 발송관리 엑셀다운로드 기능 |
| 5962 | 5964 |
* @param searchVO |
| 5963 | 5965 |
* @param model |
| 5964 |
- * @return "/web/mjon/msgsent/msgSentExcelDownLoadAjax.do" |
|
| 5965 | 5966 |
* @throws Exception |
| 5966 | 5967 |
*/ |
| 5967 | 5968 |
@RequestMapping(value= {"/web/mjon/msgdata/recieveCallToListExcelDownAjax.do"})
|
+++ src/main/java/itn/let/mjo/msgsent/service/MjonMsgDetailSentVO.java
... | ... | @@ -0,0 +1,64 @@ |
| 1 | +package itn.let.mjo.msgsent.service; | |
| 2 | + | |
| 3 | +import java.util.List; | |
| 4 | + | |
| 5 | +import itn.let.cmm.vo.FileInfoVO; | |
| 6 | +import itn.let.uss.umt.service.UserDefaultVO; | |
| 7 | +import lombok.Getter; | |
| 8 | +import lombok.Setter; | |
| 9 | + | |
| 10 | +@Getter | |
| 11 | +@Setter | |
| 12 | +public class MjonMsgDetailSentVO extends UserDefaultVO{ | |
| 13 | + | |
| 14 | + private static final long serialVersionUID = 1L; | |
| 15 | + | |
| 16 | + | |
| 17 | + private String msgGroupId; | |
| 18 | + private String reqDate; | |
| 19 | + private String regDate; | |
| 20 | + private String msgGroupCnt; | |
| 21 | + private String reserveYn; | |
| 22 | + private String reserveCYn; | |
| 23 | + private String canceldate; | |
| 24 | + private String callFrom; | |
| 25 | + private String userId; | |
| 26 | + private String smsTxt; | |
| 27 | + private String subject; | |
| 28 | + private String subjectChkYn; | |
| 29 | + private String msgType; | |
| 30 | + private String fileCnt; | |
| 31 | + private String msgKind; | |
| 32 | + private String eachPrice; | |
| 33 | + private String sentDate; | |
| 34 | + private String filePath1; | |
| 35 | + private String filePath2; | |
| 36 | + private String filePath3; | |
| 37 | + | |
| 38 | + private String callTo; | |
| 39 | + private String statusTxt; | |
| 40 | + private String addrNm; | |
| 41 | + | |
| 42 | + | |
| 43 | + private String resultSValue; | |
| 44 | + private String resultFValue; | |
| 45 | + private String resultWValue; | |
| 46 | + | |
| 47 | + private String successPct; | |
| 48 | + private String failedPct; | |
| 49 | + private String waitingPct; | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + private String statusCd; // 진행상태 코드 | |
| 56 | + private String divideYN; | |
| 57 | + private String divideText; | |
| 58 | + private int diffMin; | |
| 59 | + private String totPrice; | |
| 60 | + | |
| 61 | + | |
| 62 | + // FileInfo 리스트 필드 추가 | |
| 63 | + private List<FileInfoVO> fileInfos; | |
| 64 | +} |
+++ src/main/java/itn/let/mjo/msgsent/service/MjonMsgSWFDTO.java
... | ... | @@ -0,0 +1,33 @@ |
| 1 | +package itn.let.mjo.msgsent.service; | |
| 2 | + | |
| 3 | +import java.io.Serializable; | |
| 4 | + | |
| 5 | +import lombok.Getter; | |
| 6 | +import lombok.Setter; | |
| 7 | + | |
| 8 | +/** | |
| 9 | + * | |
| 10 | + * @author : 이호영 | |
| 11 | + * @fileName : MjonMsgSWFDTO.java | |
| 12 | + * @date : 2025.01.16 | |
| 13 | + * @description : 그룹ID로 성공 실패 대기 건수를 구해서 전달해주는 DTO | |
| 14 | + * =========================================================== | |
| 15 | + * DATE AUTHOR NOTE | |
| 16 | + * ----------------------------------------------------------- * | |
| 17 | + * 2025.01.16 이호영 최초 생성 | |
| 18 | + * | |
| 19 | + * | |
| 20 | + * | |
| 21 | + */ | |
| 22 | +@Getter | |
| 23 | +@Setter | |
| 24 | +public class MjonMsgSWFDTO implements Serializable { | |
| 25 | + | |
| 26 | + private static final long serialVersionUID = 1L; // 선언 | |
| 27 | + | |
| 28 | + private int resultSValue; // 성공건수 | |
| 29 | + private int resultFValue; // 실패건수 | |
| 30 | + private int resultWValue; // 대기건수 | |
| 31 | + private String divideYN; // 분할여부 | |
| 32 | + | |
| 33 | +} |
--- src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java
+++ src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentService.java
... | ... | @@ -1,6 +1,10 @@ |
| 1 | 1 |
package itn.let.mjo.msgsent.service; |
| 2 | 2 |
|
| 3 |
+import java.io.IOException; |
|
| 3 | 4 |
import java.util.List; |
| 5 |
+import java.util.Map; |
|
| 6 |
+ |
|
| 7 |
+import javax.servlet.http.HttpServletResponse; |
|
| 4 | 8 |
|
| 5 | 9 |
import itn.let.fax.addr.service.FaxAddrGroupVO; |
| 6 | 10 |
import itn.let.mjo.addr.service.AddrGroupVO; |
... | ... | @@ -15,6 +19,8 @@ |
| 15 | 19 |
|
| 16 | 20 |
//발송 관리 전체 발송 리스트 불러오기 |
| 17 | 21 |
public List<MjonMsgSentVO> selectAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) throws Exception; |
| 22 |
+ |
|
| 23 |
+ public Map<String, Object> selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception; |
|
| 18 | 24 |
|
| 19 | 25 |
//발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전 |
| 20 | 26 |
public List<MjonMsgSentVO> selectAllMsgSentSimpleList(MjonMsgSentVO mjonMsgSentVO) throws Exception; |
... | ... | @@ -54,5 +60,14 @@ |
| 54 | 60 |
|
| 55 | 61 |
//첨부파일 정보 불러오기 |
| 56 | 62 |
public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception; |
| 63 |
+ |
|
| 64 |
+ public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO); |
|
| 65 |
+ |
|
| 66 |
+ public Map<String, Object> selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception; |
|
| 67 |
+ |
|
| 68 |
+ public List<MjonMsgDetailSentVO> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO); |
|
| 69 |
+ |
|
| 70 |
+ public void msgSentExcelDownLoad(MjonMsgSentVO mjonMsgSentVO, HttpServletResponse response) throws IOException, Exception; |
|
| 71 |
+ |
|
| 57 | 72 |
|
| 58 | 73 |
} |
--- src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java
+++ src/main/java/itn/let/mjo/msgsent/service/MjonMsgSentVO.java
... | ... | @@ -4,7 +4,17 @@ |
| 4 | 4 |
import java.util.List; |
| 5 | 5 |
|
| 6 | 6 |
import itn.let.uss.umt.service.UserDefaultVO; |
| 7 |
+import lombok.AllArgsConstructor; |
|
| 8 |
+import lombok.Builder; |
|
| 9 |
+import lombok.Getter; |
|
| 10 |
+import lombok.NoArgsConstructor; |
|
| 11 |
+import lombok.Setter; |
|
| 7 | 12 |
|
| 13 |
+@Getter |
|
| 14 |
+@Setter |
|
| 15 |
+@Builder |
|
| 16 |
+@NoArgsConstructor |
|
| 17 |
+@AllArgsConstructor |
|
| 8 | 18 |
public class MjonMsgSentVO extends UserDefaultVO{
|
| 9 | 19 |
|
| 10 | 20 |
private static final long serialVersionUID = 1L; |
... | ... | @@ -16,8 +26,9 @@ |
| 16 | 26 |
private List msgGroupIdList; //문자 그룹아이디 리스트 |
| 17 | 27 |
private String smsTxt; //문자 내용 |
| 18 | 28 |
private String subject; //문자 제목 |
| 19 |
- private Date regdate; //문자 등록일자 |
|
| 20 |
- private Date reqdate; //문자 예약 발송 일자 |
|
| 29 |
+ private String subjectChkYn; //문자 제목 |
|
| 30 |
+ private String regDate; //문자 등록일자 |
|
| 31 |
+ private String reqDate; //문자 예약 발송 일자 |
|
| 21 | 32 |
private String callFrom; //발신번호 |
| 22 | 33 |
private String callTo; //수신자 번호 |
| 23 | 34 |
private List callToList; //수신자 번호 리스트 |
... | ... | @@ -86,399 +97,16 @@ |
| 86 | 97 |
private String successCount; |
| 87 | 98 |
|
| 88 | 99 |
private String resultSValue; |
| 100 |
+ private String resultFValue; |
|
| 101 |
+ private String resultWValue; |
|
| 89 | 102 |
private String resultWFValue; |
| 90 | 103 |
|
| 91 |
- public String getSuccessCount() {
|
|
| 92 |
- return successCount; |
|
| 93 |
- } |
|
| 94 |
- public void setSuccessCount(String successCount) {
|
|
| 95 |
- this.successCount = successCount; |
|
| 96 |
- } |
|
| 97 |
- public String getMsgSentType() {
|
|
| 98 |
- return msgSentType; |
|
| 99 |
- } |
|
| 100 |
- public void setMsgSentType(String msgSentType) {
|
|
| 101 |
- this.msgSentType = msgSentType; |
|
| 102 |
- } |
|
| 103 |
- public String getCallFromComma() {
|
|
| 104 |
- return callFromComma; |
|
| 105 |
- } |
|
| 106 |
- public void setCallFromComma(String callFromComma) {
|
|
| 107 |
- this.callFromComma = callFromComma; |
|
| 108 |
- } |
|
| 109 |
- public String getCallToComma() {
|
|
| 110 |
- return callToComma; |
|
| 111 |
- } |
|
| 112 |
- public void setCallToComma(String callToComma) {
|
|
| 113 |
- this.callToComma = callToComma; |
|
| 114 |
- } |
|
| 104 |
+ private String divideYN; // 분할여부 |
|
| 115 | 105 |
|
| 116 |
- public String getAtchFiles() {
|
|
| 117 |
- return atchFiles; |
|
| 118 |
- } |
|
| 119 |
- public void setAtchFiles(String atchFiles) {
|
|
| 120 |
- this.atchFiles = atchFiles; |
|
| 121 |
- } |
|
| 106 |
+ private String statusCd; // 진행상태 코드 |
|
| 122 | 107 |
|
| 123 |
- public String getMsgId() {
|
|
| 124 |
- return msgId; |
|
| 125 |
- } |
|
| 126 |
- public void setMsgId(String msgId) {
|
|
| 127 |
- this.msgId = msgId; |
|
| 128 |
- } |
|
| 129 |
- public int getSuccessCnt() {
|
|
| 130 |
- return successCnt; |
|
| 131 |
- } |
|
| 132 |
- public void setSuccessCnt(int successCnt) {
|
|
| 133 |
- this.successCnt = successCnt; |
|
| 134 |
- } |
|
| 135 |
- public String getMsgTypeName() {
|
|
| 136 |
- return msgTypeName; |
|
| 137 |
- } |
|
| 138 |
- public void setMsgTypeName(String msgTypeName) {
|
|
| 139 |
- this.msgTypeName = msgTypeName; |
|
| 140 |
- } |
|
| 141 |
- public int getOrderByCode() {
|
|
| 142 |
- return orderByCode; |
|
| 143 |
- } |
|
| 144 |
- public void setOrderByCode(int orderByCode) {
|
|
| 145 |
- this.orderByCode = orderByCode; |
|
| 146 |
- } |
|
| 147 |
- public String getAtchFileId() {
|
|
| 148 |
- return atchFileId; |
|
| 149 |
- } |
|
| 150 |
- public void setAtchFileId(String atchFileId) {
|
|
| 151 |
- this.atchFileId = atchFileId; |
|
| 152 |
- } |
|
| 153 |
- public String getFileSn() {
|
|
| 154 |
- return fileSn; |
|
| 155 |
- } |
|
| 156 |
- public void setFileSn(String fileSn) {
|
|
| 157 |
- this.fileSn = fileSn; |
|
| 158 |
- } |
|
| 159 |
- public String getUserId() {
|
|
| 160 |
- return userId; |
|
| 161 |
- } |
|
| 162 |
- public void setUserId(String userId) {
|
|
| 163 |
- this.userId = userId; |
|
| 164 |
- } |
|
| 165 |
- public String getAddrNm() {
|
|
| 166 |
- return addrNm; |
|
| 167 |
- } |
|
| 168 |
- public void setAddrNm(String addrNm) {
|
|
| 169 |
- this.addrNm = addrNm; |
|
| 170 |
- } |
|
| 171 |
- public String getMsgSeq() {
|
|
| 172 |
- return msgSeq; |
|
| 173 |
- } |
|
| 174 |
- public void setMsgSeq(String msgSeq) {
|
|
| 175 |
- this.msgSeq = msgSeq; |
|
| 176 |
- } |
|
| 177 |
- public String getMsgGroupId() {
|
|
| 178 |
- return msgGroupId; |
|
| 179 |
- } |
|
| 180 |
- public void setMsgGroupId(String msgGroupId) {
|
|
| 181 |
- this.msgGroupId = msgGroupId; |
|
| 182 |
- } |
|
| 183 |
- public List getMsgGroupIdList() {
|
|
| 184 |
- return msgGroupIdList; |
|
| 185 |
- } |
|
| 186 |
- public void setMsgGroupIdList(List msgGroupIdList) {
|
|
| 187 |
- this.msgGroupIdList = msgGroupIdList; |
|
| 188 |
- } |
|
| 189 |
- public String getSmsTxt() {
|
|
| 190 |
- return smsTxt; |
|
| 191 |
- } |
|
| 192 |
- public void setSmsTxt(String smsTxt) {
|
|
| 193 |
- this.smsTxt = smsTxt; |
|
| 194 |
- } |
|
| 195 |
- public String getSubject() {
|
|
| 196 |
- return subject; |
|
| 197 |
- } |
|
| 198 |
- public void setSubject(String subject) {
|
|
| 199 |
- this.subject = subject; |
|
| 200 |
- } |
|
| 201 |
- public Date getRegdate() {
|
|
| 202 |
- return regdate; |
|
| 203 |
- } |
|
| 204 |
- public void setRegdate(Date regdate) {
|
|
| 205 |
- this.regdate = regdate; |
|
| 206 |
- } |
|
| 207 |
- public Date getReqdate() {
|
|
| 208 |
- return reqdate; |
|
| 209 |
- } |
|
| 210 |
- public void setReqdate(Date reqdate) {
|
|
| 211 |
- this.reqdate = reqdate; |
|
| 212 |
- } |
|
| 213 |
- public String getCallFrom() {
|
|
| 214 |
- return callFrom; |
|
| 215 |
- } |
|
| 216 |
- public void setCallFrom(String callFrom) {
|
|
| 217 |
- this.callFrom = callFrom; |
|
| 218 |
- } |
|
| 219 |
- public String getCallTo() {
|
|
| 220 |
- return callTo; |
|
| 221 |
- } |
|
| 222 |
- public void setCallTo(String callTo) {
|
|
| 223 |
- this.callTo = callTo; |
|
| 224 |
- } |
|
| 225 |
- public List getCallToList() {
|
|
| 226 |
- return callToList; |
|
| 227 |
- } |
|
| 228 |
- public void setCallToList(List callToList) {
|
|
| 229 |
- this.callToList = callToList; |
|
| 230 |
- } |
|
| 231 |
- public String getTotPrice() {
|
|
| 232 |
- return totPrice; |
|
| 233 |
- } |
|
| 234 |
- public void setTotPrice(String totPrice) {
|
|
| 235 |
- this.totPrice = totPrice; |
|
| 236 |
- } |
|
| 237 |
- public String getEachPrice() {
|
|
| 238 |
- return eachPrice; |
|
| 239 |
- } |
|
| 240 |
- public void setEachPrice(String eachPrice) {
|
|
| 241 |
- this.eachPrice = eachPrice; |
|
| 242 |
- } |
|
| 243 |
- public String getDelFlag() {
|
|
| 244 |
- return delFlag; |
|
| 245 |
- } |
|
| 246 |
- public void setDelFlag(String delFlag) {
|
|
| 247 |
- this.delFlag = delFlag; |
|
| 248 |
- } |
|
| 249 |
- public String getTotMsgPrice() {
|
|
| 250 |
- return totMsgPrice; |
|
| 251 |
- } |
|
| 252 |
- public void setTotMsgPrice(String totMsgPrice) {
|
|
| 253 |
- this.totMsgPrice = totMsgPrice; |
|
| 254 |
- } |
|
| 255 |
- public String getRsltCode() {
|
|
| 256 |
- return rsltCode; |
|
| 257 |
- } |
|
| 258 |
- public void setRsltCode(String rsltCode) {
|
|
| 259 |
- this.rsltCode = rsltCode; |
|
| 260 |
- } |
|
| 261 |
- public String getRsltCode2() {
|
|
| 262 |
- return rsltCode2; |
|
| 263 |
- } |
|
| 264 |
- public void setRsltCode2(String rsltCode2) {
|
|
| 265 |
- this.rsltCode2 = rsltCode2; |
|
| 266 |
- } |
|
| 267 |
- public String getMsgType() {
|
|
| 268 |
- return msgType; |
|
| 269 |
- } |
|
| 270 |
- public void setMsgType(String msgType) {
|
|
| 271 |
- this.msgType = msgType; |
|
| 272 |
- } |
|
| 273 |
- public String getMsgGroupCnt() {
|
|
| 274 |
- return msgGroupCnt; |
|
| 275 |
- } |
|
| 276 |
- public void setMsgGroupCnt(String msgGroupCnt) {
|
|
| 277 |
- this.msgGroupCnt = msgGroupCnt; |
|
| 278 |
- } |
|
| 279 |
- public String getFileCnt() {
|
|
| 280 |
- return fileCnt; |
|
| 281 |
- } |
|
| 282 |
- public void setFileCnt(String fileCnt) {
|
|
| 283 |
- this.fileCnt = fileCnt; |
|
| 284 |
- } |
|
| 285 |
- public String getTotMsgCnt() {
|
|
| 286 |
- return totMsgCnt; |
|
| 287 |
- } |
|
| 288 |
- public void setTotMsgCnt(String totMsgCnt) {
|
|
| 289 |
- this.totMsgCnt = totMsgCnt; |
|
| 290 |
- } |
|
| 291 |
- public String getCurState() {
|
|
| 292 |
- return curState; |
|
| 293 |
- } |
|
| 294 |
- public void setCurState(String curState) {
|
|
| 295 |
- this.curState = curState; |
|
| 296 |
- } |
|
| 297 |
- public String getReserveYn() {
|
|
| 298 |
- return reserveYn; |
|
| 299 |
- } |
|
| 300 |
- public void setReserveYn(String reserveYn) {
|
|
| 301 |
- this.reserveYn = reserveYn; |
|
| 302 |
- } |
|
| 303 |
- public String getReserveCYn() {
|
|
| 304 |
- return reserveCYn; |
|
| 305 |
- } |
|
| 306 |
- public void setReserveCYn(String reserveCYn) {
|
|
| 307 |
- this.reserveCYn = reserveCYn; |
|
| 308 |
- } |
|
| 309 |
- public String getFilePath1() {
|
|
| 310 |
- return filePath1; |
|
| 311 |
- } |
|
| 312 |
- public void setFilePath1(String filePath1) {
|
|
| 313 |
- this.filePath1 = filePath1; |
|
| 314 |
- } |
|
| 315 |
- public String getFilePath2() {
|
|
| 316 |
- return filePath2; |
|
| 317 |
- } |
|
| 318 |
- public void setFilePath2(String filePath2) {
|
|
| 319 |
- this.filePath2 = filePath2; |
|
| 320 |
- } |
|
| 321 |
- public String getFilePath3() {
|
|
| 322 |
- return filePath3; |
|
| 323 |
- } |
|
| 324 |
- public void setFilePath3(String filePath3) {
|
|
| 325 |
- this.filePath3 = filePath3; |
|
| 326 |
- } |
|
| 327 |
- public Date getSentDate() {
|
|
| 328 |
- return sentDate; |
|
| 329 |
- } |
|
| 330 |
- public void setSentDate(Date sentDate) {
|
|
| 331 |
- this.sentDate = sentDate; |
|
| 332 |
- } |
|
| 333 |
- public String getAgentCode() {
|
|
| 334 |
- return agentCode; |
|
| 335 |
- } |
|
| 336 |
- public void setAgentCode(String agentCode) {
|
|
| 337 |
- this.agentCode = agentCode; |
|
| 338 |
- } |
|
| 339 |
- public String getUserData() {
|
|
| 340 |
- return userData; |
|
| 341 |
- } |
|
| 342 |
- public void setUserData(String userData) {
|
|
| 343 |
- this.userData = userData; |
|
| 344 |
- } |
|
| 345 |
- public List getUserDataList() {
|
|
| 346 |
- return userDataList; |
|
| 347 |
- } |
|
| 348 |
- public void setUserDataList(List userDataList) {
|
|
| 349 |
- this.userDataList = userDataList; |
|
| 350 |
- } |
|
| 351 |
- public Date getCancelDate() {
|
|
| 352 |
- return cancelDate; |
|
| 353 |
- } |
|
| 354 |
- public void setCancelDate(Date cancelDate) {
|
|
| 355 |
- this.cancelDate = cancelDate; |
|
| 356 |
- } |
|
| 357 |
- public String getStartDate() {
|
|
| 358 |
- return startDate; |
|
| 359 |
- } |
|
| 360 |
- public void setStartDate(String startDate) {
|
|
| 361 |
- this.startDate = startDate; |
|
| 362 |
- } |
|
| 363 |
- public String getEndDate() {
|
|
| 364 |
- return endDate; |
|
| 365 |
- } |
|
| 366 |
- public void setEndDate(String endDate) {
|
|
| 367 |
- this.endDate = endDate; |
|
| 368 |
- } |
|
| 369 |
- public String getSearchMsgType() {
|
|
| 370 |
- return searchMsgType; |
|
| 371 |
- } |
|
| 372 |
- public void setSearchMsgType(String searchMsgType) {
|
|
| 373 |
- this.searchMsgType = searchMsgType; |
|
| 374 |
- } |
|
| 375 |
- public String getTabType() {
|
|
| 376 |
- return tabType; |
|
| 377 |
- } |
|
| 378 |
- public void setTabType(String tabType) {
|
|
| 379 |
- this.tabType = tabType; |
|
| 380 |
- } |
|
| 381 |
- public String getStateType() {
|
|
| 382 |
- return stateType; |
|
| 383 |
- } |
|
| 384 |
- public void setStateType(String stateType) {
|
|
| 385 |
- this.stateType = stateType; |
|
| 386 |
- } |
|
| 387 |
- public String getListType() {
|
|
| 388 |
- return listType; |
|
| 389 |
- } |
|
| 390 |
- public void setListType(String listType) {
|
|
| 391 |
- this.listType = listType; |
|
| 392 |
- } |
|
| 393 |
- public String getResultType() {
|
|
| 394 |
- return resultType; |
|
| 395 |
- } |
|
| 396 |
- public void setResultType(String resultType) {
|
|
| 397 |
- this.resultType = resultType; |
|
| 398 |
- } |
|
| 399 |
- public String getMsgResultCnt() {
|
|
| 400 |
- return msgResultCnt; |
|
| 401 |
- } |
|
| 402 |
- public void setMsgResultCnt(String msgResultCnt) {
|
|
| 403 |
- this.msgResultCnt = msgResultCnt; |
|
| 404 |
- } |
|
| 405 |
- public String getMsgResultSts() {
|
|
| 406 |
- return msgResultSts; |
|
| 407 |
- } |
|
| 408 |
- public void setMsgResultSts(String msgResultSts) {
|
|
| 409 |
- this.msgResultSts = msgResultSts; |
|
| 410 |
- } |
|
| 411 |
- public String getAddrGrpNm() {
|
|
| 412 |
- return addrGrpNm; |
|
| 413 |
- } |
|
| 414 |
- public void setAddrGrpNm(String addrGrpNm) {
|
|
| 415 |
- this.addrGrpNm = addrGrpNm; |
|
| 416 |
- } |
|
| 417 |
- public int getOrderByrsltCode() {
|
|
| 418 |
- return orderByrsltCode; |
|
| 419 |
- } |
|
| 420 |
- public void setOrderByrsltCode(int orderByrsltCode) {
|
|
| 421 |
- this.orderByrsltCode = orderByrsltCode; |
|
| 422 |
- } |
|
| 423 |
- public String getMsgResult() {
|
|
| 424 |
- return msgResult; |
|
| 425 |
- } |
|
| 426 |
- public void setMsgResult(String msgResult) {
|
|
| 427 |
- this.msgResult = msgResult; |
|
| 428 |
- } |
|
| 429 |
- public String getNtceBgnde() {
|
|
| 430 |
- return ntceBgnde; |
|
| 431 |
- } |
|
| 432 |
- public void setNtceBgnde(String ntceBgnde) {
|
|
| 433 |
- this.ntceBgnde = ntceBgnde; |
|
| 434 |
- } |
|
| 435 |
- public String getNtceEndde() {
|
|
| 436 |
- return ntceEndde; |
|
| 437 |
- } |
|
| 438 |
- public void setNtceEndde(String ntceEndde) {
|
|
| 439 |
- this.ntceEndde = ntceEndde; |
|
| 440 |
- } |
|
| 441 |
- public String getMsgKind() {
|
|
| 442 |
- return msgKind; |
|
| 443 |
- } |
|
| 444 |
- public void setMsgKind(String msgKind) {
|
|
| 445 |
- this.msgKind = msgKind; |
|
| 446 |
- } |
|
| 447 |
- public String getDelayYn() {
|
|
| 448 |
- return delayYn; |
|
| 449 |
- } |
|
| 450 |
- public void setDelayYn(String delayYn) {
|
|
| 451 |
- this.delayYn = delayYn; |
|
| 452 |
- } |
|
| 453 |
- public String getDelayCompleteYn() {
|
|
| 454 |
- return delayCompleteYn; |
|
| 455 |
- } |
|
| 456 |
- public void setDelayCompleteYn(String delayCompleteYn) {
|
|
| 457 |
- this.delayCompleteYn = delayCompleteYn; |
|
| 458 |
- } |
|
| 459 |
- public String getSendKind() {
|
|
| 460 |
- return sendKind; |
|
| 461 |
- } |
|
| 462 |
- public void setSendKind(String sendKind) {
|
|
| 463 |
- this.sendKind = sendKind; |
|
| 464 |
- } |
|
| 465 |
- public String getResultSValue() {
|
|
| 466 |
- return resultSValue; |
|
| 467 |
- } |
|
| 468 |
- public void setResultSValue(String resultSValue) {
|
|
| 469 |
- this.resultSValue = resultSValue; |
|
| 470 |
- } |
|
| 471 |
- public String getResultWFValue() {
|
|
| 472 |
- return resultWFValue; |
|
| 473 |
- } |
|
| 474 |
- public void setResultWFValue(String resultWFValue) {
|
|
| 475 |
- this.resultWFValue = resultWFValue; |
|
| 476 |
- } |
|
| 477 |
- public Date getDelayOrgTime() {
|
|
| 478 |
- return delayOrgTime; |
|
| 479 |
- } |
|
| 480 |
- public void setDelayOrgTime(Date delayOrgTime) {
|
|
| 481 |
- this.delayOrgTime = delayOrgTime; |
|
| 482 |
- } |
|
| 108 |
+ // 결과 리스트 select 할 떄 |
|
| 109 |
+ // TIMESTAMPDIFF(minute, DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) as diffMin |
|
| 110 |
+ private int diffMin; |
|
| 483 | 111 |
|
| 484 | 112 |
} |
--- src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java
+++ src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentDAO.java
... | ... | @@ -9,6 +9,8 @@ |
| 9 | 9 |
import itn.let.fax.addr.service.FaxAddrGroupVO; |
| 10 | 10 |
import itn.let.mjo.addr.service.AddrGroupVO; |
| 11 | 11 |
import itn.let.mjo.block.service.MjonBlockVO; |
| 12 |
+import itn.let.mjo.msgsent.service.MjonMsgDetailSentVO; |
|
| 13 |
+import itn.let.mjo.msgsent.service.MjonMsgSWFDTO; |
|
| 12 | 14 |
import itn.let.mjo.msgsent.service.MjonMsgSentVO; |
| 13 | 15 |
|
| 14 | 16 |
@Repository("MjonMsgSentDAO")
|
... | ... | @@ -54,6 +56,13 @@ |
| 54 | 56 |
public List<MjonMsgSentVO> selectAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) throws Exception{
|
| 55 | 57 |
|
| 56 | 58 |
return (List<MjonMsgSentVO>) list("MjonMsgSentDAO.selectAllMsgSentList",mjonMsgSentVO);
|
| 59 |
+ } |
|
| 60 |
+ |
|
| 61 |
+ //발송 관리 전체 발송 리스트 불러오기 |
|
| 62 |
+ @SuppressWarnings("unchecked")
|
|
| 63 |
+ public List<MjonMsgSentVO> selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception{
|
|
| 64 |
+ |
|
| 65 |
+ return (List<MjonMsgSentVO>) list("MjonMsgSentDAO.selectAllMsgSentList_advc",mjonMsgSentVO);
|
|
| 57 | 66 |
} |
| 58 | 67 |
|
| 59 | 68 |
//발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전 |
... | ... | @@ -158,5 +167,28 @@ |
| 158 | 167 |
public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception{
|
| 159 | 168 |
return (MjonMsgSentVO) select("MjonMsgSentDAO.selectFileInfo", streFileId);
|
| 160 | 169 |
} |
| 170 |
+ |
|
| 171 |
+ public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) {
|
|
| 172 |
+ return (Integer)select("MjonMsgSentDAO.countAllMsgSentList", mjonMsgSentVO);
|
|
| 173 |
+ } |
|
| 174 |
+ |
|
| 175 |
+ public MjonMsgSWFDTO findBySWF(String msgGroupId) {
|
|
| 176 |
+ |
|
| 177 |
+ return (MjonMsgSWFDTO) select("MjonMsgSentDAO.findBySWF", msgGroupId);
|
|
| 178 |
+ } |
|
| 179 |
+ |
|
| 180 |
+ public MjonMsgDetailSentVO selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) {
|
|
| 181 |
+ // TODO Auto-generated method stub |
|
| 182 |
+ return (MjonMsgDetailSentVO) select("MjonMsgSentDAO.selectAllMsgSentDetailView", mjonMsgDetailSentVO);
|
|
| 183 |
+ } |
|
| 184 |
+ |
|
| 185 |
+ public List<MjonMsgDetailSentVO> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) {
|
|
| 186 |
+ |
|
| 187 |
+ return (List<MjonMsgDetailSentVO>) list("MjonMsgSentDAO.findByMsgDetailListAjax", mjonMsgDetailSentVO);
|
|
| 188 |
+ } |
|
| 189 |
+ |
|
| 190 |
+ public List<String> findByReqDateWhereMsgGroupId(String msgGroupId) {
|
|
| 191 |
+ return (List<String>) list("MjonMsgSentDAO.findByReqDateWhereMsgGroupId", msgGroupId);
|
|
| 192 |
+ } |
|
| 161 | 193 |
|
| 162 | 194 |
} |
--- src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java
+++ src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java
... | ... | @@ -1,20 +1,51 @@ |
| 1 | 1 |
package itn.let.mjo.msgsent.service.impl; |
| 2 | 2 |
|
| 3 |
+import java.io.OutputStream; |
|
| 4 |
+import java.math.BigDecimal; |
|
| 5 |
+import java.math.RoundingMode; |
|
| 6 |
+import java.text.SimpleDateFormat; |
|
| 7 |
+import java.time.LocalDateTime; |
|
| 8 |
+import java.time.format.DateTimeFormatter; |
|
| 3 | 9 |
import java.util.ArrayList; |
| 10 |
+import java.util.Date; |
|
| 11 |
+import java.util.HashMap; |
|
| 12 |
+import java.util.LinkedHashMap; |
|
| 4 | 13 |
import java.util.List; |
| 14 |
+import java.util.Locale; |
|
| 15 |
+import java.util.Map; |
|
| 5 | 16 |
|
| 6 | 17 |
import javax.annotation.Resource; |
| 18 |
+import javax.servlet.http.HttpServletResponse; |
|
| 7 | 19 |
|
| 20 |
+import org.apache.commons.io.FilenameUtils; |
|
| 21 |
+import org.apache.commons.lang3.StringUtils; |
|
| 22 |
+import org.apache.poi.ss.usermodel.BorderStyle; |
|
| 23 |
+import org.apache.poi.ss.usermodel.Cell; |
|
| 24 |
+import org.apache.poi.ss.usermodel.CellStyle; |
|
| 25 |
+import org.apache.poi.ss.usermodel.Font; |
|
| 26 |
+import org.apache.poi.ss.usermodel.HorizontalAlignment; |
|
| 27 |
+import org.apache.poi.ss.usermodel.IndexedColors; |
|
| 28 |
+import org.apache.poi.ss.usermodel.Row; |
|
| 29 |
+import org.apache.poi.ss.usermodel.Sheet; |
|
| 30 |
+import org.apache.poi.ss.usermodel.VerticalAlignment; |
|
| 31 |
+import org.apache.poi.ss.util.CellRangeAddress; |
|
| 32 |
+import org.apache.poi.xssf.streaming.SXSSFWorkbook; |
|
| 8 | 33 |
import org.springframework.stereotype.Service; |
| 9 | 34 |
|
| 10 | 35 |
import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; |
| 11 | 36 |
import egovframework.rte.fdl.idgnr.EgovIdGnrService; |
| 37 |
+import itn.com.cmm.util.StringUtil2; |
|
| 38 |
+import itn.let.cmm.vo.FileInfoVO; |
|
| 12 | 39 |
import itn.let.fax.addr.service.FaxAddrGroupVO; |
| 13 | 40 |
import itn.let.mjo.addr.service.AddrGroupVO; |
| 14 | 41 |
import itn.let.mjo.block.service.MjonBlockVO; |
| 42 |
+import itn.let.mjo.msgsent.service.MjonMsgDetailSentVO; |
|
| 43 |
+import itn.let.mjo.msgsent.service.MjonMsgSWFDTO; |
|
| 15 | 44 |
import itn.let.mjo.msgsent.service.MjonMsgSentService; |
| 16 | 45 |
import itn.let.mjo.msgsent.service.MjonMsgSentVO; |
| 46 |
+import lombok.extern.slf4j.Slf4j; |
|
| 17 | 47 |
|
| 48 |
+@Slf4j |
|
| 18 | 49 |
@Service("MjonMsgSentService")
|
| 19 | 50 |
public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements MjonMsgSentService{
|
| 20 | 51 |
|
... | ... | @@ -82,6 +113,204 @@ |
| 82 | 113 |
} |
| 83 | 114 |
|
| 84 | 115 |
return resultList; |
| 116 |
+ } |
|
| 117 |
+ |
|
| 118 |
+ /** |
|
| 119 |
+ * advc |
|
| 120 |
+ * 이호영 20250121 |
|
| 121 |
+ * 발송 관리 전체 발송 리스트 불러오기 |
|
| 122 |
+ */ |
|
| 123 |
+ public Map<String, Object> selectAllMsgSentList_advc(MjonMsgSentVO mjonMsgSentVO) throws Exception{
|
|
| 124 |
+ |
|
| 125 |
+ |
|
| 126 |
+ Map<String, Object> resultMap = new HashMap<String, Object>(); |
|
| 127 |
+ |
|
| 128 |
+ // 목록 |
|
| 129 |
+ List<MjonMsgSentVO> resultList = mjonMsgSentDAO.selectAllMsgSentList_advc(mjonMsgSentVO); |
|
| 130 |
+ |
|
| 131 |
+ |
|
| 132 |
+ // groupID에 대한 결과건수(대기, 성공 실패) 분할건수를 가져옴 |
|
| 133 |
+ resultList = makeDetailFunction(resultList); |
|
| 134 |
+ |
|
| 135 |
+ /* |
|
| 136 |
+ * 진행상태 코드화 |
|
| 137 |
+ * */ |
|
| 138 |
+ resultList.stream().forEach(t->{
|
|
| 139 |
+ String code = getStatusCode(t); |
|
| 140 |
+ t.setStatusCd(code); |
|
| 141 |
+ }); |
|
| 142 |
+ |
|
| 143 |
+ |
|
| 144 |
+ resultList.stream().forEach(t->{
|
|
| 145 |
+ |
|
| 146 |
+ // 내용이 없고 이미지만 있을 경우 |
|
| 147 |
+ // 내용에 "이미지"표시 |
|
| 148 |
+ if("6".equals(t.getMsgType())
|
|
| 149 |
+ && StringUtils.isEmpty(t.getSmsTxt()) |
|
| 150 |
+ && !"0".equals(t.getFileCnt()) |
|
| 151 |
+ ) {
|
|
| 152 |
+ t.setSmsTxt("이미지");
|
|
| 153 |
+ } |
|
| 154 |
+ |
|
| 155 |
+ // 예약 취소일 시 대기건도 0으로 표시 |
|
| 156 |
+ if( t.getReserveCYn().equals(("Y")) ) {
|
|
| 157 |
+ t.setResultSValue("0");
|
|
| 158 |
+ t.setResultFValue("0");
|
|
| 159 |
+ t.setResultWValue("0");
|
|
| 160 |
+ } |
|
| 161 |
+ }); |
|
| 162 |
+ |
|
| 163 |
+ |
|
| 164 |
+ |
|
| 165 |
+ |
|
| 166 |
+ // 총 카운트 |
|
| 167 |
+ int totalCnt = mjonMsgSentDAO.countAllMsgSentList(mjonMsgSentVO); |
|
| 168 |
+ resultMap.put("resultList", resultList);
|
|
| 169 |
+ resultMap.put("totalCnt", totalCnt);
|
|
| 170 |
+ |
|
| 171 |
+ |
|
| 172 |
+ return resultMap; |
|
| 173 |
+ } |
|
| 174 |
+ |
|
| 175 |
+ |
|
| 176 |
+ |
|
| 177 |
+ public Map<String, Object> selectAllMsgSentDetailView(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception{
|
|
| 178 |
+ |
|
| 179 |
+ Map<String, Object> resultMap = new HashMap<String, Object>(); |
|
| 180 |
+ |
|
| 181 |
+ // 목록 |
|
| 182 |
+ MjonMsgDetailSentVO resultVO = mjonMsgSentDAO.selectAllMsgSentDetailView(mjonMsgDetailSentVO); |
|
| 183 |
+ |
|
| 184 |
+ log.info(" + :: [{}]", resultVO.getSmsTxt());
|
|
| 185 |
+ |
|
| 186 |
+ |
|
| 187 |
+ // 성공 대기 실패 발송금액 분할여부 |
|
| 188 |
+ MjonMsgSentVO updatedVO = getDetailFunction(resultVO.getMsgGroupId(), resultVO.getEachPrice()); |
|
| 189 |
+ resultVO.setResultSValue(updatedVO.getResultSValue()); // 성공건수 |
|
| 190 |
+ resultVO.setResultWValue(updatedVO.getResultWValue()); // 대기건수 |
|
| 191 |
+ resultVO.setResultFValue(updatedVO.getResultFValue()); // 실패건수 |
|
| 192 |
+ resultVO.setTotPrice(updatedVO.getTotPrice()); // 총 발송 금액 (성공건수 * 개별금액) |
|
| 193 |
+ resultVO.setDivideYN(updatedVO.getDivideYN()); // 분할 여부 |
|
| 194 |
+ |
|
| 195 |
+ |
|
| 196 |
+ // 퍼센트 계산 실행 |
|
| 197 |
+ Map<String, String> returnMap = calculatePercentages(resultVO); |
|
| 198 |
+ resultVO.setSuccessPct(returnMap.get("successPct"));
|
|
| 199 |
+ resultVO.setWaitingPct(returnMap.get("waitingPct"));
|
|
| 200 |
+ resultVO.setFailedPct(returnMap.get("failedPct"));
|
|
| 201 |
+ |
|
| 202 |
+ |
|
| 203 |
+ // 진행상태 코드화 |
|
| 204 |
+ String statusCode = getStatusCode(MjonMsgSentVO.builder() |
|
| 205 |
+ .reserveCYn(resultVO.getReserveCYn()) |
|
| 206 |
+ .reserveYn(resultVO.getReserveYn()) |
|
| 207 |
+ .msgGroupCnt(resultVO.getMsgGroupCnt()) |
|
| 208 |
+ .resultSValue(resultVO.getResultSValue()) |
|
| 209 |
+ .resultWValue(resultVO.getResultWValue()) |
|
| 210 |
+ .resultFValue(resultVO.getResultFValue()) |
|
| 211 |
+ .diffMin(resultVO.getDiffMin()) |
|
| 212 |
+ .build()); |
|
| 213 |
+ |
|
| 214 |
+ resultVO.setStatusCd(statusCode); |
|
| 215 |
+ |
|
| 216 |
+ // 결과 출력 |
|
| 217 |
+// log.info("성공률: [{}]", returnMap.get("successPct"));
|
|
| 218 |
+// log.info("대기율: [{}]", returnMap.get("waitingPct"));
|
|
| 219 |
+// log.info("실패율: [{}]", returnMap.get("failedPct"));
|
|
| 220 |
+ |
|
| 221 |
+ |
|
| 222 |
+ // 광고일떄 (광고)와 줄바꿈+무료거부 0808800858 삭제 |
|
| 223 |
+ if("A".equals(resultVO.getMsgKind())) {
|
|
| 224 |
+ resultVO.setSmsTxt(resultVO.getSmsTxt().replace("(광고)", "")
|
|
| 225 |
+ .replaceAll("\\s*무료거부 0808800858", ""));
|
|
| 226 |
+ } |
|
| 227 |
+ |
|
| 228 |
+ // 그림문자일 경우 그림정보 가져오기 |
|
| 229 |
+ if(StringUtils.isNotEmpty(resultVO.getFileCnt()) && Integer.parseInt(resultVO.getFileCnt()) > 0) |
|
| 230 |
+ {
|
|
| 231 |
+ List<FileInfoVO> fileInfos = getFileInfo(resultVO); |
|
| 232 |
+ resultVO.setFileInfos(fileInfos); |
|
| 233 |
+ } |
|
| 234 |
+ |
|
| 235 |
+ // 분할문자인 경우 |
|
| 236 |
+ if("Y".equals(resultVO.getDivideYN())) {
|
|
| 237 |
+ String divideText = calculateBatchInfo(resultVO); |
|
| 238 |
+ resultVO.setDivideText(divideText); |
|
| 239 |
+ } |
|
| 240 |
+ |
|
| 241 |
+ |
|
| 242 |
+ |
|
| 243 |
+ |
|
| 244 |
+ resultMap.put("result", resultVO);
|
|
| 245 |
+ |
|
| 246 |
+ return resultMap; |
|
| 247 |
+ } |
|
| 248 |
+ |
|
| 249 |
+ |
|
| 250 |
+ private String calculateBatchInfo(MjonMsgDetailSentVO resultVO) {
|
|
| 251 |
+ |
|
| 252 |
+ String msgGroupId = resultVO.getMsgGroupId(); |
|
| 253 |
+ |
|
| 254 |
+ |
|
| 255 |
+ List<String> requestTimes = mjonMsgSentDAO.findByReqDateWhereMsgGroupId(msgGroupId); |
|
| 256 |
+ |
|
| 257 |
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
|
|
| 258 |
+ Map<LocalDateTime, Integer> timeCountMap = new LinkedHashMap<>(); |
|
| 259 |
+ |
|
| 260 |
+ // REQ_DATE 그룹화 (같은 시간대 몇 건인지) |
|
| 261 |
+ for (String timeStr : requestTimes) {
|
|
| 262 |
+ LocalDateTime time = LocalDateTime.parse(timeStr, formatter); |
|
| 263 |
+ timeCountMap.put(time, timeCountMap.getOrDefault(time, 0) + 1); |
|
| 264 |
+ } |
|
| 265 |
+ |
|
| 266 |
+ // 가장 첫 번째 시간 & 간격 계산 |
|
| 267 |
+ List<LocalDateTime> sortedKeys = new ArrayList<>(timeCountMap.keySet()); |
|
| 268 |
+ if (sortedKeys.size() < 2) {
|
|
| 269 |
+ return "데이터 부족 (분석 불가)"; |
|
| 270 |
+ } |
|
| 271 |
+ |
|
| 272 |
+ int batchSize = timeCountMap.get(sortedKeys.get(0)); // 한 번에 보낸 건수 |
|
| 273 |
+ int intervalMinutes = sortedKeys.get(1).getMinute() - sortedKeys.get(0).getMinute(); // 시간 간격 계산 |
|
| 274 |
+// int batchCount = sortedKeys.size(); // 총 몇 번 보냈는지 |
|
| 275 |
+ |
|
| 276 |
+// return String.format("%,d건씩 %d분 간격 (%d회 발송)", batchSize, intervalMinutes, batchCount);
|
|
| 277 |
+ return String.format("%,d건씩 %d분 간격", batchSize, intervalMinutes);
|
|
| 278 |
+ |
|
| 279 |
+ } |
|
| 280 |
+ |
|
| 281 |
+ private List<FileInfoVO> getFileInfo(MjonMsgDetailSentVO result) throws Exception {
|
|
| 282 |
+ |
|
| 283 |
+ |
|
| 284 |
+ List<FileInfoVO> fileInfos = new ArrayList<>(); |
|
| 285 |
+ |
|
| 286 |
+ // 파일 경로 필드들을 배열로 관리 |
|
| 287 |
+ String[] filePaths = { result.getFilePath1(), result.getFilePath2(), result.getFilePath3() };
|
|
| 288 |
+ |
|
| 289 |
+ for (String filePath : filePaths) {
|
|
| 290 |
+ if (filePath != null) {
|
|
| 291 |
+ // 파일 ID 추출 |
|
| 292 |
+ |
|
| 293 |
+ // 확장자 제외한 파일명 |
|
| 294 |
+ String fileId = FilenameUtils.getBaseName(filePath); |
|
| 295 |
+ |
|
| 296 |
+ // 파일 정보 조회 |
|
| 297 |
+ MjonMsgSentVO info = mjonMsgSentDAO.selectFileInfo(fileId); |
|
| 298 |
+ |
|
| 299 |
+ // FileInfo 객체 생성 및 추가 |
|
| 300 |
+ FileInfoVO fileInfo = new FileInfoVO(); |
|
| 301 |
+ fileInfo.setAtchFileId(info.getAtchFileId()); |
|
| 302 |
+ fileInfo.setFileSn(info.getFileSn()); |
|
| 303 |
+ |
|
| 304 |
+ fileInfos.add(fileInfo); |
|
| 305 |
+ } |
|
| 306 |
+ } |
|
| 307 |
+ return fileInfos; |
|
| 308 |
+ |
|
| 309 |
+ } |
|
| 310 |
+ |
|
| 311 |
+ @Override |
|
| 312 |
+ public int countAllMsgSentList(MjonMsgSentVO mjonMsgSentVO) {
|
|
| 313 |
+ return mjonMsgSentDAO.countAllMsgSentList(mjonMsgSentVO); |
|
| 85 | 314 |
} |
| 86 | 315 |
|
| 87 | 316 |
//발송 관리 전체 발송 리스트 불러오기 => 주소록 조인 제거버전 |
... | ... | @@ -243,4 +472,384 @@ |
| 243 | 472 |
public MjonMsgSentVO selectFileInfo(String streFileId) throws Exception {
|
| 244 | 473 |
return mjonMsgSentDAO.selectFileInfo(streFileId); |
| 245 | 474 |
} |
| 475 |
+ |
|
| 476 |
+ @Override |
|
| 477 |
+ public List<MjonMsgDetailSentVO> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) {
|
|
| 478 |
+ |
|
| 479 |
+ List<MjonMsgDetailSentVO> list = mjonMsgSentDAO.findByMsgDetailListAjax(mjonMsgDetailSentVO); |
|
| 480 |
+ list.stream().forEach(t->{
|
|
| 481 |
+ t.setCallTo(StringUtil2.formatPhone(t.getCallTo())); |
|
| 482 |
+ }); |
|
| 483 |
+ |
|
| 484 |
+ return list; |
|
| 485 |
+ } |
|
| 486 |
+ |
|
| 487 |
+ public void msgSentExcelDownLoad(MjonMsgSentVO mjonMsgSentVO, HttpServletResponse response) throws Exception{
|
|
| 488 |
+ |
|
| 489 |
+ |
|
| 490 |
+ mjonMsgSentVO.setRecordCountPerPage(100000); |
|
| 491 |
+ mjonMsgSentVO.setFirstIndex(0); |
|
| 492 |
+ |
|
| 493 |
+ if(StringUtils.isEmpty(mjonMsgSentVO.getSearchSortOrd())) {
|
|
| 494 |
+ mjonMsgSentVO.setSearchSortOrd("desc");
|
|
| 495 |
+ mjonMsgSentVO.setSearchSortCnd("B.REQ_DATE");
|
|
| 496 |
+ } |
|
| 497 |
+ |
|
| 498 |
+ //예약 관리 리스트 불러오기 |
|
| 499 |
+ List<MjonMsgSentVO> resultAllSentList = mjonMsgSentDAO.selectAllMsgSentList_advc(mjonMsgSentVO); |
|
| 500 |
+ |
|
| 501 |
+// long startTime = System.nanoTime(); // 시작 시간 측정 |
|
| 502 |
+ resultAllSentList = makeDetailFunction(resultAllSentList); |
|
| 503 |
+// long endTime = System.nanoTime(); // 끝난 시간 측정 |
|
| 504 |
+// double executionTimeInSeconds = (endTime - startTime) / 1_000_000_000.0; |
|
| 505 |
+// System.out.println("Execution time: " + executionTimeInSeconds + " seconds");
|
|
| 506 |
+ |
|
| 507 |
+ SXSSFWorkbook workbook = null; // SXSSFWorkbook 변수 선언 |
|
| 508 |
+ try{
|
|
| 509 |
+ |
|
| 510 |
+ |
|
| 511 |
+ // Workbook 생성 |
|
| 512 |
+ workbook = new SXSSFWorkbook(); |
|
| 513 |
+ Sheet sheet = workbook.createSheet("발송 내역");
|
|
| 514 |
+ |
|
| 515 |
+ // 열 너비 설정 |
|
| 516 |
+ sheet.setColumnWidth(0, 3000); // 번호 열 |
|
| 517 |
+ sheet.setColumnWidth(1, 4000); // 발송일시 열 |
|
| 518 |
+ sheet.setColumnWidth(2, 5000); // 구분 열 |
|
| 519 |
+ sheet.setColumnWidth(3, 3000); // 형태 열 |
|
| 520 |
+ sheet.setColumnWidth(4, 10000); // 내용 열 |
|
| 521 |
+ sheet.setColumnWidth(5, 4000); // 발송건수 열 |
|
| 522 |
+ sheet.setColumnWidth(6, 3000); // 대기 열 |
|
| 523 |
+ sheet.setColumnWidth(7, 3000); // 성공 열 |
|
| 524 |
+ sheet.setColumnWidth(8, 3000); // 실패 열 |
|
| 525 |
+ sheet.setColumnWidth(9, 4000); // 금액 열 |
|
| 526 |
+ sheet.setColumnWidth(10, 5000); // 진행상황 열 |
|
| 527 |
+ |
|
| 528 |
+ // 헤더 스타일 설정 |
|
| 529 |
+ CellStyle headerStyle = workbook.createCellStyle(); |
|
| 530 |
+ headerStyle.setAlignment(HorizontalAlignment.CENTER); |
|
| 531 |
+ headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); |
|
| 532 |
+ headerStyle.setBorderTop(BorderStyle.THIN); |
|
| 533 |
+ headerStyle.setBorderBottom(BorderStyle.THIN); |
|
| 534 |
+ headerStyle.setBorderLeft(BorderStyle.THIN); |
|
| 535 |
+ headerStyle.setBorderRight(BorderStyle.THIN); |
|
| 536 |
+ headerStyle.setTopBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); |
|
| 537 |
+ headerStyle.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); |
|
| 538 |
+ headerStyle.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); |
|
| 539 |
+ headerStyle.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); |
|
| 540 |
+ |
|
| 541 |
+ Font font = workbook.createFont(); |
|
| 542 |
+ font.setBold(true); // 글씨체 굵게 |
|
| 543 |
+ font.setFontHeightInPoints((short) 12); // 글씨 크기 |
|
| 544 |
+ headerStyle.setFont(font); |
|
| 545 |
+ |
|
| 546 |
+ // 데이터 스타일 설정 (가운데 정렬) |
|
| 547 |
+ CellStyle centerStyle = workbook.createCellStyle(); |
|
| 548 |
+ centerStyle.setAlignment(HorizontalAlignment.CENTER); |
|
| 549 |
+ centerStyle.setVerticalAlignment(VerticalAlignment.CENTER); |
|
| 550 |
+ centerStyle.setBorderTop(BorderStyle.THIN); |
|
| 551 |
+ centerStyle.setBorderBottom(BorderStyle.THIN); |
|
| 552 |
+ centerStyle.setBorderLeft(BorderStyle.THIN); |
|
| 553 |
+ centerStyle.setBorderRight(BorderStyle.THIN); |
|
| 554 |
+ centerStyle.setTopBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); |
|
| 555 |
+ centerStyle.setBottomBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); |
|
| 556 |
+ centerStyle.setLeftBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); |
|
| 557 |
+ centerStyle.setRightBorderColor(IndexedColors.GREY_25_PERCENT.getIndex()); |
|
| 558 |
+ |
|
| 559 |
+ // 첫 번째 헤더 작성 (상단 병합) |
|
| 560 |
+ Row headerRow = sheet.createRow(0); |
|
| 561 |
+ |
|
| 562 |
+ // 번호 열 추가 |
|
| 563 |
+ Cell cell = headerRow.createCell(0); |
|
| 564 |
+ cell.setCellValue("번호");
|
|
| 565 |
+ cell.setCellStyle(headerStyle); |
|
| 566 |
+ sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0)); // 번호 병합 |
|
| 567 |
+ |
|
| 568 |
+ // 구분 열 추가 |
|
| 569 |
+ cell = headerRow.createCell(1); |
|
| 570 |
+ cell.setCellValue("발송일시");
|
|
| 571 |
+ cell.setCellStyle(headerStyle); |
|
| 572 |
+ sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1)); // 구분 병합 |
|
| 573 |
+ |
|
| 574 |
+ cell = headerRow.createCell(2); |
|
| 575 |
+ cell.setCellValue("구분");
|
|
| 576 |
+ cell.setCellStyle(headerStyle); |
|
| 577 |
+ sheet.addMergedRegion(new CellRangeAddress(0, 1, 2, 2)); // 발송일시 병합 |
|
| 578 |
+ |
|
| 579 |
+ cell = headerRow.createCell(3); |
|
| 580 |
+ cell.setCellValue("형태");
|
|
| 581 |
+ cell.setCellStyle(headerStyle); |
|
| 582 |
+ sheet.addMergedRegion(new CellRangeAddress(0, 1, 3, 3)); // 형태 병합 |
|
| 583 |
+ |
|
| 584 |
+ cell = headerRow.createCell(4); |
|
| 585 |
+ cell.setCellValue("내용");
|
|
| 586 |
+ cell.setCellStyle(headerStyle); |
|
| 587 |
+ sheet.addMergedRegion(new CellRangeAddress(0, 1, 4, 4)); // 내용 병합 |
|
| 588 |
+ |
|
| 589 |
+ cell = headerRow.createCell(5); |
|
| 590 |
+ cell.setCellValue("발송건수");
|
|
| 591 |
+ cell.setCellStyle(headerStyle); |
|
| 592 |
+ sheet.addMergedRegion(new CellRangeAddress(0, 1, 5, 5)); // 발송건수 병합 |
|
| 593 |
+ |
|
| 594 |
+ cell = headerRow.createCell(6); |
|
| 595 |
+ cell.setCellValue("결과");
|
|
| 596 |
+ cell.setCellStyle(headerStyle); |
|
| 597 |
+ sheet.addMergedRegion(new CellRangeAddress(0, 0, 6, 8)); // 결과 병합 |
|
| 598 |
+ |
|
| 599 |
+ cell = headerRow.createCell(9); |
|
| 600 |
+ cell.setCellValue("금액(원)");
|
|
| 601 |
+ cell.setCellStyle(headerStyle); |
|
| 602 |
+ sheet.addMergedRegion(new CellRangeAddress(0, 1, 9, 9)); // 금액(원) 병합 |
|
| 603 |
+ |
|
| 604 |
+ cell = headerRow.createCell(10); |
|
| 605 |
+ cell.setCellValue("진행상황");
|
|
| 606 |
+ cell.setCellStyle(headerStyle); |
|
| 607 |
+ sheet.addMergedRegion(new CellRangeAddress(0, 1, 10, 10)); // 진행상황 병합 |
|
| 608 |
+ |
|
| 609 |
+ // 두 번째 헤더 작성 (결과 하위 열) |
|
| 610 |
+ Row subHeaderRow = sheet.createRow(1); |
|
| 611 |
+ |
|
| 612 |
+ String[] subHeaders = {"대기", "성공", "실패"};
|
|
| 613 |
+ for (int i = 0; i < subHeaders.length; i++) {
|
|
| 614 |
+ cell = subHeaderRow.createCell(6 + i); // 결과 열 시작점(6번 열)부터 순차적으로 설정 |
|
| 615 |
+ cell.setCellValue(subHeaders[i]); |
|
| 616 |
+ cell.setCellStyle(headerStyle); |
|
| 617 |
+ } |
|
| 618 |
+ |
|
| 619 |
+ // 샘플 데이터 추가 |
|
| 620 |
+ // Object[][] data = {
|
|
| 621 |
+ // {1, "2025-01-23 12:00", "web", "SMS", "테스트 메시지입니다.", 139, 1, 0, 12, "-", "진행중"}
|
|
| 622 |
+ // }; |
|
| 623 |
+ |
|
| 624 |
+ |
|
| 625 |
+ |
|
| 626 |
+ |
|
| 627 |
+ // Object[][]로 변환 |
|
| 628 |
+ Object[][] data = new Object[resultAllSentList.size()][11]; // 11은 필드 수 |
|
| 629 |
+ |
|
| 630 |
+ for (int i = 0; i < resultAllSentList.size(); i++) {
|
|
| 631 |
+ MjonMsgSentVO vo = resultAllSentList.get(i); |
|
| 632 |
+ data[i][0] = i+1; |
|
| 633 |
+ data[i][1] = vo.getReqDate(); |
|
| 634 |
+// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
| 635 |
+// data[i][1] = sdf.format(vo.getReqDate()); |
|
| 636 |
+ |
|
| 637 |
+ |
|
| 638 |
+// log.info("엑셀에 넣을 데이터: [{}]", data[i][1]);
|
|
| 639 |
+ |
|
| 640 |
+ data[i][2] = "H".equals(vo.getSendKind()) ? "WEB" : "API"; |
|
| 641 |
+ |
|
| 642 |
+ String msgType="단문"; |
|
| 643 |
+ if ("6".equals(vo.getMsgType())) {
|
|
| 644 |
+ msgType = "0".equals(vo.getFileCnt()) ? "장문" : "그림"; |
|
| 645 |
+ } |
|
| 646 |
+ data[i][3] = msgType; |
|
| 647 |
+ |
|
| 648 |
+ String reserveTxt = ""; |
|
| 649 |
+ if("Y".equals(vo.getReserveYn())) {reserveTxt="[예약]";}
|
|
| 650 |
+ if("Y".equals(vo.getDivideYN())) {reserveTxt+="[분할]";}
|
|
| 651 |
+ |
|
| 652 |
+ data[i][4] = reserveTxt + (StringUtils.isEmpty(vo.getSmsTxt()) ? "-" : vo.getSmsTxt()); |
|
| 653 |
+ data[i][5] = vo.getMsgGroupCnt(); |
|
| 654 |
+ data[i][6] = vo.getResultWValue(); |
|
| 655 |
+ data[i][7] = vo.getResultSValue(); |
|
| 656 |
+ data[i][8] = vo.getResultFValue(); |
|
| 657 |
+ data[i][9] = vo.getTotPrice(); |
|
| 658 |
+ |
|
| 659 |
+ String statusTxt="진행중"; |
|
| 660 |
+ if ("Y".equals(vo.getReserveCYn())) {
|
|
| 661 |
+ statusTxt = "예약취소"; // 예약취소 코드 |
|
| 662 |
+ // } else if ("Y".equals(vo.getReserveYn()) && vo.getMsgGroupCnt().equals(vo.getResultWValue())) {
|
|
| 663 |
+ // statusTxt = "예약대기"; // 예약대기 코드 ( 예약취소 버튼 노출 ) |
|
| 664 |
+ } else if (vo.getMsgGroupCnt().equals(vo.getResultSValue()) || vo.getMsgGroupCnt().equals(vo.getResultFValue())) {
|
|
| 665 |
+ statusTxt = "완료"; // 완료 코드 |
|
| 666 |
+ } |
|
| 667 |
+ |
|
| 668 |
+ |
|
| 669 |
+ |
|
| 670 |
+ |
|
| 671 |
+ data[i][10] = statusTxt; |
|
| 672 |
+ } |
|
| 673 |
+ |
|
| 674 |
+ |
|
| 675 |
+ |
|
| 676 |
+ |
|
| 677 |
+ int rowNum = 2; // 데이터 시작 행 |
|
| 678 |
+ for (Object[] rowData : data) {
|
|
| 679 |
+ Row row = sheet.createRow(rowNum++); |
|
| 680 |
+ for (int col = 0; col < rowData.length; col++) {
|
|
| 681 |
+ cell = row.createCell(col); |
|
| 682 |
+ |
|
| 683 |
+ // "내용" 열만 제외하고 가운데 정렬 |
|
| 684 |
+ if (col == 4) { // 내용 열
|
|
| 685 |
+ cell.setCellValue((String) rowData[col]); |
|
| 686 |
+ } else if (rowData[col] instanceof String) {
|
|
| 687 |
+ cell.setCellValue((String) rowData[col]); |
|
| 688 |
+ cell.setCellStyle(centerStyle); |
|
| 689 |
+ } else if (rowData[col] instanceof Integer) {
|
|
| 690 |
+ cell.setCellValue((Integer) rowData[col]); |
|
| 691 |
+ cell.setCellStyle(centerStyle); |
|
| 692 |
+ } |
|
| 693 |
+ } |
|
| 694 |
+ } |
|
| 695 |
+ |
|
| 696 |
+ // 파일 다운로드 응답 설정 |
|
| 697 |
+ String fileName ="발송결과_리스트"; // 저장 파일명 |
|
| 698 |
+ SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA ); |
|
| 699 |
+ Date currentTime = new Date (); |
|
| 700 |
+ String mTime = mSimpleDateFormat.format ( currentTime ); |
|
| 701 |
+ fileName = fileName+"("+mTime+")";
|
|
| 702 |
+ |
|
| 703 |
+ response.setHeader("Set-Cookie", "fileDownload=true; path=/");
|
|
| 704 |
+ response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx"));
|
|
| 705 |
+ response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
|
| 706 |
+ |
|
| 707 |
+ // 파일 출력 |
|
| 708 |
+ workbook.write(response.getOutputStream()); |
|
| 709 |
+ workbook.close(); |
|
| 710 |
+ |
|
| 711 |
+ } catch (Exception e) {
|
|
| 712 |
+ // 에러 처리 로직 |
|
| 713 |
+ response.setHeader("Set-Cookie", "fileDownload=false; path=/");
|
|
| 714 |
+ response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
|
| 715 |
+ response.setHeader("Content-Type", "text/html; charset=utf-8");
|
|
| 716 |
+ |
|
| 717 |
+ try (OutputStream out = response.getOutputStream()) {
|
|
| 718 |
+ byte[] data = "fail..".getBytes(); |
|
| 719 |
+ out.write(data, 0, data.length); |
|
| 720 |
+ } catch (Exception ignore) {
|
|
| 721 |
+ ignore.printStackTrace(); |
|
| 722 |
+ } |
|
| 723 |
+ } finally {
|
|
| 724 |
+ if (workbook != null) {
|
|
| 725 |
+ try {
|
|
| 726 |
+ workbook.dispose(); // SXSSFWorkbook 임시 파일 제거 |
|
| 727 |
+ workbook.close(); |
|
| 728 |
+ } catch (Exception ignore) {
|
|
| 729 |
+ ignore.printStackTrace(); |
|
| 730 |
+ } |
|
| 731 |
+ } |
|
| 732 |
+ } |
|
| 733 |
+ |
|
| 734 |
+ } |
|
| 735 |
+ |
|
| 736 |
+ |
|
| 737 |
+ /** |
|
| 738 |
+ * @methodName : makeDetailFunction |
|
| 739 |
+ * @author : 이호영 |
|
| 740 |
+ * @date : 2025.02.04 |
|
| 741 |
+ * @description : 발송결과 성공건수, 실패건수, 대기건수, 분할발송여부, 총 발송금액 구하기 |
|
| 742 |
+ * @param resultList |
|
| 743 |
+ * @return |
|
| 744 |
+ */ |
|
| 745 |
+ private List<MjonMsgSentVO> makeDetailFunction(List<MjonMsgSentVO> resultList) {
|
|
| 746 |
+ resultList.stream().forEach(t->{
|
|
| 747 |
+ MjonMsgSentVO updatedVO = getDetailFunction(t.getMsgGroupId(), t.getEachPrice()); |
|
| 748 |
+ |
|
| 749 |
+ t.setResultSValue(updatedVO.getResultSValue()); |
|
| 750 |
+ t.setResultFValue(updatedVO.getResultFValue()); |
|
| 751 |
+ t.setResultWValue(updatedVO.getResultWValue()); |
|
| 752 |
+ t.setDivideYN(updatedVO.getDivideYN()); |
|
| 753 |
+ t.setTotPrice(updatedVO.getTotPrice()); |
|
| 754 |
+ }); |
|
| 755 |
+ return resultList; |
|
| 756 |
+ } |
|
| 757 |
+ |
|
| 758 |
+ |
|
| 759 |
+ private MjonMsgSentVO getDetailFunction(String p_msgGroupId, String p_eachPrice) {
|
|
| 760 |
+ |
|
| 761 |
+ |
|
| 762 |
+ MjonMsgSentVO returnVO = new MjonMsgSentVO(); |
|
| 763 |
+ |
|
| 764 |
+ MjonMsgSWFDTO mjonMsgSWFDTO = mjonMsgSentDAO.findBySWF(p_msgGroupId); |
|
| 765 |
+ returnVO.setResultSValue(String.valueOf(mjonMsgSWFDTO.getResultSValue())); // 성공건수 |
|
| 766 |
+ returnVO.setResultFValue(String.valueOf(mjonMsgSWFDTO.getResultFValue())); // 실패건수 |
|
| 767 |
+ returnVO.setResultWValue(String.valueOf(mjonMsgSWFDTO.getResultWValue())); // 대기건수 |
|
| 768 |
+ returnVO.setDivideYN(mjonMsgSWFDTO.getDivideYN()); |
|
| 769 |
+ |
|
| 770 |
+ |
|
| 771 |
+ // TotPrice : 성공건수에 대한 금액 곱하기 |
|
| 772 |
+ BigDecimal eachPrice = new BigDecimal(p_eachPrice); |
|
| 773 |
+ BigDecimal resultSValue = new BigDecimal(mjonMsgSWFDTO.getResultSValue()); |
|
| 774 |
+ BigDecimal totalPrice = eachPrice.multiply(resultSValue); |
|
| 775 |
+ // 소수점 한 자리로 설정 (반올림)// totalPrice 값을 소수점 한 자리까지 반올림하여 roundedTotalPrice에 저장 |
|
| 776 |
+ // RoundingMode.HALF_UP: 반올림 방식으로, 소수점 기준 5 이상이면 올림, 그렇지 않으면 내림 |
|
| 777 |
+ BigDecimal roundedTotalPrice = totalPrice.setScale(1, RoundingMode.HALF_UP); |
|
| 778 |
+ |
|
| 779 |
+ // roundedTotalPrice가 0인지 확인 |
|
| 780 |
+ // BigDecimal.compareTo(BigDecimal.ZERO)는 값을 비교하는 메서드 |
|
| 781 |
+ // 결과: |
|
| 782 |
+ // - 반환 값이 0이면 두 값이 같음 |
|
| 783 |
+ // - 반환 값이 음수이면 roundedTotalPrice가 0보다 작음 |
|
| 784 |
+ // - 반환 값이 양수이면 roundedTotalPrice가 0보다 큼 |
|
| 785 |
+ if (roundedTotalPrice.compareTo(BigDecimal.ZERO) == 0) {
|
|
| 786 |
+ // roundedTotalPrice 값이 0이면, "-" 문자열을 totPrice에 설정 |
|
| 787 |
+ returnVO.setTotPrice("-");
|
|
| 788 |
+ } else {
|
|
| 789 |
+ // roundedTotalPrice 값이 0이 아닌 경우 |
|
| 790 |
+ // 반올림된 BigDecimal 값을 toPlainString()을 사용하여 문자열로 변환 후 totPrice에 설정 |
|
| 791 |
+ // toPlainString(): 지수 표기법 없이 일반적인 문자열 형태로 반환 |
|
| 792 |
+ returnVO.setTotPrice(roundedTotalPrice.toPlainString()); |
|
| 793 |
+ } |
|
| 794 |
+// log.info(" + returnVO.getTotPrice() :: [{}]", returnVO.getTotPrice());
|
|
| 795 |
+ return returnVO; |
|
| 796 |
+ |
|
| 797 |
+ |
|
| 798 |
+ } |
|
| 799 |
+ |
|
| 800 |
+ |
|
| 801 |
+ |
|
| 802 |
+ private Map<String, String> calculatePercentages(MjonMsgDetailSentVO result) {
|
|
| 803 |
+ int total = Integer.parseInt(result.getMsgGroupCnt()); // 전체 건수 |
|
| 804 |
+ int success = Integer.parseInt(result.getResultSValue()); // 성공 건수 |
|
| 805 |
+ int waiting = Integer.parseInt(result.getResultWValue()); // 대기 건수 |
|
| 806 |
+ int failed = Integer.parseInt(result.getResultFValue()); // 실패 건수 |
|
| 807 |
+ |
|
| 808 |
+ // 퍼센트 계산 (0으로 나누는 경우 대비) |
|
| 809 |
+ String successPct = total > 0 ? String.format("%.1f%%", (success / (double) total) * 100) : "0.0%";
|
|
| 810 |
+ String waitingPct = total > 0 ? String.format("%.1f%%", (waiting / (double) total) * 100) : "0.0%";
|
|
| 811 |
+ String failedPct = total > 0 ? String.format("%.1f%%", (failed / (double) total) * 100) : "0.0%";
|
|
| 812 |
+ |
|
| 813 |
+ // 결과 맵에 저장 |
|
| 814 |
+ Map<String, String> percentages = new HashMap<>(); |
|
| 815 |
+ percentages.put("successPct", successPct);
|
|
| 816 |
+ percentages.put("waitingPct", waitingPct);
|
|
| 817 |
+ percentages.put("failedPct", failedPct);
|
|
| 818 |
+ |
|
| 819 |
+ return percentages; |
|
| 820 |
+ |
|
| 821 |
+ } |
|
| 822 |
+ |
|
| 823 |
+ // 공통코드 ITN057에 대한 코드화 진행 |
|
| 824 |
+ /* |
|
| 825 |
+ * CODE_ID CODE CODE_NM CODE_DC |
|
| 826 |
+ * ITN057 01 진행중 진행중 |
|
| 827 |
+ * ITN057 02 완료 완료출해야함 |
|
| 828 |
+ * ITN057 03 예약대기 예약대기(발송전) 버튼으로 노출해야함 |
|
| 829 |
+ * ITN057 04 - 예약취소 ( - 으로 노출 ) |
|
| 830 |
+ * */ |
|
| 831 |
+ private String getStatusCode(MjonMsgSentVO result) {
|
|
| 832 |
+ |
|
| 833 |
+ String returnCode; |
|
| 834 |
+ |
|
| 835 |
+ if ("Y".equals(result.getReserveCYn())) {
|
|
| 836 |
+ returnCode = "04"; // 예약취소 코드 |
|
| 837 |
+ } else if ( |
|
| 838 |
+ "Y".equals(result.getReserveYn()) |
|
| 839 |
+ && "N".equals(result.getReserveCYn()) |
|
| 840 |
+ && result.getMsgGroupCnt().equals(result.getResultWValue()) |
|
| 841 |
+ && result.getDiffMin() < -5 // 예약 시간이 5분 이상인 것들만 |
|
| 842 |
+ ) {
|
|
| 843 |
+ returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 ) |
|
| 844 |
+ } else if (result.getMsgGroupCnt().equals(result.getResultSValue()) |
|
| 845 |
+ || result.getMsgGroupCnt().equals(result.getResultFValue())) {
|
|
| 846 |
+ returnCode = "02"; // 완료 코드 |
|
| 847 |
+ } else {
|
|
| 848 |
+ returnCode = "01"; // 진행중 코드 |
|
| 849 |
+ } |
|
| 850 |
+ |
|
| 851 |
+ |
|
| 852 |
+ return returnCode; |
|
| 853 |
+ |
|
| 854 |
+ } |
|
| 246 | 855 |
} |
--- src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java
+++ src/main/java/itn/let/mjo/msgsent/web/MjonMsgSentController.java
... | ... | @@ -5,14 +5,17 @@ |
| 5 | 5 |
import java.util.ArrayList; |
| 6 | 6 |
import java.util.Calendar; |
| 7 | 7 |
import java.util.Date; |
| 8 |
+import java.util.HashMap; |
|
| 8 | 9 |
import java.util.List; |
| 9 | 10 |
import java.util.Locale; |
| 11 |
+import java.util.Map; |
|
| 10 | 12 |
import java.util.stream.Collectors; |
| 11 | 13 |
|
| 12 | 14 |
import javax.annotation.Resource; |
| 13 | 15 |
import javax.servlet.http.HttpServletRequest; |
| 14 | 16 |
import javax.servlet.http.HttpServletResponse; |
| 15 | 17 |
|
| 18 |
+import org.apache.commons.lang3.StringUtils; |
|
| 16 | 19 |
import org.apache.poi.ss.usermodel.Cell; |
| 17 | 20 |
import org.apache.poi.ss.usermodel.CellStyle; |
| 18 | 21 |
import org.apache.poi.ss.usermodel.Font; |
... | ... | @@ -22,6 +25,8 @@ |
| 22 | 25 |
import org.apache.poi.xssf.streaming.SXSSFWorkbook; |
| 23 | 26 |
import org.slf4j.Logger; |
| 24 | 27 |
import org.slf4j.LoggerFactory; |
| 28 |
+import org.springframework.http.HttpStatus; |
|
| 29 |
+import org.springframework.http.ResponseEntity; |
|
| 25 | 30 |
import org.springframework.stereotype.Controller; |
| 26 | 31 |
import org.springframework.ui.ModelMap; |
| 27 | 32 |
import org.springframework.web.bind.annotation.ModelAttribute; |
... | ... | @@ -38,16 +43,20 @@ |
| 38 | 43 |
import itn.com.cmm.util.DateUtils; |
| 39 | 44 |
import itn.com.utl.fcc.service.EgovStringUtil; |
| 40 | 45 |
import itn.let.kakao.user.sent.service.KakaoSentService; |
| 46 |
+import itn.let.mail.service.StatusResponse; |
|
| 41 | 47 |
import itn.let.mjo.addr.service.AddrGroupService; |
| 42 | 48 |
import itn.let.mjo.addr.service.AddrGroupVO; |
| 43 | 49 |
import itn.let.mjo.addr.service.AddrService; |
| 44 | 50 |
import itn.let.mjo.addr.service.AddrVO; |
| 45 | 51 |
import itn.let.mjo.apikey.service.ApiKeyMngService; |
| 46 | 52 |
import itn.let.mjo.apikey.service.ApiKeyVO; |
| 53 |
+import itn.let.mjo.msgsent.service.MjonMsgDetailSentVO; |
|
| 47 | 54 |
import itn.let.mjo.msgsent.service.MjonMsgSentCntVO; |
| 48 | 55 |
import itn.let.mjo.msgsent.service.MjonMsgSentService; |
| 49 | 56 |
import itn.let.mjo.msgsent.service.MjonMsgSentVO; |
| 57 |
+import lombok.extern.slf4j.Slf4j; |
|
| 50 | 58 |
|
| 59 |
+@Slf4j |
|
| 51 | 60 |
@Controller |
| 52 | 61 |
public class MjonMsgSentController {
|
| 53 | 62 |
|
... | ... | @@ -99,115 +108,10 @@ |
| 99 | 108 |
return "redirect:/web/user/login/login.do"; |
| 100 | 109 |
} |
| 101 | 110 |
|
| 102 |
- mjonMsgSentVO.setUserId(userId); |
|
| 103 |
- |
|
| 104 |
- /* |
|
| 105 |
- //전체 발송 건수 통계 불러오기 |
|
| 106 |
- mjonMsgSentVO.setMsgType("");
|
|
| 107 |
- List<MjonMsgSentVO> totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); |
|
| 108 |
- model.addAttribute("totalMsgCnt", totalMsgCnt);
|
|
| 109 |
- |
|
| 110 |
- //단문 성공건, 실패건 불러오기 |
|
| 111 |
- mjonMsgSentVO.setMsgType("4");
|
|
| 112 |
- List<MjonMsgSentVO> smsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); |
|
| 113 |
- model.addAttribute("smsMsgCnt", smsMsgCnt);
|
|
| 114 |
- |
|
| 115 |
- //장문 성공건, 실패건 불러오기 |
|
| 116 |
- mjonMsgSentVO.setMsgType("6");
|
|
| 117 |
- mjonMsgSentVO.setFileCnt("0");
|
|
| 118 |
- List<MjonMsgSentVO> lmsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); |
|
| 119 |
- model.addAttribute("lmsMsgCnt", lmsMsgCnt);
|
|
| 120 |
- |
|
| 121 |
- //그림문자 성공건, 실패건 불러오기 |
|
| 122 |
- mjonMsgSentVO.setMsgType("6");
|
|
| 123 |
- mjonMsgSentVO.setFileCnt("1");
|
|
| 124 |
- List<MjonMsgSentVO> mmsMsgCnt = mjonMsgSentService.selectDetailMsgSentCnt(mjonMsgSentVO); |
|
| 125 |
- model.addAttribute("mmsMsgCnt", mmsMsgCnt);
|
|
| 126 |
- */ |
|
| 127 |
- |
|
| 128 |
- /* |
|
| 129 |
- //전체 발송 건수 통계 불러오기 |
|
| 130 |
- mjonMsgSentVO.setMsgType("");
|
|
| 131 |
- List<MjonMsgSentVO> totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCntMix(mjonMsgSentVO); |
|
| 132 |
- |
|
| 133 |
- System.out.println("start");
|
|
| 134 |
- |
|
| 135 |
- // H:홈페이지, A:API 로 sms, lms, mms 나누는 영역 |
|
| 136 |
- List<MjonMsgSentVO> H_totalMsgCnt = totalMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); |
|
| 137 |
- List<MjonMsgSentVO> H_smsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
|
| 138 |
- List<MjonMsgSentVO> H_lmsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
|
| 139 |
- List<MjonMsgSentVO> H_mmsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
|
| 140 |
- |
|
| 141 |
- System.out.println("start");
|
|
| 142 |
- |
|
| 143 |
- List<MjonMsgSentVO> A_totalMsgCnt = totalMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); |
|
| 144 |
- List<MjonMsgSentVO> A_smsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
|
| 145 |
- List<MjonMsgSentVO> A_lmsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
|
| 146 |
- List<MjonMsgSentVO> A_mmsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
|
| 147 |
- |
|
| 148 |
- System.out.println(" ::H_totalMsgCnt :: "+ H_totalMsgCnt.size());
|
|
| 149 |
- System.out.println(" ::A_totalMsgCnt :: "+ A_totalMsgCnt.size());
|
|
| 150 |
- |
|
| 151 |
- H_totalMsgCnt.forEach(t->{
|
|
| 152 |
- if (Integer.parseInt(t.getFilePath1())>0) {
|
|
| 153 |
- H_smsMsgCnt.add(t); |
|
| 154 |
- } else if (Integer.parseInt(t.getFilePath2())>0) {
|
|
| 155 |
- H_lmsMsgCnt.add(t); |
|
| 156 |
- } else if (Integer.parseInt(t.getFilePath3())>0) {
|
|
| 157 |
- H_mmsMsgCnt.add(t); |
|
| 158 |
- } |
|
| 159 |
- }); |
|
| 160 |
- |
|
| 161 |
- A_totalMsgCnt.forEach(t->{
|
|
| 162 |
- if (Integer.parseInt(t.getFilePath1())>0) {
|
|
| 163 |
- A_smsMsgCnt.add(t); |
|
| 164 |
- } else if (Integer.parseInt(t.getFilePath2())>0) {
|
|
| 165 |
- A_lmsMsgCnt.add(t); |
|
| 166 |
- } else if (Integer.parseInt(t.getFilePath3())>0) {
|
|
| 167 |
- A_mmsMsgCnt.add(t); |
|
| 168 |
- } |
|
| 169 |
- }); |
|
| 170 |
- |
|
| 171 |
- |
|
| 172 |
- |
|
| 173 |
- //* 홈페이지에서 보낸 데이터 LIST |
|
| 174 |
- //* SEND_KIND = "H" |
|
| 175 |
- |
|
| 176 |
- // 전체 영역 |
|
| 177 |
- model.addAttribute("H_allSentCntVO", this.getResultCntProc(H_totalMsgCnt));
|
|
| 178 |
- // 전체 단문(SMS) |
|
| 179 |
- model.addAttribute("H_smsSentCntVO", this.getResultCntProc(H_smsMsgCnt));
|
|
| 180 |
- // 전체 장문(LMS) |
|
| 181 |
- model.addAttribute("H_lmsSentCntVO", this.getResultCntProc(H_lmsMsgCnt));
|
|
| 182 |
- // 전체 장문(LMS) |
|
| 183 |
- model.addAttribute("H_mmsSentCntVO", this.getResultCntProc(H_mmsMsgCnt));
|
|
| 184 |
- |
|
| 185 |
- |
|
| 186 |
- |
|
| 187 |
- |
|
| 188 |
- |
|
| 189 |
- // * 홈페이지에서 보낸 데이터 LIST |
|
| 190 |
- //* SEND_KIND = "A" |
|
| 191 |
- |
|
| 192 |
- // 전체 영역 |
|
| 193 |
- model.addAttribute("A_allSentCntVO", this.getResultCntProc(A_totalMsgCnt));
|
|
| 194 |
- // 전체 단문(SMS) |
|
| 195 |
- model.addAttribute("A_smsSentCntVO", this.getResultCntProc(A_smsMsgCnt));
|
|
| 196 |
- // 전체 장문(LMS) |
|
| 197 |
- model.addAttribute("A_lmsSentCntVO", this.getResultCntProc(A_lmsMsgCnt));
|
|
| 198 |
- // 전체 장문(LMS) |
|
| 199 |
- model.addAttribute("A_mmsSentCntVO", this.getResultCntProc(A_mmsMsgCnt));
|
|
| 200 |
- */ |
|
| 201 |
- |
|
| 202 |
- |
|
| 203 |
- |
|
| 204 |
- /*<isEqual prepend="AND" property="searchCondition" compareValue="2"> |
|
| 205 |
- a.mber_nm LIKE CONCAT('%',#searchKeyword#,'%')
|
|
| 206 |
- </isEqual> |
|
| 207 |
- */ |
|
| 208 |
- ApiKeyVO apiKeyVO = new ApiKeyVO(); |
|
| 209 |
- apiKeyVO.setMberId(userId); |
|
| 210 |
- model.addAttribute("appMgmt", apiKeyMngService.selectMberApiKeyChk(apiKeyVO) > 0 ? true : false);
|
|
| 111 |
+// mjonMsgSentVO.setUserId(userId); |
|
| 112 |
+// ApiKeyVO apiKeyVO = new ApiKeyVO(); |
|
| 113 |
+// apiKeyVO.setMberId(userId); |
|
| 114 |
+// model.addAttribute("appMgmt", apiKeyMngService.selectMberApiKeyChk(apiKeyVO) > 0 ? true : false);
|
|
| 211 | 115 |
|
| 212 | 116 |
|
| 213 | 117 |
|
... | ... | @@ -231,37 +135,67 @@ |
| 231 | 135 |
|
| 232 | 136 |
} |
| 233 | 137 |
|
| 234 |
- String startDate = mjonMsgSentVO.getStartDate(); |
|
| 235 |
- String endDate = mjonMsgSentVO.getEndDate(); |
|
| 138 |
+// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
|
|
| 139 |
+// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
|
|
| 140 |
+// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
|
|
| 141 |
+// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
|
|
| 142 |
+// log.info(" + mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
|
|
| 143 |
+ String startDate = mjonMsgSentVO.getSearchStartDate(); |
|
| 144 |
+ String endDate = mjonMsgSentVO.getSearchEndDate(); |
|
| 236 | 145 |
|
| 237 |
- if(startDate == null && endDate == null ) {
|
|
| 146 |
+ if(StringUtils.isEmpty(startDate) |
|
| 147 |
+ && StringUtils.isEmpty(endDate)) |
|
| 148 |
+ {
|
|
| 238 | 149 |
|
| 239 |
- |
|
| 240 |
-// |
|
| 241 |
-// Calendar cal = Calendar.getInstance(); |
|
| 242 |
-// Date now = new Date(); |
|
| 243 |
-// |
|
| 244 |
-// SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
|
|
| 245 |
-// |
|
| 246 |
-// //종료일은 오늘날짜 |
|
| 247 |
-// cal.setTime(now); |
|
| 248 |
-// endDate = format.format(cal.getTime()); |
|
| 249 |
-// |
|
| 250 |
-// //시작일은 전날로 셋팅 |
|
| 251 |
-// cal.add(Calendar.DATE, -1); |
|
| 252 |
-// startDate = format.format(cal.getTime()); |
|
| 253 |
- |
|
| 254 |
- mjonMsgSentVO.setStartDate(DateUtils.getDateMonthsAgo(3)); |
|
| 255 |
- mjonMsgSentVO.setEndDate(DateUtils.getCurrentDate()); |
|
| 150 |
+ mjonMsgSentVO.setSearchStartDate(DateUtils.getDateMonthsAgo(3)); |
|
| 151 |
+ mjonMsgSentVO.setSearchEndDate(DateUtils.getCurrentDate()); |
|
| 256 | 152 |
|
| 257 | 153 |
} |
| 258 |
- |
|
| 154 |
+ |
|
| 155 |
+ log.info("pageIndex :: [{}]", mjonMsgSentVO.getPageIndex());
|
|
| 259 | 156 |
model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword());
|
| 260 | 157 |
model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
|
| 261 | 158 |
model.addAttribute("siteId", mjonMsgSentVO.getSiteId());
|
| 262 | 159 |
|
| 263 | 160 |
return "web/msgsent/MsgSentView"; |
| 264 | 161 |
} |
| 162 |
+ |
|
| 163 |
+ |
|
| 164 |
+ /** |
|
| 165 |
+ * 발송관리 화면 |
|
| 166 |
+ * @param searchVO |
|
| 167 |
+ * @param model/web/user/login/login.do |
|
| 168 |
+ * @return "/web/mjon/msgtxt/selectMsgTxtView.do" |
|
| 169 |
+ * @throws Exception |
|
| 170 |
+ */ |
|
| 171 |
+ @RequestMapping(value= {"/web/mjon/msgsent/msgSentDetailView.do"})
|
|
| 172 |
+ public String selectMsgSentDetailView(@ModelAttribute("searchVO") MjonMsgDetailSentVO mjonMsgDetailSentVO
|
|
| 173 |
+ , ModelMap model) throws Exception{
|
|
| 174 |
+ |
|
| 175 |
+ |
|
| 176 |
+ //로그인 권한정보 불러오기 |
|
| 177 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 178 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 179 |
+ if(loginVO == null) {
|
|
| 180 |
+ return "redirect:/web/user/login/login.do"; |
|
| 181 |
+ } |
|
| 182 |
+ |
|
| 183 |
+ Map<String, Object> resultMap = mjonMsgSentService.selectAllMsgSentDetailView(mjonMsgDetailSentVO); |
|
| 184 |
+ model.addAttribute("result", resultMap.get("result"));
|
|
| 185 |
+ |
|
| 186 |
+ return "web/msgsent/MsgSentDetailView"; |
|
| 187 |
+ } |
|
| 188 |
+ |
|
| 189 |
+ // 팩스 금일 발송통계 갱신 |
|
| 190 |
+ @RequestMapping(value= {"/web/mjon/msgsent/findByMsgDetailListAjax.do"})
|
|
| 191 |
+ public ResponseEntity<StatusResponse> findByMsgDetailListAjax(MjonMsgDetailSentVO mjonMsgDetailSentVO) throws Exception {
|
|
| 192 |
+ |
|
| 193 |
+ |
|
| 194 |
+ List<MjonMsgDetailSentVO> resultList = mjonMsgSentService.findByMsgDetailListAjax(mjonMsgDetailSentVO); |
|
| 195 |
+ |
|
| 196 |
+ |
|
| 197 |
+ return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, "", resultList)); |
|
| 198 |
+ } |
|
| 265 | 199 |
|
| 266 | 200 |
/** |
| 267 | 201 |
* 마이페이지 - 이용내역 - ajax |
... | ... | @@ -275,7 +209,6 @@ |
| 275 | 209 |
HttpServletRequest request, |
| 276 | 210 |
ModelMap model) throws Exception{
|
| 277 | 211 |
|
| 278 |
- System.out.println("MsgSentView_HA_allSentAjax");
|
|
| 279 | 212 |
|
| 280 | 213 |
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); |
| 281 | 214 |
String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
... | ... | @@ -283,29 +216,24 @@ |
| 283 | 216 |
|
| 284 | 217 |
mjonMsgSentVO.setUserId(userId); |
| 285 | 218 |
|
| 219 |
+ log.info("+ mjonMsgSentVO.getSearchStartDate() :: [{}]", mjonMsgSentVO.getSearchStartDate());
|
|
| 220 |
+ log.info("+ mjonMsgSentVO.getSearchEndDate() :: [{}]", mjonMsgSentVO.getSearchEndDate());
|
|
| 286 | 221 |
//전체 발송 건수 통계 불러오기 |
| 287 | 222 |
mjonMsgSentVO.setMsgType("");
|
| 223 |
+ long startTime = System.nanoTime(); // 시작 시간 측정 |
|
| 288 | 224 |
List<MjonMsgSentVO> totalMsgCnt = mjonMsgSentService.selectDetailMsgSentCntMix(mjonMsgSentVO); |
| 225 |
+ |
|
| 226 |
+ long endTime = System.nanoTime(); // 종료 시간 측정 |
|
| 227 |
+ double executionTimeInSeconds = (endTime - startTime) / 1_000_000_000.0; |
|
| 228 |
+ System.out.println("Execution time: " + executionTimeInSeconds + " seconds");
|
|
| 289 | 229 |
|
| 290 |
- System.out.println("start");
|
|
| 291 | 230 |
|
| 292 | 231 |
// H:홈페이지, A:API 로 sms, lms, mms 나누는 영역 |
| 293 |
- List<MjonMsgSentVO> H_totalMsgCnt = totalMsgCnt.stream().filter(t -> "H".equals(t.getSendKind())).collect(Collectors.toList()); |
|
| 294 | 232 |
List<MjonMsgSentVO> H_smsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
| 295 | 233 |
List<MjonMsgSentVO> H_lmsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
| 296 | 234 |
List<MjonMsgSentVO> H_mmsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
| 297 | 235 |
|
| 298 |
- System.out.println("start");
|
|
| 299 |
- |
|
| 300 |
- List<MjonMsgSentVO> A_totalMsgCnt = totalMsgCnt.stream().filter(t -> "A".equals(t.getSendKind())).collect(Collectors.toList()); |
|
| 301 |
- List<MjonMsgSentVO> A_smsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
|
| 302 |
- List<MjonMsgSentVO> A_lmsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
|
| 303 |
- List<MjonMsgSentVO> A_mmsMsgCnt = new ArrayList<MjonMsgSentVO>(); |
|
| 304 |
- |
|
| 305 |
- System.out.println(" ::H_totalMsgCnt :: "+ H_totalMsgCnt.size());
|
|
| 306 |
- System.out.println(" ::A_totalMsgCnt :: "+ A_totalMsgCnt.size());
|
|
| 307 |
- |
|
| 308 |
- H_totalMsgCnt.forEach(t->{
|
|
| 236 |
+ totalMsgCnt.forEach(t->{
|
|
| 309 | 237 |
if (Integer.parseInt(t.getFilePath1())>0) {
|
| 310 | 238 |
H_smsMsgCnt.add(t); |
| 311 | 239 |
} else if (Integer.parseInt(t.getFilePath2())>0) {
|
... | ... | @@ -315,59 +243,23 @@ |
| 315 | 243 |
} |
| 316 | 244 |
}); |
| 317 | 245 |
|
| 318 |
- A_totalMsgCnt.forEach(t->{
|
|
| 319 |
- if (Integer.parseInt(t.getFilePath1())>0) {
|
|
| 320 |
- A_smsMsgCnt.add(t); |
|
| 321 |
- } else if (Integer.parseInt(t.getFilePath2())>0) {
|
|
| 322 |
- A_lmsMsgCnt.add(t); |
|
| 323 |
- } else if (Integer.parseInt(t.getFilePath3())>0) {
|
|
| 324 |
- A_mmsMsgCnt.add(t); |
|
| 325 |
- } |
|
| 326 |
- }); |
|
| 327 |
- |
|
| 328 |
- |
|
| 329 |
- |
|
| 330 | 246 |
//* 홈페이지에서 보낸 데이터 LIST |
| 331 | 247 |
//* SEND_KIND = "H" |
| 332 | 248 |
|
| 333 | 249 |
// 전체 영역 |
| 334 |
- model.addAttribute("H_allSentCntVO", this.getResultCntProc(H_totalMsgCnt));
|
|
| 250 |
+ log.info("all");
|
|
| 251 |
+ model.addAttribute("H_allSentCntVO", this.getResultCntProc(totalMsgCnt));
|
|
| 335 | 252 |
// 전체 단문(SMS) |
| 253 |
+ log.info("sms");
|
|
| 336 | 254 |
model.addAttribute("H_smsSentCntVO", this.getResultCntProc(H_smsMsgCnt));
|
| 337 | 255 |
// 전체 장문(LMS) |
| 256 |
+ log.info("lms");
|
|
| 338 | 257 |
model.addAttribute("H_lmsSentCntVO", this.getResultCntProc(H_lmsMsgCnt));
|
| 339 |
- // 전체 장문(LMS) |
|
| 258 |
+ // 전체 그림(MMS) |
|
| 259 |
+ log.info("mms");
|
|
| 340 | 260 |
model.addAttribute("H_mmsSentCntVO", this.getResultCntProc(H_mmsMsgCnt));
|
| 341 | 261 |
|
| 342 | 262 |
|
| 343 |
- |
|
| 344 |
- |
|
| 345 |
- |
|
| 346 |
- // * 홈페이지에서 보낸 데이터 LIST |
|
| 347 |
- //* SEND_KIND = "A" |
|
| 348 |
- |
|
| 349 |
- // 전체 영역 |
|
| 350 |
- model.addAttribute("A_allSentCntVO", this.getResultCntProc(A_totalMsgCnt));
|
|
| 351 |
- // 전체 단문(SMS) |
|
| 352 |
- model.addAttribute("A_smsSentCntVO", this.getResultCntProc(A_smsMsgCnt));
|
|
| 353 |
- // 전체 장문(LMS) |
|
| 354 |
- model.addAttribute("A_lmsSentCntVO", this.getResultCntProc(A_lmsMsgCnt));
|
|
| 355 |
- // 전체 장문(LMS) |
|
| 356 |
- model.addAttribute("A_mmsSentCntVO", this.getResultCntProc(A_mmsMsgCnt));
|
|
| 357 |
- |
|
| 358 |
- |
|
| 359 |
- |
|
| 360 |
- |
|
| 361 |
- /*<isEqual prepend="AND" property="searchCondition" compareValue="2"> |
|
| 362 |
- a.mber_nm LIKE CONCAT('%',#searchKeyword#,'%')
|
|
| 363 |
- </isEqual> |
|
| 364 |
- */ |
|
| 365 |
- ApiKeyVO apiKeyVO = new ApiKeyVO(); |
|
| 366 |
- apiKeyVO.setMberId(userId); |
|
| 367 |
- model.addAttribute("appMgmt", apiKeyMngService.selectMberApiKeyChk(apiKeyVO) > 0 ? true : false);
|
|
| 368 |
- |
|
| 369 |
- |
|
| 370 |
- System.out.println("MsgSentView_HA_allSentAjax_end");
|
|
| 371 | 263 |
|
| 372 | 264 |
return "/web/msgsent/subcontent/MsgSentView_HA_allSentAjax"; |
| 373 | 265 |
} |
... | ... | @@ -395,14 +287,17 @@ |
| 395 | 287 |
cntVO.setWaitCnt(msgCnt.stream() |
| 396 | 288 |
.filter(f->"W".equals(f.getMsgResultSts())) |
| 397 | 289 |
.mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); |
| 290 |
+ log.info(" :: cntVO.getWaitCnt() :: [{}]", cntVO.getWaitCnt());
|
|
| 398 | 291 |
// 전체 성공 갯수 |
| 399 | 292 |
cntVO.setSuccCnt(msgCnt.stream() |
| 400 | 293 |
.filter(f->"S".equals(f.getMsgResultSts())) |
| 401 | 294 |
.mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); |
| 295 |
+ log.info(" :: cntVO.getSuccCnt() :: [{}]", cntVO.getSuccCnt());
|
|
| 402 | 296 |
// 전체 실패 갯수 |
| 403 | 297 |
cntVO.setFailCnt(msgCnt.stream() |
| 404 | 298 |
.filter(f->"F".equals(f.getMsgResultSts())) |
| 405 | 299 |
.mapToInt(t -> Integer.parseInt(t.getMsgResultCnt())).sum()); |
| 300 |
+ log.info(" :: cntVO.getFailCnt() :: [{}]", cntVO.getFailCnt());
|
|
| 406 | 301 |
|
| 407 | 302 |
// 전체 갯수 구하기 |
| 408 | 303 |
cntVO.setTotCnt(cntVO.getWaitCnt() + cntVO.getSuccCnt() + cntVO.getFailCnt()); |
... | ... | @@ -421,89 +316,173 @@ |
| 421 | 316 |
@RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentListViewAjax.do"})
|
| 422 | 317 |
public String selectMsgSentListViewAjax(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{
|
| 423 | 318 |
|
| 319 |
+ String pageUrl = ""; |
|
| 320 |
+ try {
|
|
| 321 |
+ |
|
| 322 |
+ |
|
| 323 |
+ log.info(" ListView pageIndex :: [{}]", mjonMsgSentVO.getPageIndex());
|
|
| 324 |
+ log.info(" ListView pageUnit :: [{}]", mjonMsgSentVO.getPageUnit());
|
|
| 325 |
+ |
|
| 326 |
+ |
|
| 327 |
+ //로그인 권한정보 불러오기 |
|
| 328 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 329 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 330 |
+ |
|
| 331 |
+ mjonMsgSentVO.setUserId(userId); |
|
| 332 |
+ |
|
| 333 |
+ // 검색 리스트 불러오기 |
|
| 334 |
+// if(mjonMsgSentVO.getPageUnit() != 10) {
|
|
| 335 |
+// mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); |
|
| 336 |
+// } |
|
| 337 |
+ |
|
| 338 |
+ //기본 내림차순 정렬 |
|
| 339 |
+ if(StringUtils.isEmpty(mjonMsgSentVO.getSearchSortOrd())) {
|
|
| 340 |
+ |
|
| 341 |
+ mjonMsgSentVO.setSearchSortOrd("desc");
|
|
| 342 |
+ mjonMsgSentVO.setSearchSortCnd("B.REQ_DATE");
|
|
| 343 |
+ } |
|
| 344 |
+ |
|
| 345 |
+ |
|
| 346 |
+ //선택 탭 정보 저장 |
|
| 347 |
+ //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); |
|
| 348 |
+ |
|
| 349 |
+ /** pageing */ |
|
| 350 |
+ PaginationInfo paginationInfo = new PaginationInfo(); |
|
| 351 |
+ paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); |
|
| 352 |
+ paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); |
|
| 353 |
+ paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); |
|
| 354 |
+ |
|
| 355 |
+ mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); |
|
| 356 |
+ mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); |
|
| 357 |
+ mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); |
|
| 358 |
+ |
|
| 359 |
+ if(!DateUtils.dateChkAndValueChk(mjonMsgSentVO.getSearchStartDate(),mjonMsgSentVO.getSearchEndDate(), 3 )) {
|
|
| 360 |
+ mjonMsgSentVO.setSearchStartDate(DateUtils.getDateMonthsAgo(3)); |
|
| 361 |
+ mjonMsgSentVO.setSearchEndDate(DateUtils.getCurrentDate()); |
|
| 362 |
+ }; |
|
| 363 |
+ |
|
| 364 |
+ model.addAttribute("searchStartDate", mjonMsgSentVO.getSearchStartDate());
|
|
| 365 |
+ model.addAttribute("searchEndDate", mjonMsgSentVO.getSearchEndDate());
|
|
| 366 |
+ |
|
| 367 |
+ //전체 발송 리스트 불러오기 |
|
| 368 |
+ Map<String, Object> resultMap = mjonMsgSentService.selectAllMsgSentList_advc(mjonMsgSentVO); |
|
| 369 |
+ |
|
| 370 |
+ |
|
| 371 |
+ model.addAttribute("resultAllSentList", resultMap.get("resultList"));
|
|
| 372 |
+ |
|
| 373 |
+ |
|
| 374 |
+ paginationInfo.setTotalRecordCount((Integer)resultMap.get("totalCnt"));
|
|
| 375 |
+ model.addAttribute("paginationInfo", paginationInfo);
|
|
| 376 |
+ model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount());
|
|
| 377 |
+ |
|
| 378 |
+ model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
|
|
| 379 |
+ |
|
| 380 |
+ String stateType = mjonMsgSentVO.getStateType(); |
|
| 381 |
+ |
|
| 382 |
+ } catch (Exception e) {
|
|
| 383 |
+ e.printStackTrace(); |
|
| 384 |
+ // TODO: handle exception |
|
| 385 |
+ } |
|
| 386 |
+ |
|
| 387 |
+ return "web/msgsent/MsgSentAllListAjax"; |
|
| 388 |
+ } |
|
| 389 |
+ |
|
| 390 |
+ @RequestMapping(value= {"/web/mjon/msgsent/selectMsgSentListViewAjax_backup.do"})
|
|
| 391 |
+ public String selectMsgSentListViewAjax_backup(@ModelAttribute("searchVO") MjonMsgSentVO mjonMsgSentVO, ModelMap model) throws Exception{
|
|
| 392 |
+ |
|
| 393 |
+ |
|
| 394 |
+ |
|
| 395 |
+ |
|
| 424 | 396 |
//로그인 권한정보 불러오기 |
| 425 |
- LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 426 |
- String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 427 |
- |
|
| 428 |
- mjonMsgSentVO.setUserId(userId); |
|
| 429 |
- |
|
| 430 |
- // 검색 리스트 불러오기 |
|
| 397 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 398 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 399 |
+ |
|
| 400 |
+ mjonMsgSentVO.setUserId(userId); |
|
| 401 |
+ |
|
| 402 |
+ // 검색 리스트 불러오기 |
|
| 431 | 403 |
if(mjonMsgSentVO.getPageUnit() != 10) {
|
| 432 | 404 |
mjonMsgSentVO.setPageUnit(mjonMsgSentVO.getPageUnit()); |
| 433 | 405 |
} |
| 434 | 406 |
|
| 435 |
- //기본 내림차순 정렬 |
|
| 436 |
- if(mjonMsgSentVO.getSearchSortOrd().equals("")) {
|
|
| 437 |
- |
|
| 438 |
- mjonMsgSentVO.setSearchSortOrd("desc");
|
|
| 439 |
- mjonMsgSentVO.setSearchSortCnd("regdate");
|
|
| 440 |
- } |
|
| 441 |
- |
|
| 442 |
- if(mjonMsgSentVO.getListType().equals("")) {
|
|
| 443 |
- |
|
| 444 |
- mjonMsgSentVO.setListType("groupList");
|
|
| 445 |
- |
|
| 446 |
- } |
|
| 447 |
- |
|
| 448 |
- //선택 탭 정보 저장 |
|
| 449 |
- //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); |
|
| 450 |
- |
|
| 407 |
+ //기본 내림차순 정렬 |
|
| 408 |
+ if(mjonMsgSentVO.getSearchSortOrd().equals("")) {
|
|
| 409 |
+ |
|
| 410 |
+ mjonMsgSentVO.setSearchSortOrd("desc");
|
|
| 411 |
+ mjonMsgSentVO.setSearchSortCnd("regdate");
|
|
| 412 |
+ } |
|
| 413 |
+ |
|
| 414 |
+ if(mjonMsgSentVO.getListType().equals("")) {
|
|
| 415 |
+ |
|
| 416 |
+ mjonMsgSentVO.setListType("groupList");
|
|
| 417 |
+ |
|
| 418 |
+ } |
|
| 419 |
+ |
|
| 420 |
+ //선택 탭 정보 저장 |
|
| 421 |
+ //mjonResvMsgVO.setSearchMsgType(mjonResvMsgVO.getTabType()); |
|
| 422 |
+ |
|
| 451 | 423 |
/** pageing */ |
| 452 | 424 |
PaginationInfo paginationInfo = new PaginationInfo(); |
| 453 | 425 |
paginationInfo.setCurrentPageNo(mjonMsgSentVO.getPageIndex()); |
| 454 | 426 |
paginationInfo.setRecordCountPerPage(mjonMsgSentVO.getPageUnit()); |
| 455 | 427 |
paginationInfo.setPageSize(mjonMsgSentVO.getPageSize()); |
| 456 |
- |
|
| 428 |
+ |
|
| 457 | 429 |
mjonMsgSentVO.setFirstIndex(paginationInfo.getFirstRecordIndex()); |
| 458 | 430 |
mjonMsgSentVO.setLastIndex(paginationInfo.getLastRecordIndex()); |
| 459 | 431 |
mjonMsgSentVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage()); |
| 460 |
- |
|
| 432 |
+ |
|
| 461 | 433 |
|
| 462 | 434 |
|
| 463 | 435 |
if(!DateUtils.dateChkAndValueChk(mjonMsgSentVO.getStartDate(),mjonMsgSentVO.getEndDate(), 3 )) {
|
| 464 | 436 |
mjonMsgSentVO.setStartDate(DateUtils.getDateMonthsAgo(3)); |
| 465 | 437 |
mjonMsgSentVO.setEndDate(DateUtils.getCurrentDate()); |
| 466 | 438 |
}; |
| 467 |
- |
|
| 468 |
- model.addAttribute("startDate", mjonMsgSentVO.getStartDate());
|
|
| 469 |
- model.addAttribute("endDate", mjonMsgSentVO.getEndDate());
|
|
| 470 | 439 |
|
| 471 |
- //전체 발송 리스트 불러오기 |
|
| 472 |
- List<MjonMsgSentVO> resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); |
|
| 473 |
- model.addAttribute("resultAllSentList", resultAllSentList);
|
|
| 474 |
- model.addAttribute("resultAllSentCnt", resultAllSentList.size());
|
|
| 475 |
- |
|
| 476 |
- model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword());
|
|
| 477 |
- paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); |
|
| 478 |
- model.addAttribute("paginationInfo", paginationInfo);
|
|
| 479 |
- model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount());
|
|
| 480 |
- |
|
| 481 |
- //발송 결과 성공 실패 건수 리스트 불러오기 |
|
| 482 |
- List<MjonMsgSentVO> resultMsgSucFailList = new ArrayList<MjonMsgSentVO>(); |
|
| 483 |
- |
|
| 484 |
- if(resultAllSentList.size() > 0) {
|
|
| 485 |
- resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO); |
|
| 486 |
- } |
|
| 487 |
- model.addAttribute("resultMsgSucFailList", resultMsgSucFailList);
|
|
| 488 |
- |
|
| 489 |
- model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
|
|
| 490 |
- |
|
| 491 |
- String stateType = mjonMsgSentVO.getStateType(); |
|
| 492 |
- String pageUrl = "web/msgsent/MsgSentAllListAjax"; |
|
| 493 |
- |
|
| 494 |
- if(stateType.equals("ready")) {
|
|
| 495 |
- |
|
| 496 |
- pageUrl = "web/msgsent/MsgSentReadyListAjax"; |
|
| 497 |
- |
|
| 498 |
- }else if(stateType.equals("complete")) {
|
|
| 499 |
- |
|
| 500 |
- pageUrl = "web/msgsent/MsgSentCompleteListAjax"; |
|
| 501 |
- |
|
| 502 |
- }else if(stateType.equals("fail")) {
|
|
| 503 |
- |
|
| 504 |
- pageUrl = "web/msgsent/MsgSentFailListAjax"; |
|
| 505 |
- |
|
| 506 |
- } |
|
| 440 |
+ model.addAttribute("startDate", mjonMsgSentVO.getStartDate());
|
|
| 441 |
+ model.addAttribute("endDate", mjonMsgSentVO.getEndDate());
|
|
| 442 |
+ |
|
| 443 |
+ //전체 발송 리스트 불러오기 |
|
| 444 |
+ List<MjonMsgSentVO> resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); |
|
| 445 |
+ |
|
| 446 |
+ |
|
| 447 |
+ model.addAttribute("resultAllSentList", resultAllSentList);
|
|
| 448 |
+ model.addAttribute("resultAllSentCnt", resultAllSentList.size());
|
|
| 449 |
+ |
|
| 450 |
+ model.addAttribute("searchKeyword", mjonMsgSentVO.getSearchKeyword());
|
|
| 451 |
+ paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0); |
|
| 452 |
+ model.addAttribute("paginationInfo", paginationInfo);
|
|
| 453 |
+ model.addAttribute("totalRecordCount", paginationInfo.getTotalRecordCount());
|
|
| 454 |
+ |
|
| 455 |
+ //발송 결과 성공 실패 건수 리스트 불러오기 |
|
| 456 |
+ List<MjonMsgSentVO> resultMsgSucFailList = new ArrayList<MjonMsgSentVO>(); |
|
| 457 |
+ |
|
| 458 |
+ if(resultAllSentList.size() > 0) {
|
|
| 459 |
+ System.out.println("=====resultMsgSucFailList=====");
|
|
| 460 |
+ resultMsgSucFailList = mjonMsgSentService.selectAllMsgSentSucFailList(resultAllSentList, mjonMsgSentVO); |
|
| 461 |
+ System.out.println("//=====resultMsgSucFailList=====");
|
|
| 462 |
+ } |
|
| 463 |
+ model.addAttribute("resultMsgSucFailList", resultMsgSucFailList);
|
|
| 464 |
+ |
|
| 465 |
+ model.addAttribute("mjonMsgSentVO", mjonMsgSentVO);
|
|
| 466 |
+ |
|
| 467 |
+ String stateType = mjonMsgSentVO.getStateType(); |
|
| 468 |
+ // String pageUrl = "web/msgsent/MsgSentAllListAjax"; |
|
| 469 |
+ String pageUrl = "web/msgsent/MsgSentAllListAjax"; |
|
| 470 |
+ |
|
| 471 |
+ if(stateType.equals("ready")) {
|
|
| 472 |
+ |
|
| 473 |
+ pageUrl = "web/msgsent/MsgSentReadyListAjax"; |
|
| 474 |
+ |
|
| 475 |
+ }else if(stateType.equals("complete")) {
|
|
| 476 |
+ |
|
| 477 |
+ pageUrl = "web/msgsent/MsgSentCompleteListAjax"; |
|
| 478 |
+ |
|
| 479 |
+ }else if(stateType.equals("fail")) {
|
|
| 480 |
+ |
|
| 481 |
+ pageUrl = "web/msgsent/MsgSentFailListAjax"; |
|
| 482 |
+ |
|
| 483 |
+ } |
|
| 484 |
+ |
|
| 485 |
+ log.info(" :: pageUrl [{}]", pageUrl);
|
|
| 507 | 486 |
return pageUrl; |
| 508 | 487 |
} |
| 509 | 488 |
|
... | ... | @@ -621,6 +600,9 @@ |
| 621 | 600 |
|
| 622 | 601 |
return "web/msgsent/MsgSentDetailPopAjax"; |
| 623 | 602 |
} |
| 603 |
+ |
|
| 604 |
+ |
|
| 605 |
+ |
|
| 624 | 606 |
|
| 625 | 607 |
/** |
| 626 | 608 |
* 발송관리 문자 상세보기 내용 |
... | ... | @@ -1138,320 +1120,9 @@ |
| 1138 | 1120 |
|
| 1139 | 1121 |
} |
| 1140 | 1122 |
|
| 1141 |
- String stateType = mjonMsgSentVO.getStateType(); |
|
| 1142 |
- String tabType = mjonMsgSentVO.getTabType(); |
|
| 1143 | 1123 |
|
| 1144 |
- // 메모리에 100개의 행을 유지합니다. 행의 수가 넘으면 디스크에 적습니다. |
|
| 1145 |
- SXSSFWorkbook wb = new SXSSFWorkbook(100); |
|
| 1146 |
- String fileName ="발송관리 엑셀 리스트"; // 저장 파일명 |
|
| 1147 |
- String sheetTitle = "문자 발송 내역" ; // 셀 제목 |
|
| 1148 |
- Sheet sheet = wb.createSheet(sheetTitle); |
|
| 1149 |
- Cell cell = null; |
|
| 1150 |
- Row row = null; |
|
| 1151 |
- |
|
| 1152 |
- CellStyle style = wb.createCellStyle(); |
|
| 1153 |
- style.setBorderBottom(CellStyle.BORDER_THIN); //테두리 두껍게 |
|
| 1154 |
- style.setBorderLeft(CellStyle.BORDER_THIN); |
|
| 1155 |
- style.setBorderRight(CellStyle.BORDER_THIN); |
|
| 1156 |
- style.setBorderTop(CellStyle.BORDER_THIN); |
|
| 1157 |
- |
|
| 1158 |
- // 정렬 |
|
| 1159 |
- style.setAlignment(CellStyle.ALIGN_CENTER); //가운데 정렬 |
|
| 1160 |
- style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); //높이 가운데 정렬 |
|
| 1161 |
- |
|
| 1162 |
- Font font = wb.createFont(); |
|
| 1163 |
- font.setBoldweight(Font.BOLDWEIGHT_BOLD); //글씨 bold |
|
| 1164 |
- |
|
| 1165 |
- |
|
| 1166 |
- String type = ""; |
|
| 1167 |
- String fCnt = ""; |
|
| 1168 |
- |
|
| 1169 |
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
|
| 1170 |
- |
|
| 1171 |
- try{
|
|
| 1172 |
- |
|
| 1173 |
- |
|
| 1174 |
- mjonMsgSentVO.setRecordCountPerPage(100000); |
|
| 1175 |
- mjonMsgSentVO.setFirstIndex(0); |
|
| 1176 |
- |
|
| 1177 |
- if("".equals(mjonMsgSentVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
|
| 1178 |
- mjonMsgSentVO.setSearchSortCnd("regdate");
|
|
| 1179 |
- mjonMsgSentVO.setSearchSortOrd("desc");
|
|
| 1180 |
- } |
|
| 1181 |
- |
|
| 1182 |
- //예약 관리 리스트 불러오기 |
|
| 1183 |
- List<MjonMsgSentVO> resultAllSentList = mjonMsgSentService.selectAllMsgSentList(mjonMsgSentVO); |
|
| 1184 |
- |
|
| 1185 |
- {//화면 리스트
|
|
| 1186 |
- |
|
| 1187 |
- row = sheet.createRow(0); |
|
| 1188 |
- |
|
| 1189 |
- sheet.setColumnWidth(1, 5000); // 발송일시 칼럼의 폭 조절 |
|
| 1190 |
- sheet.setColumnWidth(3, 10000); // 내용 칼럼의 폭 조절 |
|
| 1191 |
- sheet.setColumnWidth(4, 5000); // 받는사람 이름 칼럼의 폭 조절 |
|
| 1192 |
- sheet.setColumnWidth(5, 5000); // 받는사람 연락처 칼럼의 폭 조절 |
|
| 1193 |
- sheet.setColumnWidth(6, 5000); // 발신번호 칼럼의 폭 조절 |
|
| 1194 |
- sheet.setColumnWidth(7, 5000); // 발송상태 칼럼의 폭 조절 |
|
| 1195 |
- sheet.setColumnWidth(8, 5000); // 발송건수 칼럼의 폭 조절 |
|
| 1196 |
- |
|
| 1197 |
- //셀병합 처리 |
|
| 1198 |
- sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); //번호 세로 셀병합 |
|
| 1199 |
- sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); //발송일시 세로 셀병합 |
|
| 1200 |
- sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); //형태 세로 셀병합 |
|
| 1201 |
- sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); //내용 세로 셀병합 |
|
| 1202 |
- sheet.addMergedRegion(new CellRangeAddress(0,1,4,4)); //받는사람 이름 셀병합 |
|
| 1203 |
- sheet.addMergedRegion(new CellRangeAddress(0,1,5,5)); //받는사람 연락처 셀병합 |
|
| 1204 |
- sheet.addMergedRegion(new CellRangeAddress(0,1,6,6)); //발신번호 세로 셀병합 |
|
| 1205 |
- sheet.addMergedRegion(new CellRangeAddress(0,1,7,7)); //발송상태 세로 셀병합 |
|
| 1206 |
- sheet.addMergedRegion(new CellRangeAddress(0,1,8,8)); //발송건수 세로 셀병합 |
|
| 1207 |
- |
|
| 1208 |
- |
|
| 1209 |
- cell = row.createCell(0); |
|
| 1210 |
- cell.setCellValue("번호");
|
|
| 1211 |
- cell.setCellStyle(style); |
|
| 1212 |
- |
|
| 1213 |
- cell = row.createCell(1); |
|
| 1214 |
- cell.setCellValue("발송일시");
|
|
| 1215 |
- cell.setCellStyle(style); |
|
| 1216 |
- |
|
| 1217 |
- cell = row.createCell(2); |
|
| 1218 |
- cell.setCellValue("형태");
|
|
| 1219 |
- cell.setCellStyle(style); |
|
| 1220 |
- |
|
| 1221 |
- cell = row.createCell(3); |
|
| 1222 |
- cell.setCellValue("내용");
|
|
| 1223 |
- cell.setCellStyle(style); |
|
| 1224 |
- |
|
| 1225 |
- cell = row.createCell(4); |
|
| 1226 |
- cell.setCellValue("수신자");
|
|
| 1227 |
- cell.setCellStyle(style); |
|
| 1228 |
- |
|
| 1229 |
- cell = row.createCell(5); |
|
| 1230 |
- cell.setCellValue("수신번호");
|
|
| 1231 |
- cell.setCellStyle(style); |
|
| 1232 |
- |
|
| 1233 |
- cell = row.createCell(6); |
|
| 1234 |
- cell.setCellValue("발신번호");
|
|
| 1235 |
- cell.setCellStyle(style); |
|
| 1236 |
- |
|
| 1237 |
- cell = row.createCell(7); |
|
| 1238 |
- cell.setCellValue("발송상태");
|
|
| 1239 |
- cell.setCellStyle(style); |
|
| 1240 |
- |
|
| 1241 |
- cell = row.createCell(8); |
|
| 1242 |
- cell.setCellValue("발송건수");
|
|
| 1243 |
- cell.setCellStyle(style); |
|
| 1244 |
- |
|
| 1245 |
- cell = row.createCell(9); |
|
| 1246 |
- cell.setCellValue("발송결과");
|
|
| 1247 |
- sheet.addMergedRegion(new CellRangeAddress(0,0,9,10)); // 발송결과 건수 가로 셀병합 |
|
| 1248 |
- cell.setCellStyle(style); |
|
| 1249 |
- |
|
| 1250 |
- cell = row.createCell(10); |
|
| 1251 |
- cell.setCellStyle(style); |
|
| 1252 |
- |
|
| 1253 |
- cell = row.createCell(11); |
|
| 1254 |
- cell.setCellValue("금액");
|
|
| 1255 |
- sheet.addMergedRegion(new CellRangeAddress(0,0,11,12)); // 발송결과 건수 가로 셀병합 |
|
| 1256 |
- cell.setCellStyle(style); |
|
| 1257 |
- |
|
| 1258 |
- cell = row.createCell(12); |
|
| 1259 |
- cell.setCellValue("예약취소");
|
|
| 1260 |
- cell.setCellStyle(style); |
|
| 1261 |
- |
|
| 1262 |
- row = sheet.createRow(1); |
|
| 1263 |
- |
|
| 1264 |
- cell = row.createCell(0); |
|
| 1265 |
- cell.setCellStyle(style); |
|
| 1266 |
- |
|
| 1267 |
- cell = row.createCell(1); |
|
| 1268 |
- cell.setCellStyle(style); |
|
| 1269 |
- |
|
| 1270 |
- cell = row.createCell(2); |
|
| 1271 |
- cell.setCellStyle(style); |
|
| 1272 |
- |
|
| 1273 |
- cell = row.createCell(3); |
|
| 1274 |
- cell.setCellStyle(style); |
|
| 1275 |
- |
|
| 1276 |
- cell = row.createCell(4); |
|
| 1277 |
- cell.setCellStyle(style); |
|
| 1278 |
- |
|
| 1279 |
- cell = row.createCell(5); |
|
| 1280 |
- cell.setCellStyle(style); |
|
| 1281 |
- |
|
| 1282 |
- cell = row.createCell(6); |
|
| 1283 |
- cell.setCellStyle(style); |
|
| 1284 |
- |
|
| 1285 |
- cell = row.createCell(7); |
|
| 1286 |
- cell.setCellStyle(style); |
|
| 1287 |
- |
|
| 1288 |
- cell = row.createCell(8); |
|
| 1289 |
- cell.setCellStyle(style); |
|
| 1290 |
- |
|
| 1291 |
- cell = row.createCell(9); |
|
| 1292 |
- cell.setCellValue("성공");
|
|
| 1293 |
- cell.setCellStyle(style); |
|
| 1294 |
- |
|
| 1295 |
- cell = row.createCell(10); |
|
| 1296 |
- cell.setCellValue("실패/대기");
|
|
| 1297 |
- cell.setCellStyle(style); |
|
| 1298 |
- |
|
| 1299 |
- cell = row.createCell(11); |
|
| 1300 |
- cell.setCellValue("과금");
|
|
| 1301 |
- cell.setCellStyle(style); |
|
| 1302 |
- |
|
| 1303 |
- cell = row.createCell(12); |
|
| 1304 |
- cell.setCellValue("비과금");
|
|
| 1305 |
- cell.setCellStyle(style); |
|
| 1306 |
- } |
|
| 1307 |
- |
|
| 1308 |
- for(int i=0; i < resultAllSentList.size(); i++) {
|
|
| 1309 |
- String msgType = "단문"; |
|
| 1310 |
- if(resultAllSentList.get(i).getMsgType().equals("6") && resultAllSentList.get(i).getFileCnt().equals("0")) {
|
|
| 1311 |
- msgType = "장문"; |
|
| 1312 |
- }else if(resultAllSentList.get(i).getMsgType().equals("6") && !resultAllSentList.get(i).getFileCnt().equals("0")) {
|
|
| 1313 |
- msgType = "그림"; |
|
| 1314 |
- } |
|
| 1315 |
- |
|
| 1316 |
- |
|
| 1317 |
- int excelLen = 0; |
|
| 1318 |
- row = sheet.createRow(i+2); |
|
| 1319 |
- excelLen = 12; |
|
| 1320 |
- |
|
| 1321 |
- for(int j=0 ; j <= excelLen ; j++) {
|
|
| 1322 |
- cell = row.createCell(j); |
|
| 1323 |
- cell.setCellStyle(style); |
|
| 1324 |
- |
|
| 1325 |
- if(j==0) cell.setCellValue(i+1); //번호 |
|
| 1326 |
- if(j==1) cell.setCellValue(sdf.format((resultAllSentList.get(i)).getReqdate())); //발송일자 |
|
| 1327 |
- if(j==2) {
|
|
| 1328 |
- |
|
| 1329 |
- type = resultAllSentList.get(i).getMsgType(); |
|
| 1330 |
- fCnt = resultAllSentList.get(i).getFileCnt(); |
|
| 1331 |
- |
|
| 1332 |
- if(type.equals("4")) {
|
|
| 1333 |
- |
|
| 1334 |
- cell.setCellValue("단문"); //형태
|
|
| 1335 |
- |
|
| 1336 |
- }else {
|
|
| 1337 |
- |
|
| 1338 |
- if(fCnt.equals("0")) {
|
|
| 1339 |
- |
|
| 1340 |
- cell.setCellValue("장문"); //형태
|
|
| 1341 |
- |
|
| 1342 |
- }else {
|
|
| 1343 |
- |
|
| 1344 |
- cell.setCellValue("그림"); //형태
|
|
| 1345 |
- |
|
| 1346 |
- } |
|
| 1347 |
- |
|
| 1348 |
- } |
|
| 1349 |
- |
|
| 1350 |
- } |
|
| 1351 |
- if(j==3) cell.setCellValue((resultAllSentList.get(i)).getSmsTxt()); //내용 |
|
| 1352 |
- if(j==4) cell.setCellValue((resultAllSentList.get(i)).getAddrNm()); |
|
| 1353 |
- if(j==5) cell.setCellValue((resultAllSentList.get(i)).getCallToComma()); |
|
| 1354 |
- if(j==6) cell.setCellValue((resultAllSentList.get(i)).getCallFromComma()); //발신번호 |
|
| 1355 |
- if(j==7) { //발송상태 처리해주기
|
|
| 1356 |
- |
|
| 1357 |
- String resvCYn = resultAllSentList.get(i).getReserveCYn(); |
|
| 1358 |
- String curState = resultAllSentList.get(i).getCurState(); |
|
| 1359 |
- |
|
| 1360 |
- if(resvCYn.equals("Y")) {
|
|
| 1361 |
- |
|
| 1362 |
- cell.setCellValue("예약 취소"); //발송상태
|
|
| 1363 |
- |
|
| 1364 |
- }else {
|
|
| 1365 |
- |
|
| 1366 |
- if(curState.equals("0")) {
|
|
| 1367 |
- |
|
| 1368 |
- cell.setCellValue("발송 대기"); //발송상태
|
|
| 1369 |
- |
|
| 1370 |
- }else if(curState.equals("1")) {
|
|
| 1371 |
- |
|
| 1372 |
- cell.setCellValue("발송중"); //발송상태
|
|
| 1373 |
- |
|
| 1374 |
- }else if(curState.equals("2")) {
|
|
| 1375 |
- |
|
| 1376 |
- cell.setCellValue("결과 대기"); //발송상태
|
|
| 1377 |
- |
|
| 1378 |
- }else if(curState.equals("3")) {
|
|
| 1379 |
- |
|
| 1380 |
- cell.setCellValue("발송 완료"); //발송상태
|
|
| 1381 |
- |
|
| 1382 |
- } |
|
| 1383 |
- } |
|
| 1384 |
- |
|
| 1385 |
- } |
|
| 1386 |
- if(j==8) cell.setCellValue((resultAllSentList.get(i)).getMsgGroupCnt()); //발송건수 |
|
| 1387 |
- |
|
| 1388 |
- //발송결과 성공, 실패 처리 |
|
| 1389 |
- int resSucCnt = 0; |
|
| 1390 |
- int resFailCnt = 0; |
|
| 1391 |
- double resSucPrice = 0; |
|
| 1392 |
- double resFailPirce = 0; |
|
| 1393 |
- |
|
| 1394 |
- |
|
| 1395 |
- double eachPrice = Float.parseFloat(resultAllSentList.get(i).getEachPrice()); |
|
| 1396 |
- int resultSValue = 0; |
|
| 1397 |
- int resultWFValue = 0; |
|
| 1398 |
- |
|
| 1399 |
- if(resultAllSentList.get(i).getResultSValue() != null) {
|
|
| 1400 |
- resultSValue = Integer.parseInt(resultAllSentList.get(i).getResultSValue()); |
|
| 1401 |
- }else {
|
|
| 1402 |
- resultSValue = 1; |
|
| 1403 |
- } |
|
| 1404 |
- |
|
| 1405 |
- if(resultAllSentList.get(i).getResultWFValue() != null) {
|
|
| 1406 |
- resultWFValue = Integer.parseInt(resultAllSentList.get(i).getResultWFValue()); |
|
| 1407 |
- }else {
|
|
| 1408 |
- resultWFValue = 1; |
|
| 1409 |
- } |
|
| 1410 |
- |
|
| 1411 |
- |
|
| 1412 |
- if("S".equals(resultAllSentList.get(i).getMsgResult())) {
|
|
| 1413 |
- resSucCnt = resultSValue; |
|
| 1414 |
- } else {
|
|
| 1415 |
- resFailCnt = resultWFValue; |
|
| 1416 |
- } |
|
| 1417 |
- |
|
| 1418 |
- resSucPrice = eachPrice * resSucCnt; |
|
| 1419 |
- resFailPirce = eachPrice * resFailCnt; |
|
| 1420 |
- |
|
| 1421 |
- |
|
| 1422 |
- if(j==9) cell.setCellValue(resSucCnt); //발송결과 성공 |
|
| 1423 |
- if(j==10) cell.setCellValue(resFailCnt); //발송결과 실패 |
|
| 1424 |
- if(j==11) cell.setCellValue(resSucPrice); // 과금 금액 |
|
| 1425 |
- if(j==12) cell.setCellValue(resFailPirce); //비과금 금액 |
|
| 1426 |
- } |
|
| 1427 |
- } |
|
| 1428 |
- response.setHeader("Set-Cookie", "fileDownload=true; path=/");
|
|
| 1429 |
- SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat ( "yyyyMMdd_HHmmss", Locale.KOREA ); |
|
| 1430 |
- Date currentTime = new Date (); |
|
| 1431 |
- String mTime = mSimpleDateFormat.format ( currentTime ); |
|
| 1432 |
- fileName = fileName+"("+mTime+")";
|
|
| 1433 |
- |
|
| 1434 |
- response.setHeader("Content-Disposition", String.format("attachment; filename=\""+new String((fileName).getBytes("KSC5601"),"8859_1")+".xlsx"));
|
|
| 1435 |
- wb.write(response.getOutputStream()); |
|
| 1436 |
- }catch(Exception e) {
|
|
| 1437 |
- response.setHeader("Set-Cookie", "fileDownload=false; path=/");
|
|
| 1438 |
- response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
|
|
| 1439 |
- response.setHeader("Content-Type","text/html; charset=utf-8");
|
|
| 1440 |
- OutputStream out = null; |
|
| 1441 |
- try {
|
|
| 1442 |
- out = response.getOutputStream(); |
|
| 1443 |
- byte[] data = new String("fail..").getBytes();
|
|
| 1444 |
- out.write(data, 0, data.length); |
|
| 1445 |
- } catch(Exception ignore) {
|
|
| 1446 |
- ignore.printStackTrace(); |
|
| 1447 |
- } finally {
|
|
| 1448 |
- if(out != null) try { out.close(); } catch(Exception ignore) {}
|
|
| 1449 |
- } |
|
| 1450 |
- }finally {
|
|
| 1451 |
- // 디스크 적었던 임시파일을 제거합니다. |
|
| 1452 |
- wb.dispose(); |
|
| 1453 |
- try { wb.close(); } catch(Exception ignore) {}
|
|
| 1454 |
- } |
|
| 1124 |
+ mjonMsgSentService.msgSentExcelDownLoad(mjonMsgSentVO, response); |
|
| 1125 |
+ |
|
| 1455 | 1126 |
|
| 1456 | 1127 |
|
| 1457 | 1128 |
} |
--- src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgServiceImpl.java
+++ src/main/java/itn/let/mjo/reservmsg/service/impl/MjonReservMsgServiceImpl.java
... | ... | @@ -341,6 +341,7 @@ |
| 341 | 341 |
} |
| 342 | 342 |
|
| 343 | 343 |
} catch (Exception e) {
|
| 344 |
+ e.printStackTrace(); |
|
| 344 | 345 |
System.out.println("++++++++++++++++++++++ 예약문자 취소 deleteReservMsgCancelDataAjax Service Imple Error !!! " + e);
|
| 345 | 346 |
} |
| 346 | 347 |
|
--- src/main/java/itn/let/mjo/reservmsg/web/MjonReservMsgController.java
+++ src/main/java/itn/let/mjo/reservmsg/web/MjonReservMsgController.java
... | ... | @@ -610,37 +610,43 @@ |
| 610 | 610 |
|
| 611 | 611 |
ModelAndView modelAndView = new ModelAndView(); |
| 612 | 612 |
modelAndView.setViewName("jsonView");
|
| 613 |
+ try {
|
|
| 613 | 614 |
|
| 614 |
- //로그인 권한정보 불러오기 |
|
| 615 |
- LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 616 |
- String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 617 |
- |
|
| 618 |
- if(!userId.equals("")) {
|
|
| 619 |
- |
|
| 620 |
- mjonResvMsgVO.setUserId(userId); |
|
| 621 |
- |
|
| 622 |
- }else {
|
|
| 623 |
- |
|
| 624 |
- modelAndView.addObject("message", "로그인 후 이용이 가능합니다.");
|
|
| 625 |
- modelAndView.addObject("result", "fail");
|
|
| 626 |
- |
|
| 627 |
- return modelAndView; |
|
| 628 |
- |
|
| 629 |
- } |
|
| 630 |
- |
|
| 631 |
- // 디비에 문자 내용을 저장해 준다. |
|
| 632 |
- int resultSts = mjonReservMsgService.deleteReservMsgCancelDataAjax(mjonResvMsgVO); |
|
| 633 |
- |
|
| 634 |
- if(resultSts > 0) {
|
|
| 615 |
+ //로그인 권한정보 불러오기 |
|
| 616 |
+ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; |
|
| 617 |
+ String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); |
|
| 618 |
+ |
|
| 619 |
+ if(!userId.equals("")) {
|
|
| 620 |
+ |
|
| 621 |
+ mjonResvMsgVO.setUserId(userId); |
|
| 622 |
+ |
|
| 623 |
+ }else {
|
|
| 624 |
+ |
|
| 625 |
+ modelAndView.addObject("message", "로그인 후 이용이 가능합니다.");
|
|
| 626 |
+ modelAndView.addObject("result", "fail");
|
|
| 627 |
+ |
|
| 628 |
+ return modelAndView; |
|
| 629 |
+ |
|
| 630 |
+ } |
|
| 631 |
+ |
|
| 632 |
+ // 디비에 문자 내용을 저장해 준다. |
|
| 633 |
+ int resultSts = mjonReservMsgService.deleteReservMsgCancelDataAjax(mjonResvMsgVO); |
|
| 635 | 634 |
|
| 636 |
- modelAndView.addObject("message", "예약 발송이 정상적으로 취소 되었습니다.");
|
|
| 637 |
- modelAndView.addObject("result", "success");
|
|
| 635 |
+ if(resultSts > 0) {
|
|
| 636 |
+ |
|
| 637 |
+ modelAndView.addObject("message", "예약 발송이 정상적으로 취소 되었습니다.");
|
|
| 638 |
+ modelAndView.addObject("result", "success");
|
|
| 639 |
+ |
|
| 640 |
+ }else {
|
|
| 641 |
+ |
|
| 642 |
+ modelAndView.addObject("message", "예약 발송 취소 처리가 실패 되었습니다. 잠시 후 다시 시도해 주세요.");
|
|
| 643 |
+ modelAndView.addObject("result", "fail");
|
|
| 644 |
+ |
|
| 645 |
+ } |
|
| 638 | 646 |
|
| 639 |
- }else {
|
|
| 640 |
- |
|
| 641 |
- modelAndView.addObject("message", "예약 발송 취소 처리가 실패 되었습니다. 잠시 후 다시 시도해 주세요.");
|
|
| 642 |
- modelAndView.addObject("result", "fail");
|
|
| 643 |
- |
|
| 647 |
+ } catch (Exception e) {
|
|
| 648 |
+ e.printStackTrace(); |
|
| 649 |
+ // TODO: handle exception |
|
| 644 | 650 |
} |
| 645 | 651 |
|
| 646 | 652 |
return modelAndView; |
--- src/main/java/itn/let/uss/umt/service/UserDefaultVO.java
+++ src/main/java/itn/let/uss/umt/service/UserDefaultVO.java
... | ... | @@ -4,6 +4,9 @@ |
| 4 | 4 |
|
| 5 | 5 |
import org.apache.commons.lang3.builder.ToStringBuilder; |
| 6 | 6 |
|
| 7 |
+import lombok.Getter; |
|
| 8 |
+import lombok.Setter; |
|
| 9 |
+ |
|
| 7 | 10 |
/** |
| 8 | 11 |
* 사용자정보 VO클래스로서일반회원, 기업회원, 업무사용자의 비지니스로직 처리시 기타조건성 항을 구성한다. |
| 9 | 12 |
* @author 공통서비스 개발팀 조재영 |
... | ... | @@ -21,6 +24,8 @@ |
| 21 | 24 |
* |
| 22 | 25 |
* </pre> |
| 23 | 26 |
*/ |
| 27 |
+@Getter |
|
| 28 |
+@Setter |
|
| 24 | 29 |
public class UserDefaultVO implements Serializable {
|
| 25 | 30 |
|
| 26 | 31 |
/** |
... | ... | @@ -34,9 +39,19 @@ |
| 34 | 39 |
/** 검색조건-성별 (0, M, F)*/ |
| 35 | 40 |
private String searchSexdstn = "0"; |
| 36 | 41 |
|
| 37 |
- /** 검색조건 */ |
|
| 42 |
+ /** |
|
| 43 |
+ * 검색조건 |
|
| 44 |
+ * 20250122 이호영 |
|
| 45 |
+ * 개선은 검색조건을 아래 세개만 사용하려고 함 |
|
| 46 |
+ * */ |
|
| 38 | 47 |
private String searchCondition ; |
| 48 |
+ private String searchCondition01 ; |
|
| 49 |
+ private String searchCondition02 ; |
|
| 39 | 50 |
|
| 51 |
+ |
|
| 52 |
+ |
|
| 53 |
+ /** 검색조건 - 기존 */ |
|
| 54 |
+// private String searchCondition ; |
|
| 40 | 55 |
private String searchCondition_01 ; |
| 41 | 56 |
|
| 42 | 57 |
private String searchConditionSite ; |
... | ... | @@ -173,45 +188,6 @@ |
| 173 | 188 |
|
| 174 | 189 |
private String searchDeleteType; |
| 175 | 190 |
|
| 176 |
- public String getSearchDeleteType() {
|
|
| 177 |
- return searchDeleteType; |
|
| 178 |
- } |
|
| 179 |
- |
|
| 180 |
- public void setSearchDeleteType(String searchDeleteType) {
|
|
| 181 |
- this.searchDeleteType = searchDeleteType; |
|
| 182 |
- } |
|
| 183 |
- |
|
| 184 |
- public String getSearchHotlineAgentCode() {
|
|
| 185 |
- return searchHotlineAgentCode; |
|
| 186 |
- } |
|
| 187 |
- |
|
| 188 |
- public void setSearchHotlineAgentCode(String searchHotlineAgentCode) {
|
|
| 189 |
- this.searchHotlineAgentCode = searchHotlineAgentCode; |
|
| 190 |
- } |
|
| 191 |
- |
|
| 192 |
- public String getSearchExceptSpamYn() {
|
|
| 193 |
- return searchExceptSpamYn; |
|
| 194 |
- } |
|
| 195 |
- |
|
| 196 |
- public void setSearchExceptSpamYn(String searchExceptSpamYn) {
|
|
| 197 |
- this.searchExceptSpamYn = searchExceptSpamYn; |
|
| 198 |
- } |
|
| 199 |
- |
|
| 200 |
- public String getSearchSmishingYn() {
|
|
| 201 |
- return searchSmishingYn; |
|
| 202 |
- } |
|
| 203 |
- |
|
| 204 |
- public void setSearchSmishingYn(String searchSmishingYn) {
|
|
| 205 |
- this.searchSmishingYn = searchSmishingYn; |
|
| 206 |
- } |
|
| 207 |
- |
|
| 208 |
- public String getSearchDeptPrePayment() {
|
|
| 209 |
- return searchDeptPrePayment; |
|
| 210 |
- } |
|
| 211 |
- |
|
| 212 |
- public void setSearchDeptPrePayment(String searchDeptPrePayment) {
|
|
| 213 |
- this.searchDeptPrePayment = searchDeptPrePayment; |
|
| 214 |
- } |
|
| 215 | 191 |
|
| 216 | 192 |
private String searchAdminSmsNoticeYn; |
| 217 | 193 |
|
... | ... | @@ -224,570 +200,5 @@ |
| 224 | 200 |
private String searchThrDptCategoryCode; //3뎁스(하위카테고리) 검색 |
| 225 | 201 |
|
| 226 | 202 |
|
| 227 |
- public String getEditMode() {
|
|
| 228 |
- return editMode; |
|
| 229 |
- } |
|
| 230 |
- |
|
| 231 |
- public void setEditMode(String editMode) {
|
|
| 232 |
- this.editMode = editMode; |
|
| 233 |
- } |
|
| 234 |
- |
|
| 235 |
- public String getSearchSmsSalePrice() {
|
|
| 236 |
- return searchSmsSalePrice; |
|
| 237 |
- } |
|
| 238 |
- |
|
| 239 |
- public void setSearchSmsSalePrice(String searchSmsSalePrice) {
|
|
| 240 |
- this.searchSmsSalePrice = searchSmsSalePrice; |
|
| 241 |
- } |
|
| 242 |
- |
|
| 243 |
- public String getSearchAdminSmsNoticeYn() {
|
|
| 244 |
- return searchAdminSmsNoticeYn; |
|
| 245 |
- } |
|
| 246 |
- |
|
| 247 |
- public void setSearchAdminSmsNoticeYn(String searchAdminSmsNoticeYn) {
|
|
| 248 |
- this.searchAdminSmsNoticeYn = searchAdminSmsNoticeYn; |
|
| 249 |
- } |
|
| 250 |
- |
|
| 251 |
- public String getSearchDept() {
|
|
| 252 |
- return searchDept; |
|
| 253 |
- } |
|
| 254 |
- |
|
| 255 |
- public void setSearchDept(String searchDept) {
|
|
| 256 |
- this.searchDept = searchDept; |
|
| 257 |
- } |
|
| 258 |
- |
|
| 259 |
- public String getAuthorCode() {
|
|
| 260 |
- return authorCode; |
|
| 261 |
- } |
|
| 262 |
- |
|
| 263 |
- public void setAuthorCode(String authorCode) {
|
|
| 264 |
- this.authorCode = authorCode; |
|
| 265 |
- } |
|
| 266 |
- |
|
| 267 |
- public String getSearchCategoryCode() {
|
|
| 268 |
- return searchCategoryCode; |
|
| 269 |
- } |
|
| 270 |
- |
|
| 271 |
- public void setSearchCategoryCode(String searchCategoryCode) {
|
|
| 272 |
- this.searchCategoryCode = searchCategoryCode; |
|
| 273 |
- } |
|
| 274 |
- |
|
| 275 |
- public String getSearchKeywordFrom() {
|
|
| 276 |
- return searchKeywordFrom; |
|
| 277 |
- } |
|
| 278 |
- |
|
| 279 |
- public void setSearchKeywordFrom(String searchKeywordFrom) {
|
|
| 280 |
- this.searchKeywordFrom = searchKeywordFrom; |
|
| 281 |
- } |
|
| 282 |
- |
|
| 283 |
- public String getSearchKeywordTo() {
|
|
| 284 |
- return searchKeywordTo; |
|
| 285 |
- } |
|
| 286 |
- |
|
| 287 |
- public void setSearchKeywordTo(String searchKeywordTo) {
|
|
| 288 |
- this.searchKeywordTo = searchKeywordTo; |
|
| 289 |
- } |
|
| 290 |
- |
|
| 291 |
- public String getFrstRegistPnttm() {
|
|
| 292 |
- return frstRegistPnttm; |
|
| 293 |
- } |
|
| 294 |
- |
|
| 295 |
- public void setFrstRegistPnttm(String frstRegistPnttm) {
|
|
| 296 |
- this.frstRegistPnttm = frstRegistPnttm; |
|
| 297 |
- } |
|
| 298 |
- |
|
| 299 |
- public String getFrstRegisterId() {
|
|
| 300 |
- return frstRegisterId; |
|
| 301 |
- } |
|
| 302 |
- |
|
| 303 |
- public void setFrstRegisterId(String frstRegisterId) {
|
|
| 304 |
- this.frstRegisterId = frstRegisterId; |
|
| 305 |
- } |
|
| 306 |
- |
|
| 307 |
- public String getLastUpdtPnttm() {
|
|
| 308 |
- return lastUpdtPnttm; |
|
| 309 |
- } |
|
| 310 |
- |
|
| 311 |
- public void setLastUpdtPnttm(String lastUpdtPnttm) {
|
|
| 312 |
- this.lastUpdtPnttm = lastUpdtPnttm; |
|
| 313 |
- } |
|
| 314 |
- |
|
| 315 |
- public String getLastUpdusrId() {
|
|
| 316 |
- return lastUpdusrId; |
|
| 317 |
- } |
|
| 318 |
- |
|
| 319 |
- public void setLastUpdusrId(String lastUpdusrId) {
|
|
| 320 |
- this.lastUpdusrId = lastUpdusrId; |
|
| 321 |
- } |
|
| 322 |
- |
|
| 323 |
- public int getTotCnt() {
|
|
| 324 |
- return totCnt; |
|
| 325 |
- } |
|
| 326 |
- |
|
| 327 |
- public void setTotCnt(int totCnt) {
|
|
| 328 |
- this.totCnt = totCnt; |
|
| 329 |
- } |
|
| 330 |
- |
|
| 331 |
- public String getUserTotailCount() {
|
|
| 332 |
- return userTotailCount; |
|
| 333 |
- } |
|
| 334 |
- |
|
| 335 |
- public void setUserTotailCount(String userTotailCount) {
|
|
| 336 |
- this.userTotailCount = userTotailCount; |
|
| 337 |
- } |
|
| 338 |
- |
|
| 339 |
- public String getUserNewCount() {
|
|
| 340 |
- return userNewCount; |
|
| 341 |
- } |
|
| 342 |
- |
|
| 343 |
- public void setUserNewCount(String userNewCount) {
|
|
| 344 |
- this.userNewCount = userNewCount; |
|
| 345 |
- } |
|
| 346 |
- |
|
| 347 |
- public String getUserDeleteCount() {
|
|
| 348 |
- return userDeleteCount; |
|
| 349 |
- } |
|
| 350 |
- |
|
| 351 |
- public void setUserDeleteCount(String userDeleteCount) {
|
|
| 352 |
- this.userDeleteCount = userDeleteCount; |
|
| 353 |
- } |
|
| 354 |
- |
|
| 355 |
- public String getUserNewBlock() {
|
|
| 356 |
- return userNewBlock; |
|
| 357 |
- } |
|
| 358 |
- |
|
| 359 |
- public void setUserNewBlock(String userNewBlock) {
|
|
| 360 |
- this.userNewBlock = userNewBlock; |
|
| 361 |
- } |
|
| 362 |
- |
|
| 363 |
- public String getSnsSiteId() {
|
|
| 364 |
- return snsSiteId; |
|
| 365 |
- } |
|
| 366 |
- |
|
| 367 |
- public void setSnsSiteId(String snsSiteId) {
|
|
| 368 |
- this.snsSiteId = snsSiteId; |
|
| 369 |
- } |
|
| 370 |
- |
|
| 371 |
- public String getSnsSiteName() {
|
|
| 372 |
- return snsSiteName; |
|
| 373 |
- } |
|
| 374 |
- |
|
| 375 |
- public void setSnsSiteName(String snsSiteName) {
|
|
| 376 |
- this.snsSiteName = snsSiteName; |
|
| 377 |
- } |
|
| 378 |
- |
|
| 379 |
- public String getSnsSite() {
|
|
| 380 |
- return snsSite; |
|
| 381 |
- } |
|
| 382 |
- |
|
| 383 |
- public void setSnsSite(String snsSite) {
|
|
| 384 |
- this.snsSite = snsSite; |
|
| 385 |
- } |
|
| 386 |
- |
|
| 387 |
- public String getSnsId() {
|
|
| 388 |
- return snsId; |
|
| 389 |
- } |
|
| 390 |
- |
|
| 391 |
- public void setSnsId(String snsId) {
|
|
| 392 |
- this.snsId = snsId; |
|
| 393 |
- } |
|
| 394 |
- |
|
| 395 |
- public String getSnsEmail() {
|
|
| 396 |
- return snsEmail; |
|
| 397 |
- } |
|
| 398 |
- |
|
| 399 |
- public void setSnsEmail(String snsEmail) {
|
|
| 400 |
- this.snsEmail = snsEmail; |
|
| 401 |
- } |
|
| 402 |
- |
|
| 403 |
- public static long getSerialversionuid() {
|
|
| 404 |
- return serialVersionUID; |
|
| 405 |
- } |
|
| 406 |
- |
|
| 407 |
- /** |
|
| 408 |
- * sbscrbSttus attribute 값을 리턴한다. |
|
| 409 |
- * @return String |
|
| 410 |
- */ |
|
| 411 |
- public String getSbscrbSttus() {
|
|
| 412 |
- return sbscrbSttus; |
|
| 413 |
- } |
|
| 414 |
- |
|
| 415 |
- /** |
|
| 416 |
- * sbscrbSttus attribute 값을 설정한다. |
|
| 417 |
- * @param sbscrbSttus String |
|
| 418 |
- */ |
|
| 419 |
- public void setSbscrbSttus(String sbscrbSttus) {
|
|
| 420 |
- this.sbscrbSttus = sbscrbSttus; |
|
| 421 |
- } |
|
| 422 |
- |
|
| 423 |
- /** |
|
| 424 |
- * searchCondition attribute 값을 리턴한다. |
|
| 425 |
- * @return String |
|
| 426 |
- */ |
|
| 427 |
- public String getSearchCondition() {
|
|
| 428 |
- return searchCondition; |
|
| 429 |
- } |
|
| 430 |
- |
|
| 431 |
- /** |
|
| 432 |
- * searchCondition attribute 값을 설정한다. |
|
| 433 |
- * @param searchCondition String |
|
| 434 |
- */ |
|
| 435 |
- public void setSearchCondition(String searchCondition) {
|
|
| 436 |
- this.searchCondition = searchCondition; |
|
| 437 |
- } |
|
| 438 |
- |
|
| 439 |
- /** |
|
| 440 |
- * searchKeyword attribute 값을 리턴한다. |
|
| 441 |
- * @return String |
|
| 442 |
- */ |
|
| 443 |
- public String getSearchKeyword() {
|
|
| 444 |
- return searchKeyword; |
|
| 445 |
- } |
|
| 446 |
- |
|
| 447 |
- /** |
|
| 448 |
- * searchKeyword attribute 값을 설정한다. |
|
| 449 |
- * @param searchKeyword String |
|
| 450 |
- */ |
|
| 451 |
- public void setSearchKeyword(String searchKeyword) {
|
|
| 452 |
- this.searchKeyword = searchKeyword; |
|
| 453 |
- } |
|
| 454 |
- |
|
| 455 |
- /** |
|
| 456 |
- * searchUseYn attribute 값을 리턴한다. |
|
| 457 |
- * @return String |
|
| 458 |
- */ |
|
| 459 |
- public String getSearchUseYn() {
|
|
| 460 |
- return searchUseYn; |
|
| 461 |
- } |
|
| 462 |
- |
|
| 463 |
- /** |
|
| 464 |
- * searchUseYn attribute 값을 설정한다. |
|
| 465 |
- * @param searchUseYn String |
|
| 466 |
- */ |
|
| 467 |
- public void setSearchUseYn(String searchUseYn) {
|
|
| 468 |
- this.searchUseYn = searchUseYn; |
|
| 469 |
- } |
|
| 470 |
- |
|
| 471 |
- /** |
|
| 472 |
- * pageIndex attribute 값을 리턴한다. |
|
| 473 |
- * @return int |
|
| 474 |
- */ |
|
| 475 |
- public int getPageIndex() {
|
|
| 476 |
- return pageIndex; |
|
| 477 |
- } |
|
| 478 |
- |
|
| 479 |
- /** |
|
| 480 |
- * pageIndex attribute 값을 설정한다. |
|
| 481 |
- * @param pageIndex int |
|
| 482 |
- */ |
|
| 483 |
- public void setPageIndex(int pageIndex) {
|
|
| 484 |
- this.pageIndex = pageIndex; |
|
| 485 |
- } |
|
| 486 |
- |
|
| 487 |
- /** |
|
| 488 |
- * pageUnit attribute 값을 리턴한다. |
|
| 489 |
- * @return int |
|
| 490 |
- */ |
|
| 491 |
- public int getPageUnit() {
|
|
| 492 |
- return pageUnit; |
|
| 493 |
- } |
|
| 494 |
- |
|
| 495 |
- /** |
|
| 496 |
- * pageUnit attribute 값을 설정한다. |
|
| 497 |
- * @param pageUnit int |
|
| 498 |
- */ |
|
| 499 |
- public void setPageUnit(int pageUnit) {
|
|
| 500 |
- this.pageUnit = pageUnit; |
|
| 501 |
- } |
|
| 502 |
- |
|
| 503 |
- /** |
|
| 504 |
- * pageSize attribute 값을 리턴한다. |
|
| 505 |
- * @return int |
|
| 506 |
- */ |
|
| 507 |
- public int getPageSize() {
|
|
| 508 |
- return pageSize; |
|
| 509 |
- } |
|
| 510 |
- |
|
| 511 |
- /** |
|
| 512 |
- * pageSize attribute 값을 설정한다. |
|
| 513 |
- * @param pageSize int |
|
| 514 |
- */ |
|
| 515 |
- public void setPageSize(int pageSize) {
|
|
| 516 |
- this.pageSize = pageSize; |
|
| 517 |
- } |
|
| 518 |
- |
|
| 519 |
- /** |
|
| 520 |
- * firstIndex attribute 값을 리턴한다. |
|
| 521 |
- * @return int |
|
| 522 |
- */ |
|
| 523 |
- public int getFirstIndex() {
|
|
| 524 |
- return firstIndex; |
|
| 525 |
- } |
|
| 526 |
- |
|
| 527 |
- /** |
|
| 528 |
- * firstIndex attribute 값을 설정한다. |
|
| 529 |
- * @param firstIndex int |
|
| 530 |
- */ |
|
| 531 |
- public void setFirstIndex(int firstIndex) {
|
|
| 532 |
- this.firstIndex = firstIndex; |
|
| 533 |
- } |
|
| 534 |
- |
|
| 535 |
- /** |
|
| 536 |
- * lastIndex attribute 값을 리턴한다. |
|
| 537 |
- * @return int |
|
| 538 |
- */ |
|
| 539 |
- public int getLastIndex() {
|
|
| 540 |
- return lastIndex; |
|
| 541 |
- } |
|
| 542 |
- |
|
| 543 |
- /** |
|
| 544 |
- * lastIndex attribute 값을 설정한다. |
|
| 545 |
- * @param lastIndex int |
|
| 546 |
- */ |
|
| 547 |
- public void setLastIndex(int lastIndex) {
|
|
| 548 |
- this.lastIndex = lastIndex; |
|
| 549 |
- } |
|
| 550 |
- |
|
| 551 |
- /** |
|
| 552 |
- * recordCountPerPage attribute 값을 리턴한다. |
|
| 553 |
- * @return int |
|
| 554 |
- */ |
|
| 555 |
- public int getRecordCountPerPage() {
|
|
| 556 |
- return recordCountPerPage; |
|
| 557 |
- } |
|
| 558 |
- |
|
| 559 |
- /** |
|
| 560 |
- * recordCountPerPage attribute 값을 설정한다. |
|
| 561 |
- * @param recordCountPerPage int |
|
| 562 |
- */ |
|
| 563 |
- public void setRecordCountPerPage(int recordCountPerPage) {
|
|
| 564 |
- this.recordCountPerPage = recordCountPerPage; |
|
| 565 |
- } |
|
| 566 |
- |
|
| 567 |
- /*성별조건 검색*/ |
|
| 568 |
- public String getSearchSexdstn() {
|
|
| 569 |
- return searchSexdstn; |
|
| 570 |
- } |
|
| 571 |
- |
|
| 572 |
- public void setSearchSexdstn(String searchSexdstn) {
|
|
| 573 |
- this.searchSexdstn = searchSexdstn; |
|
| 574 |
- } |
|
| 575 |
- |
|
| 576 |
- /** |
|
| 577 |
- * toString 메소드를 대치한다. |
|
| 578 |
- */ |
|
| 579 |
- public String toString() {
|
|
| 580 |
- return ToStringBuilder.reflectionToString(this); |
|
| 581 |
- } |
|
| 582 |
- |
|
| 583 |
- public String getSiteId() {
|
|
| 584 |
- return siteId; |
|
| 585 |
- } |
|
| 586 |
- |
|
| 587 |
- public void setSiteId(String siteId) {
|
|
| 588 |
- this.siteId = siteId; |
|
| 589 |
- } |
|
| 590 |
- |
|
| 591 |
- public String getSearchConditionSite() {
|
|
| 592 |
- return searchConditionSite; |
|
| 593 |
- } |
|
| 594 |
- |
|
| 595 |
- public void setSearchConditionSite(String searchConditionSite) {
|
|
| 596 |
- this.searchConditionSite = searchConditionSite; |
|
| 597 |
- } |
|
| 598 |
- |
|
| 599 |
- public String getAdminYn() {
|
|
| 600 |
- return adminYn; |
|
| 601 |
- } |
|
| 602 |
- |
|
| 603 |
- public void setAdminYn(String adminYn) {
|
|
| 604 |
- this.adminYn = adminYn; |
|
| 605 |
- } |
|
| 606 |
- |
|
| 607 |
- public String getGnrlUser() {
|
|
| 608 |
- return gnrlUser; |
|
| 609 |
- } |
|
| 610 |
- |
|
| 611 |
- public void setGnrlUser(String gnrlUser) {
|
|
| 612 |
- this.gnrlUser = gnrlUser; |
|
| 613 |
- } |
|
| 614 |
- |
|
| 615 |
- |
|
| 616 |
- public String getEmplyrSttusCode() {
|
|
| 617 |
- return emplyrSttusCode; |
|
| 618 |
- } |
|
| 619 |
- |
|
| 620 |
- public void setEmplyrSttusCode(String emplyrSttusCode) {
|
|
| 621 |
- this.emplyrSttusCode = emplyrSttusCode; |
|
| 622 |
- } |
|
| 623 |
- |
|
| 624 |
- public String[] getEsntlIdNsttusCode() {
|
|
| 625 |
- return esntlIdNsttusCode; |
|
| 626 |
- } |
|
| 627 |
- |
|
| 628 |
- public void setEsntlIdNsttusCode(String[] esntlIdNsttusCode) {
|
|
| 629 |
- this.esntlIdNsttusCode = esntlIdNsttusCode; |
|
| 630 |
- } |
|
| 631 |
- |
|
| 632 |
- public String getEmplyrId() {
|
|
| 633 |
- return emplyrId; |
|
| 634 |
- } |
|
| 635 |
- |
|
| 636 |
- public void setEmplyrId(String emplyrId) {
|
|
| 637 |
- this.emplyrId = emplyrId; |
|
| 638 |
- } |
|
| 639 |
- |
|
| 640 |
- public String getSearchCondition_01() {
|
|
| 641 |
- return searchCondition_01; |
|
| 642 |
- } |
|
| 643 |
- |
|
| 644 |
- public void setSearchCondition_01(String searchCondition_01) {
|
|
| 645 |
- this.searchCondition_01 = searchCondition_01; |
|
| 646 |
- } |
|
| 647 |
- |
|
| 648 |
- public String getSearchSortCnd() {
|
|
| 649 |
- return searchSortCnd; |
|
| 650 |
- } |
|
| 651 |
- |
|
| 652 |
- public void setSearchSortCnd(String searchSortCnd) {
|
|
| 653 |
- this.searchSortCnd = searchSortCnd; |
|
| 654 |
- } |
|
| 655 |
- |
|
| 656 |
- public String getSearchSortOrd() {
|
|
| 657 |
- return searchSortOrd; |
|
| 658 |
- } |
|
| 659 |
- |
|
| 660 |
- public void setSearchSortOrd(String searchSortOrd) {
|
|
| 661 |
- this.searchSortOrd = searchSortOrd; |
|
| 662 |
- } |
|
| 663 |
- |
|
| 664 |
- public String getNiceFailUrl() {
|
|
| 665 |
- return niceFailUrl; |
|
| 666 |
- } |
|
| 667 |
- |
|
| 668 |
- public void setNiceFailUrl(String niceFailUrl) {
|
|
| 669 |
- this.niceFailUrl = niceFailUrl; |
|
| 670 |
- } |
|
| 671 |
- |
|
| 672 |
- public String getNiceSuccUrl() {
|
|
| 673 |
- return niceSuccUrl; |
|
| 674 |
- } |
|
| 675 |
- |
|
| 676 |
- public void setNiceSuccUrl(String niceSuccUrl) {
|
|
| 677 |
- this.niceSuccUrl = niceSuccUrl; |
|
| 678 |
- } |
|
| 679 |
- |
|
| 680 |
- public boolean isMobile() {
|
|
| 681 |
- return isMobile; |
|
| 682 |
- } |
|
| 683 |
- |
|
| 684 |
- public void setMobile(boolean isMobile) {
|
|
| 685 |
- this.isMobile = isMobile; |
|
| 686 |
- } |
|
| 687 |
- |
|
| 688 |
- public String getNiceMessage() {
|
|
| 689 |
- return niceMessage; |
|
| 690 |
- } |
|
| 691 |
- |
|
| 692 |
- public void setNiceMessage(String niceMessage) {
|
|
| 693 |
- this.niceMessage = niceMessage; |
|
| 694 |
- } |
|
| 695 |
- |
|
| 696 |
- public String getNiceNm() {
|
|
| 697 |
- return niceNm; |
|
| 698 |
- } |
|
| 699 |
- |
|
| 700 |
- public void setNiceNm(String niceNm) {
|
|
| 701 |
- this.niceNm = niceNm; |
|
| 702 |
- } |
|
| 703 |
- |
|
| 704 |
- public String getMblDn() {
|
|
| 705 |
- return mblDn; |
|
| 706 |
- } |
|
| 707 |
- |
|
| 708 |
- public void setMblDn(String mblDn) {
|
|
| 709 |
- this.mblDn = mblDn; |
|
| 710 |
- } |
|
| 711 |
- |
|
| 712 |
- public String getMberSttus() {
|
|
| 713 |
- return mberSttus; |
|
| 714 |
- } |
|
| 715 |
- |
|
| 716 |
- public void setMberSttus(String mberSttus) {
|
|
| 717 |
- this.mberSttus = mberSttus; |
|
| 718 |
- } |
|
| 719 |
- |
|
| 720 |
- public String getSearchStartDate() {
|
|
| 721 |
- return searchStartDate; |
|
| 722 |
- } |
|
| 723 |
- |
|
| 724 |
- public void setSearchStartDate(String searchStartDate) {
|
|
| 725 |
- this.searchStartDate = searchStartDate; |
|
| 726 |
- } |
|
| 727 |
- |
|
| 728 |
- public String getSearchEndDate() {
|
|
| 729 |
- return searchEndDate; |
|
| 730 |
- } |
|
| 731 |
- |
|
| 732 |
- public void setSearchEndDate(String searchEndDate) {
|
|
| 733 |
- this.searchEndDate = searchEndDate; |
|
| 734 |
- } |
|
| 735 |
- |
|
| 736 |
- public String getCandidateYn() {
|
|
| 737 |
- return candidateYn; |
|
| 738 |
- } |
|
| 739 |
- |
|
| 740 |
- public void setCandidateYn(String candidateYn) {
|
|
| 741 |
- this.candidateYn = candidateYn; |
|
| 742 |
- } |
|
| 743 |
- |
|
| 744 |
- public String getSearchBestCategory() {
|
|
| 745 |
- return searchBestCategory; |
|
| 746 |
- } |
|
| 747 |
- |
|
| 748 |
- public void setSearchBestCategory(String searchBestCategory) {
|
|
| 749 |
- this.searchBestCategory = searchBestCategory; |
|
| 750 |
- } |
|
| 751 |
- |
|
| 752 |
- public String getSearchDiv() {
|
|
| 753 |
- return searchDiv; |
|
| 754 |
- } |
|
| 755 |
- |
|
| 756 |
- public void setSearchDiv(String searchDiv) {
|
|
| 757 |
- this.searchDiv = searchDiv; |
|
| 758 |
- } |
|
| 759 |
- |
|
| 760 |
- public String getSearchTwoDptCategoryCode() {
|
|
| 761 |
- return searchTwoDptCategoryCode; |
|
| 762 |
- } |
|
| 763 |
- |
|
| 764 |
- public void setSearchTwoDptCategoryCode(String searchTwoDptCategoryCode) {
|
|
| 765 |
- this.searchTwoDptCategoryCode = searchTwoDptCategoryCode; |
|
| 766 |
- } |
|
| 767 |
- |
|
| 768 |
- public String getSearchThrDptCategoryCode() {
|
|
| 769 |
- return searchThrDptCategoryCode; |
|
| 770 |
- } |
|
| 771 |
- |
|
| 772 |
- public void setSearchThrDptCategoryCode(String searchThrDptCategoryCode) {
|
|
| 773 |
- this.searchThrDptCategoryCode = searchThrDptCategoryCode; |
|
| 774 |
- } |
|
| 775 |
- |
|
| 776 |
- public String getSearchStartDate2() {
|
|
| 777 |
- return searchStartDate2; |
|
| 778 |
- } |
|
| 779 |
- |
|
| 780 |
- public void setSearchStartDate2(String searchStartDate2) {
|
|
| 781 |
- this.searchStartDate2 = searchStartDate2; |
|
| 782 |
- } |
|
| 783 |
- |
|
| 784 |
- public String getSearchEndDate2() {
|
|
| 785 |
- return searchEndDate2; |
|
| 786 |
- } |
|
| 787 |
- |
|
| 788 |
- public void setSearchEndDate2(String searchEndDate2) {
|
|
| 789 |
- this.searchEndDate2 = searchEndDate2; |
|
| 790 |
- } |
|
| 791 |
- |
|
| 792 | 203 |
|
| 793 | 204 |
} |
--- src/main/resources/egovframework/sqlmap/let/mjo/addr/Addr_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/addr/Addr_SQL_Mysql.xml
... | ... | @@ -933,7 +933,7 @@ |
| 933 | 933 |
|
| 934 | 934 |
</select> |
| 935 | 935 |
|
| 936 |
- <insert id="AddrDAO.insertAddrList" parameterClass="java.util.List"> |
|
| 936 |
+ <update id="AddrDAO.insertAddrList" parameterClass="java.util.List"> |
|
| 937 | 937 |
/* AddrDAO.insertAddrList */ |
| 938 | 938 |
INSERT INTO MJ_ADDR |
| 939 | 939 |
( |
... | ... | @@ -967,7 +967,18 @@ |
| 967 | 967 |
) |
| 968 | 968 |
</iterate> |
| 969 | 969 |
|
| 970 |
- </insert> |
|
| 970 |
+ </update> |
|
| 971 |
+ |
|
| 972 |
+ <update id="AddrDAO.deleteAddrPhoneNo" parameterClass="addrVO"> |
|
| 973 |
+ |
|
| 974 |
+ DELETE FROM MJ_ADDR |
|
| 975 |
+ |
|
| 976 |
+ WHERE MBER_ID = #mberId# |
|
| 977 |
+ <iterate prepend="AND ADDR_PHONE_NO IN" open="(" close=")" conjunction="," property="addrPhones">
|
|
| 978 |
+ #addrPhones[]# |
|
| 979 |
+ </iterate> |
|
| 980 |
+ |
|
| 981 |
+ </update> |
|
| 971 | 982 |
|
| 972 | 983 |
<!-- 주소록 그룹명 중복확인 --> |
| 973 | 984 |
<select id="AddrDAO.selectDuplAddrCnt" parameterClass="addrVO" resultClass="int"> |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
... | ... | @@ -2319,7 +2319,8 @@ |
| 2319 | 2319 |
EVENT_YN, |
| 2320 | 2320 |
DELAY_YN, |
| 2321 | 2321 |
AT_DELAY_YN, |
| 2322 |
- BIZ_KAKAO_RESEND_ORGNL_TXT |
|
| 2322 |
+ BIZ_KAKAO_RESEND_ORGNL_TXT, |
|
| 2323 |
+ SUBJECT_CHK_YN |
|
| 2323 | 2324 |
) |
| 2324 | 2325 |
VALUES |
| 2325 | 2326 |
|
... | ... | @@ -2345,7 +2346,8 @@ |
| 2345 | 2346 |
#eventYn#, |
| 2346 | 2347 |
#delayYn#, |
| 2347 | 2348 |
#atDelayYn#, |
| 2348 |
- #kakaoSubMagOrgnlTxt# |
|
| 2349 |
+ #kakaoSubMagOrgnlTxt#, |
|
| 2350 |
+ #subjectChkYn# |
|
| 2349 | 2351 |
) |
| 2350 | 2352 |
</insert> |
| 2351 | 2353 |
|
... | ... | @@ -3307,10 +3309,16 @@ |
| 3307 | 3309 |
, ( |
| 3308 | 3310 |
<include refid="MjonMsgSentDAO.selectAgentWithKakaoResultQuery_A"/> |
| 3309 | 3311 |
) AS RESULT |
| 3310 |
- <include refid="MjonMsgSentDAO.selectJoinQuery"/> |
|
| 3312 |
+ from |
|
| 3313 |
+ MJ_MSG_DATA A , |
|
| 3314 |
+ MJ_MSG_GROUP_DATA B |
|
| 3315 |
+ where |
|
| 3316 |
+ A.MSG_GROUP_ID = B.MSG_GROUP_ID |
|
| 3317 |
+ /*and IFNULL(B.DEL_FLAG, 'N') = 'N'*/ |
|
| 3318 |
+ /*and A.DEL_FLAG = 'N'*/ |
|
| 3311 | 3319 |
AND A.USER_ID = #userId# |
| 3312 | 3320 |
AND B.USER_ID = #userId# |
| 3313 |
- AND B.RESERVE_C_YN = 'N' |
|
| 3321 |
+ /*AND B.RESERVE_C_YN = 'N'*/ |
|
| 3314 | 3322 |
ORDER BY 1=1 |
| 3315 | 3323 |
, msgGroupId DESC |
| 3316 | 3324 |
, sentDate DESC |
... | ... | @@ -4020,6 +4028,8 @@ |
| 4020 | 4028 |
</select> |
| 4021 | 4029 |
|
| 4022 | 4030 |
<select id="MjonMsgDataDAO.selectReSendMsgDataList" parameterClass="mjonMsgDataVO" resultClass="mjonMsgVO"> |
| 4031 |
+ |
|
| 4032 |
+ /* MjonMsgDataDAO.selectReSendMsgDataList */ |
|
| 4023 | 4033 |
|
| 4024 | 4034 |
SELECT MSG_ID AS msgId, |
| 4025 | 4035 |
USER_ID AS userId, |
... | ... | @@ -7895,6 +7905,7 @@ |
| 7895 | 7905 |
SELECT |
| 7896 | 7906 |
CALL_FROM AS callFrom |
| 7897 | 7907 |
, SUBJECT AS subject |
| 7908 |
+ , SUBJECT_CHK_YN AS subjectChkYn |
|
| 7898 | 7909 |
, SMS_TXT AS smsTxt |
| 7899 | 7910 |
,( |
| 7900 | 7911 |
SELECT |
... | ... | @@ -7936,6 +7947,7 @@ |
| 7936 | 7947 |
</select> |
| 7937 | 7948 |
|
| 7938 | 7949 |
<select id="MjonMsgDataDAO.selectMjMsgListByResend" parameterClass="mjonMsgDataVO" resultClass="mjonMsgDataVO"> |
| 7950 |
+ /* MjonMsgDataDAO.selectMjMsgListByResend */ |
|
| 7939 | 7951 |
SELECT |
| 7940 | 7952 |
CALL_TO AS callTo |
| 7941 | 7953 |
FROM MJ_MSG_DATA |
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
... | ... | @@ -3,8 +3,10 @@ |
| 3 | 3 |
========= ======= ================================================= |
| 4 | 4 |
2021.06.21 우영두 |
| 5 | 5 |
--> |
| 6 |
-<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> |
|
| 6 |
+<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"> |
|
| 7 | 7 |
<sqlMap namespace="Msg"> |
| 8 |
+ <typeAlias alias="mjonMsgSWFDTO" type="itn.let.mjo.msgsent.service.MjonMsgSWFDTO"/> |
|
| 9 |
+ <typeAlias alias="mjonMsgDetailSentVO" type="itn.let.mjo.msgsent.service.MjonMsgDetailSentVO"/> |
|
| 8 | 10 |
<typeAlias alias="mjonMsgSentVO" type="itn.let.mjo.msgsent.service.MjonMsgSentVO"/> |
| 9 | 11 |
<typeAlias alias="mjonMsgVO" type="itn.let.mjo.msg.service.MjonMsgVO"/> |
| 10 | 12 |
<typeAlias alias="addrGroupVO" type="itn.let.mjo.addr.service.AddrGroupVO"/> |
... | ... | @@ -46,8 +48,8 @@ |
| 46 | 48 |
,'01','00') AS tab2 |
| 47 | 49 |
, if (A.MSG_TYPE= '6' AND B.MSG_TYPE= '6' AND B.FILE_CNT > '0' |
| 48 | 50 |
,'01','00') AS tab3 |
| 49 |
- |
|
| 50 | 51 |
<include refid="MjonMsgSentDAO.selectJoinQuery"/> |
| 52 |
+ |
|
| 51 | 53 |
AND A.USER_ID = #userId# |
| 52 | 54 |
AND B.USER_ID = #userId# |
| 53 | 55 |
<isNotEmpty property="ntceBgnde"> |
... | ... | @@ -60,10 +62,6 @@ |
| 60 | 62 |
<isEmpty property="msgType"> |
| 61 | 63 |
AND A.MSG_TYPE IN ('4','6')
|
| 62 | 64 |
</isEmpty> |
| 63 |
- AND B.RESERVE_C_YN = 'N' |
|
| 64 |
- <![CDATA[ |
|
| 65 |
- AND B.REQ_DATE <= DATE_ADD(NOW(), INTERVAL 60 MINUTE) |
|
| 66 |
- ]]> |
|
| 67 | 65 |
<isNotEmpty property="fileCnt"> |
| 68 | 66 |
<isEqual property="fileCnt" compareValue="0"> |
| 69 | 67 |
AND B.FILE_CNT = '0' |
... | ... | @@ -71,6 +69,16 @@ |
| 71 | 69 |
<isNotEqual property="fileCnt" compareValue="0"> |
| 72 | 70 |
<![CDATA[ AND B.FILE_CNT > '0' ]]> |
| 73 | 71 |
</isNotEqual> |
| 72 |
+ </isNotEmpty> |
|
| 73 |
+ <isNotEmpty property="searchStartDate"> |
|
| 74 |
+ <![CDATA[ |
|
| 75 |
+ AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d') |
|
| 76 |
+ ]]> |
|
| 77 |
+ </isNotEmpty> |
|
| 78 |
+ <isNotEmpty property="searchEndDate"> |
|
| 79 |
+ <![CDATA[ |
|
| 80 |
+ AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') <= DATE_FORMAT(#searchEndDate#, '%Y-%m-%d') |
|
| 81 |
+ ]]> |
|
| 74 | 82 |
</isNotEmpty> |
| 75 | 83 |
) A0 |
| 76 | 84 |
GROUP BY |
... | ... | @@ -222,6 +230,290 @@ |
| 222 | 230 |
|
| 223 | 231 |
</select> |
| 224 | 232 |
|
| 233 |
+ <!-- 전체 발송결과 조회 (전송사별) 카운트--> |
|
| 234 |
+ <select id="MjonMsgSentDAO.countAllMsgSentList" parameterClass="mjonMsgSentVO" resultClass="int"> |
|
| 235 |
+ |
|
| 236 |
+ select |
|
| 237 |
+ COUNT(DISTINCT B.MSG_GROUP_ID) as totalGroupCount |
|
| 238 |
+ from |
|
| 239 |
+ MJ_MSG_DATA A |
|
| 240 |
+ join MJ_MSG_GROUP_DATA B on |
|
| 241 |
+ A.MSG_GROUP_ID = B.MSG_GROUP_ID |
|
| 242 |
+ WHERE (B.DEL_FLAG = 'N' OR B.DEL_FLAG IS NULL) |
|
| 243 |
+ AND A.DEL_FLAG = 'N' |
|
| 244 |
+ AND B.USER_ID = #userId# |
|
| 245 |
+ <isNotEmpty property="searchKeyword"> |
|
| 246 |
+ <isEqual property="searchCondition" compareValue="1" > |
|
| 247 |
+ AND B.SUBJECT LIKE CONCAT('%', #searchKeyword#, '%')
|
|
| 248 |
+ </isEqual> |
|
| 249 |
+ <isEqual property="searchCondition" compareValue="2" > |
|
| 250 |
+ AND B.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%')
|
|
| 251 |
+ </isEqual> |
|
| 252 |
+ <isEqual property="searchCondition" compareValue="3" > |
|
| 253 |
+ AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
|
|
| 254 |
+ </isEqual> |
|
| 255 |
+ </isNotEmpty> |
|
| 256 |
+ <isNotEmpty property="searchCondition01"> |
|
| 257 |
+ AND B.RESERVE_YN = #searchCondition01# |
|
| 258 |
+ </isNotEmpty> |
|
| 259 |
+ <isNotEmpty property="searchCondition02"> |
|
| 260 |
+ <isEqual property="searchCondition02" compareValue="S"> |
|
| 261 |
+ AND B.MSG_TYPE = '4' |
|
| 262 |
+ </isEqual> |
|
| 263 |
+ <isEqual property="searchCondition02" compareValue="L"> |
|
| 264 |
+ AND B.MSG_TYPE = '6' |
|
| 265 |
+ AND B.FILE_CNT = '0' |
|
| 266 |
+ </isEqual> |
|
| 267 |
+ <isEqual property="searchCondition02" compareValue="M"> |
|
| 268 |
+ <![CDATA[ |
|
| 269 |
+ AND B.MSG_TYPE = '6' |
|
| 270 |
+ AND B.FILE_CNT > '0' |
|
| 271 |
+ ]]> |
|
| 272 |
+ </isEqual> |
|
| 273 |
+ </isNotEmpty> |
|
| 274 |
+ <isNotEmpty property="searchStartDate"> |
|
| 275 |
+ <![CDATA[ |
|
| 276 |
+ AND DATE_FORMAT(REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d') |
|
| 277 |
+ ]]> |
|
| 278 |
+ </isNotEmpty> |
|
| 279 |
+ <isNotEmpty property="searchEndDate"> |
|
| 280 |
+ <![CDATA[ |
|
| 281 |
+ AND DATE_FORMAT(REGDATE, '%Y-%m-%d') <= DATE_FORMAT(#searchEndDate#, '%Y-%m-%d') |
|
| 282 |
+ ]]> |
|
| 283 |
+ </isNotEmpty> |
|
| 284 |
+ </select> |
|
| 285 |
+ |
|
| 286 |
+ |
|
| 287 |
+ <!-- 전체 발송결과 조회 (전송사별) 카운트--> |
|
| 288 |
+ <select id="MjonMsgSentDAO.findBySWF" parameterClass="String" resultClass="mjonMsgSWFDTO"> |
|
| 289 |
+ /* MjonMsgSentDAO.findBySWF */ |
|
| 290 |
+ select |
|
| 291 |
+ SUM(IF(aa.result = 'S', 1, 0)) AS resultSValue, |
|
| 292 |
+ SUM(IF(aa.result = 'W', 1, 0)) AS resultWValue, |
|
| 293 |
+ SUM(IF(aa.result = 'F', 1, 0)) AS resultFValue, |
|
| 294 |
+ CASE |
|
| 295 |
+ WHEN COUNT(DISTINCT REQ_DATE) > 1 THEN 'Y' |
|
| 296 |
+ ELSE 'N' |
|
| 297 |
+ END AS divideYN |
|
| 298 |
+ from |
|
| 299 |
+ ( |
|
| 300 |
+ select |
|
| 301 |
+ case |
|
| 302 |
+ when A.AGENT_CODE = '01' |
|
| 303 |
+ and ( A.RSLT_CODE = '100' |
|
| 304 |
+ and (A.RSLT_CODE2 = '0')) then 'S' |
|
| 305 |
+ when A.AGENT_CODE = '02' |
|
| 306 |
+ and (A.RSLT_CODE = '0') then 'S' |
|
| 307 |
+ when A.AGENT_CODE = '03' |
|
| 308 |
+ and (A.RSLT_CODE = '100' |
|
| 309 |
+ or A.RSLT_CODE = '101' |
|
| 310 |
+ or A.RSLT_CODE = '110' |
|
| 311 |
+ or A.RSLT_CODE = '800') then 'S' |
|
| 312 |
+ when |
|
| 313 |
+ A.AGENT_CODE = '04' |
|
| 314 |
+ and (A.RSLT_CODE = '4100' |
|
| 315 |
+ or A.RSLT_CODE = '6600' |
|
| 316 |
+ or A.RSLT_CODE = '7000') then 'S' |
|
| 317 |
+ when |
|
| 318 |
+ A.AGENT_CODE = '05' |
|
| 319 |
+ and (A.RSLT_CODE = '1000' |
|
| 320 |
+ or A.RSLT_CODE = '1001') then 'S' |
|
| 321 |
+ when |
|
| 322 |
+ A.AGENT_CODE = '07' |
|
| 323 |
+ and (A.RSLT_CODE = '6' |
|
| 324 |
+ or A.RSLT_CODE = '1000') then 'S' |
|
| 325 |
+ when |
|
| 326 |
+ A.AGENT_CODE = '08' |
|
| 327 |
+ and (A.RSLT_CODE = '1000' |
|
| 328 |
+ or A.RSLT_CODE = '1001') then 'S' |
|
| 329 |
+ when |
|
| 330 |
+ A.AGENT_CODE = '09' |
|
| 331 |
+ and (A.RSLT_CODE = '1000' |
|
| 332 |
+ or A.RSLT_CODE = '1001') then 'S' |
|
| 333 |
+ when ( |
|
| 334 |
+ A.RSLT_CODE is null |
|
| 335 |
+ and A.RSLT_CODE2 is null |
|
| 336 |
+ and A.SENT_DATE is null |
|
| 337 |
+ and A.RSLT_DATE is null ) then 'W' |
|
| 338 |
+ else 'F' |
|
| 339 |
+ end as result /* common query */ |
|
| 340 |
+ , A.REQ_DATE |
|
| 341 |
+ from |
|
| 342 |
+ MJ_MSG_DATA A |
|
| 343 |
+ where |
|
| 344 |
+ A.MSG_GROUP_ID = #msgGroupId# |
|
| 345 |
+ ) aa |
|
| 346 |
+ </select> |
|
| 347 |
+ |
|
| 348 |
+ |
|
| 349 |
+ |
|
| 350 |
+ <!-- 발송결과 상세 데이터--> |
|
| 351 |
+ <select id="MjonMsgSentDAO.selectAllMsgSentDetailView" parameterClass="mjonMsgDetailSentVO" resultClass="mjonMsgDetailSentVO"> |
|
| 352 |
+ /* MjonMsgSentDAO.selectAllMsgSentDetailView */ |
|
| 353 |
+ select |
|
| 354 |
+ MGD.MSG_GROUP_ID as msgGroupId |
|
| 355 |
+ , MGD.MSG_GROUP_CNT as msgGroupCnt |
|
| 356 |
+ , MGD.RESERVE_YN as reserveYn |
|
| 357 |
+ , MGD.RESERVE_C_YN as reserveCYn |
|
| 358 |
+ , DATE_FORMAT(MGD.CANCELDATE, '%Y-%m-%d %H:%i') as canceldate |
|
| 359 |
+ , MGD.CALL_FROM as callFrom |
|
| 360 |
+ , MGD.USER_ID as userId |
|
| 361 |
+ , MGD.SMS_TXT as smsTxt |
|
| 362 |
+ , MGD.SUBJECT as subject |
|
| 363 |
+ , DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d %H:%i') as reqDate |
|
| 364 |
+ , DATE_FORMAT(MGD.REGDATE, '%Y-%m-%d %H:%i') as regDate |
|
| 365 |
+ , MGD.MSG_TYPE as msgType |
|
| 366 |
+ , MGD.MSG_KIND as msgKind |
|
| 367 |
+ , MGD.EACH_PRICE as eachPrice |
|
| 368 |
+ , DATE_FORMAT(MD.SENT_DATE, '%Y-%m-%d %H:%i') as sentDate |
|
| 369 |
+ , MD.FILE_CNT as fileCnt |
|
| 370 |
+ , MD.FILE_PATH1 as filePath1 |
|
| 371 |
+ , MD.FILE_PATH2 as filePath2 |
|
| 372 |
+ , MD.FILE_PATH3 as filePath3 |
|
| 373 |
+ , TIMESTAMPDIFF(minute, DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) as diffMin |
|
| 374 |
+ , SUBJECT_CHK_YN as subjectChkYn |
|
| 375 |
+ from |
|
| 376 |
+ MJ_MSG_GROUP_DATA MGD |
|
| 377 |
+ inner join MJ_MSG_DATA MD on |
|
| 378 |
+ MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID |
|
| 379 |
+ and MGD.USER_ID = MD.USER_ID |
|
| 380 |
+ where |
|
| 381 |
+ MGD.MSG_GROUP_ID = #msgGroupId# |
|
| 382 |
+ limit 1 |
|
| 383 |
+ |
|
| 384 |
+ </select> |
|
| 385 |
+ |
|
| 386 |
+ |
|
| 387 |
+ <!-- 전체 발송결과 조회 (전송사별)--> |
|
| 388 |
+ <select id="MjonMsgSentDAO.findByMsgDetailListAjax" parameterClass="mjonMsgDetailSentVO" resultClass="mjonMsgDetailSentVO"> |
|
| 389 |
+ /* MjonMsgSentDAO.findByMsgDetailListAjax*/ |
|
| 390 |
+ |
|
| 391 |
+ SELECT |
|
| 392 |
+ A.USER_ID as userId, |
|
| 393 |
+ A.CALL_TO as callTo, |
|
| 394 |
+ case |
|
| 395 |
+ WHEN A.AGENT_CODE = '01' AND (A.RSLT_CODE = '100' and (A.RSLT_CODE2 = '0')) then '성공' |
|
| 396 |
+ WHEN A.AGENT_CODE = '02' AND (A.RSLT_CODE = '0') then '성공' |
|
| 397 |
+ WHEN A.AGENT_CODE = '03' AND (A.RSLT_CODE in ('100', '101', '110', '800')) then '성공'
|
|
| 398 |
+ WHEN A.AGENT_CODE = '04' AND (A.RSLT_CODE in ('4100', '6600', '7000')) then '성공'
|
|
| 399 |
+ WHEN A.AGENT_CODE = '05' AND (A.RSLT_CODE in ('1000', '1001')) then '성공'
|
|
| 400 |
+ WHEN A.AGENT_CODE = '07' AND (A.RSLT_CODE in ('6', '1000')) then '성공'
|
|
| 401 |
+ WHEN A.AGENT_CODE = '08' AND (A.RSLT_CODE in ('1000', '1001')) then '성공'
|
|
| 402 |
+ WHEN A.AGENT_CODE = '09' AND (A.RSLT_CODE in ('1000', '1001')) then '성공'
|
|
| 403 |
+ WHEN (A.RSLT_CODE is null AND A.RSLT_CODE2 IS NULL AND A.SENT_DATE IS NULL AND A.RSLT_DATE IS NULL) then '대기' |
|
| 404 |
+ ELSE '실패' |
|
| 405 |
+ END as statusTxt |
|
| 406 |
+ from |
|
| 407 |
+ MJ_MSG_DATA A |
|
| 408 |
+ where |
|
| 409 |
+ A.MSG_GROUP_ID = #msgGroupId# |
|
| 410 |
+ |
|
| 411 |
+ |
|
| 412 |
+ </select> |
|
| 413 |
+ |
|
| 414 |
+ <!-- REQ_DATE 조회--> |
|
| 415 |
+ <select id="MjonMsgSentDAO.findByReqDateWhereMsgGroupId" parameterClass="String" resultClass="String"> |
|
| 416 |
+ /* MjonMsgSentDAO.findByReqDateWhereMsgGroupId*/ |
|
| 417 |
+ |
|
| 418 |
+ SELECT REQ_DATE FROM MJ_MSG_DATA WHERE MSG_GROUP_ID =#msgGroupId# |
|
| 419 |
+ |
|
| 420 |
+ </select> |
|
| 421 |
+ |
|
| 422 |
+ |
|
| 423 |
+ <!-- 전체 발송결과 조회 (전송사별)--> |
|
| 424 |
+ <select id="MjonMsgSentDAO.selectAllMsgSentList_advc" parameterClass="mjonMsgSentVO" resultClass="mjonMsgSentVO"> |
|
| 425 |
+ /* MjonMsgSentDAO.selectAllMsgSentList_advc */ |
|
| 426 |
+ SELECT |
|
| 427 |
+ B.USER_ID as userId |
|
| 428 |
+ , B.MSG_GROUP_ID as msgGroupId |
|
| 429 |
+ , B.MSG_GROUP_CNT as msgGroupCnt |
|
| 430 |
+ , B.SMS_TXT as smsTxt |
|
| 431 |
+ , B.SUBJECT as subject |
|
| 432 |
+ , B.SUBJECT_CHK_YN as subjectChkYn |
|
| 433 |
+ , CAST(DATE_FORMAT(B.REGDATE, '%Y-%m-%d %H:%i') AS CHAR) AS regDate |
|
| 434 |
+ , CAST(DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %H:%i') AS CHAR) AS reqDate |
|
| 435 |
+ , ( |
|
| 436 |
+ CASE |
|
| 437 |
+ WHEN B.DELAY_YN = 'Y' AND B.DELAY_COMPLETE_YN = 'N' THEN DATE_ADD(B.REQ_DATE, INTERVAL -30 MINUTE) |
|
| 438 |
+ ELSE B.REQ_DATE |
|
| 439 |
+ END |
|
| 440 |
+ ) AS delayOrgTime |
|
| 441 |
+ , B.CALL_FROM as callFrom |
|
| 442 |
+ , B.TOT_PRICE as totPrice |
|
| 443 |
+ , B.EACH_PRICE as eachPrice |
|
| 444 |
+ , B.MSG_TYPE as msgType |
|
| 445 |
+ , B.FILE_CNT as fileCnt |
|
| 446 |
+ , B.AGENT_CODE as agentCode |
|
| 447 |
+ , B.RESERVE_C_YN as reserveCYn |
|
| 448 |
+ , B.CANCELDATE as canceldate |
|
| 449 |
+ , B.DEL_FLAG as delFlag |
|
| 450 |
+ , B.SEND_KIND as sendKind |
|
| 451 |
+ , B.MSG_KIND as msgKind |
|
| 452 |
+ , B.DELAY_YN as delayYn |
|
| 453 |
+ , B.DELAY_COMPLETE_YN as delayCompleteYn |
|
| 454 |
+ , B.RESERVE_YN as reserveYn |
|
| 455 |
+ , B.RESERVE_C_YN as reserveCYn |
|
| 456 |
+ , TIMESTAMPDIFF(minute, CAST(DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %H:%i') AS CHAR), DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i')) as diffMin |
|
| 457 |
+ FROM MJ_MSG_DATA A |
|
| 458 |
+ JOIN MJ_MSG_GROUP_DATA B ON A.MSG_GROUP_ID = B.MSG_GROUP_ID |
|
| 459 |
+ WHERE (B.DEL_FLAG = 'N' OR B.DEL_FLAG IS NULL) |
|
| 460 |
+ AND A.DEL_FLAG = 'N' |
|
| 461 |
+ AND B.USER_ID = #userId# |
|
| 462 |
+ <isNotEmpty property="searchKeyword"> |
|
| 463 |
+ <isEqual property="searchCondition" compareValue="2" > |
|
| 464 |
+ AND B.CALL_FROM LIKE CONCAT('%', #searchKeyword#, '%')
|
|
| 465 |
+ </isEqual> |
|
| 466 |
+ <isEqual property="searchCondition" compareValue="3" > |
|
| 467 |
+ AND B.SMS_TXT LIKE CONCAT('%', #searchKeyword#, '%')
|
|
| 468 |
+ </isEqual> |
|
| 469 |
+ </isNotEmpty> |
|
| 470 |
+ <isNotEmpty property="searchCondition01"> |
|
| 471 |
+ AND B.RESERVE_YN = #searchCondition01# |
|
| 472 |
+ </isNotEmpty> |
|
| 473 |
+ <isNotEmpty property="searchCondition02"> |
|
| 474 |
+ <isEqual property="searchCondition02" compareValue="S"> |
|
| 475 |
+ AND B.MSG_TYPE = '4' |
|
| 476 |
+ </isEqual> |
|
| 477 |
+ <isEqual property="searchCondition02" compareValue="L"> |
|
| 478 |
+ AND B.MSG_TYPE = '6' |
|
| 479 |
+ AND B.FILE_CNT = '0' |
|
| 480 |
+ </isEqual> |
|
| 481 |
+ <isEqual property="searchCondition02" compareValue="M"> |
|
| 482 |
+ <![CDATA[ |
|
| 483 |
+ AND B.MSG_TYPE = '6' |
|
| 484 |
+ AND B.FILE_CNT > '0' |
|
| 485 |
+ ]]> |
|
| 486 |
+ </isEqual> |
|
| 487 |
+ </isNotEmpty> |
|
| 488 |
+ <isNotEmpty property="searchStartDate"> |
|
| 489 |
+ <![CDATA[ |
|
| 490 |
+ AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d') |
|
| 491 |
+ ]]> |
|
| 492 |
+ </isNotEmpty> |
|
| 493 |
+ <isNotEmpty property="searchEndDate"> |
|
| 494 |
+ <![CDATA[ |
|
| 495 |
+ AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') <= DATE_FORMAT(#searchEndDate#, '%Y-%m-%d') |
|
| 496 |
+ ]]> |
|
| 497 |
+ </isNotEmpty> |
|
| 498 |
+ GROUP BY B.MSG_GROUP_ID |
|
| 499 |
+ ORDER BY 1=1 |
|
| 500 |
+ <isNotEmpty property="searchSortCnd"> |
|
| 501 |
+ <isEqual property="searchSortCnd" compareValue="curState"> |
|
| 502 |
+ , curState $searchSortOrd$ |
|
| 503 |
+ , orderByrsltCode |
|
| 504 |
+ </isEqual> |
|
| 505 |
+ <isNotEqual property="searchSortCnd" compareValue="curState"> |
|
| 506 |
+ ,$searchSortCnd$ |
|
| 507 |
+ </isNotEqual> |
|
| 508 |
+ </isNotEmpty> |
|
| 509 |
+ <isNotEmpty property="searchSortOrd"> |
|
| 510 |
+ $searchSortOrd$ |
|
| 511 |
+ </isNotEmpty> |
|
| 512 |
+ LIMIT #recordCountPerPage# OFFSET #firstIndex# |
|
| 513 |
+ |
|
| 514 |
+ |
|
| 515 |
+ </select> |
|
| 516 |
+ |
|
| 225 | 517 |
<!-- 전체 발송결과 조회 (전송사별)--> |
| 226 | 518 |
<select id="MjonMsgSentDAO.selectAllMsgSentList" parameterClass="mjonMsgSentVO" resultClass="mjonMsgSentVO"> |
| 227 | 519 |
SELECT |
--- src/main/webapp/WEB-INF/jsp/cmm/sym/ccm/EgovCcmCmmnCodeTree.jsp
+++ src/main/webapp/WEB-INF/jsp/cmm/sym/ccm/EgovCcmCmmnCodeTree.jsp
... | ... | @@ -553,6 +553,9 @@ |
| 553 | 553 |
<div id="kopost_organization" class="orgCont"></div> |
| 554 | 554 |
</div> |
| 555 | 555 |
<div class="tbWrap"> |
| 556 |
+ <div class="btnWrap"> |
|
| 557 |
+ <input type="button" class="btnType1 bg_456ded main1_save_btn" value="저 장" onClick="fn_save_menuInfo(); return false;"> |
|
| 558 |
+ </div> |
|
| 556 | 559 |
<span class="tbTit" id="menuTopNm" >코드를 선택하세요</span> |
| 557 | 560 |
<table class="tbType2"> |
| 558 | 561 |
<colgroup> |
--- src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp
+++ src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp
... | ... | @@ -22,6 +22,7 @@ |
| 22 | 22 |
<%@ taglib prefix="double-submit" uri="http://www.egovframe.go.kr/tags/double-submit/jsp" %> |
| 23 | 23 |
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> |
| 24 | 24 |
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> |
| 25 |
+<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%> |
|
| 25 | 26 |
<% pageContext.setAttribute("newLineChar", "\r\n"); %>
|
| 26 | 27 |
<% pageContext.setAttribute("newLineChar2", "\n"); %>
|
| 27 | 28 |
<% String serverName = request.getServerName(); %> |
... | ... | @@ -4157,8 +4158,10 @@ |
| 4157 | 4158 |
</td> |
| 4158 | 4159 |
<td> |
| 4159 | 4160 |
<c:choose> |
| 4160 |
- <c:when test="${not empty mjonMsgSentList.regdate}">
|
|
| 4161 |
- <fmt:formatDate value="${mjonMsgSentList.regdate}" pattern="MM-dd HH:mm"/>
|
|
| 4161 |
+ <c:when test="${not empty mjonMsgSentList.regDate}">
|
|
| 4162 |
+<%-- <fmt:formatDate value="${mjonMsgSentList.regDate}" pattern="MM-dd HH:mm"/> --%>
|
|
| 4163 |
+ ${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'MM-dd HH:mm') }
|
|
| 4164 |
+<%-- <c:out value="${mjonMsgSentList.regDate}" /> --%>
|
|
| 4162 | 4165 |
</c:when> |
| 4163 | 4166 |
<c:otherwise> |
| 4164 | 4167 |
- |
... | ... | @@ -4190,7 +4193,8 @@ |
| 4190 | 4193 |
</c:when> |
| 4191 | 4194 |
<c:when test="${mjonMsgSentList.reserveYn eq 'Y' && mjonMsgSentList.reserveCYn eq 'N'}">
|
| 4192 | 4195 |
[예약]<br /> |
| 4193 |
- <fmt:formatDate value="${mjonMsgSentList.reqdate}" pattern="MM-dd HH:mm"/>
|
|
| 4196 |
+<%-- <fmt:formatDate value="${mjonMsgSentList.reqDate}" pattern="MM-dd HH:mm"/> --%>
|
|
| 4197 |
+ ${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'MM-dd HH:mm') }
|
|
| 4194 | 4198 |
</c:when> |
| 4195 | 4199 |
<c:otherwise> |
| 4196 | 4200 |
- |
... | ... | @@ -4367,8 +4371,11 @@ |
| 4367 | 4371 |
</td> |
| 4368 | 4372 |
<td> |
| 4369 | 4373 |
<c:choose> |
| 4370 |
- <c:when test="${not empty mjonMsgSentList.regdate}">
|
|
| 4371 |
- <fmt:formatDate value="${mjonMsgSentList.regdate}" pattern="MM-dd HH:mm"/>
|
|
| 4374 |
+ <c:when test="${not empty mjonMsgSentList.regDate}">
|
|
| 4375 |
+<%-- <fmt:formatDate value="${mjonMsgSentList.regDate}" pattern="MM-dd HH:mm"/> --%>
|
|
| 4376 |
+<%-- <c:out value="${mjonMsgSentList.regDate}" /> --%>
|
|
| 4377 |
+ |
|
| 4378 |
+ ${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'MM-dd HH:mm') }
|
|
| 4372 | 4379 |
</c:when> |
| 4373 | 4380 |
<c:otherwise> |
| 4374 | 4381 |
- |
... | ... | @@ -4400,7 +4407,8 @@ |
| 4400 | 4407 |
</c:when> |
| 4401 | 4408 |
<c:when test="${mjonMsgSentList.reserveYn eq 'Y' && mjonMsgSentList.reserveCYn eq 'N'}">
|
| 4402 | 4409 |
[예약]<br /> |
| 4403 |
- <fmt:formatDate value="${mjonMsgSentList.reqdate}" pattern="yyyy-MM-dd HH:mm"/>
|
|
| 4410 |
+ ${fnc:setStrToDataFormatter(mjonMsgSentList.regDate, 'yyyy-MM-dd HH:mm') }
|
|
| 4411 |
+<%-- <fmt:formatDate value="${mjonMsgSentList.reqDate}" pattern="yyyy-MM-dd HH:mm"/> --%>
|
|
| 4404 | 4412 |
</c:when> |
| 4405 | 4413 |
<c:otherwise> |
| 4406 | 4414 |
- |
... | ... | @@ -4586,8 +4594,8 @@ |
| 4586 | 4594 |
</td> |
| 4587 | 4595 |
<td> |
| 4588 | 4596 |
<c:choose> |
| 4589 |
- <c:when test="${not empty mjonMsgDelaySentList.regdate}">
|
|
| 4590 |
- <fmt:formatDate value="${mjonMsgDelaySentList.regdate}" pattern="yyyy-MM-dd HH:mm"/>
|
|
| 4597 |
+ <c:when test="${not empty mjonMsgDelaySentList.regDate}">
|
|
| 4598 |
+ <fmt:formatDate value="${mjonMsgDelaySentList.regDate}" pattern="yyyy-MM-dd HH:mm"/>
|
|
| 4591 | 4599 |
</c:when> |
| 4592 | 4600 |
<c:otherwise> |
| 4593 | 4601 |
- |
... | ... | @@ -4605,7 +4613,7 @@ |
| 4605 | 4613 |
<c:otherwise> |
| 4606 | 4614 |
<c:choose> |
| 4607 | 4615 |
<c:when test="${mjonMsgDelaySentList.delayYn eq 'Y'}">
|
| 4608 |
- [스미싱의심] <fmt:formatDate value="${mjonMsgDelaySentList.reqdate}" pattern="yyyy-MM-dd HH:mm"/>
|
|
| 4616 |
+ [스미싱의심] <fmt:formatDate value="${mjonMsgDelaySentList.reqDate}" pattern="yyyy-MM-dd HH:mm"/>
|
|
| 4609 | 4617 |
</c:when> |
| 4610 | 4618 |
<c:otherwise> |
| 4611 | 4619 |
- |
... | ... | @@ -4785,6 +4793,10 @@ |
| 4785 | 4793 |
<td> |
| 4786 | 4794 |
<c:choose> |
| 4787 | 4795 |
<c:when test="${not empty kakaoResultList.regDate}">
|
| 4796 |
+ |
|
| 4797 |
+ <c:out value="${kakaoResultList.regDate}" />
|
|
| 4798 |
+ |
|
| 4799 |
+<%-- ${fnc:setStrToDataFormatter(kakaoResultList.regDate, 'MM-dd HH:mm') } --%>
|
|
| 4788 | 4800 |
<fmt:parseDate value="${kakaoResultList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
| 4789 | 4801 |
<fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
| 4790 | 4802 |
</c:when> |
... | ... | @@ -4925,8 +4937,10 @@ |
| 4925 | 4937 |
<td> |
| 4926 | 4938 |
<c:choose> |
| 4927 | 4939 |
<c:when test="${not empty kakaoReserveList.regDate}">
|
| 4928 |
- <fmt:parseDate value="${kakaoReserveList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
|
|
| 4929 |
- <fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/>
|
|
| 4940 |
+ <c:out value="${kakaoReserveList.regDate}" />
|
|
| 4941 |
+ ${fnc:setStrToDataFormatter(kakaoReserveList.regDate, 'MM-dd HH:mm') }
|
|
| 4942 |
+<%-- <fmt:parseDate value="${kakaoReserveList.regDate}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/> --%>
|
|
| 4943 |
+<%-- <fmt:formatDate value="${dateValue}" pattern="MM-dd HH:mm"/> --%>
|
|
| 4930 | 4944 |
|
| 4931 | 4945 |
</c:when> |
| 4932 | 4946 |
<c:otherwise> |
... | ... | @@ -5073,8 +5087,11 @@ |
| 5073 | 5087 |
<td> |
| 5074 | 5088 |
<c:choose> |
| 5075 | 5089 |
<c:when test="${not empty kakaoDelayInfo.regDate}">
|
| 5076 |
- <fmt:parseDate value="${kakaoDelayInfo.regDate}" var="kakaoDelayRegdate" pattern="yyyy-MM-dd HH:mm:ss"/>
|
|
| 5077 |
- <fmt:formatDate value="${kakaoDelayRegdate}" pattern="MM-dd HH:mm"/>
|
|
| 5090 |
+<%-- <c:out value="${kakaoDelayInfo.regDate}" /> --%>
|
|
| 5091 |
+ ${fnc:setStrToDataFormatter(kakaoDelayInfo.regDate, 'MM-dd HH:mm') }
|
|
| 5092 |
+<%-- <fmt:formatDate value="${kakaoDelayRegdate}" pattern="MM-dd HH:mm"/> --%>
|
|
| 5093 |
+<%-- <fmt:parseDate value="${kakaoDelayInfo.regDate}" var="kakaoDelayRegdate" pattern="yyyy-MM-dd HH:mm:ss"/> --%>
|
|
| 5094 |
+<%-- <fmt:formatDate value="${kakaoDelayRegdate}" pattern="MM-dd HH:mm"/> --%>
|
|
| 5078 | 5095 |
</c:when> |
| 5079 | 5096 |
<c:otherwise> |
| 5080 | 5097 |
- |
--- src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
... | ... | @@ -142,10 +142,10 @@ |
| 142 | 142 |
|
| 143 | 143 |
<ul class="tabType4"> |
| 144 | 144 |
<li id="tabAt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlim');">알림톡</button></li>
|
| 145 |
-<%-- <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') --%>
|
|
| 146 |
-<%-- || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> --%> |
|
| 147 |
-<!-- <li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li> -->
|
|
| 148 |
-<%-- </c:if> --%> |
|
| 145 |
+ <c:if test="${pageContext.request.serverName == 'localhost'
|
|
| 146 |
+ || pageContext.request.serverName == '119.193.215.98'}"> |
|
| 147 |
+ <li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li>
|
|
| 148 |
+ </c:if> |
|
| 149 | 149 |
<li id="tabConf" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabConf');">카카오톡 설정</button></li>
|
| 150 | 150 |
<li id="tabIntro" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlimtalkIntrd');">알림톡 소개</button></li>
|
| 151 | 151 |
</ul>(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp
... | ... | @@ -25,16 +25,23 @@ |
| 25 | 25 |
console.log('uri:', uri);
|
| 26 | 26 |
|
| 27 | 27 |
|
| 28 |
- if(uri.includes('selectMsgSentView')){
|
|
| 29 |
- $('.topTab').removeClass("active");
|
|
| 30 |
- $("#smsTab").addClass("active");
|
|
| 31 |
- }else if(uri.includes('selectKakaoSentView')){
|
|
| 32 |
- $('.topTab').removeClass("active");
|
|
| 33 |
- $("#kakaoTab").addClass("active");
|
|
| 34 |
- }else if(uri.includes('faxSendList')){
|
|
| 35 |
- $('.topTab').removeClass("active");
|
|
| 36 |
- $("#faxTab").addClass("active");
|
|
| 28 |
+ // URI 키워드와 해당 탭 ID를 매핑 |
|
| 29 |
+ const tabMapping = [ |
|
| 30 |
+ { keyword: 'selectMsgSentView', tabId: '#smsTab' }, // 'selectMsgSentView' 키워드를 '#smsTab'으로 매핑
|
|
| 31 |
+ { keyword: 'selectKakaoSentView', tabId: '#kakaoTab' }, // 'selectKakaoSentView' 키워드를 '#kakaoTab'으로 매핑
|
|
| 32 |
+ { keyword: 'faxSendList', tabId: '#faxTab' } // 'faxSendList' 키워드를 '#faxTab'으로 매핑
|
|
| 33 |
+ ]; |
|
| 34 |
+ |
|
| 35 |
+ // URI에 특정 키워드가 포함되어 있는지 확인하여 활성 탭 정보를 찾음 |
|
| 36 |
+ const activeTab = tabMapping.find(mapping => uri.includes(mapping.keyword)); // 'uri'에 키워드가 포함된 첫 번째 매핑을 검색 |
|
| 37 |
+ |
|
| 38 |
+ // 매칭된 탭이 있으면 UI를 업데이트하여 해당 탭을 활성화 |
|
| 39 |
+ if (activeTab) {
|
|
| 40 |
+ $('.topTab').removeClass("active"); // 모든 탭에서 "active" 클래스 제거
|
|
| 41 |
+ $(activeTab.tabId).addClass("active"); // 매핑된 탭 ID에 "active" 클래스 추가
|
|
| 37 | 42 |
} |
| 43 |
+ |
|
| 44 |
+ |
|
| 38 | 45 |
} |
| 39 | 46 |
|
| 40 | 47 |
function fnLinkPageTab(tabInfo){
|
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
... | ... | @@ -946,10 +946,10 @@ |
| 946 | 946 |
<ul class="list_tab"> |
| 947 | 947 |
<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
| 948 | 948 |
<li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
|
| 949 |
-<%-- <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') --%>
|
|
| 950 |
-<%-- || fn:contains(pageContext.request.requestURL , '119.193.215.98')}"> --%> |
|
| 951 |
-<!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li> -->
|
|
| 952 |
-<%-- </c:if> --%> |
|
| 949 |
+ <c:if test="${pageContext.request.serverName == 'localhost'
|
|
| 950 |
+ || pageContext.request.serverName == '119.193.215.98'}"> |
|
| 951 |
+ <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
|
|
| 952 |
+ </c:if> |
|
| 953 | 953 |
</ul><!--// tab button --> |
| 954 | 954 |
</div> |
| 955 | 955 |
<!-- 예약관리 > 전체 --> |
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
... | ... | @@ -19,7 +19,7 @@ |
| 19 | 19 |
$(document).ready(function(){
|
| 20 | 20 |
|
| 21 | 21 |
|
| 22 |
- console.log("12111111111111");
|
|
| 22 |
+ console.log(": MsgDataSMLView :");
|
|
| 23 | 23 |
|
| 24 | 24 |
// console.log(' + $(#tabDision).val() : ',$('#tabDision').val())
|
| 25 | 25 |
// if($('#tabDision').val() == 'tab02'){
|
... | ... | @@ -3397,7 +3397,7 @@ |
| 3397 | 3397 |
} |
| 3398 | 3398 |
|
| 3399 | 3399 |
//제목 사용한 경우 |
| 3400 |
- if($("input[name=title_status]:checked").val() == 'Y') {
|
|
| 3400 |
+ if($("input[name=subjectChkYn]:checked").val() == 'Y') {
|
|
| 3401 | 3401 |
form.mmsSubject.value = msgForm.mmsSubject.value; |
| 3402 | 3402 |
} else {
|
| 3403 | 3403 |
form.mmsSubject.value = ""; //초기화 |
... | ... | @@ -3411,7 +3411,7 @@ |
| 3411 | 3411 |
form.eachPrice.value = '<c:out value="${longPrice}" />';
|
| 3412 | 3412 |
|
| 3413 | 3413 |
//제목 사용한 경우 |
| 3414 |
- if($("input[name=title_status]:checked").val() == 'Y') {
|
|
| 3414 |
+ if($("input[name=subjectChkYn]:checked").val() == 'Y') {
|
|
| 3415 | 3415 |
form.mmsSubject.value = msgForm.mmsSubject.value; |
| 3416 | 3416 |
} else {
|
| 3417 | 3417 |
form.mmsSubject.value = ""; //초기화 |
... | ... | @@ -3964,6 +3964,8 @@ |
| 3964 | 3964 |
</c:otherwise> |
| 3965 | 3965 |
</c:choose> |
| 3966 | 3966 |
</h2> |
| 3967 |
+ <!-- /web/mjon/msgdata/selectMsgDataSMLViewAjax.do --> |
|
| 3968 |
+ <!-- MsgDataSMLView.jsp --> |
|
| 3967 | 3969 |
<button type="button" class="button info" onclick="infoPop('selectMsgDataView1');">사용안내</button>
|
| 3968 | 3970 |
</div> |
| 3969 | 3971 |
<div class="send_general"> |
... | ... | @@ -4018,9 +4020,9 @@ |
| 4018 | 4020 |
<td> |
| 4019 | 4021 |
<ul class="title_wrap"> |
| 4020 | 4022 |
<li> |
| 4021 |
- <input id="title_y" type="radio"name="title_status" value="Y" onchange="titleStatus(this);"> |
|
| 4023 |
+ <input id="title_y" type="radio"name="subjectChkYn" value="Y" onchange="titleStatus(this);"> |
|
| 4022 | 4024 |
<label for="title_y">사용</label> |
| 4023 |
- <input id="title_n" type="radio" name="title_status" value="N" onchange="titleStatus(this);" checked="checked"> |
|
| 4025 |
+ <input id="title_n" type="radio" name="subjectChkYn" value="N" onchange="titleStatus(this);" checked="checked"> |
|
| 4024 | 4026 |
<label for="title_n">사용안함</label> |
| 4025 | 4027 |
</li> |
| 4026 | 4028 |
<li class="textbox"> |
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp
... | ... | @@ -123,18 +123,18 @@ |
| 123 | 123 |
</div> |
| 124 | 124 |
</div> |
| 125 | 125 |
</div> |
| 126 |
- <div class="inner"> |
|
| 127 |
- <!-- send top --> |
|
| 128 |
- <div class="send_top"> |
|
| 129 |
- <!-- tab button --> |
|
| 130 |
- <ul class="tabType1"> |
|
| 131 |
- <li class="tab ${tabDision eq 'tab01' ? 'active' : ''}">
|
|
| 132 |
- <button type="button" onclick="javascript:fnMsgDataView(); return false;">일반문자</button> |
|
| 133 |
- </li> |
|
| 134 |
- <li class="tab ${tabDision eq 'tab02' ? 'active' : ''}">
|
|
| 135 |
- <button type="button" onclick="javascript:fnMsgExcelDataView(); return false;">대량문자(광고문자)</button> |
|
| 136 |
- </li> |
|
| 137 |
- </ul><!--// tab button --> |
|
| 126 |
+ <div class="inner"> |
|
| 127 |
+ <!-- send top --> |
|
| 128 |
+ <div class="send_top"> |
|
| 129 |
+ <!-- tab button --> |
|
| 130 |
+ <ul class="tabType1"> |
|
| 131 |
+ <li class="tab ${tabDision eq 'tab01' ? 'active' : ''}">
|
|
| 132 |
+ <button type="button" onclick="javascript:fnMsgDataView(); return false;">일반문자</button> |
|
| 133 |
+ </li> |
|
| 134 |
+ <li class="tab ${tabDision eq 'tab02' ? 'active' : ''}">
|
|
| 135 |
+ <button type="button" onclick="javascript:fnMsgExcelDataView(); return false;">대량문자(광고문자)</button> |
|
| 136 |
+ </li> |
|
| 137 |
+ </ul><!--// tab button --> |
|
| 138 | 138 |
<!-- tab content1 --> |
| 139 | 139 |
<!-- <span id="contentArea"></span> --> |
| 140 | 140 |
<div class="top_content ${tabDision eq 'tab02' ? 'get_excel' : ''} current contentArea" id="tab1_1" style="min-height: 555px;"></div>
|
--- src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax.jsp
... | ... | @@ -3,19 +3,23 @@ |
| 3 | 3 |
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> |
| 4 | 4 |
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> |
| 5 | 5 |
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> |
| 6 |
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> |
|
| 6 | 7 |
<%@ page import="itn.com.cmm.LoginVO" %> |
| 7 | 8 |
<script src="/publish/js/content.js"></script> |
| 8 | 9 |
<script src="/publish/js/popupLayer.js"></script> |
| 9 | 10 |
<script type="text/javascript"> |
| 11 |
+/* 문자 발송결과 리스트 advc*/ |
|
| 10 | 12 |
$(document).ready(function(){
|
| 11 |
- var startDate = '${startDate}';
|
|
| 12 |
- var endDate = '${endDate}';
|
|
| 13 |
+// var searchStartDate = '${searchStartDate}';
|
|
| 14 |
+// console.log('searchStartDate : ', searchStartDate);
|
|
| 15 |
+// var searchEndDate = '${searchEndDate}';
|
|
| 16 |
+// console.log('searchEndDate : ', searchEndDate);
|
|
| 13 | 17 |
|
| 14 |
- // DatePicker 값 수정 |
|
| 15 |
- var startDatePicker = $('#startDate').pickadate('picker');
|
|
| 16 |
- startDatePicker.set('select', startDate, { format: 'yyyy/mm/dd' });
|
|
| 17 |
- startDatePicker = $('#endDate').pickadate('picker');
|
|
| 18 |
- startDatePicker.set('select', endDate, { format: 'yyyy/mm/dd' });
|
|
| 18 |
+// // DatePicker 값 수정 |
|
| 19 |
+// var startDatePicker = $('#searchStartDate').pickadate('picker');
|
|
| 20 |
+// startDatePicker.set('select', searchStartDate, { format: 'yyyy/mm/dd' });
|
|
| 21 |
+// startDatePicker = $('#searchEndDate').pickadate('picker');
|
|
| 22 |
+// startDatePicker.set('select', searchEndDate, { format: 'yyyy/mm/dd' });
|
|
| 19 | 23 |
|
| 20 | 24 |
|
| 21 | 25 |
/* 목록 정렬 항목 아이콘 표시 */ |
... | ... | @@ -58,21 +62,96 @@ |
| 58 | 62 |
} |
| 59 | 63 |
}); |
| 60 | 64 |
|
| 61 |
- if($("#tdType").val() == "groupList"){
|
|
| 62 |
- $('td[name="listTd"]').attr("rowspan", "2")
|
|
| 63 |
- }else{
|
|
| 64 |
- $('tr[name="listTr"]').remove();
|
|
| 65 |
- $('td[name="listSucc"]').remove();
|
|
| 66 |
- } |
|
| 67 | 65 |
}); |
| 66 |
+ |
|
| 67 |
+ |
|
| 68 |
+function fn_sentDetailView(msgGroupId) {
|
|
| 69 |
+ // msgGroupId 값을 form에 설정 |
|
| 70 |
+ $("#searchForm #msgGroupId").val(msgGroupId);
|
|
| 71 |
+ |
|
| 72 |
+ // form을 해당 URL로 제출 |
|
| 73 |
+ $("#searchForm").attr("action", "/web/mjon/msgsent/msgSentDetailView.do");
|
|
| 74 |
+ $("#searchForm").submit();
|
|
| 75 |
+} |
|
| 76 |
+ |
|
| 77 |
+ |
|
| 78 |
+// function fnReservCancel(msgGroupId, agentCode, msgType){
|
|
| 79 |
+function fnReservCancel(msgGroupId){
|
|
| 80 |
+ |
|
| 81 |
+ var form = document.resCancelForm; |
|
| 82 |
+ var loginVO = '${LoginVO}';
|
|
| 83 |
+ |
|
| 84 |
+ form.msgGroupId.value = msgGroupId; |
|
| 85 |
+// form.agentCode.value = agentCode; |
|
| 86 |
+// form.msgType.value = msgType; |
|
| 87 |
+ |
|
| 88 |
+ if(loginVO == "" || loginVO == null){
|
|
| 89 |
+ |
|
| 90 |
+ alert("로그인 후 이용이 가능합니다.");
|
|
| 91 |
+ return false; |
|
| 92 |
+ |
|
| 93 |
+ } |
|
| 94 |
+ console.log('msgGroupId : ', msgGroupId);
|
|
| 95 |
+ var data = new FormData(form); |
|
| 96 |
+ url = "/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do"; |
|
| 97 |
+ |
|
| 98 |
+ if(confirm("정말 예약을 취소하시겠습니까?")){
|
|
| 99 |
+ |
|
| 100 |
+ $.ajax({
|
|
| 101 |
+ type: "POST", |
|
| 102 |
+ url: url, |
|
| 103 |
+ data: data, |
|
| 104 |
+ dataType:'json', |
|
| 105 |
+ async: true, |
|
| 106 |
+ processData: false, |
|
| 107 |
+ contentType: false, |
|
| 108 |
+ cache: false, |
|
| 109 |
+ success: function (returnData, status) {
|
|
| 110 |
+ if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
| 111 |
+ if("fail"==returnData.result){
|
|
| 112 |
+ |
|
| 113 |
+ alert(returnData.message); |
|
| 114 |
+ return false; |
|
| 115 |
+ } |
|
| 116 |
+ |
|
| 117 |
+// var smsCnt = returnData.resultSts; |
|
| 118 |
+ |
|
| 119 |
+ alert("예약 발송이 정상적으로 취소 되었습니다.");
|
|
| 120 |
+ |
|
| 121 |
+ //예약 관리 리스트 다시 불러오기 |
|
| 122 |
+ linkPage(1); |
|
| 123 |
+ //현황도 갱신 필요하여 새로고침으로 변경 |
|
| 124 |
+// location.reload(true); |
|
| 125 |
+ |
|
| 126 |
+ } else if(status== 'fail'){
|
|
| 127 |
+ alert(returnData.message); |
|
| 128 |
+ } |
|
| 129 |
+ }, |
|
| 130 |
+ error: function (e) {
|
|
| 131 |
+ alert("예약 취소에 실패하였습니다."); console.log("ERROR : ", e);
|
|
| 132 |
+ }, |
|
| 133 |
+ beforeSend : function(xmlHttpRequest) {
|
|
| 134 |
+ //로딩창 show |
|
| 135 |
+ $('.loading_layer').addClass('active');
|
|
| 136 |
+ }, |
|
| 137 |
+ complete : function(xhr, textStatus) {
|
|
| 138 |
+ //로딩창 hide |
|
| 139 |
+ $('.loading_layer').removeClass('active');
|
|
| 140 |
+ } |
|
| 141 |
+ }); |
|
| 142 |
+ |
|
| 143 |
+ } |
|
| 144 |
+ |
|
| 145 |
+} |
|
| 146 |
+ |
|
| 68 | 147 |
|
| 69 | 148 |
</script> |
| 70 | 149 |
<div class="list_info"> |
| 71 |
- <input type="hidden" id="tdType" value="${mjonMsgSentVO.listType}">
|
|
| 72 |
- <p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
|
|
| 150 |
+ <p>총 <span class="c_e40000" id="testId"><c:out value="${totalRecordCount}"/></span>건</p>
|
|
| 73 | 151 |
<div> |
| 152 |
+ <p class="cf_text c_e40000">※ 예약문자 발송취소는 예약 발송시간 기준 5분 전까지만 가능</p> |
|
| 74 | 153 |
<label for="pageUnit" class="label">줄보기 선택</label> |
| 75 |
- <select id="pageUnit" name="pageUnit" class="selType2"> |
|
| 154 |
+ <select id="pageUnitS" class="selType2"> |
|
| 76 | 155 |
<option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
|
| 77 | 156 |
<option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option>
|
| 78 | 157 |
<option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option>
|
... | ... | @@ -84,134 +163,100 @@ |
| 84 | 163 |
<div class="tb_wrap"> |
| 85 | 164 |
<table class="tType4"> |
| 86 | 165 |
<colgroup> |
| 87 |
- <col style="width: 40px;"> |
|
| 166 |
+ <col style="width: 45px;"> |
|
| 88 | 167 |
<col style="width: 12%;"> |
| 89 | 168 |
<col style="width: 8%;"> |
| 90 |
- <col style="width: 90px;"> |
|
| 91 |
- <col style="width: 10%;"> |
|
| 92 |
- <col style="width: 15%;"> |
|
| 93 |
- <col style="width: 12%;"> |
|
| 169 |
+ <col style="width: auto;"> |
|
| 94 | 170 |
<col style="width: 8%;"> |
| 95 |
- <c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
|
|
| 96 |
- <col style="width: 8%;"> |
|
| 97 |
- <col style="width: 8%;"> |
|
| 98 |
- </c:if> |
|
| 171 |
+ <col style="width: 6%;"> |
|
| 172 |
+ <col style="width: 6%;"> |
|
| 173 |
+ <col style="width: 6%;"> |
|
| 174 |
+ <col style="width: 6%;"> |
|
| 175 |
+ <col style="width: 11%;"> |
|
| 99 | 176 |
</colgroup> |
| 100 | 177 |
<thead> |
| 101 | 178 |
<tr> |
| 102 |
- <th> |
|
| 179 |
+ <th rowspan="2"> |
|
| 103 | 180 |
<label for="allCheck" class="label">전체 선택</label> |
| 104 | 181 |
<input type="checkbox" id="allCheck" name="allCheck"> |
| 105 | 182 |
</th> |
| 106 |
- <th>발송일시 |
|
| 183 |
+ <th rowspan="2">발송일시 |
|
| 107 | 184 |
<div class="sort_wrap"> |
| 108 | 185 |
<input type="button" class="sort sortBtn" id="sort_reqdate"> |
| 109 | 186 |
</div> |
| 110 | 187 |
</th> |
| 111 |
- <th>형태 |
|
| 188 |
+ <th rowspan="2">형태 |
|
| 112 | 189 |
<div class="sort_wrap"> |
| 113 | 190 |
<input type="button" class="sort sortBtn" id="sort_orderByCode"> |
| 114 | 191 |
</div> |
| 115 | 192 |
</th> |
| 116 |
- <th>발송방식 |
|
| 117 |
- <div class="sort_wrap"> |
|
| 118 |
- <input type="button" class="sort sortBtn" id="sort_sendKind"> |
|
| 119 |
- </div> |
|
| 120 |
- </th> |
|
| 121 |
- <th>내용</th> |
|
| 122 |
- <th>받는사람 |
|
| 123 |
- <div class="sort_wrap"> |
|
| 124 |
- <input type="button" class="sort sortBtn" id="sort_callTo"> |
|
| 125 |
- </div> |
|
| 126 |
- </th> |
|
| 127 |
- <th>발신번호 |
|
| 128 |
- <div class="sort_wrap"> |
|
| 129 |
- <input type="button" class="sort sortBtn" id="sort_callFrom"> |
|
| 130 |
- </div> |
|
| 131 |
- </th> |
|
| 132 |
- <c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
|
|
| 133 |
- <th> |
|
| 193 |
+ <th rowspan="2">내용</th> |
|
| 194 |
+ <th rowspan="2"> |
|
| 134 | 195 |
발송건수 |
| 135 | 196 |
<div class="sort_wrap"> |
| 136 | 197 |
<input type="button" class="sort sortBtn" id="sort_msgGroupCnt"> |
| 137 | 198 |
</div> |
| 138 | 199 |
</th> |
| 139 |
- </c:if> |
|
| 140 |
- <th>결과</th> |
|
| 141 |
- <c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
|
|
| 142 |
- <th>건수</th> |
|
| 143 |
- </c:if> |
|
| 144 |
- <th>금액</th> |
|
| 200 |
+ <th colspan="3">결과</th> |
|
| 201 |
+ <th rowspan="2">금액(원)</th> |
|
| 202 |
+ <th rowspan="2">진행상황</th> |
|
| 203 |
+<!-- <th>금액</th> --> |
|
| 204 |
+ </tr> |
|
| 205 |
+ <tr> |
|
| 206 |
+ <th>대기</th> |
|
| 207 |
+ <th>성공</th> |
|
| 208 |
+ <th>실패</th> |
|
| 145 | 209 |
</tr> |
| 146 | 210 |
</thead> |
| 147 | 211 |
<tbody> |
| 148 | 212 |
<c:choose> |
| 149 | 213 |
<c:when test="${not empty resultAllSentList}">
|
| 150 |
- <c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
|
|
| 151 |
- <c:set var="replaceCnt" value="0" /> |
|
| 152 |
- <c:set var="electionCnt" value="0" /> |
|
| 153 |
- <c:set var="advertisementCnt" value="0" /> |
|
| 154 |
- |
|
| 155 |
- <c:if test="${fn:indexOf(resultAllSentList.smsTxt,'[*이름*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*1*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*2*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*3*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*4*]') != -1}">
|
|
| 156 |
- <c:set var="replaceCnt" value="1" /> |
|
| 157 |
- </c:if> |
|
| 158 |
- <c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(선거운동정보)') == 0}">
|
|
| 159 |
- <c:set var="electionCnt" value="1" /> |
|
| 160 |
- </c:if> |
|
| 161 |
- <c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(광고)') == 0}">
|
|
| 162 |
- <c:set var="advertisementCnt" value="1" /> |
|
| 163 |
- </c:if> |
|
| 214 |
+ <c:forEach var="result" items="${resultAllSentList}" varStatus="status">
|
|
| 164 | 215 |
<tr> |
| 165 |
- <td name="listTd"> |
|
| 216 |
+ <td> |
|
| 166 | 217 |
<label for="msgSentDel${status.count}" class="label">선택</label>
|
| 167 | 218 |
<c:choose> |
| 168 |
- <c:when test="${resultAllSentList.curState == '0'}">
|
|
| 169 |
- <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}" disabled>
|
|
| 219 |
+ <c:when test="${result.statusCd eq '03' or result.statusCd eq '01'}">
|
|
| 220 |
+ <input type="checkbox" disabled> |
|
| 170 | 221 |
</c:when> |
| 171 | 222 |
<c:otherwise> |
| 172 |
- <c:choose> |
|
| 173 |
- <c:when test="${mjonMsgSentVO.listType == 'groupList'}">
|
|
| 174 |
- <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}">
|
|
| 175 |
- </c:when> |
|
| 176 |
- <c:otherwise> |
|
| 177 |
- <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgSeq}">
|
|
| 178 |
- </c:otherwise> |
|
| 179 |
- </c:choose> |
|
| 223 |
+ <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${result.msgGroupId}">
|
|
| 180 | 224 |
</c:otherwise> |
| 181 | 225 |
</c:choose> |
| 182 | 226 |
|
| 183 | 227 |
</td> |
| 184 |
- <td name="listTd"> |
|
| 228 |
+ <td> |
|
| 185 | 229 |
<c:choose> |
| 186 |
- <c:when test="${resultAllSentList.delayYn eq 'Y' && resultAllSentList.delayCompleteYn eq 'N'}">
|
|
| 230 |
+ <c:when test="${result.delayYn eq 'Y' && result.delayCompleteYn eq 'N'}">
|
|
| 187 | 231 |
|
| 188 | 232 |
<c:choose> |
| 189 |
- <c:when test="${resultAllSentList.curState eq '0'}">
|
|
| 233 |
+ <c:when test="${result.curState eq '0'}">
|
|
| 190 | 234 |
<%-- |
| 191 | 235 |
20240906 추가 |
| 192 | 236 |
발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다. |
| 193 | 237 |
30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌 |
| 194 | 238 |
--%> |
| 195 |
- <p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.delayOrgTime}" /></p>
|
|
| 239 |
+ <p>${result.delayOrgTime}</p>
|
|
| 196 | 240 |
</c:when> |
| 197 | 241 |
<c:otherwise> |
| 198 |
- <p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
|
|
| 242 |
+ <p>${result.reqDate}</p>
|
|
| 199 | 243 |
</c:otherwise> |
| 200 | 244 |
</c:choose> |
| 201 | 245 |
|
| 202 | 246 |
</c:when> |
| 203 | 247 |
<c:otherwise> |
| 204 |
- <p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
|
|
| 248 |
+ <p>${result.reqDate}</p>
|
|
| 249 |
+ |
|
| 205 | 250 |
</c:otherwise> |
| 206 | 251 |
</c:choose> |
| 207 | 252 |
</td> |
| 208 |
- <td name="listTd"> |
|
| 253 |
+ <td> |
|
| 209 | 254 |
<p> |
| 210 | 255 |
<c:choose> |
| 211 |
- <c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt eq 0 }">
|
|
| 256 |
+ <c:when test="${result.msgType eq '6' && result.fileCnt eq 0 }">
|
|
| 212 | 257 |
장문 |
| 213 | 258 |
</c:when> |
| 214 |
- <c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt ne 0 }">
|
|
| 259 |
+ <c:when test="${result.msgType eq '6' && result.fileCnt ne 0 }">
|
|
| 215 | 260 |
그림 |
| 216 | 261 |
</c:when> |
| 217 | 262 |
<c:otherwise> |
... | ... | @@ -220,239 +265,69 @@ |
| 220 | 265 |
</c:choose> |
| 221 | 266 |
</p> |
| 222 | 267 |
</td> |
| 223 |
- <td name="listTd"> |
|
| 224 |
- <p> |
|
| 225 |
- <c:choose> |
|
| 226 |
- <c:when test="${resultAllSentList.sendKind eq 'H' }">
|
|
| 227 |
- WEB |
|
| 228 |
- </c:when> |
|
| 229 |
- <c:when test="${resultAllSentList.sendKind eq 'A'}">
|
|
| 230 |
- API |
|
| 231 |
- </c:when> |
|
| 232 |
- <c:otherwise> |
|
| 233 |
- - |
|
| 234 |
- </c:otherwise> |
|
| 235 |
- </c:choose> |
|
| 236 |
- </p> |
|
| 237 |
- </td> |
|
| 238 |
- <td name="listTd"> |
|
| 239 |
- <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button>
|
|
| 240 |
- <button class="btnType btnType20" onClick="javascript:fnMjMsgReSendAll('${resultAllSentList.msgGroupId}','${replaceCnt}','${electionCnt}','${advertisementCnt}'); return false;">재전송</button>
|
|
| 241 |
- </td> |
|
| 242 |
- <td name="listTd"> |
|
| 243 |
- <c:choose> |
|
| 244 |
- <c:when test="${mjonMsgSentVO.listType == 'groupList'}">
|
|
| 268 |
+ <td class="result_cont"> |
|
| 269 |
+ <div class="icon_wrap"> |
|
| 270 |
+ <c:if test="${result.reserveYn eq 'Y'}">
|
|
| 271 |
+ <span class="re">예약</span> |
|
| 272 |
+ <!-- 예약일때만 분할이 있음 --> |
|
| 273 |
+ <c:if test="${result.divideYN eq 'Y'}">
|
|
| 274 |
+ <span class="di">분할</span> |
|
| 275 |
+ </c:if> |
|
| 276 |
+ </c:if> |
|
| 277 |
+ <a href="#none" onclick="fn_sentDetailView('${result.msgGroupId}')">
|
|
| 245 | 278 |
<c:choose> |
| 246 |
- <c:when test="${resultAllSentList.msgGroupCnt > 1}">
|
|
| 247 |
- <p> |
|
| 248 |
- <c:choose> |
|
| 249 |
- <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
| 250 |
- <c:out value="${resultAllSentList.addrNm}"/>
|
|
| 251 |
- </c:when> |
|
| 252 |
- <c:otherwise> |
|
| 253 |
- <c:out value="${resultAllSentList.callToComma}"/>
|
|
| 254 |
- </c:otherwise> |
|
| 255 |
- </c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
|
|
| 256 |
- </p> |
|
| 257 |
- </c:when> |
|
| 258 |
- <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
| 259 |
- <p><c:out value="${resultAllSentList.addrNm}"/></p>
|
|
| 279 |
+ <c:when test="${result.subjectChkYn eq 'Y' }">
|
|
| 280 |
+ <c:out value="${result.subject }" />
|
|
| 260 | 281 |
</c:when> |
| 261 | 282 |
<c:otherwise> |
| 262 |
- <p><c:out value="${resultAllSentList.callToComma}"/></p>
|
|
| 283 |
+ <c:out value="${result.smsTxt}" />
|
|
| 263 | 284 |
</c:otherwise> |
| 264 | 285 |
</c:choose> |
| 265 |
- </c:when> |
|
| 266 |
- <c:otherwise> |
|
| 267 |
- <c:choose> |
|
| 268 |
- <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
|
|
| 269 |
- <p><c:out value="${resultAllSentList.addrNm}"/></p>
|
|
| 270 |
- </c:when> |
|
| 271 |
- <c:otherwise> |
|
| 272 |
- <p><c:out value="${resultAllSentList.callToComma}"/></p>
|
|
| 273 |
- </c:otherwise> |
|
| 274 |
- </c:choose> |
|
| 275 |
- </c:otherwise> |
|
| 276 |
- </c:choose> |
|
| 286 |
+ </a> |
|
| 287 |
+ </div> |
|
| 277 | 288 |
</td> |
| 278 |
- <td name="listTd"> |
|
| 279 |
- <p><c:out value="${resultAllSentList.callFromComma}"/></p>
|
|
| 289 |
+ <td> |
|
| 290 |
+ <p><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /> </p>
|
|
| 280 | 291 |
</td> |
| 281 |
- <c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
|
|
| 282 |
- <td name="listTd"> |
|
| 283 |
- <p><c:out value="${resultAllSentList.msgGroupCnt}"/></p>
|
|
| 292 |
+ <td> |
|
| 293 |
+ <p><fmt:formatNumber value="${result.resultWValue}" type="number" groupingUsed="true" /> </p>
|
|
| 284 | 294 |
</td> |
| 285 |
- </c:if> |
|
| 286 |
- <!-- 발송 성공/실패 listType에 따른 전송건별(groupList), 개인별 리스트 처리--> |
|
| 287 |
- <c:set var="succ" value="0"/> <!-- 정상수신--> |
|
| 288 |
- <c:set var="fail" value="0"/> <!-- 수신실패--> |
|
| 289 |
- <c:set var="wait" value="0"/> <!-- 결과대기--> |
|
| 290 |
- <c:set var="succPrice" value="0"/> <!-- 정상수신 가격--> |
|
| 291 |
- <c:set var="failPrice" value="0"/> <!-- 수신실패 가격--> |
|
| 292 |
- <c:set var="waitPrice" value="0"/> <!-- 결과대기 가격--> |
|
| 293 |
- <c:set var="msgResultSts" value=""/><!-- 결과상태 확인 --> |
|
| 294 |
- <c:forEach var="resultMsgSFList" items="${resultMsgSucFailList}" varStatus="status">
|
|
| 295 |
+ <td> |
|
| 296 |
+ <p class="c_002c9a"><fmt:formatNumber value="${result.resultSValue}" type="number" groupingUsed="true" /> </p>
|
|
| 297 |
+ </td> |
|
| 298 |
+ <td> |
|
| 299 |
+ <p class="c_e40000"><fmt:formatNumber value="${result.resultFValue}" type="number" groupingUsed="true" /> </p>
|
|
| 300 |
+ </td> |
|
| 301 |
+ <td> |
|
| 295 | 302 |
<c:choose> |
| 296 |
- <c:when test="${mjonMsgSentVO.listType == 'groupList'}">
|
|
| 297 |
- <c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId}">
|
|
| 298 |
- <c:if test="${resultMsgSFList.msgResultSts == 'S'}">
|
|
| 299 |
- <c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/>
|
|
| 300 |
- <c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/>
|
|
| 301 |
- </c:if> |
|
| 302 |
- <c:if test="${resultMsgSFList.msgResultSts == 'F'}">
|
|
| 303 |
- <c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/>
|
|
| 304 |
- <c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/>
|
|
| 305 |
- </c:if> |
|
| 306 |
- <c:if test="${resultMsgSFList.msgResultSts == 'W'}">
|
|
| 307 |
- <c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/>
|
|
| 308 |
- <c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/>
|
|
| 309 |
- </c:if> |
|
| 310 |
- </c:if> |
|
| 303 |
+ <c:when test="${result.totPrice eq '-' }">
|
|
| 304 |
+ <c:out value="${result.totPrice }" />
|
|
| 311 | 305 |
</c:when> |
| 312 | 306 |
<c:otherwise> |
| 313 |
- <c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId && resultAllSentList.msgSeq == resultMsgSFList.msgSeq}">
|
|
| 314 |
- <c:set var="msgResultSts" value="${resultMsgSFList.msgResultSts}"/>
|
|
| 315 |
- <c:if test="${resultMsgSFList.msgResultSts == 'S'}">
|
|
| 316 |
- <c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/>
|
|
| 317 |
- <c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/>
|
|
| 318 |
- </c:if> |
|
| 319 |
- <c:if test="${resultMsgSFList.msgResultSts == 'F'}">
|
|
| 320 |
- <c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/>
|
|
| 321 |
- <c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/>
|
|
| 322 |
- </c:if> |
|
| 323 |
- <c:if test="${resultMsgSFList.msgResultSts == 'W'}">
|
|
| 324 |
- <c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/>
|
|
| 325 |
- <c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/>
|
|
| 326 |
- </c:if> |
|
| 327 |
- </c:if> |
|
| 307 |
+ <fmt:formatNumber value="${result.totPrice }" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
|
|
| 328 | 308 |
</c:otherwise> |
| 329 | 309 |
</c:choose> |
| 330 |
- </c:forEach> |
|
| 331 |
- <td name="listSucc"> |
|
| 332 |
- <p class="fwRg c_002c9a">정상수신</p> |
|
| 333 | 310 |
</td> |
| 334 |
- <td name="listSucc"> |
|
| 311 |
+ <td> |
|
| 335 | 312 |
<c:choose> |
| 336 |
- <c:when test="${mjonMsgSentVO.listType == 'groupList' && succ > 0}">
|
|
| 337 |
- <p class="fwRg c_002c9a" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p>
|
|
| 313 |
+ <c:when test="${result.statusCd ne '03' }">
|
|
| 314 |
+ <ec:code codeId="ITN057" code="${result.statusCd }" />
|
|
| 338 | 315 |
</c:when> |
| 339 | 316 |
<c:otherwise> |
| 340 |
- <p class="fwRg c_002c9a"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p>
|
|
| 317 |
+ <p><button class="btnType btnType20" onClick="javascript:fnReservCancel('${result.msgGroupId}'); return false;">예약취소</button></p>
|
|
| 341 | 318 |
</c:otherwise> |
| 342 | 319 |
</c:choose> |
| 343 |
- </td> |
|
| 344 |
- <!-- 과금/비과금 --> |
|
| 345 |
- <td name="listSucc"> |
|
| 346 |
- <p class="fwRg c_002c9a"> |
|
| 347 |
- <c:choose> |
|
| 348 |
- <c:when test="${succPrice > 0}">
|
|
| 349 |
- <fmt:formatNumber value="${succPrice}" pattern="#,###.#"/>
|
|
| 350 |
- </c:when> |
|
| 351 |
- <c:otherwise> |
|
| 352 |
- 0 |
|
| 353 |
- </c:otherwise> |
|
| 354 |
- </c:choose> |
|
| 355 |
- </p> |
|
| 320 |
+ |
|
| 321 |
+ <!-- --> |
|
| 356 | 322 |
</td> |
| 357 | 323 |
|
| 358 |
- <c:if test="${mjonMsgSentVO.listType != 'groupList'}">
|
|
| 359 |
- <c:if test="${msgResultSts == 'S'}">
|
|
| 360 |
- <td> |
|
| 361 |
- <p class="fwRg c_002c9a">정상수신</p> |
|
| 362 |
- </td> |
|
| 363 |
- <!-- 과금/비과금 --> |
|
| 364 |
- <td> |
|
| 365 |
- <p class="fwRg c_002c9a"> |
|
| 366 |
- <c:choose> |
|
| 367 |
- <c:when test="${succPrice > 0}">
|
|
| 368 |
- <fmt:formatNumber value="${succPrice}" pattern="#,###.#"/>
|
|
| 369 |
- </c:when> |
|
| 370 |
- <c:otherwise> |
|
| 371 |
- 0 |
|
| 372 |
- </c:otherwise> |
|
| 373 |
- </c:choose> |
|
| 374 |
- </p> |
|
| 375 |
- </td> |
|
| 376 |
- </c:if> |
|
| 377 |
- <c:if test="${msgResultSts == 'F'}">
|
|
| 378 |
- <td> |
|
| 379 |
- <p class="fwRg c_e40000">수신오류</p> |
|
| 380 |
- </td> |
|
| 381 |
- <!-- 과금/비과금 --> |
|
| 382 |
- <td> |
|
| 383 |
- <p class="fwRg c_e40000"> |
|
| 384 |
- <c:choose> |
|
| 385 |
- <c:when test="${failPrice > 0}">
|
|
| 386 |
- <fmt:formatNumber value="${failPrice}" pattern="#,###.#"/>
|
|
| 387 |
- </c:when> |
|
| 388 |
- <c:otherwise> |
|
| 389 |
- 0 |
|
| 390 |
- </c:otherwise> |
|
| 391 |
- </c:choose> |
|
| 392 |
- </p> |
|
| 393 |
- </td> |
|
| 394 |
- </c:if> |
|
| 395 |
- <c:if test="${msgResultSts == 'W'}">
|
|
| 396 |
- <td> |
|
| 397 |
- <p class="fwRg c_e40000">결과대기</p> |
|
| 398 |
- </td> |
|
| 399 |
- <!-- 과금/비과금 --> |
|
| 400 |
- <td> |
|
| 401 |
- <p class="fwRg c_e40000"> |
|
| 402 |
- <c:choose> |
|
| 403 |
- <c:when test="${waitPrice > 0}">
|
|
| 404 |
- <fmt:formatNumber value="${waitPrice}" pattern="#,###.#"/>
|
|
| 405 |
- </c:when> |
|
| 406 |
- <c:otherwise> |
|
| 407 |
- 0 |
|
| 408 |
- </c:otherwise> |
|
| 409 |
- </c:choose> |
|
| 410 |
- </p> |
|
| 411 |
- </td> |
|
| 412 |
- </c:if> |
|
| 413 |
- </c:if> |
|
| 414 |
- </tr> |
|
| 415 |
- <tr name="listTr"> |
|
| 416 |
- <td> |
|
| 417 |
- <p class="c_222">실패/대기</p> |
|
| 418 |
- </td> |
|
| 419 |
- <td> |
|
| 420 |
- <c:choose> |
|
| 421 |
- <c:when test="${mjonMsgSentVO.listType == 'groupList' && (fail+wait) > 0}">
|
|
| 422 |
- <p class="c_222" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;">
|
|
| 423 |
- <fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/>
|
|
| 424 |
- </p> |
|
| 425 |
- </c:when> |
|
| 426 |
- <c:otherwise> |
|
| 427 |
- <p class="c_222"> |
|
| 428 |
- <fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/>
|
|
| 429 |
- </p> |
|
| 430 |
- </c:otherwise> |
|
| 431 |
- </c:choose> |
|
| 432 |
- </td> |
|
| 433 |
- <td> |
|
| 434 |
- <p class="c_222"> |
|
| 435 |
- <c:choose> |
|
| 436 |
- <c:when test="${(failPrice+waitPrice) > 0}">
|
|
| 437 |
- <fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/>
|
|
| 438 |
- </c:when> |
|
| 439 |
- <c:otherwise> |
|
| 440 |
- 0 |
|
| 441 |
- </c:otherwise> |
|
| 442 |
- </c:choose> |
|
| 443 |
- </p> |
|
| 444 |
- </td> |
|
| 324 |
+ |
|
| 445 | 325 |
</tr> |
| 446 | 326 |
</c:forEach> |
| 447 | 327 |
</c:when> |
| 448 | 328 |
<c:otherwise> |
| 449 | 329 |
<tr> |
| 450 |
- <c:if test="${mjonMsgSentVO.listType eq 'groupList'}">
|
|
| 451 |
- <td colspan="11">발송 내역이 없습니다.</td> |
|
| 452 |
- </c:if> |
|
| 453 |
- <c:if test="${mjonMsgSentVO.listType ne 'groupList'}">
|
|
| 454 |
- <td colspan="9">발송 내역이 없습니다.</td> |
|
| 455 |
- </c:if> |
|
| 330 |
+ <td colspan="10">발송 내역이 없습니다.</td> |
|
| 456 | 331 |
</tr> |
| 457 | 332 |
</c:otherwise> |
| 458 | 333 |
</c:choose> |
... | ... | @@ -462,14 +337,14 @@ |
| 462 | 337 |
<div class="table_btn clearfix"> |
| 463 | 338 |
<div class="table_btn_left"> |
| 464 | 339 |
<!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) --> |
| 465 |
-<!-- <button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> --> |
|
| 466 |
- <button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button> |
|
| 467 |
- <button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${mjonMsgSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button>
|
|
| 468 |
- <button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${mjonMsgSentVO.listType}'); return false;"></i>수신거부번호 등록</button>
|
|
| 340 |
+ <button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> |
|
| 341 |
+<!-- <button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button> --> |
|
| 342 |
+<%-- <button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${mjonMsgSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button> --%>
|
|
| 343 |
+<%-- <button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${mjonMsgSentVO.listType}'); return false;"></i>수신거부번호 등록</button> --%>
|
|
| 469 | 344 |
</div> |
| 470 | 345 |
<div class="table_btn_right"> |
| 471 |
- <button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${mjonMsgSentVO.tabType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button>
|
|
| 472 |
- <button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${mjonMsgSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button>
|
|
| 346 |
+ <button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad(); return false;"><i class="downroad"></i>발송결과 리스트</button> |
|
| 347 |
+<%-- <button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${mjonMsgSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button> --%>
|
|
| 473 | 348 |
</div> |
| 474 | 349 |
</div> |
| 475 | 350 |
<c:if test="${!empty resultAllSentList}">
|
... | ... | @@ -477,3 +352,12 @@ |
| 477 | 352 |
<ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" />
|
| 478 | 353 |
</ul> |
| 479 | 354 |
</c:if> |
| 355 |
+ |
|
| 356 |
+ <form name="detailForm" id="detailForm" method="post"> |
|
| 357 |
+ <input type="hidden" name="msgGroupId" id="msgGroupId" value=""/> |
|
| 358 |
+ </form> |
|
| 359 |
+ |
|
| 360 |
+ |
|
| 361 |
+ <form id="resCancelForm" name="resCancelForm" method="post"> |
|
| 362 |
+ <input type="hidden" id="msgGroupId" name="msgGroupId" value=""/> |
|
| 363 |
+ </form> |
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentAllListAjax_advc_backup_20250115.jsp
... | ... | @@ -0,0 +1,479 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | +<%@ page import="itn.com.cmm.LoginVO" %> | |
| 7 | +<script src="/publish/js/content.js"></script> | |
| 8 | +<script src="/publish/js/popupLayer.js"></script> | |
| 9 | +<script type="text/javascript"> | |
| 10 | +$(document).ready(function(){ | |
| 11 | + var startDate = '${startDate}'; | |
| 12 | + var endDate = '${endDate}'; | |
| 13 | + | |
| 14 | + // DatePicker 값 수정 | |
| 15 | + var startDatePicker = $('#startDate').pickadate('picker'); | |
| 16 | + startDatePicker.set('select', startDate, { format: 'yyyy/mm/dd' }); | |
| 17 | + startDatePicker = $('#endDate').pickadate('picker'); | |
| 18 | + startDatePicker.set('select', endDate, { format: 'yyyy/mm/dd' }); | |
| 19 | + | |
| 20 | + | |
| 21 | + /* 목록 정렬 항목 아이콘 표시 */ | |
| 22 | + var searchSortCnd = $("[name='searchSortCnd']").val(); | |
| 23 | + var searchSortOrd = $("[name='searchSortOrd']").val(); | |
| 24 | + if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd != undefined && searchSortOrd != undefined) { | |
| 25 | + var $sort_div = $("#sort_"+ searchSortCnd); | |
| 26 | + var sortClass = 'sortBtn' ; | |
| 27 | + if (searchSortOrd == "desc") sortClass = "sortBtnDesc"; | |
| 28 | + $sort_div.replaceClass('sortBtn' , sortClass) ; | |
| 29 | + $sort_div.attr("sortOrd", searchSortOrd); | |
| 30 | + } | |
| 31 | + | |
| 32 | + //체크박스 전체 선택 및 해제 | |
| 33 | + var allChkSts = false; | |
| 34 | + $("#allCheck").click(function(){ | |
| 35 | + | |
| 36 | + if(!allChkSts){// 전체선택이 해제되어 있을 경우 | |
| 37 | + | |
| 38 | + $("input[name=msgSentDel]").prop("checked", true); | |
| 39 | + allChkSts = true; | |
| 40 | + | |
| 41 | + //발송 대기건은 선택 삭제가 안되도록 처리함 | |
| 42 | + $("input:checkbox[name='msgSentDel']:checked").each(function(index){ | |
| 43 | + | |
| 44 | + var disabledChk = $(this).prop('disabled'); | |
| 45 | + if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장 | |
| 46 | + | |
| 47 | + $(this).prop("checked", false); | |
| 48 | + | |
| 49 | + } | |
| 50 | + | |
| 51 | + }); | |
| 52 | + | |
| 53 | + }else{ | |
| 54 | + | |
| 55 | + $("input[name=msgSentDel]").prop("checked", false); | |
| 56 | + allChkSts = false; | |
| 57 | + | |
| 58 | + } | |
| 59 | + }); | |
| 60 | + | |
| 61 | + if($("#tdType").val() == "groupList"){ | |
| 62 | + $('.listTd').attr("rowspan", "2") | |
| 63 | + }else{ | |
| 64 | + $('.listTr').remove(); | |
| 65 | + $('.listSucc').remove(); | |
| 66 | + } | |
| 67 | +}); | |
| 68 | + | |
| 69 | +</script> | |
| 70 | + <div class="list_info"> | |
| 71 | + <input type="hidden" id="tdType" value="${mjonMsgSentVO.listType}"> | |
| 72 | + <p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p> | |
| 73 | + <div> | |
| 74 | + <label for="pageUnit" class="label">줄보기 선택</label> | |
| 75 | + <select id="pageUnit" name="pageUnit" class="selType2"> | |
| 76 | + <option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option> | |
| 77 | + <option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option> | |
| 78 | + <option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option> | |
| 79 | + <option value="100" <c:if test="${paginationInfo.recordCountPerPage == '100'}">selected</c:if> >100개보기</option> | |
| 80 | + </select> | |
| 81 | + </div> | |
| 82 | + </div> | |
| 83 | + <!-- 받는사람(전송건별) - 전체 --> | |
| 84 | + <div class="tb_wrap"> | |
| 85 | + <table class="tType4"> | |
| 86 | + <colgroup> | |
| 87 | + <col style="width: 40px;"> | |
| 88 | + <col style="width: 12%;"> | |
| 89 | + <col style="width: 8%;"> | |
| 90 | + <col style="width: 90px;"> | |
| 91 | + <col style="width: 10%;"> | |
| 92 | + <col style="width: 15%;"> | |
| 93 | + <col style="width: 12%;"> | |
| 94 | + <col style="width: 8%;"> | |
| 95 | + <c:if test="${mjonMsgSentVO.listType eq 'groupList'}"> | |
| 96 | + <col style="width: 8%;"> | |
| 97 | + <col style="width: 8%;"> | |
| 98 | + </c:if> | |
| 99 | + </colgroup> | |
| 100 | + <thead> | |
| 101 | + <tr> | |
| 102 | + <th> | |
| 103 | + <label for="allCheck" class="label">전체 선택</label> | |
| 104 | + <input type="checkbox" id="allCheck" name="allCheck"> | |
| 105 | + </th> | |
| 106 | + <th>발송일시 | |
| 107 | + <div class="sort_wrap"> | |
| 108 | + <input type="button" class="sort sortBtn" id="sort_reqdate"> | |
| 109 | + </div> | |
| 110 | + </th> | |
| 111 | + <th>형태 | |
| 112 | + <div class="sort_wrap"> | |
| 113 | + <input type="button" class="sort sortBtn" id="sort_orderByCode"> | |
| 114 | + </div> | |
| 115 | + </th> | |
| 116 | + <th>발송방식 | |
| 117 | + <div class="sort_wrap"> | |
| 118 | + <input type="button" class="sort sortBtn" id="sort_sendKind"> | |
| 119 | + </div> | |
| 120 | + </th> | |
| 121 | + <th>내용</th> | |
| 122 | + <th>받는사람 | |
| 123 | + <div class="sort_wrap"> | |
| 124 | + <input type="button" class="sort sortBtn" id="sort_callTo"> | |
| 125 | + </div> | |
| 126 | + </th> | |
| 127 | + <th>발신번호 | |
| 128 | + <div class="sort_wrap"> | |
| 129 | + <input type="button" class="sort sortBtn" id="sort_callFrom"> | |
| 130 | + </div> | |
| 131 | + </th> | |
| 132 | + <c:if test="${mjonMsgSentVO.listType eq 'groupList'}"> | |
| 133 | + <th> | |
| 134 | + 발송건수 | |
| 135 | + <div class="sort_wrap"> | |
| 136 | + <input type="button" class="sort sortBtn" id="sort_msgGroupCnt"> | |
| 137 | + </div> | |
| 138 | + </th> | |
| 139 | + </c:if> | |
| 140 | + <th>결과</th> | |
| 141 | + <c:if test="${mjonMsgSentVO.listType eq 'groupList'}"> | |
| 142 | + <th>건수</th> | |
| 143 | + </c:if> | |
| 144 | + <th>금액</th> | |
| 145 | + </tr> | |
| 146 | + </thead> | |
| 147 | + <tbody> | |
| 148 | + <c:choose> | |
| 149 | + <c:when test="${not empty resultAllSentList}"> | |
| 150 | + <c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status"> | |
| 151 | + <c:set var="replaceCnt" value="0" /> | |
| 152 | + <c:set var="electionCnt" value="0" /> | |
| 153 | + <c:set var="advertisementCnt" value="0" /> | |
| 154 | + | |
| 155 | + <c:if test="${fn:indexOf(resultAllSentList.smsTxt,'[*이름*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*1*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*2*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*3*]') != -1 || fn:indexOf(resultAllSentList.smsTxt,'[*4*]') != -1}"> | |
| 156 | + <c:set var="replaceCnt" value="1" /> | |
| 157 | + </c:if> | |
| 158 | + <c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(선거운동정보)') == 0}"> | |
| 159 | + <c:set var="electionCnt" value="1" /> | |
| 160 | + </c:if> | |
| 161 | + <c:if test="${fn:indexOf(resultAllSentList.smsTxt,'(광고)') == 0}"> | |
| 162 | + <c:set var="advertisementCnt" value="1" /> | |
| 163 | + </c:if> | |
| 164 | + <tr> | |
| 165 | + <td class="listTd"> | |
| 166 | + <label for="msgSentDel${status.count}" class="label">선택</label> | |
| 167 | + <c:choose> | |
| 168 | + <c:when test="${resultAllSentList.curState == '0'}"> | |
| 169 | + <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}" disabled> | |
| 170 | + </c:when> | |
| 171 | + <c:otherwise> | |
| 172 | + <c:choose> | |
| 173 | + <c:when test="${mjonMsgSentVO.listType == 'groupList'}"> | |
| 174 | + <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}"> | |
| 175 | + </c:when> | |
| 176 | + <c:otherwise> | |
| 177 | + <input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgSeq}"> | |
| 178 | + </c:otherwise> | |
| 179 | + </c:choose> | |
| 180 | + </c:otherwise> | |
| 181 | + </c:choose> | |
| 182 | + | |
| 183 | + </td> | |
| 184 | + <td class="listTd"> | |
| 185 | + <c:choose> | |
| 186 | + <c:when test="${resultAllSentList.delayYn eq 'Y' && resultAllSentList.delayCompleteYn eq 'N'}"> | |
| 187 | + | |
| 188 | + <c:choose> | |
| 189 | + <c:when test="${resultAllSentList.curState eq '0'}"> | |
| 190 | + <%-- | |
| 191 | + 20240906 추가 | |
| 192 | + 발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다. | |
| 193 | + 30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌 | |
| 194 | + --%> | |
| 195 | + <p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.delayOrgTime}" /></p> | |
| 196 | + </c:when> | |
| 197 | + <c:otherwise> | |
| 198 | + <p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p> | |
| 199 | + </c:otherwise> | |
| 200 | + </c:choose> | |
| 201 | + | |
| 202 | + </c:when> | |
| 203 | + <c:otherwise> | |
| 204 | + <p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p> | |
| 205 | + </c:otherwise> | |
| 206 | + </c:choose> | |
| 207 | + </td> | |
| 208 | + <td class="listTd"> | |
| 209 | + <p> | |
| 210 | + <c:choose> | |
| 211 | + <c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt eq 0 }"> | |
| 212 | + 장문 | |
| 213 | + </c:when> | |
| 214 | + <c:when test="${resultAllSentList.msgType eq '6' && resultAllSentList.fileCnt ne 0 }"> | |
| 215 | + 그림 | |
| 216 | + </c:when> | |
| 217 | + <c:otherwise> | |
| 218 | + 단문 | |
| 219 | + </c:otherwise> | |
| 220 | + </c:choose> | |
| 221 | + </p> | |
| 222 | + </td> | |
| 223 | + <td class="listTd"> | |
| 224 | + <p> | |
| 225 | + <c:choose> | |
| 226 | + <c:when test="${resultAllSentList.sendKind eq 'H' }"> | |
| 227 | + WEB | |
| 228 | + </c:when> | |
| 229 | + <c:when test="${resultAllSentList.sendKind eq 'A'}"> | |
| 230 | + API | |
| 231 | + </c:when> | |
| 232 | + <c:otherwise> | |
| 233 | + - | |
| 234 | + </c:otherwise> | |
| 235 | + </c:choose> | |
| 236 | + </p> | |
| 237 | + </td> | |
| 238 | + <td class="listTd"> | |
| 239 | + <button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> | |
| 240 | + <button class="btnType btnType20" onClick="javascript:fnMjMsgReSendAll('${resultAllSentList.msgGroupId}','${replaceCnt}','${electionCnt}','${advertisementCnt}'); return false;">재전송</button> | |
| 241 | + </td> | |
| 242 | + <td class="listTd"> | |
| 243 | + <c:choose> | |
| 244 | + <c:when test="${mjonMsgSentVO.listType == 'groupList'}"> | |
| 245 | + <c:choose> | |
| 246 | + <c:when test="${resultAllSentList.msgGroupCnt > 1}"> | |
| 247 | + <p> | |
| 248 | + <c:choose> | |
| 249 | + <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}"> | |
| 250 | + <c:out value="${resultAllSentList.addrNm}"/> | |
| 251 | + </c:when> | |
| 252 | + <c:otherwise> | |
| 253 | + <c:out value="${resultAllSentList.callToComma}"/> | |
| 254 | + </c:otherwise> | |
| 255 | + </c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명 | |
| 256 | + </p> | |
| 257 | + </c:when> | |
| 258 | + <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}"> | |
| 259 | + <p><c:out value="${resultAllSentList.addrNm}"/></p> | |
| 260 | + </c:when> | |
| 261 | + <c:otherwise> | |
| 262 | + <p><c:out value="${resultAllSentList.callToComma}"/></p> | |
| 263 | + </c:otherwise> | |
| 264 | + </c:choose> | |
| 265 | + </c:when> | |
| 266 | + <c:otherwise> | |
| 267 | + <c:choose> | |
| 268 | + <c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}"> | |
| 269 | + <p><c:out value="${resultAllSentList.addrNm}"/></p> | |
| 270 | + </c:when> | |
| 271 | + <c:otherwise> | |
| 272 | + <p><c:out value="${resultAllSentList.callToComma}"/></p> | |
| 273 | + </c:otherwise> | |
| 274 | + </c:choose> | |
| 275 | + </c:otherwise> | |
| 276 | + </c:choose> | |
| 277 | + </td> | |
| 278 | + <td class="listTd"> | |
| 279 | + <p><c:out value="${resultAllSentList.callFromComma}"/></p> | |
| 280 | + </td> | |
| 281 | + <c:if test="${mjonMsgSentVO.listType eq 'groupList'}"> | |
| 282 | + <td class="listTd"> | |
| 283 | + <p><c:out value="${resultAllSentList.msgGroupCnt}"/></p> | |
| 284 | + </td> | |
| 285 | + </c:if> | |
| 286 | + <!-- 발송 성공/실패 listType에 따른 전송건별(groupList), 개인별 리스트 처리--> | |
| 287 | + <c:set var="succ" value="0"/> <!-- 정상수신--> | |
| 288 | + <c:set var="fail" value="0"/> <!-- 수신실패--> | |
| 289 | + <c:set var="wait" value="0"/> <!-- 결과대기--> | |
| 290 | + <c:set var="succPrice" value="0"/> <!-- 정상수신 가격--> | |
| 291 | + <c:set var="failPrice" value="0"/> <!-- 수신실패 가격--> | |
| 292 | + <c:set var="waitPrice" value="0"/> <!-- 결과대기 가격--> | |
| 293 | + <c:set var="msgResultSts" value=""/><!-- 결과상태 확인 --> | |
| 294 | + <c:forEach var="resultMsgSFList" items="${resultMsgSucFailList}" varStatus="status"> | |
| 295 | + <c:choose> | |
| 296 | + <c:when test="${mjonMsgSentVO.listType == 'groupList'}"> | |
| 297 | + <c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId}"> | |
| 298 | + <c:if test="${resultMsgSFList.msgResultSts == 'S'}"> | |
| 299 | + <c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/> | |
| 300 | + <c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/> | |
| 301 | + </c:if> | |
| 302 | + <c:if test="${resultMsgSFList.msgResultSts == 'F'}"> | |
| 303 | + <c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/> | |
| 304 | + <c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/> | |
| 305 | + </c:if> | |
| 306 | + <c:if test="${resultMsgSFList.msgResultSts == 'W'}"> | |
| 307 | + <c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/> | |
| 308 | + <c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/> | |
| 309 | + </c:if> | |
| 310 | + </c:if> | |
| 311 | + </c:when> | |
| 312 | + <c:otherwise> | |
| 313 | + <c:if test="${resultAllSentList.msgGroupId == resultMsgSFList.msgGroupId && resultAllSentList.msgSeq == resultMsgSFList.msgSeq}"> | |
| 314 | + <c:set var="msgResultSts" value="${resultMsgSFList.msgResultSts}"/> | |
| 315 | + <c:if test="${resultMsgSFList.msgResultSts == 'S'}"> | |
| 316 | + <c:set var="succ" value="${resultMsgSFList.msgResultCnt}"/> | |
| 317 | + <c:set var="succPrice" value="${resultMsgSFList.eachPrice * succ}"/> | |
| 318 | + </c:if> | |
| 319 | + <c:if test="${resultMsgSFList.msgResultSts == 'F'}"> | |
| 320 | + <c:set var="fail" value="${resultMsgSFList.msgResultCnt}"/> | |
| 321 | + <c:set var="failPrice" value="${resultMsgSFList.eachPrice * fail}"/> | |
| 322 | + </c:if> | |
| 323 | + <c:if test="${resultMsgSFList.msgResultSts == 'W'}"> | |
| 324 | + <c:set var="wait" value="${resultMsgSFList.msgResultCnt}"/> | |
| 325 | + <c:set var="waitPrice" value="${resultMsgSFList.eachPrice * wait}"/> | |
| 326 | + </c:if> | |
| 327 | + </c:if> | |
| 328 | + </c:otherwise> | |
| 329 | + </c:choose> | |
| 330 | + </c:forEach> | |
| 331 | + <td class="listSucc"> | |
| 332 | + <p class="fwRg c_002c9a">정상수신</p> | |
| 333 | + </td> | |
| 334 | + <td class="listSucc"> | |
| 335 | + <c:choose> | |
| 336 | + <c:when test="${mjonMsgSentVO.listType == 'groupList' && succ > 0}"> | |
| 337 | + <p class="fwRg c_002c9a" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p> | |
| 338 | + </c:when> | |
| 339 | + <c:otherwise> | |
| 340 | + <p class="fwRg c_002c9a"><fmt:formatNumber value="${succ}" pattern="#,###.#"/></p> | |
| 341 | + </c:otherwise> | |
| 342 | + </c:choose> | |
| 343 | + </td> | |
| 344 | + <!-- 과금/비과금 --> | |
| 345 | + <td class="listSucc"> | |
| 346 | + <p class="fwRg c_002c9a"> | |
| 347 | + <c:choose> | |
| 348 | + <c:when test="${succPrice > 0}"> | |
| 349 | + <fmt:formatNumber value="${succPrice}" pattern="#,###.#"/> | |
| 350 | + </c:when> | |
| 351 | + <c:otherwise> | |
| 352 | + 0 | |
| 353 | + </c:otherwise> | |
| 354 | + </c:choose> | |
| 355 | + </p> | |
| 356 | + </td> | |
| 357 | + | |
| 358 | + <c:if test="${mjonMsgSentVO.listType != 'groupList'}"> | |
| 359 | + <c:if test="${msgResultSts == 'S'}"> | |
| 360 | + <td> | |
| 361 | + <p class="fwRg c_002c9a">정상수신</p> | |
| 362 | + </td> | |
| 363 | + <!-- 과금/비과금 --> | |
| 364 | + <td> | |
| 365 | + <p class="fwRg c_002c9a"> | |
| 366 | + <c:choose> | |
| 367 | + <c:when test="${succPrice > 0}"> | |
| 368 | + <fmt:formatNumber value="${succPrice}" pattern="#,###.#"/> | |
| 369 | + </c:when> | |
| 370 | + <c:otherwise> | |
| 371 | + 0 | |
| 372 | + </c:otherwise> | |
| 373 | + </c:choose> | |
| 374 | + </p> | |
| 375 | + </td> | |
| 376 | + </c:if> | |
| 377 | + <c:if test="${msgResultSts == 'F'}"> | |
| 378 | + <td> | |
| 379 | + <p class="fwRg c_e40000">수신오류</p> | |
| 380 | + </td> | |
| 381 | + <!-- 과금/비과금 --> | |
| 382 | + <td> | |
| 383 | + <p class="fwRg c_e40000"> | |
| 384 | + <c:choose> | |
| 385 | + <c:when test="${failPrice > 0}"> | |
| 386 | + <fmt:formatNumber value="${failPrice}" pattern="#,###.#"/> | |
| 387 | + </c:when> | |
| 388 | + <c:otherwise> | |
| 389 | + 0 | |
| 390 | + </c:otherwise> | |
| 391 | + </c:choose> | |
| 392 | + </p> | |
| 393 | + </td> | |
| 394 | + </c:if> | |
| 395 | + <c:if test="${msgResultSts == 'W'}"> | |
| 396 | + <td> | |
| 397 | + <p class="fwRg c_e40000">결과대기</p> | |
| 398 | + </td> | |
| 399 | + <!-- 과금/비과금 --> | |
| 400 | + <td> | |
| 401 | + <p class="fwRg c_e40000"> | |
| 402 | + <c:choose> | |
| 403 | + <c:when test="${waitPrice > 0}"> | |
| 404 | + <fmt:formatNumber value="${waitPrice}" pattern="#,###.#"/> | |
| 405 | + </c:when> | |
| 406 | + <c:otherwise> | |
| 407 | + 0 | |
| 408 | + </c:otherwise> | |
| 409 | + </c:choose> | |
| 410 | + </p> | |
| 411 | + </td> | |
| 412 | + </c:if> | |
| 413 | + </c:if> | |
| 414 | + </tr> | |
| 415 | + <tr class="listTr"> | |
| 416 | + <td> | |
| 417 | + <p class="c_222">실패/대기</p> | |
| 418 | + </td> | |
| 419 | + <td> | |
| 420 | + <c:choose> | |
| 421 | + <c:when test="${mjonMsgSentVO.listType == 'groupList' && (fail+wait) > 0}"> | |
| 422 | + <p class="c_222" onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"> | |
| 423 | + <fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/> | |
| 424 | + </p> | |
| 425 | + </c:when> | |
| 426 | + <c:otherwise> | |
| 427 | + <p class="c_222"> | |
| 428 | + <fmt:formatNumber value="${fail}" pattern="#,###"/> / <fmt:formatNumber value="${wait}" pattern="#,###"/> | |
| 429 | + </p> | |
| 430 | + </c:otherwise> | |
| 431 | + </c:choose> | |
| 432 | + </td> | |
| 433 | + <td> | |
| 434 | + <p class="c_222"> | |
| 435 | + <c:choose> | |
| 436 | + <c:when test="${(failPrice+waitPrice) > 0}"> | |
| 437 | + <fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/> | |
| 438 | + </c:when> | |
| 439 | + <c:otherwise> | |
| 440 | + 0 | |
| 441 | + </c:otherwise> | |
| 442 | + </c:choose> | |
| 443 | + </p> | |
| 444 | + </td> | |
| 445 | + </tr> | |
| 446 | + </c:forEach> | |
| 447 | + </c:when> | |
| 448 | + <c:otherwise> | |
| 449 | + <tr> | |
| 450 | + <c:if test="${mjonMsgSentVO.listType eq 'groupList'}"> | |
| 451 | + <td colspan="11">발송 내역이 없습니다.</td> | |
| 452 | + </c:if> | |
| 453 | + <c:if test="${mjonMsgSentVO.listType ne 'groupList'}"> | |
| 454 | + <td colspan="9">발송 내역이 없습니다.</td> | |
| 455 | + </c:if> | |
| 456 | + </tr> | |
| 457 | + </c:otherwise> | |
| 458 | + </c:choose> | |
| 459 | + </tbody> | |
| 460 | + </table> | |
| 461 | + </div> | |
| 462 | + <div class="table_btn clearfix"> | |
| 463 | + <div class="table_btn_left"> | |
| 464 | + <!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) --> | |
| 465 | +<!-- <button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> --> | |
| 466 | + <button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button> | |
| 467 | + <button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${mjonMsgSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button> | |
| 468 | + <button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${mjonMsgSentVO.listType}'); return false;"></i>수신거부번호 등록</button> | |
| 469 | + </div> | |
| 470 | + <div class="table_btn_right"> | |
| 471 | + <button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${mjonMsgSentVO.tabType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button> | |
| 472 | + <button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${mjonMsgSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button> | |
| 473 | + </div> | |
| 474 | + </div> | |
| 475 | + <c:if test="${!empty resultAllSentList}"> | |
| 476 | + <ul class="pagination"> | |
| 477 | + <ui:pagination paginationInfo = "${paginationInfo}" type="imageWeb" jsFunction="linkPage" /> | |
| 478 | + </ul> | |
| 479 | + </c:if> |
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp
... | ... | @@ -0,0 +1,1024 @@ |
| 1 | +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> | |
| 2 | +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> | |
| 3 | +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> | |
| 4 | +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> | |
| 5 | +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> | |
| 6 | +<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> | |
| 7 | +<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%> | |
| 8 | +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> | |
| 9 | +<%@ page import="itn.com.cmm.LoginVO" %> | |
| 10 | +<% pageContext.setAttribute("newLineChar", "\n"); %> | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | +<style> | |
| 15 | +/* Tabulator Placeholder 기본 스타일 유지 */ | |
| 16 | +.tabulator-placeholder { | |
| 17 | + font-size: 22px !important; /* 기존 폰트 크기 유지 */ | |
| 18 | + color: #e2d6d6 !important; /* 기존 색상 유지 */ | |
| 19 | + font-weight: normal !important; /* 기본 폰트 두께 유지 */ | |
| 20 | + display: flex; | |
| 21 | + justify-content: center; | |
| 22 | + align-items: center; | |
| 23 | + height: 100%; | |
| 24 | +} | |
| 25 | + | |
| 26 | +</style> | |
| 27 | + | |
| 28 | +<script type="text/javascript"> | |
| 29 | + | |
| 30 | +var currentSearchKeyword = ""; // 검색어 저장 | |
| 31 | +var currentTabFilter = "전체"; // 현재 선택된 탭 (기본값: 전체) | |
| 32 | + | |
| 33 | +var $tbDtailList = null; //에러 팝업 영역 | |
| 34 | +$(document).ready(function(){ | |
| 35 | + | |
| 36 | + // 탭별 하위 버튼 활성화 | |
| 37 | + fn_rowBtnSH('전체'); | |
| 38 | + // 주소록 그룹 불러오기 | |
| 39 | + getAddrGroupList(); | |
| 40 | + | |
| 41 | + //Tabulator AJAX Data Loading | |
| 42 | + $tbDtailList = new Tabulator("#detailPopup", { | |
| 43 | + height: "255px", | |
| 44 | + width: "20%", | |
| 45 | + // layout: "fitDataStretch", // 데이터가 너비에 맞게 늘어나도록 설정 | |
| 46 | + layout: "fitColumns", // fitDataStretch 대신 fitColumns 사용 | |
| 47 | + autoColumns: false, | |
| 48 | + headerHozAlign: "center", | |
| 49 | + validationMode: "highlight", | |
| 50 | + clipboard: false, | |
| 51 | + clipboardCopySelector: "table", | |
| 52 | + clipboardPasteAction: "insert", // insert, update, replace | |
| 53 | + placeholder:"데이터를 불러오고 있습니다...", | |
| 54 | + columns: [ | |
| 55 | + { | |
| 56 | + title: "휴대폰", | |
| 57 | + field: "phone", | |
| 58 | + hozAlign: "center", | |
| 59 | + headerHozAlign: "center", | |
| 60 | + widthGrow: 1 | |
| 61 | + }, | |
| 62 | + { | |
| 63 | + title: "상세결과", | |
| 64 | + field: "result", | |
| 65 | + hozAlign: "center", | |
| 66 | + headerHozAlign: "center", | |
| 67 | + widthGrow: 1 | |
| 68 | + } | |
| 69 | + ] | |
| 70 | + }); | |
| 71 | + | |
| 72 | + fn_getDetailList(); | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + $('#goPageBtn').click(function(){ | |
| 77 | + $("#goList").submit(); | |
| 78 | + }); | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + // 탭 버튼 클릭 이벤트 | |
| 83 | + $(".tabType3 .tab button").on("click", function () { | |
| 84 | + | |
| 85 | + // 모든 탭의 active 클래스 제거 | |
| 86 | + $(".tabType3 .tab").removeClass("active"); | |
| 87 | + | |
| 88 | + // 클릭한 버튼의 부모 요소(li)에 active 클래스 추가 | |
| 89 | + $(this).parent().addClass("active"); | |
| 90 | + | |
| 91 | + // 기존 버튼들의 title 속성 초기화 | |
| 92 | + $(".tabType3 .tab button").removeAttr("title"); | |
| 93 | + | |
| 94 | + // 선택된 버튼의 title 속성을 "선택됨"으로 변경 | |
| 95 | + $(this).attr("title", "선택됨"); | |
| 96 | + | |
| 97 | + // 검색어 초기화 | |
| 98 | + $("#searchInput").val(""); | |
| 99 | + | |
| 100 | + // 필터 적용 (검색 필터 없이 탭 기준으로만 적용) | |
| 101 | + fn_applyFilters(); | |
| 102 | + }); | |
| 103 | + | |
| 104 | + // 검색 버튼 클릭 시 실행 | |
| 105 | + $("#searchBtn").on("click", function () { | |
| 106 | + fn_search(); | |
| 107 | + }); | |
| 108 | + | |
| 109 | + // 실시간 검색 및 Enter 키 이벤트 처리 | |
| 110 | + $("#searchInput").on("keyup", function (event) { | |
| 111 | + let keyword = $(this).val().trim(); | |
| 112 | + | |
| 113 | + if (keyword.length > 2) { | |
| 114 | + fn_applyFilters({ field: "phone", type: "like", value: keyword }); | |
| 115 | + } else { | |
| 116 | + fn_applyFilters(null); | |
| 117 | + } | |
| 118 | + | |
| 119 | + // Enter 키 입력 시 검색 실행 | |
| 120 | + if (event.key === "Enter") { | |
| 121 | + fn_search(); | |
| 122 | + } | |
| 123 | + }); | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + $('.listClose').on("click", function (){ | |
| 128 | + tooltipInit(); | |
| 129 | + }); | |
| 130 | + | |
| 131 | + $('.grpClose').on("click", function (){ | |
| 132 | + $('#grpNm').val('') | |
| 133 | + }); | |
| 134 | + | |
| 135 | + | |
| 136 | + $(document).on('change', '#addrGrpIdInfo', function() { | |
| 137 | + if ($("#addrGrpIdInfo option:selected").val() != "NEW") { | |
| 138 | + $("#grpNm").val(""); // 새그룹명 Clear; | |
| 139 | + } | |
| 140 | + }); | |
| 141 | + | |
| 142 | +}); | |
| 143 | + | |
| 144 | +//검색 실행 함수 | |
| 145 | +function fn_search() { | |
| 146 | + let keyword = $("#searchInput").val().trim(); | |
| 147 | + | |
| 148 | + if (keyword.length < 3) { | |
| 149 | + alert("검색어를 3자 이상 입력해주세요."); | |
| 150 | + return; | |
| 151 | + } | |
| 152 | + | |
| 153 | + fn_applyFilters({ field: "phone", type: "like", value: keyword }); | |
| 154 | +} | |
| 155 | + | |
| 156 | +/** | |
| 157 | + * @Discription : 튤팁 닫을 때 팝업 초기화 | |
| 158 | + */ | |
| 159 | +function tooltipInit(){ | |
| 160 | + | |
| 161 | + $tbDtailList.clearFilter(); | |
| 162 | + $("#searchInput").val(''); | |
| 163 | + $("#initTab").click(); | |
| 164 | +} | |
| 165 | + | |
| 166 | +/** | |
| 167 | + * @Discription : 상세결과 팝업 내용 가져오는 로직 | |
| 168 | + */ | |
| 169 | +function fn_getDetailList(){ | |
| 170 | + | |
| 171 | + var params = { | |
| 172 | + "msgGroupId" : $('#msgGroupId').val() | |
| 173 | + } | |
| 174 | + | |
| 175 | + $.ajax({ | |
| 176 | + type: "POST", | |
| 177 | + url: "/web/mjon/msgsent/findByMsgDetailListAjax.do", | |
| 178 | + data: params, | |
| 179 | + dataType:'json', | |
| 180 | + async: true, | |
| 181 | + success: function (returnData) { | |
| 182 | + console.log('returnData : ', returnData); | |
| 183 | + if(returnData.status == 'OK'){ | |
| 184 | + fn_setData(returnData.object); | |
| 185 | + | |
| 186 | + } | |
| 187 | + }, | |
| 188 | + error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); } | |
| 189 | + }); | |
| 190 | +} | |
| 191 | + | |
| 192 | + | |
| 193 | +/** | |
| 194 | + * @Description: 데이터 설정 | |
| 195 | + */ | |
| 196 | +function fn_setData(data){ | |
| 197 | +// console.log('data : ', data); | |
| 198 | +// $tbDtailList.clearData(); | |
| 199 | + | |
| 200 | + const resultData = []; // 오류 데이터를 저장할 배열 | |
| 201 | + | |
| 202 | + data.forEach((row, index) => { | |
| 203 | + | |
| 204 | + resultData.push({ | |
| 205 | + // addrNm: row.addrNm, // 폰번호 | |
| 206 | + phone: row.callTo, // 폰번호 | |
| 207 | + result: row.statusTxt // 결과 메시지 추가 | |
| 208 | + }); | |
| 209 | + }); | |
| 210 | + | |
| 211 | + | |
| 212 | + // 오류 및 중복 데이터를 한 번에 추가 | |
| 213 | + $tbDtailList.setData(resultData); | |
| 214 | + | |
| 215 | + | |
| 216 | +}; | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | +/** | |
| 221 | + * @Discription : 필터 적용 | |
| 222 | + */ | |
| 223 | +function fn_applyFilters(newFilter) { | |
| 224 | + // 현재 적용된 모든 필터 가져오기 | |
| 225 | + let filters = []; | |
| 226 | + | |
| 227 | + // 현재 선택된 탭 값 가져오기 | |
| 228 | + let selectedTab = $(".tabType3 .tab.active button").text().trim(); | |
| 229 | + | |
| 230 | + // 탭 필터 적용 (탭이 "전체"가 아닐 경우) | |
| 231 | + if (selectedTab !== "전체") { | |
| 232 | + filters.push({ field: "result", type: "like", value: selectedTab }); | |
| 233 | + } | |
| 234 | + | |
| 235 | + // 검색어가 입력된 경우 검색 필터 추가 | |
| 236 | + if (newFilter && newFilter.value) { | |
| 237 | + filters.push(newFilter); | |
| 238 | + } | |
| 239 | + | |
| 240 | + // 필터 적용 | |
| 241 | + $tbDtailList.setFilter(filters); | |
| 242 | + | |
| 243 | + // Placeholder 업데이트 | |
| 244 | + fn_setPlaceholder("검색 결과가 없습니다."); | |
| 245 | + | |
| 246 | + // 툽팁 하위 버튼 삭제 | |
| 247 | + fn_rowBtnSH(selectedTab); | |
| 248 | +} | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | +/** | |
| 254 | + * @Description: 타블레이서 설명 수정 | |
| 255 | + */ | |
| 256 | +function fn_setPlaceholder(msg){ | |
| 257 | + | |
| 258 | + // 검색 후 데이터가 있는지 확인 후 placeholder 변경 | |
| 259 | + setTimeout(() => { | |
| 260 | + let filteredRows = $tbDtailList.getRows('active').length; // 필터링된 행 개수 가져오기 | |
| 261 | + if (filteredRows === 0) { | |
| 262 | + // 기존 데이터 유지하면서 빈 데이터 추가하여 placeholder 변경 | |
| 263 | + $(".tabulator-placeholder").text(msg); // placeholder 메시지 변경 | |
| 264 | + } | |
| 265 | + }, 300); // 필터 적용 후 반영되도록 약간의 딜레이 추가 | |
| 266 | +} | |
| 267 | + | |
| 268 | + | |
| 269 | +/** | |
| 270 | + * @Description: 필터링된 데이터만 다운로드 | |
| 271 | + */ | |
| 272 | + function fn_downloadFilteredExcel() { | |
| 273 | + // 현재 날짜 및 시간 가져오기 (YYYYMMDD_HHMMSS 형식) | |
| 274 | + let now = new Date(); | |
| 275 | + let timestamp = now.getFullYear() + | |
| 276 | + ("0" + (now.getMonth() + 1)).slice(-2) + | |
| 277 | + ("0" + now.getDate()).slice(-2) + "_" + | |
| 278 | + ("0" + now.getHours()).slice(-2) + | |
| 279 | + ("0" + now.getMinutes()).slice(-2) + | |
| 280 | + ("0" + now.getSeconds()).slice(-2); | |
| 281 | + | |
| 282 | + // 파일명 생성 | |
| 283 | + let fileName = "filtered_data_" + timestamp + ".xlsx"; | |
| 284 | + | |
| 285 | + // 필터링된 데이터 가져오기 | |
| 286 | + let filteredData = getFilteredDataByTab(); | |
| 287 | + | |
| 288 | + if (filteredData.length === 0) { | |
| 289 | + alert("다운로드할 데이터가 없습니다."); | |
| 290 | + return; | |
| 291 | + } | |
| 292 | + | |
| 293 | +// console.log("엑셀 다운로드 - 필터링된 데이터:", filteredData); | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + // 컬럼명(타이틀) 설정 (배열 형태로 변환) | |
| 298 | + let headers = [["휴대폰", "상세결과"]]; | |
| 299 | + | |
| 300 | + console.log(filteredData); // 데이터 확인 | |
| 301 | + console.log(filteredData[0]); // 첫 번째 데이터 확인 (객체 키값 체크) | |
| 302 | + | |
| 303 | + | |
| 304 | + // 필터링된 데이터 배열로 변환 | |
| 305 | + let formattedData = filteredData.map(item => [item.phone, item.result]); | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + // 타이틀 행 추가 | |
| 310 | + formattedData.unshift(headers[0]); | |
| 311 | + | |
| 312 | + // 엑셀 생성 | |
| 313 | + let workbook = XLSX.utils.book_new(); | |
| 314 | + let worksheet = XLSX.utils.aoa_to_sheet(formattedData); // `aoa_to_sheet` 사용 | |
| 315 | + | |
| 316 | + XLSX.utils.book_append_sheet(workbook, worksheet, "Filtered Data"); | |
| 317 | + | |
| 318 | + // 엑셀 파일 다운로드 | |
| 319 | + XLSX.writeFile(workbook, fileName); | |
| 320 | + } | |
| 321 | + | |
| 322 | +/** | |
| 323 | + * @ 예약 취소 | |
| 324 | + */ | |
| 325 | +function fnReservCancel(msgGroupId){ | |
| 326 | + | |
| 327 | + var form = document.resCancelForm; | |
| 328 | + var loginVO = '${LoginVO}'; | |
| 329 | + | |
| 330 | + form.msgGroupId.value = msgGroupId; | |
| 331 | + | |
| 332 | + if(loginVO == "" || loginVO == null){ | |
| 333 | + | |
| 334 | + alert("로그인 후 이용이 가능합니다."); | |
| 335 | + return false; | |
| 336 | + | |
| 337 | + } | |
| 338 | + console.log('msgGroupId : ', msgGroupId); | |
| 339 | + var data = new FormData(form); | |
| 340 | + url = "/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do"; | |
| 341 | + | |
| 342 | + if(confirm("정말 예약을 취소하시겠습니까?")){ | |
| 343 | + | |
| 344 | + $.ajax({ | |
| 345 | + type: "POST", | |
| 346 | + url: url, | |
| 347 | + data: data, | |
| 348 | + dataType:'json', | |
| 349 | + async: true, | |
| 350 | + processData: false, | |
| 351 | + contentType: false, | |
| 352 | + cache: false, | |
| 353 | + success: function (returnData, status) { | |
| 354 | + if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나 | |
| 355 | + if("fail"==returnData.result){ | |
| 356 | + alert(returnData.message); | |
| 357 | + return false; | |
| 358 | + } | |
| 359 | + | |
| 360 | + alert("예약 발송이 정상적으로 취소 되었습니다."); | |
| 361 | + | |
| 362 | + location.reload(true); | |
| 363 | + | |
| 364 | + } else if(status== 'fail'){ | |
| 365 | + alert(returnData.message); | |
| 366 | + } | |
| 367 | + }, | |
| 368 | + error: function (e) { | |
| 369 | + alert("예약 취소에 실패하였습니다."); console.log("ERROR : ", e); | |
| 370 | + }, | |
| 371 | + beforeSend : function(xmlHttpRequest) { | |
| 372 | + //로딩창 show | |
| 373 | + $('.loading_layer').addClass('active'); | |
| 374 | + }, | |
| 375 | + complete : function(xhr, textStatus) { | |
| 376 | + //로딩창 hide | |
| 377 | + $('.loading_layer').removeClass('active'); | |
| 378 | + } | |
| 379 | + }); | |
| 380 | + | |
| 381 | + } | |
| 382 | + | |
| 383 | +} | |
| 384 | + | |
| 385 | +/** | |
| 386 | + * @문자 재전송 | |
| 387 | + */ | |
| 388 | +function fnMjMsgReSendAll(msgGroupId) { | |
| 389 | + // 치환 여부 체크 | |
| 390 | + var replaceYn = fn_getReplaceChk(); | |
| 391 | + // 문자 종류 (일반:N, 광고:A, 선거:C, 관리자:S) | |
| 392 | + var msgKind = $('#msgKind').val(); | |
| 393 | + | |
| 394 | + var form = document.reSendAllForm; | |
| 395 | + form.msgResendAllFlag.value = "Y"; | |
| 396 | + form.msgResendAllGroupId.value = msgGroupId; | |
| 397 | + | |
| 398 | + // 치환문자 포함 여부에 따른 분기 | |
| 399 | + var msg = ""; | |
| 400 | + if (replaceYn) { | |
| 401 | + msg = "문자발송 화면으로 이동합니다.\n특정문구는 변환되지 않은 상태([*이름*],[*1*] 등)로 표기됩니다.\n문자내용, 받는 사람 목록 확인 후 발송해 주세요"; | |
| 402 | +// form.msgResendAllReplaceYn.value = "Y"; | |
| 403 | + } else { | |
| 404 | + var title = (msgKind == 'C') ? "선거문자발송" : "문자발송"; | |
| 405 | + msg = title + " 화면으로 이동합니다.\n문자내용, 받는 사람 목록 확인 후 발송해주세요."; | |
| 406 | + } | |
| 407 | + | |
| 408 | + if (!confirm(msg)) { | |
| 409 | + return; | |
| 410 | + } | |
| 411 | + | |
| 412 | + // msgKind에 따른 action 설정 | |
| 413 | + form.action = getMsgActionUrl(msgKind); | |
| 414 | + if (msgKind === 'A') { | |
| 415 | + form.msgResendAllAdvertiseYn.value = "Y"; // 광고문자 설정 | |
| 416 | + } | |
| 417 | + | |
| 418 | + form.submit(); | |
| 419 | +} | |
| 420 | + | |
| 421 | +function fn_getReplaceChk(){ | |
| 422 | + // 체크할 패턴 목록 | |
| 423 | + var patterns = [/\[\*이름\*\]/, /\[\*1\*\]/, /\[\*2\*\]/, /\[\*3\*\]/, /\[\*4\*\]/]; | |
| 424 | + | |
| 425 | + // 대상 요소의 텍스트 가져오기 | |
| 426 | + var text = $("#smsTxt").text(); | |
| 427 | + | |
| 428 | + // 패턴이 포함되어 있는지 확인 | |
| 429 | + var found = patterns.some(function(pattern) { | |
| 430 | + return pattern.test(text); | |
| 431 | + }); | |
| 432 | + | |
| 433 | + return found; | |
| 434 | +} | |
| 435 | + | |
| 436 | +/** | |
| 437 | + * msgKind 값에 따른 action URL 반환 | |
| 438 | + */ | |
| 439 | +function getMsgActionUrl(msgKind) { | |
| 440 | + switch (msgKind) { | |
| 441 | + case 'C': | |
| 442 | + return "/web/mjon/msgcampain/selectMsgDataView.do"; | |
| 443 | + case 'A': | |
| 444 | + return "/web/mjon/msgdata/excel/selectMsgExcelDataView.do"; | |
| 445 | + default: | |
| 446 | + return "/web/mjon/msgdata/selectMsgDataView.do"; | |
| 447 | + } | |
| 448 | +} | |
| 449 | + | |
| 450 | +function fn_rowBtnSH(tabText){ | |
| 451 | + var $addReg = $('#addReg'); | |
| 452 | + var $addRemove = $('#addRemove'); | |
| 453 | + // addReg 주소록 등록 | |
| 454 | + // addRemove 주소록 삭제 | |
| 455 | + if(tabText == '전체' | |
| 456 | + || tabText == '성공'){ | |
| 457 | + $addReg.show(); | |
| 458 | + $addRemove.hide(); | |
| 459 | + }else if(tabText == '대기'){ | |
| 460 | + $addReg.hide(); | |
| 461 | + $addRemove.hide(); | |
| 462 | + }else if(tabText == '실패' ){ | |
| 463 | + $addReg.hide(); | |
| 464 | + $addRemove.show(); | |
| 465 | + } | |
| 466 | +} | |
| 467 | + | |
| 468 | + | |
| 469 | +function fnAddAddrNo(){ | |
| 470 | + | |
| 471 | + | |
| 472 | + let url = "/web/mjon/addr/insertByAddrGrpDataAndAddrDataAjax.do"; | |
| 473 | + | |
| 474 | + | |
| 475 | + console.log($("#addrGrpIdInfo option:selected").val()); | |
| 476 | + console.log($("#grpNm").val()); | |
| 477 | + if ($("#addrGrpIdInfo option:selected").val() == "NEW" | |
| 478 | + && $("#grpNm").val() == "") { | |
| 479 | + alert("저장할 그룹을 선택하거나 새 그룹명을 입력해주세요."); | |
| 480 | + return false; | |
| 481 | + } | |
| 482 | + | |
| 483 | + // 필터링된 데이터 가져오기 (탭 필터 적용) | |
| 484 | + let filteredData = getFilteredDataByTab(); | |
| 485 | + | |
| 486 | + console.log('filteredData : ', filteredData) | |
| 487 | + | |
| 488 | + // phone 필드 데이터만 추출 | |
| 489 | + let addrPhones = filteredData.map(row => row.phone); | |
| 490 | +// console.log('addrPhones : ', addrPhones) | |
| 491 | + | |
| 492 | + if(addrPhones.length < 1){ | |
| 493 | + alert('해당 탭에 데이터가 없습니다.'); | |
| 494 | + return false; | |
| 495 | + } | |
| 496 | + | |
| 497 | + // 주소록 그룹명 가져오기 | |
| 498 | + let addrGrpNm = $('#grpNm').val(); | |
| 499 | + let addrGrpId = $("#addrGrpIdInfo option:selected").val(); | |
| 500 | + | |
| 501 | + // 데이터 객체 생성 | |
| 502 | + let data = { | |
| 503 | + addrPhones : addrPhones | |
| 504 | + , addrGrpNm : addrGrpNm | |
| 505 | + , addrGrpId : addrGrpId | |
| 506 | + }; | |
| 507 | + | |
| 508 | + if(!confirm("연락처 정보를 주소록에 등록 하시겠습니까?")){ | |
| 509 | + return false; | |
| 510 | + } | |
| 511 | + | |
| 512 | + | |
| 513 | + $.ajax({ | |
| 514 | + type: "POST", | |
| 515 | + url: url, | |
| 516 | + data: JSON.stringify(data), | |
| 517 | + dataType: "json", | |
| 518 | + contentType: "application/json", | |
| 519 | + async: false, | |
| 520 | + processData: false, | |
| 521 | + success: function(data) { | |
| 522 | + | |
| 523 | + if(data.status == 'BAD_REQUEST'){ | |
| 524 | + alert(data.message); | |
| 525 | + return false; | |
| 526 | + } | |
| 527 | + | |
| 528 | + | |
| 529 | + // 성공 메세지 | |
| 530 | + alert(data.message); | |
| 531 | + // 그룹등록 팝업 닫기 | |
| 532 | + $('.grpClose').click(); | |
| 533 | + | |
| 534 | + }, | |
| 535 | + error: function(error) { | |
| 536 | + alert("오류가 발생하였습니다.") | |
| 537 | + console.error("에러 발생:", error); | |
| 538 | + } | |
| 539 | + }); | |
| 540 | +} | |
| 541 | + | |
| 542 | +function fnDelAddrNo(){ | |
| 543 | + | |
| 544 | + | |
| 545 | + let url = "/web/mjon/addr/deleteAddrNoDataAjax.do"; | |
| 546 | + | |
| 547 | + | |
| 548 | + // 필터링된 데이터 가져오기 (탭 필터 적용) | |
| 549 | + let filteredData = getFilteredDataByTab(); | |
| 550 | + | |
| 551 | + // phone 필드 데이터만 추출 | |
| 552 | + let addrPhones = filteredData.map(row => row.phone); | |
| 553 | + console.log('addrPhones : ', addrPhones) | |
| 554 | + | |
| 555 | + if(addrPhones.length < 1){ | |
| 556 | + alert('주소록에 살제할 연락처가 없습니다.'); | |
| 557 | + return false; | |
| 558 | + } | |
| 559 | + | |
| 560 | + // 데이터 객체 생성 | |
| 561 | + let data = { | |
| 562 | + addrPhones: addrPhones | |
| 563 | + }; | |
| 564 | + | |
| 565 | + let selectedTab = $(".tabType3 .tab.active button").text().trim(); | |
| 566 | + if(!confirm("발송"+selectedTab+" 번호를 주소록에서 삭제하시겠습니까?\n(모든 주소록 그룹에서 삭제)")){ | |
| 567 | + return false; | |
| 568 | + } | |
| 569 | + | |
| 570 | + $.ajax({ | |
| 571 | + type: "POST", | |
| 572 | + url: url, | |
| 573 | + data: JSON.stringify(data), | |
| 574 | + dataType: "json", | |
| 575 | + contentType: "application/json", | |
| 576 | + async: false, | |
| 577 | + processData: false, | |
| 578 | + success: function(data) { | |
| 579 | + | |
| 580 | + if(data.status == 'BAD_REQUEST'){ | |
| 581 | + alert(data.message); | |
| 582 | + return false; | |
| 583 | + } | |
| 584 | + | |
| 585 | + | |
| 586 | + // 성공 메세지 | |
| 587 | + alert(data.message); | |
| 588 | + | |
| 589 | + }, | |
| 590 | + error: function(error) { | |
| 591 | + alert("오류가 발생하였습니다.") | |
| 592 | + console.error("에러 발생:", error); | |
| 593 | + } | |
| 594 | + }); | |
| 595 | +} | |
| 596 | +/** | |
| 597 | + * @description 현재 선택된 탭(`result` 필터) 기준으로 데이터를 필터링 | |
| 598 | + * @returns {Array} 필터링된 데이터 리스트 | |
| 599 | + */ | |
| 600 | +function getFilteredDataByTab() { | |
| 601 | + // 현재 적용된 모든 필터 가져오기 | |
| 602 | + let filters = $tbDtailList.getFilters(); | |
| 603 | + | |
| 604 | + // 현재 모든 데이터 가져오기 (전체 데이터에서 필터 적용) | |
| 605 | + let allData = $tbDtailList.getData(); | |
| 606 | + | |
| 607 | + // 현재 적용된 필터에서 "result" 필터만 찾기 | |
| 608 | + let tabFilter = filters.find(filter => filter.field === "result"); | |
| 609 | + | |
| 610 | + // 탭 필터 적용하여 데이터 필터링 (수신번호 필터는 무시) | |
| 611 | + return allData.filter(row => tabFilter ? row.result.includes(tabFilter.value) : true); | |
| 612 | +} | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | +//주소록 그룹정보 불러오기 | |
| 617 | +function getAddrGroupList() { | |
| 618 | + $.ajax({ | |
| 619 | + type : "POST", | |
| 620 | + async : false, | |
| 621 | + url : "/web/mjon/addr/addrGroupListAjax.do", | |
| 622 | + data : {}, | |
| 623 | + dataType:'json', | |
| 624 | + success : function(data) { | |
| 625 | + //alert(JSON.stringify(data.addrGroupList)); | |
| 626 | + | |
| 627 | + // Show Html | |
| 628 | + getAddrGroupListShow(data.addrGroupList); | |
| 629 | + }, | |
| 630 | + error : function(xhr, status, error) { | |
| 631 | + alert(error); | |
| 632 | + return false; | |
| 633 | + } | |
| 634 | + }); | |
| 635 | +} | |
| 636 | + | |
| 637 | +//Show Html | |
| 638 | +function getAddrGroupListShow(jsonList) { | |
| 639 | + var sHtml = ""; | |
| 640 | + sHtml += "<option value='NEW'>그룹추가</option>"; | |
| 641 | + sHtml += "<option value='0'>그룹미지정</option>"; | |
| 642 | + sHtml += "<option value='bookmark'>자주보내는 번호</option>"; | |
| 643 | + for (var j = 0; j < jsonList.length; j++) { | |
| 644 | + sHtml += " <option value='" + $.trim(jsonList[j].addrGrpId) + "' />" + $.trim(jsonList[j].addrGrpNm) + "</option>"; | |
| 645 | + } | |
| 646 | + | |
| 647 | + $("#addrGrpIdInfo").html(sHtml); | |
| 648 | +} | |
| 649 | + | |
| 650 | +</script> | |
| 651 | +<div class="inner"> | |
| 652 | + <!-- js 참고용 hidden --> | |
| 653 | + <input id="msgGroupId" type="hidden" value="${result.msgGroupId}"/> | |
| 654 | + <input id="msgKind" type="hidden" value="${result.msgKind}"/> <!-- 문자종류(일반:N, 광고:A, 선거:C, 관리자:S) --> | |
| 655 | + | |
| 656 | + <!-- send top --> | |
| 657 | + <div class="send_top"> | |
| 658 | + <!-- 결제관리 - 요금 사용내역 --> | |
| 659 | + <div class="rev_admin_cont serv_content current"> | |
| 660 | + <div class="heading"> | |
| 661 | + <h2>발송결과 상세</h2> | |
| 662 | + <button type="button" class="button junk" data-tooltip="popupJunk" style="right:0;">통신사 스팸규격안내</button> | |
| 663 | + </div> | |
| 664 | + | |
| 665 | + <!-- 발송결과 상세 및 미리보기--> | |
| 666 | + <div class="send_general"> | |
| 667 | + <!-- 발송결과 상세 정보 --> | |
| 668 | + <div class="resultcont_left"> | |
| 669 | + <!--발송정보--> | |
| 670 | + <div class="res_info"> | |
| 671 | + <div class="res_info_in"> | |
| 672 | + <div class="res_info_top clearfix"> | |
| 673 | + <p>발송정보</p> | |
| 674 | + <p><button type="button" class="btnType btnType3"onClick="javascript:fnMjMsgReSendAll('${result.msgGroupId}'); return false;">재전송</button></p> | |
| 675 | + </div> | |
| 676 | + <div class="res_info_btm"> | |
| 677 | + <dl> | |
| 678 | + <dt>발송일시</dt> | |
| 679 | + <dd> | |
| 680 | + ${result.reqDate} | |
| 681 | + </dd> | |
| 682 | + </dl> | |
| 683 | + <c:if test="${result.reserveYn eq 'Y' }"> | |
| 684 | + <dl><!-- 예약 시 --> | |
| 685 | + <dt>등록일시</dt> | |
| 686 | + <dd>${result.regDate }</dd> | |
| 687 | + </dl> | |
| 688 | + </c:if> | |
| 689 | + <c:if test="${result.subjectChkYn eq 'Y'}"> | |
| 690 | + <dl> | |
| 691 | + <dt>제목</dt> | |
| 692 | + <dd>${result.subject }</dd> | |
| 693 | + </dl> | |
| 694 | + </c:if> | |
| 695 | + <dl> | |
| 696 | + <dt>형태</dt> | |
| 697 | + <dd> | |
| 698 | + ${result.msgType == '4' | |
| 699 | + ? '단문' | |
| 700 | + : (result.fileCnt == '0' | |
| 701 | + ? '장문' | |
| 702 | + : '그림')} | |
| 703 | + </dd> | |
| 704 | + </dl> | |
| 705 | + <dl> | |
| 706 | + <dt>발송건수</dt> | |
| 707 | + <dd><span class="c_222"><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /></span>건</dd> | |
| 708 | + </dl> | |
| 709 | + <dl> | |
| 710 | + <dt>발신번호</dt> | |
| 711 | +<%-- <dd>${result.callFrom }</dd> --%> | |
| 712 | + <dd>${fnc:formatPhone(result.callFrom) }</dd> | |
| 713 | + </dl> | |
| 714 | + <dl> | |
| 715 | + <dt>진행상황 | |
| 716 | + <!-- 예약인 경우 --> | |
| 717 | + <c:if test="${result.reserveYn eq 'Y'}"> | |
| 718 | + <div class="icon_wrap"> | |
| 719 | + <div class="re">예약</div> | |
| 720 | + <!-- 예약일때만 분할이 있음 --> | |
| 721 | + <c:if test="${result.divideYN eq 'Y'}"> | |
| 722 | + <div class="di_info"> | |
| 723 | + <button class="di">분할</button> | |
| 724 | + <div class="di_hover_layer"> | |
| 725 | + <strong>${result.divideText }</strong> | |
| 726 | +<!-- <strong>100,000건</strong>씩 <strong>35분</strong> 간격 --> | |
| 727 | + </div> | |
| 728 | + </div> | |
| 729 | + </c:if> | |
| 730 | + </div> | |
| 731 | + </c:if> | |
| 732 | + <!--// 예약인 경우 --> | |
| 733 | + </dt> | |
| 734 | + <dd> | |
| 735 | + | |
| 736 | + <c:choose> | |
| 737 | + <c:when test="${result.statusCd eq '04' }"> | |
| 738 | + 예약취소(<c:out value="${result.canceldate }" />) | |
| 739 | + </c:when> | |
| 740 | + <c:when test="${result.statusCd ne '03' }"> | |
| 741 | + <ec:code codeId="ITN057" code="${result.statusCd }" /> | |
| 742 | + </c:when> | |
| 743 | + <c:otherwise> | |
| 744 | + <p><button class="btnType btnType20" onClick="javascript:fnReservCancel('${result.msgGroupId}'); return false;">예약취소</button></p> | |
| 745 | + </c:otherwise> | |
| 746 | + </c:choose> | |
| 747 | + | |
| 748 | + <!-- --> | |
| 749 | +<!-- <button class="btnType btnType20">예약취소</button> --> | |
| 750 | + </dd> | |
| 751 | + <!--<dd>예약취소 2024-07-16 15:07</dd>--><!-- 예역취소 후 버튼 대신 취소 일시 노출 --> | |
| 752 | + </dl> | |
| 753 | + </div> | |
| 754 | + <div class="res_info_btm"> | |
| 755 | + <dl> | |
| 756 | + <dt class="btm_charge">발송요금</dt> | |
| 757 | + <dd> | |
| 758 | + <span class="stcharge"> | |
| 759 | + <c:choose> | |
| 760 | + <c:when test="${result.totPrice eq '-' }"> | |
| 761 | + 0 | |
| 762 | + </c:when> | |
| 763 | + <c:otherwise> | |
| 764 | + <fmt:formatNumber value="${result.totPrice }" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" /> | |
| 765 | + </c:otherwise> | |
| 766 | + </c:choose> | |
| 767 | + </span>원 | |
| 768 | + </dd> | |
| 769 | + <!--<dd><span class="stcharge">-</span>원</dd>--><!-- 예역취소 후 금액은 하이픈 처리--> | |
| 770 | + </dl> | |
| 771 | + </div> | |
| 772 | + </div> | |
| 773 | + </div> | |
| 774 | + <!--// 발송정보--> | |
| 775 | + <!--상세결과--> | |
| 776 | + <div class="res_info"> | |
| 777 | + <div class="res_info_in"> | |
| 778 | + <div class="res_info_top clearfix" style="padding:0 0 10px 0;"> | |
| 779 | + <p>상세결과</p> | |
| 780 | + <p></p> | |
| 781 | + </div> | |
| 782 | + <div class="res_num"> | |
| 783 | + <div class="res_info_btm1"> | |
| 784 | + <dl> | |
| 785 | + <dt>전체건수</dt> | |
| 786 | + <dd><a href="#" data-tooltip="rev_popup04"><span class="c_222_g"><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /></span>건</a></dd> | |
| 787 | + </dl> | |
| 788 | + </div> | |
| 789 | + <div class="res_info_btm1"> | |
| 790 | + <dl> | |
| 791 | + <dt>성공건수</dt> | |
| 792 | + <dd><span class="c_002c9a_g"><fmt:formatNumber value="${result.resultSValue}" type="number" groupingUsed="true" /></span>건(${result.successPct})</dd> | |
| 793 | + </dl> | |
| 794 | + </div> | |
| 795 | + </div> | |
| 796 | + <div class="res_num"> | |
| 797 | + <div class="res_info_btm1"> | |
| 798 | + <dl> | |
| 799 | + <dt>대기건수</dt> | |
| 800 | + <dd><span class="c_666_g"><fmt:formatNumber value="${result.resultWValue}" type="number" groupingUsed="true" /></span>건(${result.waitingPct})</dd> | |
| 801 | + </dl> | |
| 802 | + </div> | |
| 803 | + <div class="res_info_btm1"> | |
| 804 | + <dl> | |
| 805 | + <dt>실패건수</dt> | |
| 806 | + <dd><span class="c_e40000_g"><fmt:formatNumber value="${result.resultFValue}" type="number" groupingUsed="true" /></span>건(${result.failedPct})</dd> | |
| 807 | + </dl> | |
| 808 | + </div> | |
| 809 | + </div> | |
| 810 | + <p class="table_bottom_txt">* 전체건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.</p> | |
| 811 | + </div> | |
| 812 | + </div> | |
| 813 | + <!--// 발송결과--> | |
| 814 | + | |
| 815 | + </div> | |
| 816 | + <!--// 발송결과 상세 정보 --> | |
| 817 | + | |
| 818 | + <!-- 발송결과 미리보기 --> | |
| 819 | + <div class="resultcont_right"> | |
| 820 | + <div class="phone"> | |
| 821 | + <div class="phoneIn"> | |
| 822 | + <div> | |
| 823 | + <p class="prev_p"><img src="/publish/images/search.png">문자내용</p> | |
| 824 | + <div class="text_length2 clearfix" style="display:none;"> | |
| 825 | + <span class="msg_com msg_short">단문</span> | |
| 826 | + <div> | |
| 827 | + <span>글자크기</span> | |
| 828 | + <button type="button"><img src="/publish/images/content/font_plus.png"></button> | |
| 829 | + <button type="button"><img src="/publish/images/content/font_minus.png"></button> | |
| 830 | + </div> | |
| 831 | + </div> | |
| 832 | + <div class="text_length2 clearfix" style="display:none;"> | |
| 833 | + <span class="msg_com msg_long">장문</span> | |
| 834 | + <div> | |
| 835 | + <span>글자크기</span> | |
| 836 | + <button type="button"><img src="/publish/images/content/font_plus.png"></button> | |
| 837 | + <button type="button"><img src="/publish/images/content/font_minus.png"></button> | |
| 838 | + </div> | |
| 839 | + </div> | |
| 840 | + <div class="text_length2 clearfix"> | |
| 841 | + <span class="msg_com ${result.msgType == '4' | |
| 842 | + ? 'msg_short' | |
| 843 | + : (result.fileCnt == '0' | |
| 844 | + ? 'msg_long' | |
| 845 | + : 'msg_photo')}"> | |
| 846 | + ${result.msgType == '4' | |
| 847 | + ? 'SMS' | |
| 848 | + : (result.fileCnt == '0' | |
| 849 | + ? 'LMS' | |
| 850 | + : 'MMS')} | |
| 851 | + </span> | |
| 852 | + | |
| 853 | +<!-- <span class="msg_com msg_photo">포토</span> --> | |
| 854 | + <!-- <ul class="photo_msg_num"> | |
| 855 | + <li onclick="imgClick(0);"><a href="#none">1</a></ li> | |
| 856 | + <li onclick="imgClick(1);"><a href="#none">2</a></ li> | |
| 857 | + <li onclick="imgClick(2);"><a href="#none">3</a></ li> | |
| 858 | + </ul> --> | |
| 859 | + <!-- <div> | |
| 860 | + <span>글자크기</span> | |
| 861 | + <button type="button"><img src="/publish/images/content/font_plus.png"></button> | |
| 862 | + <button type="button"><img src="/publish/images/content/font_minus.png"></button> | |
| 863 | + </div> --> | |
| 864 | + </div> | |
| 865 | + <!-- 텍스트 미리보기 --> | |
| 866 | + <div class="text_preview"> | |
| 867 | + <div class="preiew_img"> | |
| 868 | + <c:forEach var="fileInfo" items="${result.fileInfos}"> | |
| 869 | + <div class="img_box"> | |
| 870 | + <img src="<c:url value='/cmm/fms/getImage2.do'/>?atchFileId=<c:out value="${fileInfo.atchFileId}"/>&fileSn=<c:out value="${fileInfo.fileSn}"/>" alt="발송된 그림문자 미리보기" style="width: 100%"> | |
| 871 | + </div> | |
| 872 | + </c:forEach> | |
| 873 | + </div> | |
| 874 | + <div class="preview_auto"> | |
| 875 | + <c:if test="${result.msgKind eq 'A' }" > | |
| 876 | + <p class="ad_tit">(광고)</p> | |
| 877 | + </c:if> | |
| 878 | + <p class="none_txt" id="smsTxt"> | |
| 879 | + ${fn:replace(result.smsTxt, newLineChar, "<br/>")} | |
| 880 | + </p> | |
| 881 | + <p class="realtime"></p> | |
| 882 | + <c:if test="${result.msgKind eq 'A' }" > | |
| 883 | + <p class="deny_receipt">무료 거부 080-0000-0000</p> | |
| 884 | + </c:if> | |
| 885 | + </div> | |
| 886 | + </div> | |
| 887 | + <!-- //텍스트 미리보기 --> | |
| 888 | + </div> | |
| 889 | + </div> | |
| 890 | + <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p> | |
| 891 | + </div> | |
| 892 | + </div> | |
| 893 | + <!--// 발송결과 미리보기 --> | |
| 894 | + </div> | |
| 895 | + <!--// 발송결과 상세 및 미리보기--> | |
| 896 | + <!-- 목록--> | |
| 897 | + <div class="btn_list_type1"> | |
| 898 | + <button class="btnType btnType17" id="goPageBtn">목록</button> | |
| 899 | + </div> | |
| 900 | + <!--// 목록--> | |
| 901 | + | |
| 902 | + </div> | |
| 903 | + </div> | |
| 904 | + <!--// send top --> | |
| 905 | +</div> | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + <!-- 발송대상리스트 팝업 --> | |
| 910 | + <div class="tooltip-wrap"> | |
| 911 | + <div class="popup-com ad_layer rev_popup04" tabindex="0" data-tooltip-con="rev_popup04" data-focus="rev_popup04" data-focus-prev="rev_popup04-close" style="width:530px;"> | |
| 912 | + <div class="popup_heading"> | |
| 913 | + <p>발송대상 리스트</p> | |
| 914 | + <button type="button" class="tooltip-close listClose" data-focus="rev_popup04-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 915 | + </div> | |
| 916 | + <div class="layer_in"> | |
| 917 | + | |
| 918 | +<!-- <div class="gorup_join_cont" style="margin:-15px 0 0 0;"> --> | |
| 919 | +<!-- <div class="group_input"> --> | |
| 920 | +<!-- <div class="input_left">발신번호</div> --> | |
| 921 | +<%-- <div class="input_right type1"><c:out value="${result.callFrom }" /></div> --%> | |
| 922 | +<!-- </div> --> | |
| 923 | +<!-- </div> --> | |
| 924 | + | |
| 925 | + <div class="popup_search_type2"> | |
| 926 | + <label for="" class="label">검색종류 선택</label> | |
| 927 | + <div class="title">수신번호</div> | |
| 928 | + <label for="" class="label">검색어입력</label> | |
| 929 | + <input type="text" class="send_text" id="searchInput" placeholder="3자 이상 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='3자 이상 입력하세요.'"> | |
| 930 | + <button type="button" id="searchBtn" class="btnType btnType2" style="width:63px; margin:0;">검색</button> | |
| 931 | + </div> | |
| 932 | + | |
| 933 | + <div class="list_tab_wrap2 type4"> | |
| 934 | + <ul class="tabType3" id="tabType" name="tabType"> | |
| 935 | + <li class="tab active"><button type="button" id="initTab" title="선택됨">전체</button></li> | |
| 936 | + <li class="tab"><button type="button">대기</button></li> | |
| 937 | + <li class="tab"><button type="button">성공</button></li> | |
| 938 | + <li class="tab"><button type="button">실패</button></li> | |
| 939 | + </ul> | |
| 940 | + </div> | |
| 941 | + | |
| 942 | + <div class="tb_wrap" id="detailPopup" style="min-height:200px;"> | |
| 943 | + <!-- 타블레이터 영역 --> | |
| 944 | + </div> | |
| 945 | + | |
| 946 | + <div class="table_btn clearfix"> | |
| 947 | + <div class="table_btn_left"> | |
| 948 | + <button type="button" onclick="fn_downloadFilteredExcel()" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button> | |
| 949 | + <button type="button" id="addReg" data-tooltip="rev_popup02" class="btnType btnType14"><i class="add_img"></i>주소록 등록</button> | |
| 950 | + <button type="button" onclick="fnDelAddrNo()" id="addRemove" class="btnType btnType15"><i class="remove_img"></i>주소록에서 번호 삭제</button> | |
| 951 | + </div> | |
| 952 | + </div> | |
| 953 | + </div> | |
| 954 | + <div class="popup_btn_wrap2" style="margin: -40px auto 30px auto;"> | |
| 955 | + <button type="button" class="tooltip-close listClose" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button> | |
| 956 | + </div> | |
| 957 | + | |
| 958 | + </div> | |
| 959 | + </div> | |
| 960 | + <!-- //발송대상 리스트 안내 팝업 --> | |
| 961 | + | |
| 962 | + <!-- 주소록에 등록 팝업 --> | |
| 963 | + <div class="tooltip-wrap"> | |
| 964 | + <div class="popup-com adr_layer rev_popup02" tabindex="0" data-tooltip-con="rev_popup02" data-focus="rev_popup02" data-focus-prev="rev_popup02-close" style="width: 510px;"> | |
| 965 | + <div class="popup_heading"> | |
| 966 | + <p>주소록에 등록</p> | |
| 967 | + <button type="button" class="tooltip-close grpClose" data-focus="rev_popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> | |
| 968 | + </div> | |
| 969 | + <div class="layer_in"> | |
| 970 | + <table class="layer_tType1 style1"> | |
| 971 | + <caption>주소록 그룹선택 표</caption> | |
| 972 | + <colgroup> | |
| 973 | + <col style="width: 80px"> | |
| 974 | + <col style="width: auto"> | |
| 975 | + </colgroup> | |
| 976 | + <tbody> | |
| 977 | + <tr> | |
| 978 | + <th>그룹 선택</th> | |
| 979 | + <td> | |
| 980 | + <label for="" class="label">그룹 선택</label> | |
| 981 | + <select id="addrGrpIdInfo" name="addrGrpIdInfo"> | |
| 982 | + </select> | |
| 983 | + <label for="" class="label">그룹명 입력</label> | |
| 984 | + <input type="text" id="grpNm" placeholder="새 그룹명을 입력해주세요." maxlength="24" onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'" class="inputLight"> | |
| 985 | + </td> | |
| 986 | + </tr> | |
| 987 | + </tbody> | |
| 988 | + </table> | |
| 989 | + <div class="popup_btn_wrap2"> | |
| 990 | + <button type="button" onclick="fnAddAddrNo()">등록</button> | |
| 991 | + <button type="button" class="tooltip-close grpClose" data-focus="rev_popup02-close" data-focus-next="rev_popup02">닫기</button> | |
| 992 | + </div> | |
| 993 | + </div> | |
| 994 | + </div> | |
| 995 | + </div> | |
| 996 | + <!--// 주소록에 등록 팝업 --> | |
| 997 | + | |
| 998 | + <!-- 이전 리스트 상태(검색조건, 페이징) 그대로 가기 위한 form --> | |
| 999 | + <form id="goList" name="goList" method="post" action="/web/mjon/msgsent/selectMsgSentView.do"> | |
| 1000 | + <input type="hidden" name="pageIndex" value="<c:out value="${searchVO.pageIndex}" />" /> | |
| 1001 | + <input type="hidden" name="searchSortCnd" value="<c:out value='${searchVO.searchSortCnd }' />" /> | |
| 1002 | + <input type="hidden" name="searchSortOrd" value="<c:out value='${searchVO.searchSortOrd }' />" /> | |
| 1003 | + <input type="hidden" name="searchCondition01" value="<c:out value='${searchVO.searchCondition01 }' />" /> | |
| 1004 | + <input type="hidden" name="searchCondition02" value="<c:out value='${searchVO.searchCondition02 }' />" /> | |
| 1005 | + <input type="hidden" name="searchStartDate" value="<c:out value='${searchVO.searchStartDate }' />" /> | |
| 1006 | + <input type="hidden" name="searchEndDate" value="<c:out value='${searchVO.searchEndDate }' />" /> | |
| 1007 | + <input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition }' />" /> | |
| 1008 | + <input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword }' />" /> | |
| 1009 | + <input type="hidden" name="pageUnit" value="<c:out value='${searchVO.pageUnit }' />" /> | |
| 1010 | + </form> | |
| 1011 | + | |
| 1012 | + <!-- 예약 취소 --> | |
| 1013 | + <form id="resCancelForm" name="resCancelForm" method="post"> | |
| 1014 | + <input type="hidden" id="msgGroupId" name="msgGroupId" value=""/> | |
| 1015 | + </form> | |
| 1016 | + | |
| 1017 | + <!-- 재발송 form --> | |
| 1018 | + <form name="reSendAllForm" method="post"> | |
| 1019 | + <input type="hidden" name="msgResendAllFlag" value="N"/> | |
| 1020 | + <input type="hidden" name="msgResendAllGroupId" value=""/> | |
| 1021 | + <input type="hidden" name="msgResendAllAdvertiseYn" value="N"/> | |
| 1022 | + <input type="hidden" name="msgResendAllReplaceYn" value="N"/> | |
| 1023 | + </form> | |
| 1024 | + |
--- src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp
... | ... | @@ -15,7 +15,12 @@ |
| 15 | 15 |
$(document).ready(function(){
|
| 16 | 16 |
|
| 17 | 17 |
//초기 전체 리스트 페이지 보여주기 |
| 18 |
- linkPage(1); |
|
| 18 |
+ linkPage($('#searchForm #pageIndex').val());
|
|
| 19 |
+ |
|
| 20 |
+ |
|
| 21 |
+ fn_activateTab($('#searchForm #searchCondition01').val())
|
|
| 22 |
+ fn_setActiveTab($('#searchForm #searchCondition02').val())
|
|
| 23 |
+ |
|
| 19 | 24 |
|
| 20 | 25 |
var date = new Date() ; |
| 21 | 26 |
//이전달 첫날/마지막날 조회 |
... | ... | @@ -28,12 +33,14 @@ |
| 28 | 33 |
lastfuledday = lastfulstday + "/"+ new Date(date.getFullYear(), date.getMonth(), 0).getDate()+"" ; |
| 29 | 34 |
lastfulstday += "/01" ; |
| 30 | 35 |
} |
| 36 |
+ console.log('lastfulstday: ', lastfulstday);
|
|
| 31 | 37 |
|
| 32 | 38 |
//당월 첫날/마지막날 조회 |
| 33 | 39 |
thisfulstlday = date.getFullYear() + "/" ; |
| 34 | 40 |
thisfulstlday += date.getMonth()+1 < 10 ? "0"+ (date.getMonth()+1) : date.getMonth()+1+"" ; |
| 35 | 41 |
thisfuledtlday = thisfulstlday + "/"+ new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()+""; |
| 36 | 42 |
thisfulstlday += "/01" ; |
| 43 |
+ console.log('thisfulstlday: ', thisfulstlday);
|
|
| 37 | 44 |
|
| 38 | 45 |
//3개월 이전 날짜 구해오기 |
| 39 | 46 |
|
... | ... | @@ -55,6 +62,19 @@ |
| 55 | 62 |
$(document).on('click', '.sort', function (){
|
| 56 | 63 |
listSortOrd(this); |
| 57 | 64 |
}); |
| 65 |
+ |
|
| 66 |
+ |
|
| 67 |
+ // 탭 :: 전체 , 즉시, 예약 |
|
| 68 |
+ $(document).on('click', '.sendKindBtn', function (){
|
|
| 69 |
+ |
|
| 70 |
+ // 클릭된 버튼의 data-info 값을 전달하여 함수 호출 |
|
| 71 |
+ fn_activateTab($(this).data('info'));
|
|
| 72 |
+ |
|
| 73 |
+ linkPage(1); |
|
| 74 |
+ }); |
|
| 75 |
+ |
|
| 76 |
+ |
|
| 77 |
+ |
|
| 58 | 78 |
|
| 59 | 79 |
//목록 정렬 항목 클릭 |
| 60 | 80 |
function listSortOrd(obj){
|
... | ... | @@ -87,7 +107,8 @@ |
| 87 | 107 |
|
| 88 | 108 |
}); |
| 89 | 109 |
|
| 90 |
- $(document).on('change','#pageUnit', function(){
|
|
| 110 |
+ $(document).on('change','#pageUnitS', function(){
|
|
| 111 |
+ setPageUnit($(this).val()); |
|
| 91 | 112 |
|
| 92 | 113 |
linkPage(1); |
| 93 | 114 |
|
... | ... | @@ -97,8 +118,23 @@ |
| 97 | 118 |
|
| 98 | 119 |
}); |
| 99 | 120 |
|
| 121 |
+function setPageUnit(val){
|
|
| 122 |
+ $('#pageUnit').val(val);
|
|
| 123 |
+} |
|
| 100 | 124 |
|
| 101 |
- |
|
| 125 |
+ |
|
| 126 |
+//탭 활성화 처리 함수 |
|
| 127 |
+function fn_activateTab(tabInfo) {
|
|
| 128 |
+ // 1. data-info 값을 가진 버튼 요소 찾기 |
|
| 129 |
+ var $button = $('.sendKindBtn[data-info="' + tabInfo + '"]');
|
|
| 130 |
+ |
|
| 131 |
+ // 2. 해당 버튼이 속한 탭 활성화 처리 |
|
| 132 |
+ $button.closest('ul').find('.tab').removeClass('active');
|
|
| 133 |
+ $button.closest('.tab').addClass('active');
|
|
| 134 |
+ |
|
| 135 |
+ // 3. hidden input 요소에 값 설정 |
|
| 136 |
+ $('#searchCondition01').val(tabInfo);
|
|
| 137 |
+} |
|
| 102 | 138 |
|
| 103 | 139 |
|
| 104 | 140 |
//캘린더에 날짜 입력해 주기 |
... | ... | @@ -107,13 +143,13 @@ |
| 107 | 143 |
} |
| 108 | 144 |
|
| 109 | 145 |
|
| 110 |
-//검색 버튼 실행 |
|
| 146 |
+//페이지 이동 실행 |
|
| 111 | 147 |
function linkPage(pageNo){
|
| 112 | 148 |
|
| 113 | 149 |
var form = document.searchForm; |
| 114 |
- var stateType = form.stateType.value; |
|
| 115 | 150 |
form.pageIndex.value = pageNo; |
| 116 |
- |
|
| 151 |
+ console.log('form : ', form);
|
|
| 152 |
+ |
|
| 117 | 153 |
var sendData = $(document.searchForm).serializeArray(); |
| 118 | 154 |
$(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>');
|
| 119 | 155 |
$(".msgSentAllLoad").load("/web/mjon/msgsent/selectMsgSentListViewAjax.do", sendData ,function(response, status, xhr){
|
... | ... | @@ -137,120 +173,73 @@ |
| 137 | 173 |
} |
| 138 | 174 |
}); |
| 139 | 175 |
|
| 140 |
- if(msgId.length > 0){
|
|
| 176 |
+ console.log('msgId : ', msgId);
|
|
| 177 |
+ |
|
| 178 |
+ if(msgId.length < 1){
|
|
| 179 |
+ alert("삭제할 문자를 선택해 주세요.");
|
|
| 180 |
+ return false; |
|
| 181 |
+ } |
|
| 141 | 182 |
|
| 142 | 183 |
//22.04.25 구글 독스 alert 기준으로 이지우가 수정 |
| 143 | 184 |
/* if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) */
|
| 144 |
- if(confirm("선택한 목록을 삭제하시겠습니까?")){
|
|
| 185 |
+ if(confirm("선택한 목록을 삭제하시겠습니까?\n삭제한 목록은 복구가 불가합니다.")){
|
|
| 145 | 186 |
|
| 146 | 187 |
document.searchForm.msgGroupIdList.value = msgId; |
| 147 | 188 |
var sendData = $(document.searchForm).serializeArray(); |
| 148 | 189 |
|
| 149 | 190 |
$(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){
|
| 150 | 191 |
}); |
| 151 |
- |
|
| 152 |
-// var form = document.searchForm; |
|
| 153 |
-// form.action="/web/mjon/msgsent/selectMsgSentView.do"; |
|
| 154 |
-// form.submit(); |
|
| 192 |
+ |
|
| 193 |
+ alert("삭제되었습니다.");
|
|
| 194 |
+ var form = document.searchForm; |
|
| 195 |
+ form.action="/web/mjon/msgsent/selectMsgSentView.do"; |
|
| 196 |
+ form.submit(); |
|
| 155 | 197 |
} |
| 156 |
- |
|
| 157 |
- }else{
|
|
| 158 |
- |
|
| 159 |
- alert("삭제할 문자를 선택해 주세요.");
|
|
| 160 |
- return false; |
|
| 161 |
- |
|
| 162 |
- } |
|
| 163 |
- |
|
| 164 |
-} |
|
| 165 |
- |
|
| 166 |
-//상세보기 버튼 실행 |
|
| 167 |
-function fnRevDetailPop(msgGroupId, msgId, fileCnt){
|
|
| 168 |
- document.resPopForm.msgGroupId.value = msgGroupId; |
|
| 169 |
- document.resPopForm.msgId.value = msgId; |
|
| 170 |
- var sendData = $(document.resPopForm).serializeArray(); |
|
| 171 |
- |
|
| 172 |
- var form = document.searchForm; |
|
| 173 |
- if (form.listType.value == "privateList") {
|
|
| 174 |
- $("#msgSentDetailPopLoad").load("/web/mjon/msgsent/selectMsgSentDetailData2Ajax.do", sendData ,function(response, status, xhr){
|
|
| 175 |
- }); |
|
| 176 |
- } |
|
| 177 |
- else {
|
|
| 178 |
- $("#msgSentDetailPopLoad").load("/web/mjon/msgsent/selectMsgSentDetailDataAjax.do", sendData ,function(response, status, xhr){
|
|
| 179 |
- }); |
|
| 180 |
- } |
|
| 181 |
- |
|
| 182 |
-} |
|
| 183 |
- |
|
| 184 |
-function fnListLoad(pageType, tabNum){
|
|
| 185 |
- |
|
| 186 |
- var form = document.searchForm; |
|
| 187 |
- var $tab = $(".table_tab_wrap li").eq(tabNum); //
|
|
| 188 |
- $tab.addClass("active");
|
|
| 189 |
- $tab.find("button").attr("title", "선택됨");
|
|
| 190 |
- $tab.siblings("li.tab").removeClass("active");
|
|
| 191 |
- $tab.siblings("li.btn_tab").removeClass("active");
|
|
| 192 |
- $tab.siblings("li.tab").find("button").removeAttr("title");
|
|
| 193 |
- |
|
| 194 |
- if(pageType == 'all'){
|
|
| 195 |
- |
|
| 196 |
- form.stateType.value = "all"; |
|
| 197 |
- $(".tab_depth1").show();
|
|
| 198 |
- |
|
| 199 |
- }else if(pageType == 'ready'){
|
|
| 200 |
- |
|
| 201 |
- form.stateType.value = "ready"; |
|
| 202 |
- $(".tab_depth1").show();
|
|
| 203 |
- |
|
| 204 |
- }else if(pageType == 'complete'){
|
|
| 205 |
- |
|
| 206 |
- form.stateType.value = "complete"; |
|
| 207 |
- $(".tab_depth1").show();
|
|
| 208 |
- |
|
| 209 |
- }else if(pageType == 'fail'){
|
|
| 210 |
- form.listType.value = "privateList"; |
|
| 211 |
- form.stateType.value = "fail"; |
|
| 212 |
- $(".tab_depth1").hide();
|
|
| 213 |
- |
|
| 214 |
- } |
|
| 215 |
- |
|
| 216 |
- /* if(pageType == 'fail'){//발송실패의 경우 모두 개인별 건수를 보여준다.
|
|
| 217 |
- |
|
| 218 |
- form.listType.value = 'privateList'; |
|
| 219 |
- |
|
| 220 |
- } */ |
|
| 221 |
- |
|
| 222 |
- linkPage(1); |
|
| 223 | 198 |
|
| 224 | 199 |
} |
| 225 | 200 |
|
| 226 | 201 |
// 전체/단문/장문/그림 탭 선택 처리 |
| 227 |
-function fnTabLoad(tabType, tabNum){
|
|
| 202 |
+function fnTabLoad(tabType){
|
|
| 203 |
+ |
|
| 204 |
+ //즉시, 예약 탭은 전체로 바꿔야함 |
|
| 205 |
+ fn_activateTab('');
|
|
| 206 |
+ setPageUnit('10');
|
|
| 228 | 207 |
|
| 229 | 208 |
var form = document.searchForm; |
| 230 |
- |
|
| 231 |
- form.tabType.value = tabType; |
|
| 232 |
- |
|
| 233 |
- //해당 탭의 전체 리스트 내역으로 불러오기 |
|
| 234 |
- fnListLoad('all', '0');
|
|
| 235 |
- var n=tabNum+1; |
|
| 236 |
- |
|
| 237 |
- //탭 선택 CSS 처리 |
|
| 238 |
- var $tab = $(".list_tab_wrap2 li:nth-child("+n+")");
|
|
| 239 |
- var $tabPrev = $(".list_tab_wrap2 li:nth-child("+n+")").prev("li")
|
|
| 240 |
- $tab.addClass("active");
|
|
| 241 |
- $tab.find("button").attr("title", "선택됨");
|
|
| 242 |
- $tab.siblings("li.tab").removeClass("active");
|
|
| 243 |
- $tab.siblings("li.tab").find("button").removeAttr("title");
|
|
| 244 | 209 |
|
| 245 |
- $tab.siblings("li:not(li:last-child)").find("button").css("border-right","1px solid #e5e5e5");
|
|
| 246 |
- $tabPrev.find("button").css("border-right","0");
|
|
| 210 |
+ // 탭 선택 CSS 처리 |
|
| 211 |
+ fn_setActiveTab(tabType); |
|
| 247 | 212 |
|
| 213 |
+ linkPage(1); |
|
| 248 | 214 |
} |
| 249 | 215 |
|
| 216 |
+//fnTabLoad 함수에 대한 탭 선택 CSS 처리 함수 |
|
| 217 |
+function fn_setActiveTab(tabType) {
|
|
| 218 |
+ var $tabs = $(".list_tab_wrap2 li"); // 전체 탭 리스트
|
|
| 219 |
+ $tabs.removeClass("active").find("button").removeAttr("title"); // 모든 탭 초기화
|
|
| 220 |
+ |
|
| 221 |
+ // tabType에 해당하는 탭 찾기 |
|
| 222 |
+ $tabs.each(function() {
|
|
| 223 |
+ var buttonText = $(this).find("button").text();
|
|
| 224 |
+ if ((tabType === '' && buttonText === "전체") || |
|
| 225 |
+ (tabType === 'S' && buttonText === "단문(SMS)") || |
|
| 226 |
+ (tabType === 'L' && buttonText === "장문(LMS)") || |
|
| 227 |
+ (tabType === 'M' && buttonText === "그림(MMS)")) {
|
|
| 228 |
+ $(this).addClass("active").find("button").attr("title", "선택됨");
|
|
| 229 |
+ } |
|
| 230 |
+ }); |
|
| 231 |
+ |
|
| 232 |
+ $('#searchCondition02').val(tabType);
|
|
| 233 |
+} |
|
| 234 |
+ |
|
| 235 |
+ |
|
| 250 | 236 |
function fnSearch(pageNo){
|
| 251 |
- /* if(!fn_G_cmndataValueChk("startDate", "endDate", 3)){
|
|
| 237 |
+ /* if(!fn_G_cmndataValueChk("searchStartDate", "searchEndDate", 3)){
|
|
| 252 | 238 |
return; |
| 253 | 239 |
}; */ |
| 240 |
+ |
|
| 241 |
+ fn_activateTab('')
|
|
| 242 |
+ fn_setActiveTab('')
|
|
| 254 | 243 |
|
| 255 | 244 |
console.log('fnSearch')
|
| 256 | 245 |
var form = document.searchForm; |
... | ... | @@ -274,27 +263,8 @@ |
| 274 | 263 |
function fnExcelDownLoad(pageType, tabType){
|
| 275 | 264 |
|
| 276 | 265 |
var form = document.searchForm; |
| 277 |
- var loginVO = '${LoginVO}';
|
|
| 278 |
- |
|
| 279 |
- form.stateType.value = pageType; |
|
| 280 |
- form.tabType.value = tabType; |
|
| 281 |
- |
|
| 282 |
- if(loginVO == "" || loginVO == null){
|
|
| 283 |
- alert("로그인 후 이용이 가능합니다.");
|
|
| 284 |
- return false; |
|
| 285 |
- } |
|
| 286 | 266 |
|
| 287 | 267 |
// 기간검색 유효성 검사 |
| 288 |
- if ($("#startDate").val() == "" || $("#endDate").val() == "") {
|
|
| 289 |
- alert("기간 설정을 먼저해주세요. 최근 3개월까지만 다운로드 가능합니다.")
|
|
| 290 |
- return false; |
|
| 291 |
- } |
|
| 292 |
- else {
|
|
| 293 |
- if ($("#startDate").val() < prevMonth(3)) {
|
|
| 294 |
- alert("최근 3개월까지만 다운로드 가능합니다.")
|
|
| 295 |
- return false; |
|
| 296 |
- } |
|
| 297 |
- } |
|
| 298 | 268 |
|
| 299 | 269 |
if(confirm("엑셀 다운로드를 하시겠습니까?")){
|
| 300 | 270 |
|
... | ... | @@ -305,21 +275,6 @@ |
| 305 | 275 |
|
| 306 | 276 |
} |
| 307 | 277 |
|
| 308 |
-$(document).on('click', '.msgGgoupList', function(){
|
|
| 309 |
- |
|
| 310 |
- var form = document.searchForm; |
|
| 311 |
- form.listType.value = "groupList"; |
|
| 312 |
- linkPage(1); |
|
| 313 |
- |
|
| 314 |
-}); |
|
| 315 |
- |
|
| 316 |
-$(document).on('click', '.msgPrivateList', function(){
|
|
| 317 |
- |
|
| 318 |
- var form = document.searchForm; |
|
| 319 |
- form.listType.value = "privateList"; |
|
| 320 |
- linkPage(1); |
|
| 321 |
- |
|
| 322 |
-}); |
|
| 323 | 278 |
|
| 324 | 279 |
|
| 325 | 280 |
function fnDeleteAddrNo(listType){
|
... | ... | @@ -537,7 +492,7 @@ |
| 537 | 492 |
} |
| 538 | 493 |
|
| 539 | 494 |
|
| 540 |
-/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 */ |
|
| 495 |
+/* 사용내역서 클릭 시 내역서 새창 팝업 오픈 |
|
| 541 | 496 |
function fnShowPrintPopup(tabType, type) {
|
| 542 | 497 |
//만들려는 팝업의 크기 |
| 543 | 498 |
var popup_wid = '840'; |
... | ... | @@ -553,7 +508,7 @@ |
| 553 | 508 |
$("#searchForm").attr({"action":"/web/mjon/msgsent/printMsgSentDataAjax.do", "method":"post"}).submit();
|
| 554 | 509 |
|
| 555 | 510 |
} |
| 556 |
- |
|
| 511 |
+*/ |
|
| 557 | 512 |
function addrGroupDuplCnt() {
|
| 558 | 513 |
document.searchForm.addrGrpNm.value = $('#grpNm').val();
|
| 559 | 514 |
|
... | ... | @@ -744,9 +699,10 @@ |
| 744 | 699 |
} |
| 745 | 700 |
|
| 746 | 701 |
//발송결과 - 대기/성공/실패 |
| 747 |
-function subContent(p_content_no){
|
|
| 702 |
+function subContent(){
|
|
| 748 | 703 |
|
| 749 |
- var sendData = $(document.listForm).serializeArray(); |
|
| 704 |
+ var sendData = $(document.searchForm).serializeArray(); |
|
| 705 |
+ console.log('sendData :: ', sendData);
|
|
| 750 | 706 |
var v_html_pre = '<table>' |
| 751 | 707 |
+ '<caption>구분, 충전금액, 사용금액, 잔액 등 정보를 제공하는 표</caption>' |
| 752 | 708 |
+ '<colgroup>' |
... | ... | @@ -891,60 +847,51 @@ |
| 891 | 847 |
</div> |
| 892 | 848 |
</div>--%> |
| 893 | 849 |
<form id="searchForm" name="searchForm" method="post"> |
| 894 |
- <input type="hidden" id="pageIndex" name="pageIndex" value="1"/> |
|
| 850 |
+<!-- <input type="hidden" id="pageIndex" name="pageIndex" value="1"/> --> |
|
| 851 |
+ <input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${searchVO.pageIndex}" />" />
|
|
| 852 |
+ <input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${searchVO.pageUnit}" />" />
|
|
| 895 | 853 |
<input type="hidden" id="msgGroupIdList" name="msgGroupIdList" value=""/> |
| 854 |
+ <input type="hidden" id="msgGroupId" name="msgGroupId" value=""/> |
|
| 896 | 855 |
<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
|
| 897 | 856 |
<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
|
| 898 | 857 |
<input type="hidden" id="tabType" name="tabType" value="all"/><!-- 탭 종류 --> |
| 899 | 858 |
<input type="hidden" id="stateType" name="stateType" value="all"/><!-- 발송상태 종류 --> |
| 900 | 859 |
<input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 --> |
| 901 | 860 |
<input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 --> |
| 902 |
- <input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/><!-- 주소록 그룹 이름 -->
|
|
| 861 |
+ <input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/>
|
|
| 862 |
+ <input type="hidden" id="searchCondition01" name="searchCondition01" value="${searchVO.searchCondition01}"/>
|
|
| 863 |
+ <input type="hidden" id="searchCondition02" name="searchCondition02" value="${searchVO.searchCondition02}"/>
|
|
| 903 | 864 |
|
| 904 | 865 |
|
| 905 | 866 |
<div class="rev_content" id="tab5_1"> |
| 906 |
- <!-- 페이지 로딩 속도를 위해서 ajax 로딩처리 --> |
|
| 907 |
- <div class="rev_admin" id ="revAdmin"> |
|
| 867 |
+ |
|
| 868 |
+ <!-- 발송결과 개선 : 문구추가 --> |
|
| 869 |
+ <div class="titBox_result"> |
|
| 870 |
+ <p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p> |
|
| 871 |
+ <p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p> |
|
| 872 |
+ <p>- 단문문자는 최대 24시간, 장문 및 그림문자는 최대 72시간까지 결과값이 수신되지 않은 경우 실패(비과금) 처리됩니다.</p> |
|
| 908 | 873 |
</div> |
| 874 |
+ <!--// 발송결과 개선 : 문구추가 --> |
|
| 909 | 875 |
|
| 910 | 876 |
<div class="excel_middle"> |
| 911 | 877 |
<div class="select_btnWrap clearfix"> |
| 912 | 878 |
<div class="btn_left"> |
| 913 | 879 |
<span class="cal_label">기간선택</span> |
| 914 | 880 |
<div class="calendar_wrap"> |
| 915 |
- <input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="startDate" value="<c:out value='${mjonMsgSentVO.startDate}'/>" data-datecontrol="true">
|
|
| 881 |
+ <input type="text" class="searchStartDate inp calendar" title="검색 시작일" id="searchStartDate" name="searchStartDate" value="<c:out value='${mjonMsgSentVO.searchStartDate}'/>" data-datecontrol="true">
|
|
| 916 | 882 |
<span class="dateEtc">~</span> |
| 917 |
- <input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="endDate" value="<c:out value='${mjonMsgSentVO.endDate}'/>" data-datecontrol="true">
|
|
| 883 |
+ <input type="text" class="searchEndDate inp calendar" title="검색 종료일" id="searchEndDate" name="searchEndDate" value="<c:out value='${mjonMsgSentVO.searchEndDate}'/>" data-datecontrol="true">
|
|
| 918 | 884 |
</div> |
| 919 |
- <!-- <button type="button">전월</button> |
|
| 920 |
- <button type="button">당월</button> --> |
|
| 921 |
- <button type="button" onclick="setCalVal(lastfulstday,'startDate');setCalVal( lastfuledday,'endDate'); return false;" class="btnType btnType19">전월</button> |
|
| 922 |
- <button type="button" onclick="setCalVal(thisfulstlday,'startDate');setCalVal( thisfuledtlday,'endDate'); return false;" class="btnType btnType19">당월</button> |
|
| 923 |
- <!-- <button type="button">3개월</button> --> |
|
| 924 |
- <button type="button" onclick="fn_G_getPrevMonth('startDate', 3);fn_G_getCurrDate('endDate'); return false;" class="btnType btnType19">3개월</button>
|
|
| 885 |
+ <button type="button" onclick="setCalVal(lastfulstday,'searchStartDate');setCalVal( lastfuledday,'searchEndDate'); return false;" class="btnType btnType19">전월</button> |
|
| 886 |
+ <button type="button" onclick="setCalVal(thisfulstlday,'searchStartDate');setCalVal( thisfuledtlday,'searchEndDate'); return false;" class="btnType btnType19">당월</button> |
|
| 887 |
+ <button type="button" onclick="fn_G_getPrevMonth('searchStartDate', 3);fn_G_getCurrDate('searchEndDate'); return false;" class="btnType btnType19">3개월</button>
|
|
| 925 | 888 |
<button type="button" class="btnType6" onClick="javascript:fnSearch(1); return false;">조회</button> |
| 926 | 889 |
</div> |
| 927 | 890 |
<div class="btn_right"> |
| 928 |
- <%-- <label for="searchMsgType" class="label">문자형태 선택 == ${mjonMsgSentVO.searchMsgType}</label>
|
|
| 929 |
- <select name="searchMsgType" id="searchMsgType" class="selType2"> |
|
| 930 |
- <option value="">전체</option> |
|
| 931 |
- <option value="S" <c:if test="${mjonMsgSentVO.searchMsgType == 'S'}">selected</c:if> >단문</option>
|
|
| 932 |
- <option value="L" <c:if test="${mjonMsgSentVO.searchMsgType == 'L'}">selected</c:if> >장문</option>
|
|
| 933 |
- <option value="M" <c:if test="${mjonMsgSentVO.searchMsgType == 'M'}">selected</c:if> >그림</option>
|
|
| 934 |
- </select> --%> |
|
| 935 |
- |
|
| 936 |
- <c:if test="${appMgmt }">
|
|
| 937 |
- <label for="searchCondition_01" class="label">발신방식 == ${mjonMsgSentVO.searchCondition}</label>
|
|
| 938 |
- <select name="searchCondition_01" id="searchCondition_01" class="selType2 select_all_btn"> |
|
| 939 |
- <option value="" <c:if test="${empty mjonMsgSentVO.searchCondition_01 }">selected</c:if> >발송방식 전체</option>
|
|
| 940 |
- <option value="H" <c:if test="${mjonMsgSentVO.searchCondition_01 == 'H'}">selected</c:if> >WEB</option>
|
|
| 941 |
- <option value="A" <c:if test="${mjonMsgSentVO.searchCondition_01 == 'A'}">selected</c:if> >API</option>
|
|
| 942 |
- </select> |
|
| 943 |
- </c:if> |
|
| 944 |
- <label for="searchCondition" class="label">발신번호 선택 == ${mjonMsgSentVO.searchCondition}</label>
|
|
| 891 |
+ <label for="searchCondition" class="label">검색 조건: ${mjonMsgSentVO.searchCondition == '2' ? '발신번호' : '문자내용'}</label>
|
|
| 945 | 892 |
<select name="searchCondition" id="searchCondition" class="selType2 select_btn"> |
| 946 | 893 |
<option value="2" <c:if test="${mjonMsgSentVO.searchCondition == '2'}">selected</c:if> >발신번호</option>
|
| 947 |
- <option value="3" <c:if test="${mjonMsgSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option>
|
|
| 894 |
+ <option value="3" <c:if test="${mjonMsgSentVO.searchCondition == '3'}">selected</c:if> >문자내용</option>
|
|
| 948 | 895 |
</select> |
| 949 | 896 |
<div class="search"> |
| 950 | 897 |
<label for="id" class="label"></label> |
... | ... | @@ -954,32 +901,72 @@ |
| 954 | 901 |
</div> |
| 955 | 902 |
</div> |
| 956 | 903 |
</div> |
| 904 |
+ <!-- 페이지 로딩 속도를 위해서 ajax 로딩처리 --> |
|
| 905 |
+ <div class="rev_admin" id ="revAdmin"> |
|
| 906 |
+ </div> |
|
| 957 | 907 |
<div class="list_tab_wrap2 type4"> |
| 958 | 908 |
<!-- tab button --> |
| 959 | 909 |
<ul class="list_tab"> |
| 960 |
- <li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
|
|
| 961 |
- <li class="tab"><button type="button" onclick="fnTabLoad('S',1); return false;">단문(SMS)</button></li>
|
|
| 962 |
- <li class="tab"><button type="button" onclick="fnTabLoad('L',2); return false;">장문(LMS)</button></li>
|
|
| 963 |
- <li class="tab"><button type="button" onclick="fnTabLoad('M',3); return false;">그림(MMS)</button></li>
|
|
| 910 |
+ <li class="tab active"><button type="button" onclick="fnTabLoad(''); return false;">전체</button></li>
|
|
| 911 |
+ <li class="tab"><button type="button" onclick="fnTabLoad('S'); return false;">단문(SMS)</button></li>
|
|
| 912 |
+ <li class="tab"><button type="button" onclick="fnTabLoad('L'); return false;">장문(LMS)</button></li>
|
|
| 913 |
+ <li class="tab"><button type="button" onclick="fnTabLoad('M'); return false;">그림(MMS)</button></li>
|
|
| 964 | 914 |
</ul><!--// tab button --> |
| 965 | 915 |
</div> |
| 966 | 916 |
<!-- 예약관리 > 전체 --> |
| 967 |
- <div class="price_history_cont current" id="listTab_2"> |
|
| 917 |
+ <div class="price_history_cont current price_wrap" id="listTab_2"> |
|
| 968 | 918 |
<!-- tab button --> |
| 969 | 919 |
<div class="table_tab_wrap"> |
| 970 |
- <ul> |
|
| 920 |
+ <!--<ul> |
|
| 971 | 921 |
<li class="tab active"> |
| 972 | 922 |
<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li>
|
| 973 | 923 |
<li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li>
|
| 974 | 924 |
<li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li>
|
| 975 | 925 |
<li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li>
|
| 976 |
- </ul><!--// tab button --> |
|
| 977 |
- <div class="tab_depth1"> |
|
| 926 |
+ </ul>// tab button --> |
|
| 927 |
+ |
|
| 928 |
+ |
|
| 929 |
+ <!-- tab button --> |
|
| 930 |
+ <ul> |
|
| 931 |
+ <li class="tab ${empty searchVO.searchCondition_01 ? 'active' : ''}">
|
|
| 932 |
+ <button type="button" class="sendKindBtn" data-info="">전체</button> |
|
| 933 |
+ </li> |
|
| 934 |
+ <li class="tab ${searchVO.searchCondition_01 == '0' ? 'active' : ''}">
|
|
| 935 |
+ <button type="button" class="sendKindBtn" data-info="N">즉시</button> |
|
| 936 |
+ </li> |
|
| 937 |
+ <li class="tab ${searchVO.searchCondition_01 == '1' ? 'active' : ''}">
|
|
| 938 |
+ <button type="button" class="sendKindBtn" data-info="Y">예약</button> |
|
| 939 |
+ </li> |
|
| 940 |
+ </ul> |
|
| 941 |
+ <!--// tab button --> |
|
| 942 |
+ |
|
| 943 |
+ |
|
| 944 |
+ <!-- <div class="tab_depth1"> |
|
| 978 | 945 |
<a href="#none" class="on msgGgoupList">받는사람(전송건별)</a> |
| 979 | 946 |
<a href="#none" style="display: none;"></a> |
| 980 | 947 |
<a href="#none" class="msgPrivateList">받는사람(개인별)</a> |
| 981 | 948 |
<div class="on_active">받는사람(전송건별)</div> |
| 949 |
+ </div> --> |
|
| 950 |
+ |
|
| 951 |
+ <!-- 발송화면 개선 : 발송결과 추가--> |
|
| 952 |
+ <div class="tab_btnbox"> |
|
| 953 |
+ <button type="button" class="btnType btnType14 check_validity">발송결과<i class="qmMark"></i></button> |
|
| 954 |
+ <div class="info_hover_cont send_hover_cont price_hover"> |
|
| 955 |
+ <dl> |
|
| 956 |
+ <dt class="c_222">[<span>대기</span>]</dt> |
|
| 957 |
+ <dd> |
|
| 958 |
+ 발송은 성공하였으며, 수신자측 통신사로부터 수신여부를 확인중인 상태 <br> |
|
| 959 |
+ <span>※ 예약문자의 경우 실발송 전까지는 “대기”로 표시</span> |
|
| 960 |
+ </dd> |
|
| 961 |
+ <dt class="c_002c9a">[<span>성공</span>]</dt> |
|
| 962 |
+ <dd>발송 및 수신이 완료된 상태</dd> |
|
| 963 |
+ <dt class="c_e40000">[<span>실패</span>]</dt> |
|
| 964 |
+ <dd class="last">결번, 일시정지, 전화번호 오류 등의 사유로 발송이 |
|
| 965 |
+ 불가한 상태</dd> |
|
| 966 |
+ </dl> |
|
| 967 |
+ </div> |
|
| 982 | 968 |
</div> |
| 969 |
+ <!--// 발송화면 개선 : 발송결과 추가--> |
|
| 983 | 970 |
</div> |
| 984 | 971 |
<!-- 발송관리 리스트 --> |
| 985 | 972 |
<div class="table_cont current msgSentAllLoad" id="tableCont_1"> |
--- src/main/webapp/WEB-INF/jsp/web/msgsent/subcontent/MsgSentView_HA_allSentAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/subcontent/MsgSentView_HA_allSentAjax.jsp
... | ... | @@ -25,14 +25,14 @@ |
| 25 | 25 |
|
| 26 | 26 |
</script> |
| 27 | 27 |
|
| 28 |
-<div class="rev_admin_in"> |
|
| 28 |
+ <div class="rev_admin_in"> |
|
| 29 | 29 |
<div class="rev_admin_top clearfix"> |
| 30 | 30 |
<p>전체</p> |
| 31 |
- <c:set var="allTotal" value="${H_allSentCntVO.totCnt + A_allSentCntVO.totCnt }" />
|
|
| 31 |
+ <c:set var="allTotal" value="${H_allSentCntVO.totCnt}" />
|
|
| 32 | 32 |
<p><span><fmt:formatNumber value="${allTotal }" pattern="#,###"/></span> 건</p>
|
| 33 | 33 |
</div> |
| 34 |
- <div class="rev_admin_btm admin_btm"> |
|
| 35 |
- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_allSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
|
| 34 |
+ <div class="rev_admin_btm"> |
|
| 35 |
+<%-- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_allSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> --%>
|
|
| 36 | 36 |
<dl> |
| 37 | 37 |
<dt>대기</dt> |
| 38 | 38 |
<dd><span class="c_002c9a"><fmt:formatNumber value="${H_allSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
|
... | ... | @@ -46,32 +46,15 @@ |
| 46 | 46 |
<dd><span class="c_e40000"><fmt:formatNumber value="${H_allSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
|
| 47 | 47 |
</dl> |
| 48 | 48 |
</div> |
| 49 |
- <c:if test="${appMgmt }">
|
|
| 50 |
- <div class="rev_admin_btm admin_btm admin_btm_api"> |
|
| 51 |
- <P class="title_top">API<span class="title_num"><fmt:formatNumber value="${A_allSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
|
| 52 |
- <dl> |
|
| 53 |
- <dt>대기</dt> |
|
| 54 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${A_allSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
|
|
| 55 |
- </dl> |
|
| 56 |
- <dl> |
|
| 57 |
- <dt>성공</dt> |
|
| 58 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${A_allSentCntVO.succCnt}" pattern="#,###"/></span>건</dd>
|
|
| 59 |
- </dl> |
|
| 60 |
- <dl> |
|
| 61 |
- <dt>실패</dt> |
|
| 62 |
- <dd><span class="c_e40000"><fmt:formatNumber value="${A_allSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
|
|
| 63 |
- </dl> |
|
| 64 |
- </div> |
|
| 65 |
- </c:if> |
|
| 66 | 49 |
</div> |
| 67 | 50 |
<div class="rev_admin_in"> |
| 68 | 51 |
<div class="rev_admin_top clearfix"> |
| 69 | 52 |
<p>단문(SMS)</p> |
| 70 |
- <c:set var="smsTotal" value="${H_smsSentCntVO.totCnt + A_smsSentCntVO.totCnt }" />
|
|
| 53 |
+ <c:set var="smsTotal" value="${H_smsSentCntVO.totCnt }" />
|
|
| 71 | 54 |
<p><span><fmt:formatNumber value="${smsTotal }" pattern="#,###"/></span> 건</p>
|
| 72 | 55 |
</div> |
| 73 |
- <div class="rev_admin_btm admin_btm"> |
|
| 74 |
- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_smsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
|
| 56 |
+ <div class="rev_admin_btm"> |
|
| 57 |
+<%-- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_smsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> --%>
|
|
| 75 | 58 |
<dl> |
| 76 | 59 |
<dt>대기</dt> |
| 77 | 60 |
<dd><span class="c_002c9a"><fmt:formatNumber value="${H_smsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
|
... | ... | @@ -85,32 +68,15 @@ |
| 85 | 68 |
<dd><span class="c_e40000"><fmt:formatNumber value="${H_smsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
|
| 86 | 69 |
</dl> |
| 87 | 70 |
</div> |
| 88 |
- <c:if test="${appMgmt }">
|
|
| 89 |
- <div class="rev_admin_btm admin_btm admin_btm_api"> |
|
| 90 |
- <P class="title_top">API<span class="title_num"><fmt:formatNumber value="${A_smsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
|
| 91 |
- <dl> |
|
| 92 |
- <dt>대기</dt> |
|
| 93 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${A_smsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
|
|
| 94 |
- </dl> |
|
| 95 |
- <dl> |
|
| 96 |
- <dt>성공</dt> |
|
| 97 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${A_smsSentCntVO.succCnt}" pattern="#,###"/></span>건</dd>
|
|
| 98 |
- </dl> |
|
| 99 |
- <dl> |
|
| 100 |
- <dt>실패</dt> |
|
| 101 |
- <dd><span class="c_e40000"><fmt:formatNumber value="${A_smsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
|
|
| 102 |
- </dl> |
|
| 103 |
- </div> |
|
| 104 |
- </c:if> |
|
| 105 | 71 |
</div> |
| 106 | 72 |
<div class="rev_admin_in"> |
| 107 | 73 |
<div class="rev_admin_top clearfix"> |
| 108 | 74 |
<p>장문(LMS)</p> |
| 109 |
- <c:set var="lmsTotal" value="${H_lmsSentCntVO.totCnt + A_lmsSentCntVO.totCnt }" />
|
|
| 75 |
+ <c:set var="lmsTotal" value="${H_lmsSentCntVO.totCnt }" />
|
|
| 110 | 76 |
<p><span><fmt:formatNumber value="${lmsTotal }" pattern="#,###"/></span> 건</p>
|
| 111 | 77 |
</div> |
| 112 |
- <div class="rev_admin_btm admin_btm"> |
|
| 113 |
- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_lmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
|
| 78 |
+ <div class="rev_admin_btm"> |
|
| 79 |
+<%-- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_lmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> --%>
|
|
| 114 | 80 |
<dl> |
| 115 | 81 |
<dt>대기</dt> |
| 116 | 82 |
<dd><span class="c_002c9a"><fmt:formatNumber value="${H_lmsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
|
... | ... | @@ -124,32 +90,15 @@ |
| 124 | 90 |
<dd><span class="c_e40000"><fmt:formatNumber value="${H_lmsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
|
| 125 | 91 |
</dl> |
| 126 | 92 |
</div> |
| 127 |
- <c:if test="${appMgmt }">
|
|
| 128 |
- <div class="rev_admin_btm admin_btm admin_btm_api"> |
|
| 129 |
- <P class="title_top">API<span class="title_num"><fmt:formatNumber value="${A_lmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
|
| 130 |
- <dl> |
|
| 131 |
- <dt>대기</dt> |
|
| 132 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${A_lmsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
|
|
| 133 |
- </dl> |
|
| 134 |
- <dl> |
|
| 135 |
- <dt>성공</dt> |
|
| 136 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${A_lmsSentCntVO.succCnt}" pattern="#,###"/></span>건</dd>
|
|
| 137 |
- </dl> |
|
| 138 |
- <dl> |
|
| 139 |
- <dt>실패</dt> |
|
| 140 |
- <dd><span class="c_e40000"><fmt:formatNumber value="${A_lmsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
|
|
| 141 |
- </dl> |
|
| 142 |
- </div> |
|
| 143 |
- </c:if> |
|
| 144 | 93 |
</div> |
| 145 | 94 |
<div class="rev_admin_in"> |
| 146 | 95 |
<div class="rev_admin_top clearfix"> |
| 147 | 96 |
<p>그림(MMS)</p> |
| 148 |
- <c:set var="mmsTotal" value="${H_mmsSentCntVO.totCnt + A_mmsSentCntVO.totCnt }" />
|
|
| 97 |
+ <c:set var="mmsTotal" value="${H_mmsSentCntVO.totCnt }" />
|
|
| 149 | 98 |
<p><span><fmt:formatNumber value="${mmsTotal }" pattern="#,###"/></span> 건</p>
|
| 150 | 99 |
</div> |
| 151 |
- <div class="rev_admin_btm admin_btm"> |
|
| 152 |
- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_mmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
|
| 100 |
+ <div class="rev_admin_btm"> |
|
| 101 |
+<%-- <P class="title_top">WEB<span class="title_num"><fmt:formatNumber value="${H_mmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P> --%>
|
|
| 153 | 102 |
<dl> |
| 154 | 103 |
<dt>대기</dt> |
| 155 | 104 |
<dd><span class="c_002c9a"><fmt:formatNumber value="${H_mmsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
|
... | ... | @@ -163,21 +112,4 @@ |
| 163 | 112 |
<dd><span class="c_e40000"><fmt:formatNumber value="${H_mmsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
|
| 164 | 113 |
</dl> |
| 165 | 114 |
</div> |
| 166 |
- <c:if test="${appMgmt }">
|
|
| 167 |
- <div class="rev_admin_btm admin_btm admin_btm_api"> |
|
| 168 |
- <P class="title_top">API<span class="title_num"><fmt:formatNumber value="${A_mmsSentCntVO.totCnt}" pattern="#,###"/><span>건</span></span></P>
|
|
| 169 |
- <dl> |
|
| 170 |
- <dt>대기</dt> |
|
| 171 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${A_mmsSentCntVO.waitCnt}" pattern="#,###"/></span>건</dd>
|
|
| 172 |
- </dl> |
|
| 173 |
- <dl> |
|
| 174 |
- <dt>성공</dt> |
|
| 175 |
- <dd><span class="c_002c9a"><fmt:formatNumber value="${A_mmsSentCntVO.succCnt}" pattern="#,###"/></span>건</dd>
|
|
| 176 |
- </dl> |
|
| 177 |
- <dl> |
|
| 178 |
- <dt>실패</dt> |
|
| 179 |
- <dd><span class="c_e40000"><fmt:formatNumber value="${A_mmsSentCntVO.failCnt}" pattern="#,###"/></span>건</dd>
|
|
| 180 |
- </dl> |
|
| 181 |
- </div> |
|
| 182 |
- </c:if> |
|
| 183 | 115 |
</div>(No newline at end of file) |
--- src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
... | ... | @@ -4,6 +4,8 @@ |
| 4 | 4 |
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> |
| 5 | 5 |
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%> |
| 6 | 6 |
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> |
| 7 |
+<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%> |
|
| 8 |
+ |
|
| 7 | 9 |
|
| 8 | 10 |
<script src="https://t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script> |
| 9 | 11 |
<script language=javascript> |
... | ... | @@ -845,8 +847,9 @@ |
| 845 | 847 |
</td> |
| 846 | 848 |
<td> |
| 847 | 849 |
<c:choose> |
| 848 |
- <c:when test="${not empty resultSentMsg.regdate}">
|
|
| 849 |
- <fmt:formatDate value="${resultSentMsg.regdate}" pattern="yyyy-MM-dd HH:mm:ss"/>
|
|
| 850 |
+ <c:when test="${not empty resultSentMsg.regDate}">
|
|
| 851 |
+<%-- <fmt:formatDate value="${resultSentMsg.regDate}" pattern="yyyy-MM-dd HH:mm:ss"/> --%>
|
|
| 852 |
+ ${fnc:setStrToDataFormatter(resultSentMsg.regDate, 'yyyy-MM-dd HH:mm:ss') }
|
|
| 850 | 853 |
</c:when> |
| 851 | 854 |
<c:otherwise> |
| 852 | 855 |
- |
+++ src/main/webapp/WEB-INF/tld/functions.tld
... | ... | @@ -0,0 +1,31 @@ |
| 1 | +<?xml version="1.0" encoding="UTF-8"?> | |
| 2 | +<taglib xmlns="http://java.sun.com/xml/ns/j2ee" | |
| 3 | + version="2.1"> | |
| 4 | + | |
| 5 | + <display-name>Custom Functions</display-name> | |
| 6 | + <tlib-version>1.0</tlib-version> | |
| 7 | + <short-name>custom-funcs</short-name> | |
| 8 | + | |
| 9 | + <!-- PhoneFormatUtil 클래스의 함수 --> | |
| 10 | + <function> | |
| 11 | + <name>formatPhone</name> <!-- JSP에서 호출할 함수명 --> | |
| 12 | + <function-class>itn.com.cmm.util.StringUtil2</function-class> <!-- 해당 함수를 포함하는 Java 클래스 --> | |
| 13 | + <function-signature>java.lang.String formatPhone(java.lang.String)</function-signature> <!-- 함수의 반환 타입 및 매개변수 타입 (메서드 시그니처) --> | |
| 14 | + </function> | |
| 15 | + | |
| 16 | + <function> | |
| 17 | + <name>setStrToDataFormatter</name> | |
| 18 | + <function-class>itn.com.cmm.util.DateUtils</function-class> | |
| 19 | + <function-signature>java.lang.String setStrToDataFormatter(java.lang.String, java.lang.String)</function-signature> | |
| 20 | + </function> | |
| 21 | + | |
| 22 | + <!-- 예시) function 추가 - StringUtil 클래스의 함수 --> | |
| 23 | + <!-- | |
| 24 | + <function> | |
| 25 | + <name>toUpper</name> | |
| 26 | + <function-class>com.example.utils.StringUtil</function-class> | |
| 27 | + <function-signature>java.lang.String toUpperCase(java.lang.String)</function-signature> | |
| 28 | + </function> | |
| 29 | + --> | |
| 30 | + | |
| 31 | +</taglib> |
--- src/main/webapp/js/web/msgdata/msgDataView.js
+++ src/main/webapp/js/web/msgdata/msgDataView.js
... | ... | @@ -13,6 +13,7 @@ |
| 13 | 13 |
|
| 14 | 14 |
// 문자 그룹정보 => 재전송용 |
| 15 | 15 |
function getMjMsgGroupInfoByResend() {
|
| 16 |
+ console.log('재전송 시 싱행되는 function');
|
|
| 16 | 17 |
$.ajax({
|
| 17 | 18 |
type: "POST", |
| 18 | 19 |
url: "/web/mjon/msgdata/selectMjMsgGroupInfoByResendAjax.do", |
... | ... | @@ -33,6 +34,7 @@ |
| 33 | 34 |
|
| 34 | 35 |
var smsTxt = msgData.smsTxt; |
| 35 | 36 |
var subject = msgData.subject; |
| 37 |
+ var subjectChkYn = msgData.subjectChkYn; |
|
| 36 | 38 |
var fileId = ""; |
| 37 | 39 |
var filePath = ""; |
| 38 | 40 |
var len = fileData.length; |
... | ... | @@ -56,11 +58,13 @@ |
| 56 | 58 |
console.log('msgData : ', msgData);
|
| 57 | 59 |
console.log('msgData : ', msgData);
|
| 58 | 60 |
// 문자제목 |
| 59 |
- if (msgData.subject != null && msgData.subject != "") {
|
|
| 60 |
- $('.msg_title').addClass('active');
|
|
| 61 |
- $("input:radio[name='title_status']:radio[value='Y']").prop('checked', true); // 선택하기
|
|
| 62 |
- $('.textbox').show();
|
|
| 63 |
- $("#mmsSubject").val(subject);
|
|
| 61 |
+ if (subject != null && subject != "") {
|
|
| 62 |
+ if(subjectChkYn == 'Y'){
|
|
| 63 |
+ $('.msg_title').addClass('active');
|
|
| 64 |
+ $("input:radio[name='subjectChkYn']:radio[value='Y']").prop('checked', true); // 선택하기
|
|
| 65 |
+ $('.textbox').show();
|
|
| 66 |
+ $("#mmsSubject").val(subject);
|
|
| 67 |
+ } |
|
| 64 | 68 |
} |
| 65 | 69 |
|
| 66 | 70 |
// 문자내용 |
... | ... | @@ -1255,7 +1259,7 @@ |
| 1255 | 1259 |
}); |
| 1256 | 1260 |
|
| 1257 | 1261 |
// 빈 값 제거 |
| 1258 |
- removeEmptyValues(formData); |
|
| 1262 |
+ removeEmptyValues(formData); |
|
| 1259 | 1263 |
|
| 1260 | 1264 |
// 선택된 데이터 추가 |
| 1261 | 1265 |
formData["mjonMsgSendVOList"] = $selectedData; |
... | ... | @@ -1280,10 +1284,8 @@ |
| 1280 | 1284 |
dataType: 'json', |
| 1281 | 1285 |
success: function (data) {
|
| 1282 | 1286 |
|
| 1283 |
- console.log('data : ', data);
|
|
| 1284 |
- |
|
| 1285 | 1287 |
var status = data.status; |
| 1286 |
- if("OK" == status){
|
|
| 1288 |
+ if("OK" == status){ // 성공
|
|
| 1287 | 1289 |
|
| 1288 | 1290 |
var smsCnt = Number(data.object.resultSts); |
| 1289 | 1291 |
var blockCnt = Number(data.object.resultBlockSts); |
... | ... | @@ -1309,19 +1311,19 @@ |
| 1309 | 1311 |
} |
| 1310 | 1312 |
|
| 1311 | 1313 |
|
| 1312 |
- }else if("BAD_REQUEST" == status){
|
|
| 1314 |
+ }else if("BAD_REQUEST" == status){ // 오류
|
|
| 1313 | 1315 |
|
| 1314 | 1316 |
alert(data.message); |
| 1315 | 1317 |
return false; |
| 1316 | 1318 |
|
| 1317 |
- }else if("UNAUTHORIZED" == status){
|
|
| 1319 |
+ }else if("UNAUTHORIZED" == status){ // 정지 회원 처리
|
|
| 1318 | 1320 |
|
| 1319 | 1321 |
alert(data.message); |
| 1320 | 1322 |
//문자발송 URL Move |
| 1321 | 1323 |
goMsgUrlMove(); |
| 1322 | 1324 |
return false; |
| 1323 | 1325 |
|
| 1324 |
- }else if("NO_CONTENT" == status){
|
|
| 1326 |
+ }else if("NO_CONTENT" == status){ // 발송로직에서 이미지 처리 오류 시 처리
|
|
| 1325 | 1327 |
|
| 1326 | 1328 |
$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
| 1327 | 1329 |
$('.pop_msg_fails .msg_text').html(returnData.message);
|
... | ... | @@ -1363,7 +1365,7 @@ |
| 1363 | 1365 |
|
| 1364 | 1366 |
} |
| 1365 | 1367 |
|
| 1366 |
- if (form.title_status.value === 'N') {
|
|
| 1368 |
+ if (form.subjectChkYn.value === 'N') {
|
|
| 1367 | 1369 |
form.mmsSubject.value = ""; |
| 1368 | 1370 |
} else if (getSpacialStringChk(form.mmsSubject.value)) {
|
| 1369 | 1371 |
alert("문자 제목에는 치환문자(엑셀 내 *이름*, *1*, *2*, *3*, *4* 등)를 사용하실 수 없습니다.");
|
... | ... | @@ -1371,7 +1373,7 @@ |
| 1371 | 1373 |
} |
| 1372 | 1374 |
|
| 1373 | 1375 |
//문자제목에 이모지가 있는지 체크 |
| 1374 |
- var titleStatusYn = $("input[name='title_status']:checked").val();
|
|
| 1376 |
+ var titleStatusYn = $("input[name='subjectChkYn']:checked").val();
|
|
| 1375 | 1377 |
if(titleStatusYn == 'Y') {
|
| 1376 | 1378 |
if(!emojiCheck(form.mmsSubject.value)) return false; |
| 1377 | 1379 |
} |
... | ... | @@ -1710,15 +1712,15 @@ |
| 1710 | 1712 |
|
| 1711 | 1713 |
function msgResultLink(){
|
| 1712 | 1714 |
var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
|
| 1713 |
- if(reserYn == 'Y'){
|
|
| 1715 |
+ /*if(reserYn == 'Y'){
|
|
| 1714 | 1716 |
|
| 1715 | 1717 |
location.href="/web/mjon/reservmsg/selectReservMsgView.do"; |
| 1716 | 1718 |
|
| 1717 |
- }else{
|
|
| 1719 |
+ }else{*/
|
|
| 1718 | 1720 |
|
| 1719 | 1721 |
location.href="/web/mjon/msgsent/selectMsgSentView.do"; |
| 1720 | 1722 |
|
| 1721 |
- } |
|
| 1723 |
+ /*}*/ |
|
| 1722 | 1724 |
|
| 1723 | 1725 |
} |
| 1724 | 1726 |
|
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?