diff --git a/pom.xml b/pom.xml index 01f727f..2622bf0 100644 --- a/pom.xml +++ b/pom.xml @@ -166,6 +166,10 @@ 1.4.2 + + com.zaxxer + HikariCP + diff --git a/src/main/java/com/itn/admin/cmn/config/MjonAgentSDatabaseConfig.java b/src/main/java/com/itn/admin/cmn/config/MjonAgentSDatabaseConfig.java index 6821f99..f6014f6 100644 --- a/src/main/java/com/itn/admin/cmn/config/MjonAgentSDatabaseConfig.java +++ b/src/main/java/com/itn/admin/cmn/config/MjonAgentSDatabaseConfig.java @@ -23,9 +23,9 @@ class MjonAgentSDatabaseConfig { // A database DataSource @Bean(AGENT_S_DATA_SOURCE) @ConfigurationProperties(prefix = "spring.mjagent.server.datasource") - public DataSource CommuteDataSource() { + public DataSource MjagentServerSource() { return DataSourceBuilder.create() -// .type(HikariDataSource.class) + .type(com.zaxxer.hikari.HikariDataSource.class) // HikariDataSource를 명시적으로 사용 .build(); } diff --git a/src/main/java/com/itn/admin/itn/code/mapper/CodeDetailMapper.java b/src/main/java/com/itn/admin/itn/code/mapper/CodeDetailMapper.java index 2f33aaa..cbc6957 100644 --- a/src/main/java/com/itn/admin/itn/code/mapper/CodeDetailMapper.java +++ b/src/main/java/com/itn/admin/itn/code/mapper/CodeDetailMapper.java @@ -7,8 +7,8 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface CodeDetailMapper { List findByGroupId(String codeGroupId); - CodeDetailVO findById(String codeId); + CodeDetailVO findById(String codeGroupId, String codeId); void insert(CodeDetailVO codeDetailVO); void update(CodeDetailVO codeDetailVO); - void delete(String codeId); + void delete(String codeGroupId, String codeId); } diff --git a/src/main/java/com/itn/admin/itn/code/mapper/domain/CodeDetailVO.java b/src/main/java/com/itn/admin/itn/code/mapper/domain/CodeDetailVO.java index e1cee12..dc50361 100644 --- a/src/main/java/com/itn/admin/itn/code/mapper/domain/CodeDetailVO.java +++ b/src/main/java/com/itn/admin/itn/code/mapper/domain/CodeDetailVO.java @@ -1,12 +1,10 @@ package com.itn.admin.itn.code.mapper.domain; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; @Getter @Setter +@ToString @NoArgsConstructor @AllArgsConstructor public class CodeDetailVO { diff --git a/src/main/java/com/itn/admin/itn/code/server/CodeDetailService.java b/src/main/java/com/itn/admin/itn/code/server/CodeDetailService.java index 3d1a51b..0992ce7 100644 --- a/src/main/java/com/itn/admin/itn/code/server/CodeDetailService.java +++ b/src/main/java/com/itn/admin/itn/code/server/CodeDetailService.java @@ -12,14 +12,14 @@ public interface CodeDetailService { List getDetailsByGroupId(String codeGroupId); // 특정 코드 상세를 ID로 가져오는 메서드 - CodeDetailVO getCodeDetailById(String codeId); + CodeDetailVO getCodeDetailById(String codeGroupId, String codeId); // 코드 상세 추가 메서드 RestResponse addCodeDetail(CodeDetailVO codeDetail); // 코드 상세 수정 메서드 - void updateCodeDetail(CodeDetailVO codeDetail); + RestResponse updateCodeDetail(CodeDetailVO codeDetail); // 코드 상세 삭제 메서드 - void deleteCodeDetail(String codeId); + void deleteCodeDetail(String codeGroupId, String codeId); } diff --git a/src/main/java/com/itn/admin/itn/code/server/impl/CodeDetailServiceImpl.java b/src/main/java/com/itn/admin/itn/code/server/impl/CodeDetailServiceImpl.java index 2d684c3..a426309 100644 --- a/src/main/java/com/itn/admin/itn/code/server/impl/CodeDetailServiceImpl.java +++ b/src/main/java/com/itn/admin/itn/code/server/impl/CodeDetailServiceImpl.java @@ -2,14 +2,17 @@ package com.itn.admin.itn.code.server.impl; import java.util.List; +import com.itn.admin.cmn.config.SecurityUtil; import com.itn.admin.cmn.msg.RestResponse; import com.itn.admin.itn.code.mapper.CodeDetailMapper; import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; import com.itn.admin.itn.code.server.CodeDetailService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +@Slf4j @Service public class CodeDetailServiceImpl implements CodeDetailService { @@ -22,23 +25,51 @@ public class CodeDetailServiceImpl implements CodeDetailService { } @Override - public CodeDetailVO getCodeDetailById(String codeId) { - return codeDetailMapper.findById(codeId); + public CodeDetailVO getCodeDetailById(String codeGroupId, String codeId) { + CodeDetailVO codeDetailVO = new CodeDetailVO(); + return codeDetailMapper.findById(codeGroupId, codeId); } @Override public RestResponse addCodeDetail(CodeDetailVO codeDetail) { - codeDetailMapper.insert(codeDetail); + + // 현재 인증된 사용자 정보 가져오기 + String userId = SecurityUtil.getCurrentUserId(); + if (userId == null) { + log.warn("Failed to retrieve current user ID."); + throw new IllegalStateException("Current user ID is not available"); + } + log.info("Updating by user: [{}]", userId); + + codeDetail.setFrstRegisterId(userId); + codeDetail.setLastUpdusrId(userId); + try { + codeDetailMapper.insert(codeDetail); + }catch (Exception e) { + return new RestResponse(HttpStatus.BAD_REQUEST, "코드 ID:"+ codeDetail.getCodeId() + " 를 확인해주세요. \n이미 등록되어 있을 수 있습니다." , codeDetail.getCodeName()); + } + return new RestResponse(HttpStatus.OK, "등록되었습니다", codeDetail.getCodeName()); } @Override - public void updateCodeDetail(CodeDetailVO codeDetail) { + public RestResponse updateCodeDetail(CodeDetailVO codeDetail) { + + // 현재 인증된 사용자 정보 가져오기 + String userId = SecurityUtil.getCurrentUserId(); + if (userId == null) { + log.warn("Failed to retrieve current user ID."); + throw new IllegalStateException("Current user ID is not available"); + } + log.info("Updating by user: [{}]", userId); + + codeDetail.setLastUpdusrId(userId); codeDetailMapper.update(codeDetail); + return new RestResponse(HttpStatus.OK, "등록되었습니다", codeDetail.getCodeName()); } @Override - public void deleteCodeDetail(String codeId) { - codeDetailMapper.delete(codeId); + public void deleteCodeDetail(String codeGroupId, String codeId){ + codeDetailMapper.delete(codeGroupId, codeId); } } diff --git a/src/main/java/com/itn/admin/itn/code/web/CodeDetailRestController.java b/src/main/java/com/itn/admin/itn/code/web/CodeDetailRestController.java index 5505114..34e41b2 100644 --- a/src/main/java/com/itn/admin/itn/code/web/CodeDetailRestController.java +++ b/src/main/java/com/itn/admin/itn/code/web/CodeDetailRestController.java @@ -3,13 +3,16 @@ package com.itn.admin.itn.code.web; import com.itn.admin.cmn.msg.RestResponse; import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; import com.itn.admin.itn.code.server.CodeDetailService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; import org.springframework.web.bind.annotation.*; +@Slf4j @RestController @RequestMapping("/api/code-details") // URL 경로를 '/api/code-details'로 변경 public class CodeDetailRestController { @@ -24,9 +27,9 @@ public class CodeDetailRestController { } // 특정 코드 상세를 ID로 가져오는 메서드 - @GetMapping("/detail/{codeId}") - public CodeDetailVO getCodeDetailById(@PathVariable String codeId) { - return codeDetailService.getCodeDetailById(codeId); + @GetMapping("/detail/{codeGroupId}/{codeId}") + public CodeDetailVO getCodeDetailById(@PathVariable String codeGroupId,@PathVariable String codeId) { + return codeDetailService.getCodeDetailById(codeGroupId, codeId); } // 코드 상세 추가 메서드 @@ -37,14 +40,16 @@ public class CodeDetailRestController { // 코드 상세 수정 메서드 @PutMapping("/detail/{codeId}") - public void updateCodeDetail(@PathVariable String codeId, @RequestBody CodeDetailVO codeDetail) { - codeDetail.setCodeId(codeId); - codeDetailService.updateCodeDetail(codeDetail); + public ResponseEntity updateCodeDetail(@PathVariable String codeId, @RequestBody CodeDetailVO codeDetail) { +// log.info("codeDetail :: [{}]", codeDetail.toString()); + + return ResponseEntity.ok().body(codeDetailService.updateCodeDetail(codeDetail)); + } // 코드 상세 삭제 메서드 - @DeleteMapping("/detail/{codeId}") - public void deleteCodeDetail(@PathVariable String codeId) { - codeDetailService.deleteCodeDetail(codeId); + @DeleteMapping("/detail/{codeGroupId}/{codeId}") + public void deleteCodeDetail(@PathVariable String codeGroupId,@PathVariable String codeId) { + codeDetailService.deleteCodeDetail(codeGroupId, codeId); } } diff --git a/src/main/java/com/itn/admin/itn/mjon/spam/mapper/SpamMapper.java b/src/main/java/com/itn/admin/itn/mjon/spam/mapper/SpamMapper.java index f520b95..8054425 100644 --- a/src/main/java/com/itn/admin/itn/mjon/spam/mapper/SpamMapper.java +++ b/src/main/java/com/itn/admin/itn/mjon/spam/mapper/SpamMapper.java @@ -20,4 +20,8 @@ public interface SpamMapper { List getSpamList(SpamVO spamVO); int getTotalRecordCount(); + + SpamVO findById(String spamId); + + void updateByKeywordsAndChcKeywordsWhereSpamId(SpamVO spamVO); } diff --git a/src/main/java/com/itn/admin/itn/mjon/spam/mapper/domain/SpamVO.java b/src/main/java/com/itn/admin/itn/mjon/spam/mapper/domain/SpamVO.java index 00537ae..7f68286 100644 --- a/src/main/java/com/itn/admin/itn/mjon/spam/mapper/domain/SpamVO.java +++ b/src/main/java/com/itn/admin/itn/mjon/spam/mapper/domain/SpamVO.java @@ -1,6 +1,7 @@ package com.itn.admin.itn.mjon.spam.mapper.domain; import com.itn.admin.cmn.vo.CmnVO; +import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; import lombok.*; import java.io.Serializable; @@ -30,9 +31,9 @@ public class SpamVO extends CmnVO implements Serializable { private static final long serialVersionUID = 1L; private int spamId; // 스팸 ID - private String msgGroupId; // 문자그룹ID private String smsTxt; // 문자내용 - private String spamRsn; // 스팸사유 + private String spamRsnCode01; // 스팸코드01 + private String spamRsnCode02; // 스팸코드02 private String keywords; // 문자에 포함된 단어 private String chcKeywords; // 스팸에 해당하는 단어 private LocalDateTime timestamp; // 요청 시간 @@ -43,6 +44,11 @@ public class SpamVO extends CmnVO implements Serializable { private LocalDateTime lastUpdtPnttm; // 최종수정일자 + private List CodeDetailList; // 최종수정일자 + + + // spam_keywords TB 외 필드들 private List keywordList; // 키워드 리스트 + private List chcKeywordList; // 키워드 리스트 } diff --git a/src/main/java/com/itn/admin/itn/mjon/spam/service/SpamService.java b/src/main/java/com/itn/admin/itn/mjon/spam/service/SpamService.java index ab76f90..0bb4fb4 100644 --- a/src/main/java/com/itn/admin/itn/mjon/spam/service/SpamService.java +++ b/src/main/java/com/itn/admin/itn/mjon/spam/service/SpamService.java @@ -1,5 +1,7 @@ package com.itn.admin.itn.mjon.spam.service; +import com.itn.admin.cmn.msg.RestResponse; +import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; import com.itn.admin.itn.mjon.spam.mapper.domain.SpamVO; import java.util.Map; @@ -13,4 +15,8 @@ public interface SpamService { void analyze(); Map getSpamList(SpamVO spamVO); + + RestResponse updateKeyword(String spamId, String word); + + RestResponse updateChcKeyword(String spamId, String word); } diff --git a/src/main/java/com/itn/admin/itn/mjon/spam/service/impl/SpamServiceImpl.java b/src/main/java/com/itn/admin/itn/mjon/spam/service/impl/SpamServiceImpl.java index fbcacca..46a66f0 100644 --- a/src/main/java/com/itn/admin/itn/mjon/spam/service/impl/SpamServiceImpl.java +++ b/src/main/java/com/itn/admin/itn/mjon/spam/service/impl/SpamServiceImpl.java @@ -1,9 +1,13 @@ package com.itn.admin.itn.mjon.spam.service.impl; import com.fasterxml.jackson.databind.ObjectMapper; +import com.itn.admin.cmn.msg.RestResponse; +import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; +import com.itn.admin.itn.code.server.CodeDetailService; import com.itn.admin.itn.mjon.spam.mapper.SpamMapper; import com.itn.admin.itn.mjon.spam.mapper.domain.SpamVO; import com.itn.admin.itn.mjon.spam.service.SpamService; +import jakarta.servlet.ServletOutputStream; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.*; @@ -11,6 +15,7 @@ import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.util.*; +import java.util.stream.Collectors; @Slf4j @Service @@ -20,11 +25,13 @@ public class SpamServiceImpl implements SpamService { @Autowired SpamMapper spamMapper; + @Autowired + private CodeDetailService codeDetailService; + + @Autowired private RestTemplate restTemplate; - - final static private String PYTHON_ANALYZE_URL= "http://192.168.0.78:5000/word_analyze"; public SpamServiceImpl(RestTemplate restTemplate) { @@ -40,7 +47,6 @@ public class SpamServiceImpl implements SpamService { map.put("spamList", spamList); - return map; } @@ -114,19 +120,90 @@ public class SpamServiceImpl implements SpamService { List spamList = spamMapper.getSpamList(spamVO); - // 키워드를 버튼용 배열로 변환 for (SpamVO spam : spamList) { if (spam.getKeywords() != null) { spam.setKeywordList(Arrays.asList(spam.getKeywords().split(", "))); } + if (spam.getChcKeywords() != null) { + spam.setChcKeywordList(Arrays.asList(spam.getChcKeywords().split(", "))); + } } + List rsnCode02List = new ArrayList<>(); + // 키워드를 버튼용 배열로 변환 + for (SpamVO spam : spamList) { + if (spam.getSpamRsnCode01() != null) { + spam.setCodeDetailList(codeDetailService.getDetailsByGroupId("SPAM"+spam.getSpamRsnCode01())); + } + } + + List rsnCode01List = codeDetailService.getDetailsByGroupId("SPAM"); + Map resultMap = new HashMap<>(); resultMap.put("spamList", spamList); resultMap.put("totalRecordCount", totalRecordCount); resultMap.put("totalPageCount", spamVO.getTotalPageCount()); + resultMap.put("rsnCode01List", rsnCode01List); + return resultMap; } + + @Override + public RestResponse updateChcKeyword(String spamId, String word) { + SpamVO spamVO = spamMapper.findById(spamId); + + spamVO.setKeywords(removeString(spamVO.getKeywords(),word)); + spamVO.setChcKeywords(addString(spamVO.getChcKeywords(),word)); + + spamMapper.updateByKeywordsAndChcKeywordsWhereSpamId(spamVO); + + return new RestResponse(HttpStatus.OK, word+" 단어가 선택되었습니다.",""); + } + + @Override + public RestResponse updateKeyword(String spamId, String word) { + SpamVO spamVO = spamMapper.findById(spamId); + + spamVO.setChcKeywords(removeString(spamVO.getChcKeywords(),word)); + spamVO.setKeywords(addString(spamVO.getKeywords(),word)); + + + spamMapper.updateByKeywordsAndChcKeywordsWhereSpamId(spamVO); + + return new RestResponse(HttpStatus.OK, word+" 단어가 취소되었습니다.",""); + } + + + private String removeString(String keywords, String word) { + String[] keywordArray = keywords.split(", "); + return Arrays.stream(keywordArray) + .filter(s -> !s.equals(word)) + .collect(Collectors.joining(", ")); + + + } + + private String addString(String keywords, String word) { + + if (keywords == null) { + keywords = ""; + } + + String[] keywordArray = keywords.split(", "); + boolean wordExists = Arrays.stream(keywordArray).anyMatch(kw -> kw.equals(word)); + if (!wordExists) { + // keywords 문자열이 비어있지 않은 경우, 쉼표를 추가한 후 새로운 단어를 추가합니다. + if (!keywords.isEmpty()) { + keywords += ", " + word; + } else { + // keywords가 비어있으면, 쉼표 없이 새로운 단어를 추가합니다. + keywords = word; + } + } + + return keywords; + + } } diff --git a/src/main/java/com/itn/admin/itn/mjon/spam/web/RestSpamController.java b/src/main/java/com/itn/admin/itn/mjon/spam/web/RestSpamController.java index 9247380..faa61ba 100644 --- a/src/main/java/com/itn/admin/itn/mjon/spam/web/RestSpamController.java +++ b/src/main/java/com/itn/admin/itn/mjon/spam/web/RestSpamController.java @@ -1,10 +1,15 @@ package com.itn.admin.itn.mjon.spam.web; +import com.itn.admin.cmn.msg.RestResponse; +import com.itn.admin.itn.code.mapper.domain.CodeDetailVO; import com.itn.admin.itn.mjon.spam.service.SpamService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @@ -21,15 +26,21 @@ public class RestSpamController { @GetMapping(value = "/mjon/spam/analyze") public void analyze(Model model) { - - spamService.analyze(); + } + // 키워드 -> 핵심키워드 :: keywords -> chc_keywords + @PutMapping("/mjon/spam/chcKeyword/{spamId}/{word}") + public ResponseEntity updateChcKeyword(@PathVariable String spamId, @PathVariable String word) { + return ResponseEntity.ok().body(spamService.updateChcKeyword(spamId, word)); + } - + // 핵심키워드 -> 키워드 :: chc_keywords -> keywords + @PutMapping("/mjon/spam/keyword/{spamId}/{word}") + public ResponseEntity updateKeyword(@PathVariable String spamId, @PathVariable String word) { + return ResponseEntity.ok().body(spamService.updateKeyword(spamId, word)); } - } diff --git a/src/main/java/com/itn/admin/itn/mjon/spam/web/SpamController.java b/src/main/java/com/itn/admin/itn/mjon/spam/web/SpamController.java index 769787f..3aab51c 100644 --- a/src/main/java/com/itn/admin/itn/mjon/spam/web/SpamController.java +++ b/src/main/java/com/itn/admin/itn/mjon/spam/web/SpamController.java @@ -30,9 +30,15 @@ public class SpamController { model.addAttribute("spamList", map.get("spamList")); model.addAttribute("pagingVO", spamVO); + model.addAttribute("rsnCode01List", map.get("rsnCode01List")); return "mjon/spam/select"; } + @GetMapping(value = "/mjon/spam/chk") + public String chk(@ModelAttribute("spamVO") SpamVO spamVO, Model model) { + + return "mjon/spam/chk"; + } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 04f2057..981c86b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -32,6 +32,7 @@ spring.main.datasource.password=itntest123 # spring.commute.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy spring.commute.datasource.jdbc-url=jdbc:log4jdbc:mysql://192.168.0.200:3312/biostar2_ac?serverTimezone=Asia/Seoul +#spring.commute.datasource.jdbc-url=jdbc:log4jdbc:mysql://192.168.0.30:3312/biostar2_ac?serverTimezone=Asia/Seoul spring.commute.datasource.username=root spring.commute.datasource.password=itntest! @@ -54,7 +55,8 @@ spring.mjagent.server.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.Dri spring.mjagent.server.datasource.jdbc-url=jdbc:log4jdbc:mysql://119.193.215.98:3306/mjon_agent_back?serverTimezone=Asia/Seoul spring.mjagent.server.datasource.username=mjonUr_agent spring.mjagent.server.datasource.password=mjagent123$ - +spring.mjagent.server.datasource.hikari.minimum-idle=2 +spring.mjagent.server.datasource.hikari.maximum-pool-size=4 diff --git a/src/main/resources/mapper/agent/client/one/AgentCOneMapper.xml b/src/main/resources/mapper/agent/client/one/AgentCOneMapper.xml index 7ce3791..596e416 100644 --- a/src/main/resources/mapper/agent/client/one/AgentCOneMapper.xml +++ b/src/main/resources/mapper/agent/client/one/AgentCOneMapper.xml @@ -60,6 +60,7 @@ MUNJAON_MSG WHERE SEND_STATUS != 1000 and MSG_TYPE = #{msgType} + and MESSAGE LIKE CONCAT(#{message}, '%') diff --git a/src/main/resources/mapper/itn/code/CodeDetailMapper.xml b/src/main/resources/mapper/itn/code/CodeDetailMapper.xml index 5c4c883..04689a4 100644 --- a/src/main/resources/mapper/itn/code/CodeDetailMapper.xml +++ b/src/main/resources/mapper/itn/code/CodeDetailMapper.xml @@ -12,7 +12,7 @@ @@ -35,6 +35,6 @@ - DELETE FROM common_code_detail WHERE code_id = #{codeId} + DELETE FROM common_code_detail WHERE code_id = #{codeId} AND code_group_id = #{codeGroupId} \ No newline at end of file diff --git a/src/main/resources/mapper/itn/mjon/spam/SpamMapper.xml b/src/main/resources/mapper/itn/mjon/spam/SpamMapper.xml index e06ebad..1f56617 100644 --- a/src/main/resources/mapper/itn/mjon/spam/SpamMapper.xml +++ b/src/main/resources/mapper/itn/mjon/spam/SpamMapper.xml @@ -12,9 +12,9 @@ SELECT SPAM_ID, - MSG_GROUP_ID, SMS_TXT, - SPAM_RSN, + SPAM_RSN_CODE_01, + SPAM_RSN_CODE_02, KEYWORDS, CHC_KEYWORDS, TIMESTAMP, @@ -73,9 +74,9 @@ + + UPDATE spam_keywords SET keywords = #{keywords} WHERE spam_id = #{spamId} + + + + + + UPDATE spam_keywords + SET keywords = #{keywords}, + chc_keywords = #{chcKeywords} + WHERE spam_id = #{spamId} + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/cmn/js/agent/timerForOneC.js b/src/main/resources/static/cmn/js/agent/timerForOneC.js index eb90ffe..21c1dc5 100644 --- a/src/main/resources/static/cmn/js/agent/timerForOneC.js +++ b/src/main/resources/static/cmn/js/agent/timerForOneC.js @@ -216,14 +216,16 @@ function oneStopReporingTimer() { } -function fn_oneReportCntAndTime(){ +function fn_oneReportCntAndTime(userId){ // 폼 데이터를 수집 var formData = new FormData($("#divOneSms .sendForm")[0]); var jsonObject = {}; formData.forEach((value, key) => { - jsonObject[key] = value; + if (!(value instanceof File)) { + jsonObject[key] = value; + } }); jsonObject['userId'] = userId; @@ -239,9 +241,15 @@ function fn_oneReportCntAndTime(){ if (data.status == 'OK') { var cnt = data.data; + $('#divOneSmsCard .reportStartCnt').text(cnt); - $('#divOneSmsCard .reportSndCnt').text(cnt); - if(cnt == 0){ + var transferCnt = $('#divOneSmsCard .insertCnt').text(); + + + console.log('cnt : ', cnt); + console.log('reportStartCnt : ', transferCnt); + console.log(''); + if(cnt >= Number(transferCnt)){ oneStopReporingTimer(); } } diff --git a/src/main/resources/static/cmn/js/agent/timerForTwoC.js b/src/main/resources/static/cmn/js/agent/timerForTwoC.js index 212a6dd..fe5a1d5 100644 --- a/src/main/resources/static/cmn/js/agent/timerForTwoC.js +++ b/src/main/resources/static/cmn/js/agent/timerForTwoC.js @@ -245,8 +245,9 @@ function fn_twoReportCntAndTime(userId){ if (data.status == 'OK') { var cnt = data.data; + console.log('cnt : ', cnt); // 리포트 영역에 cnt 추가 - $('#divTwoSmsCard .reportSndCnt').text(cnt); + $('#divTwoSmsCard .reportStartCnt').text(cnt); // server DB에 update한 건수와 cnt비교 var transferCnt = $('#divTwoSmsCard .insertCnt').text(); diff --git a/src/main/resources/templates/fragments/header.html b/src/main/resources/templates/fragments/header.html index 03b73c1..b8ebe94 100644 --- a/src/main/resources/templates/fragments/header.html +++ b/src/main/resources/templates/fragments/header.html @@ -117,7 +117,7 @@ title: title, subtitle: '', autohide : true, - delay: 3000, + delay: 6000, body: msg }) } diff --git a/src/main/resources/templates/fragments/mainsidebar.html b/src/main/resources/templates/fragments/mainsidebar.html index 2b179a4..1e60690 100644 --- a/src/main/resources/templates/fragments/mainsidebar.html +++ b/src/main/resources/templates/fragments/mainsidebar.html @@ -113,6 +113,14 @@ + diff --git a/src/main/resources/templates/itn/code/list.html b/src/main/resources/templates/itn/code/list.html index 50b39b4..c01b16e 100644 --- a/src/main/resources/templates/itn/code/list.html +++ b/src/main/resources/templates/itn/code/list.html @@ -150,7 +150,7 @@ @@ -239,6 +239,56 @@ + + + +
@@ -373,8 +423,8 @@ '' + detail.codeValue + '' + '' + detail.sortOrder + '' + '' + detail.useYn + '' + - '' + - '' + + '' + + '' + ''); }); $('#commonCodeDetailModal').modal('show'); @@ -425,9 +475,17 @@ contentType: 'application/json; charset=utf-8', dataType: 'json', success: function(data) { - $('#addCodeDetailModal').modal('hide'); // 모달 닫기 - showDetails(formData.codeGroupId); // 상세 보기 갱신 - fn_successAlert("성공", data.data +'가 '+data.msg); + + if(data.status === 'OK'){ + + $('#addCodeDetailForm')[0].reset(); // form reset + $('#addCodeDetailModal').modal('hide'); // 모달 닫기 + showDetails(formData.codeGroupId); // 상세 보기 갱신 + fn_successAlert("성공", data.data +'가 '+data.msg); + }else{ + fn_failedAlert("실패", data.msg); + } + }, error: function(xhr) { alert('공통 코드 상세 추가 중 오류가 발생했습니다.'); @@ -435,29 +493,64 @@ }); }; - - - - - - // 코드 상세 추가 함수 - window.addCodeDetail = function() { - // 코드 상세 추가 모달을 띄우거나, 필요한 로직 추가 + // 코드 상세 수정 모달을 표시하는 함수 + window.editCodeDetail = function(codeGroupId, codeId) { + $.ajax({ + url: '/api/code-details/detail/' + codeGroupId + '/' + codeId, // API 엔드포인트 + type: 'GET', + success: function(data) { + $('#editDetailCodeId').val(data.codeId); + $('#editDetailCodeGroupId').val(data.codeGroupId); + $('#editDetailCodeName').val(data.codeName); + $('#editDetailCodeValue').val(data.codeValue); + $('#editDetailSortOrder').val(data.sortOrder); + $('#editDetailUseYn').val(data.useYn); + $('#editCodeDetailModal').modal('show'); // 수정 모달 표시 + }, + error: function(xhr) { + alert('코드 상세 정보를 불러오는 데 실패했습니다.'); + } + }); }; // 코드 상세 수정 함수 - window.editCodeDetail = function(codeId) { - // 코드 상세 수정 로직 추가 + window.updateCodeDetail = function() { + var formDataArray = $("#editCodeDetailForm").serializeArray(); + var formData = {}; + + // 배열 데이터를 JSON 객체로 변환 + $.each(formDataArray, function(_, field) { + formData[field.name] = field.value; + }); + + $.ajax({ + url: '/api/code-details/detail/' + formData.codeId, // API 엔드포인트 + type: 'PUT', + data: JSON.stringify(formData), + dataType: 'json', + contentType: 'application/json; charset=utf-8', + success: function(data) { + $('#editCodeDetailModal').modal('hide'); // 모달 닫기 + showDetails(formData.codeGroupId); // 상세 보기 갱신 + fn_successAlert("성공", data.data +'가 '+data.msg); + }, + error: function(xhr) { + alert('코드 상세 수정 중 오류가 발생했습니다.'); + console.log('xhr : ', xhr); + } + }); }; + // 코드 상세 삭제 함수 - window.deleteCodeDetail = function(codeId) { + window.deleteCodeDetail = function(codeGroupId, codeId) { + if(confirm('삭제하시겠습니까?')) { $.ajax({ - url: '/api/code-details/detail/' + codeId, // 변경된 URL + url: '/api/code-details/detail/' + codeGroupId + '/' + codeId, // 변경된 URL type: 'DELETE', success: function(response) { - showDetails($('#detailTableBody').data('group-id')); // 갱신을 위해 다시 로드 + showDetails(codeGroupId); // 갱신을 위해 다시 로드 }, error: function(xhr) { alert('오류가 발생했습니다.'); diff --git a/src/main/resources/templates/mjon/spam/chk.html b/src/main/resources/templates/mjon/spam/chk.html new file mode 100644 index 0000000..1c82559 --- /dev/null +++ b/src/main/resources/templates/mjon/spam/chk.html @@ -0,0 +1,199 @@ + + + + 스팸 단어 선택 + + + + + + + + + + +
+
+ + + + + +
+ +
+
+
+
+

스팸 비교

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

스팸 비교

+
+ + +
+
+ +
+
+
+ + +
+
+
+ + +
+
+ + + + + + + + + + +
+
+ + +
+
+ 문자 개수 총 300건 +
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + +
번호스팸문자핵심단어매칭단어 개수
1(광고)♥봄맞이 특별이벤트 진행중♥ ...바다, 서비스, 갯수...3
+
+
+
+
+
+ +
+ +
+ +
+ +
+ +
+ +
+ + +
+
+ + + + +
+ + + + + + diff --git a/src/main/resources/templates/mjon/spam/select.html b/src/main/resources/templates/mjon/spam/select.html index e565219..93cb338 100644 --- a/src/main/resources/templates/mjon/spam/select.html +++ b/src/main/resources/templates/mjon/spam/select.html @@ -111,28 +111,30 @@ 번호 - 스팸문자 - 복합명사 - 핵심 단어 - 스팸분류 + 스팸문자 + 복합명사 + 핵심 단어 + 스팸분류01 + 스팸분류02 + - + 스팸문자 내용 - - + mx-1: 좌우에 0.25rem(약 4px)의 여백 추가 + my-1: 상하에 0.25rem(약 4px)의 여백 추가 + --> +