From 39e11a5e133d60366db789a9ef2e18c13d4d4be8 Mon Sep 17 00:00:00 2001 From: kimjhjjang Date: Wed, 2 Nov 2022 17:51:40 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=B5=EC=A7=80=EC=82=AC=ED=95=AD=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/homeMgt/components/NoticePop.vue | 21 +-- .../homeMgt/components/NoticeUpdatePop.vue | 6 +- .../src/modules/homeMgt/service/homeMgtApi.js | 6 + frontend/src/modules/homeMgt/views/notice.vue | 49 ++++++- .../ez/api/homeMgt/HomeMgtController.java | 123 ++++++++++-------- .../uplus/ez/api/homeMgt/HomeMgtMapper.java | 3 + .../uplus/ez/api/homeMgt/HomeMgtService.java | 39 +++--- .../ez/api/homeMgt/dto/DelNoticeReqDto.java | 1 + .../ez/api/homeMgt/dto/DeleteNotice.java | 15 +++ .../api/homeMgt/dto/DeleteNoticeReqDto.java | 14 ++ .../api/homeMgt/dto/DeleteNoticeResDto.java | 32 +++++ .../mapper/mysql/homeMgt/homeMgt-mapper.xml | 16 +++ 12 files changed, 232 insertions(+), 93 deletions(-) create mode 100644 src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNotice.java create mode 100644 src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNoticeReqDto.java create mode 100644 src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNoticeResDto.java diff --git a/frontend/src/modules/homeMgt/components/NoticePop.vue b/frontend/src/modules/homeMgt/components/NoticePop.vue index e6d266f..ff209c7 100644 --- a/frontend/src/modules/homeMgt/components/NoticePop.vue +++ b/frontend/src/modules/homeMgt/components/NoticePop.vue @@ -98,16 +98,6 @@ - - - 이미지셋
- - - - -

- - @@ -133,7 +123,6 @@ export default { mixins: [utils_mixin, chkPattern2], data() { return { - testImg: '', props: {}, row: {}, rsnType: [], @@ -177,11 +166,6 @@ export default { ValidationConfirmPopup, }, methods: { - setImg() { - ///%7Cefs%7Chome%7CsendMessage%7C2022%7C09%7C20%7C10%7C2022092010000168664_1.jpg - this.testImg = - ""; - }, handleImageAdded(file, Editor, cursorLocation, resetUploader) { var fd = new FormData(); fd.append('files', file); @@ -189,8 +173,9 @@ export default { homeMgtApi .getImageUrl(fd) .then((response) => { - const url = '..' + response.data.data.replaceAll('\\', '/'); // Get url from response - console.log(url); + const url = + '/api/v1/bo/homeMgt/preview/' + + encodeURIComponent(response.data.data.replaceAll('\\', '/').replaceAll('/', '|')); // Get url from response Editor.insertEmbed(cursorLocation, 'image', url); resetUploader(); }) diff --git a/frontend/src/modules/homeMgt/components/NoticeUpdatePop.vue b/frontend/src/modules/homeMgt/components/NoticeUpdatePop.vue index 7068fe0..5eeea7a 100644 --- a/frontend/src/modules/homeMgt/components/NoticeUpdatePop.vue +++ b/frontend/src/modules/homeMgt/components/NoticeUpdatePop.vue @@ -188,8 +188,9 @@ export default { homeMgtApi .getImageUrl(fd) .then((response) => { - const url = '..' + response.data.data.replaceAll('\\', '/'); // Get url from response - console.log(url); + const url = + '/api/v1/bo/homeMgt/preview/' + + encodeURIComponent(response.data.data.replaceAll('\\', '/').replaceAll('/', '|')); // Get url from response Editor.insertEmbed(cursorLocation, 'image', url); resetUploader(); }) @@ -502,7 +503,6 @@ export default { this.row.fileTitle = fileTitle; this.row.filePath = filePath; this.row.fileNm = fileName; - console.log(this.row); homeMgtApi.fileDownload(this.row); }, }, diff --git a/frontend/src/modules/homeMgt/service/homeMgtApi.js b/frontend/src/modules/homeMgt/service/homeMgtApi.js index 96e3322..749d2d2 100644 --- a/frontend/src/modules/homeMgt/service/homeMgtApi.js +++ b/frontend/src/modules/homeMgt/service/homeMgtApi.js @@ -15,6 +15,11 @@ const updateNotice = (params) => { return httpClient.post('/api/v1/bo/homeMgt/updateNotice', params, { withCredentials: false }); }; +// 공지사항 삭제 +const deleteNotice = (params) => { + return httpClient.post('/api/v1/bo/homeMgt/deleteNotice', params, { withCredentials: false }); +}; + const getImageUrl = (params) => { return httpClient.post('/api/v1/bo/homeMgt/getImageUrl', params, { headers: { @@ -56,6 +61,7 @@ const fileDownload = (params) => { export default { insertNotice, updateNotice, + deleteNotice, fileDownload, getImageUrl, }; diff --git a/frontend/src/modules/homeMgt/views/notice.vue b/frontend/src/modules/homeMgt/views/notice.vue index 2604486..0f0737e 100644 --- a/frontend/src/modules/homeMgt/views/notice.vue +++ b/frontend/src/modules/homeMgt/views/notice.vue @@ -45,6 +45,7 @@
+
@@ -65,13 +66,16 @@
+ diff --git a/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtController.java b/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtController.java index 4f400a3..5f640f1 100644 --- a/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtController.java +++ b/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtController.java @@ -38,138 +38,153 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartHttpServletRequest; import kr.co.uplus.ez.api.homeMgt.dto.*; +import kr.co.uplus.ez.api.sendNumMgt.dto.DeleteNumberReqDto; +import kr.co.uplus.ez.api.sendNumMgt.dto.DeleteNumberResDto; import kr.co.uplus.ez.common.components.ValidComponents; import kr.co.uplus.ez.common.data.ApiResponseCode; import kr.co.uplus.ez.common.utils.FileIoUtils; @RestController -@RequestMapping(value ="api/v1/bo/homeMgt") +@RequestMapping(value = "/api/v1/bo/homeMgt") public class HomeMgtController { private static final Logger logger = LoggerFactory.getLogger(HomeMgtController.class); - + @Autowired HomeMgtService homeService; - + @Autowired ValidComponents validComponents; - - + /** - * date : 2022. 10. 18. - * auth : kjh - * desc : 공지사항 조회. + * date : 2022. 10. 18. auth : kjh desc : 공지사항 조회. + * * @param noticeListReqDto * @return NoticeListResDto */ - @ApiOperation(value = "noticeList", notes = "공지사항 조회") + @ApiOperation(value = "/noticeList", notes = "공지사항 조회") @ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") }) - @RequestMapping(value = "noticeList", method = {RequestMethod.POST}) + @RequestMapping(value = "/noticeList", method = { RequestMethod.POST }) @ResponseBody - public NoticeListResDto noticeList(@RequestBody @Valid NoticeListReqDto noticeListReqDto, BindingResult bindingResult, HttpServletResponse response) { - + public NoticeListResDto noticeList(@RequestBody @Valid NoticeListReqDto noticeListReqDto, + BindingResult bindingResult, HttpServletResponse response) { + if (validComponents.validParameter(bindingResult)) { return new NoticeListResDto(ApiResponseCode.CM_PARAMETER_ERROR); } - + return homeService.noticeList(noticeListReqDto); } - + /** - * date : 2022. 10. 21. - * auth : kjh - * desc : 공지사항 등록. + * date : 2022. 10. 21. auth : kjh desc : 공지사항 등록. + * * @param insertNoticeReqDto * @return InsertNoticeResDto */ - @ApiOperation(value = "insertNotice", notes = "공지사항 등록") + @ApiOperation(value = "/insertNotice", notes = "공지사항 등록") @ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") }) - @RequestMapping(value = "insertNotice", method = {RequestMethod.POST}) + @RequestMapping(value = "/insertNotice", method = { RequestMethod.POST }) @ResponseBody public InsertNoticeResDto insertNotice(@RequestPart(value = "key") InsertNoticeReqDto insertNoticeReqDto, MultipartHttpServletRequest multipartRequest) { - - return homeService.insertNotice(insertNoticeReqDto ,multipartRequest); + + return homeService.insertNotice(insertNoticeReqDto, multipartRequest); } - + /** - * date : 2022. 10. 24. - * auth : kjh - * desc : 공지사항 수정. + * date : 2022. 10. 24. auth : kjh desc : 공지사항 수정. + * * @param updateNoticeReqDto * @return UpdateNoticeResDto */ - @ApiOperation(value = "updateNotice", notes = "공지사항 수정") + @ApiOperation(value = "/updateNotice", notes = "공지사항 수정") @ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") }) - @RequestMapping(value = "updateNotice", method = {RequestMethod.POST}) + @RequestMapping(value = "/updateNotice", method = { RequestMethod.POST }) @ResponseBody public UpdateNoticeResDto updateNotice(@RequestPart(value = "key") UpdateNoticeReqDto updateNoticeReqDto, MultipartHttpServletRequest multipartRequest) { - + return homeService.updateNotice(updateNoticeReqDto, multipartRequest); } /** - * date : 2022. 10. 24. - * auth : kjh - * desc : 공지사항 editor 이미지 업로드 후 링크 리턴. + * date : 2022. 10. 24. + * auth : kjh + * desc : 공지사항 삭제. + * @param deleteNoticeReqDto + * @return DeleteNoticeResDto + */ + @ApiOperation(value = "/deleteNotice", notes = "공지사항 삭제") + @ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") }) + @RequestMapping(value = "/deleteNotice", method = { RequestMethod.POST }) + @ResponseBody + public DeleteNoticeResDto deleteNotice(@RequestBody @Valid DeleteNoticeReqDto deleteNoticeReqDto, BindingResult bindingResult) { + if (validComponents.validParameter(bindingResult)) { + return new DeleteNoticeResDto(ApiResponseCode.CM_PARAMETER_ERROR); + } + + return homeService.deleteNotice(deleteNoticeReqDto); + } + + /** + * date : 2022. 10. 24. auth : kjh desc : 공지사항 editor 이미지 업로드 후 링크 리턴. + * * @param updateNoticeReqDto * @return UpdateNoticeResDto */ - @ApiOperation(value = "getImageUrl", notes = "공지사항 editor 이미지 업로드 후 링크 리턴") + @ApiOperation(value = "/getImageUrl", notes = "공지사항 editor 이미지 업로드 후 링크 리턴") @ApiResponses({ @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") }) - @RequestMapping(value = "getImageUrl", method = {RequestMethod.POST}) + @RequestMapping(value = "/getImageUrl", method = { RequestMethod.POST }) @ResponseBody public FileResDto fileResDto(MultipartHttpServletRequest multipartRequest) { - + return homeService.fileResDto(multipartRequest); } - + /** * 파일 다운로드 + * * @throws IOException */ @SuppressWarnings("rawtypes") @RequestMapping("filedownload") - public void filedownload(@RequestBody LinkedHashMap param, HttpServletRequest request, HttpServletResponse response) throws IOException { + public void filedownload(@RequestBody LinkedHashMap param, HttpServletRequest request, HttpServletResponse response) + throws IOException { logger.debug(param.toString()); File file = new File(param.get("filePath") + File.separator + param.get("fileNm")); - System.out.println("file ::::: " +file); - System.out.println("file.exists() ::::: " + file.exists()); + if (file.exists()) { - FileIoUtils.fileDownload(file, request, response ); + FileIoUtils.fileDownload(file, request, response); } } - + @ApiOperation(value = "이미지 미리보기", notes = "이미지 미리보기") - @GetMapping(value = "/preview/{imgurl}", produces=MediaType.APPLICATION_OCTET_STREAM_VALUE) + @GetMapping(value = "/preview/{imgurl}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public ResponseEntity previewImageResource(@PathVariable @ApiParam(value = "이미지 경로") String imgurl) { - System.out.println("imgurl :::: " + imgurl); - System.out.println("call previewImageResource"); try { String imgurldec = URLDecoder.decode(imgurl); - + String imgurlreplace = imgurldec.replaceAll("\\|", "/"); logger.debug("preview image imgurl={} imgurldecode={} imgurlreplace={}", imgurl, imgurldec, imgurlreplace); - + Path path = Paths.get(imgurlreplace); String contentType = Files.probeContentType(path); - + String fileNameOnly = imgurlreplace; String[] fileNameArr = imgurlreplace.split("/"); - if(fileNameArr != null && fileNameArr.length != 0) fileNameOnly = fileNameArr[fileNameArr.length-1]; - + if (fileNameArr != null && fileNameArr.length != 0) + fileNameOnly = fileNameArr[fileNameArr.length - 1]; + HttpHeaders headers = new HttpHeaders(); headers.setContentDisposition( - ContentDisposition.builder("attachment") - .filename(fileNameOnly, StandardCharsets.UTF_8) - .build()); + ContentDisposition.builder("attachment").filename(fileNameOnly, StandardCharsets.UTF_8).build()); headers.add(HttpHeaders.CONTENT_TYPE, contentType); - + byte[] b = Files.readAllBytes(path); - + return new ResponseEntity(b, headers, HttpStatus.OK); - }catch(Exception e) { + } catch (Exception e) { logger.error("imgurl err, e={}, e", e.getMessage()); return new ResponseEntity(HttpStatus.NOT_FOUND); } diff --git a/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtMapper.java index 1ec0afa..ef4d2f2 100644 --- a/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtMapper.java @@ -1,6 +1,7 @@ package kr.co.uplus.ez.api.homeMgt; import kr.co.uplus.ez.api.homeMgt.dto.*; + import org.apache.ibatis.annotations.Mapper; import java.util.List; @@ -26,4 +27,6 @@ public interface HomeMgtMapper { void delNoticeFile(DelNoticeReqDto delNoticeReqDto); + int deleteNotice(DeleteNoticeReqDto deleteNoticeReqDto); + } diff --git a/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtService.java b/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtService.java index 10f30b9..5957fe9 100644 --- a/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/homeMgt/HomeMgtService.java @@ -7,8 +7,6 @@ import kr.co.uplus.ez.common.utils.DateUtils; import kr.co.uplus.ez.common.utils.FileIoUtils; import kr.co.uplus.ez.common.utils.FileUtil; -//import kr.co.uplus.ez.common.utils.EncryptionUtil; -//import org.apache.commons.lang3.StringUtils; import org.mybatis.spring.SqlSessionTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,9 +19,8 @@ import org.springframework.web.multipart.MultipartHttpServletRequest; import java.io.File; import java.util.ArrayList; -//import java.util.HashMap; import java.util.List; -//import java.util.Map; + @Service public class HomeMgtService { @@ -144,8 +141,6 @@ public class HomeMgtService { insertNoticeFileDto.setRegId(insertNoticeReqDto.getRegId()); insertNoticeFileDto.setChgId(insertNoticeReqDto.getRegId()); - System.out.println("insertNoticeFileDto.getFilePath() :::: " + insertNoticeFileDto.getFilePath()); - homeMgtMapper.insertNoticeFile(insertNoticeFileDto); idx++; } @@ -171,9 +166,6 @@ public class HomeMgtService { List files = multipartRequest.getFiles("files"); String yyyyMMddHHmmss = DateUtils.date2strYMDHMS(); - System.out.println(" files len :::: " + files.size()); - System.out.println(" legacyFiles :::: " + updateNoticeReqDto.getLegacyFiles()); - // 공지사항 수정 try { homeMgtMapper.updateNotice(updateNoticeReqDto); @@ -228,15 +220,11 @@ public class HomeMgtService { if(!updateNoticeReqDto.getDelFileNo().isEmpty()) { String[] delFile = updateNoticeReqDto.getDelFileNo().split(","); for(int j=0; j files = multipartRequest.getFiles("files"); - System.out.println(" files len :::: " + files.size()); String yyyyMMddHHmmss = DateUtils.date2strYMDHMS(); - String yyyyMMdd = DateUtils.date2strYMD(); // Path : efs/admin/notice/yyyy/mm/ String path = noticeFilePath + yyyyMMdd.substring(0, 4) + File.separator + yyyyMMdd.substring(4, 6) + @@ -272,8 +258,7 @@ public class HomeMgtService { String fileNm = yyyyMMddHHmmss + "_noticeEditFile." + ext; // File Upload. FileUtil.upload(files.get(i), fileNm, path); - path = path.replace("C:/Users/admin/git/hubez-admin/frontend/public", ""); - uploadFile = path.replace("\\","/") + File.separator + fileNm; + uploadFile = path + File.separator + fileNm; } }catch(Exception e) { @@ -283,4 +268,24 @@ public class HomeMgtService { return new FileResDto(ApiResponseCode.SUCCESS, uploadFile); } + /** + * date : 2022. 11. 02. + * auth : kjh + * desc : 공지사항 삭제 + * @param deleteNoticeReqDto + * @return + */ + public DeleteNoticeResDto deleteNotice(DeleteNoticeReqDto deleteNoticeReqDto) { + + HomeMgtMapper homeMgtMapper = sqlSessionSlave.getMapper(HomeMgtMapper.class); + + try { + homeMgtMapper.deleteNotice(deleteNoticeReqDto); + } catch (Exception e) { + return new DeleteNoticeResDto(ApiResponseCode.CM_DB_QUERY_ERR); + } + + return new DeleteNoticeResDto(ApiResponseCode.SUCCESS); + } + } diff --git a/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DelNoticeReqDto.java b/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DelNoticeReqDto.java index b561696..9f45bd3 100644 --- a/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DelNoticeReqDto.java +++ b/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DelNoticeReqDto.java @@ -1,6 +1,7 @@ package kr.co.uplus.ez.api.homeMgt.dto; import java.io.Serializable; +import java.util.List; import io.swagger.annotations.ApiModelProperty; import lombok.Data; diff --git a/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNotice.java b/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNotice.java new file mode 100644 index 0000000..08e50b5 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNotice.java @@ -0,0 +1,15 @@ +package kr.co.uplus.ez.api.homeMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class DeleteNotice implements Serializable{ + + @ApiModelProperty(example = "공지사항 번호", name = "공지사항 번호", dataType = "int") + private int ntNo; + +} diff --git a/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNoticeReqDto.java b/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNoticeReqDto.java new file mode 100644 index 0000000..cc1e9e8 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNoticeReqDto.java @@ -0,0 +1,14 @@ +package kr.co.uplus.ez.api.homeMgt.dto; + +import java.io.Serializable; +import java.util.List; + +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class DeleteNoticeReqDto implements Serializable{ + + private List list; + +} diff --git a/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNoticeResDto.java b/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNoticeResDto.java new file mode 100644 index 0000000..a12315b --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/homeMgt/dto/DeleteNoticeResDto.java @@ -0,0 +1,32 @@ +package kr.co.uplus.ez.api.homeMgt.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class DeleteNoticeResDto extends ResponseMessage implements Serializable{ + + + // 데이터. + private Object data; + + public DeleteNoticeResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public DeleteNoticeResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public DeleteNoticeResDto(ApiResponseCode returnStr, Object data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } +} diff --git a/src/main/resources/mapper/mysql/homeMgt/homeMgt-mapper.xml b/src/main/resources/mapper/mysql/homeMgt/homeMgt-mapper.xml index 0c25910..dbb1b78 100644 --- a/src/main/resources/mapper/mysql/homeMgt/homeMgt-mapper.xml +++ b/src/main/resources/mapper/mysql/homeMgt/homeMgt-mapper.xml @@ -196,10 +196,26 @@ + /* homeMgt-mapper.xml(delNoticeFile) */ DELETE FROM hubez_common.EZ_BBS_FATC WHERE BBS_NO = #{ntNo} AND FILE_NO = #{fileNo} + + + + /* homeMgt-mapper.xml(deleteNotice) */ + DELETE + FROM + hubez_common.EZ_NTBBS + + NT_NO IN + + #{item.ntNo} + + +