From 17aa53d573ca45c7a8fc1d2e0873e908c7530ee0 Mon Sep 17 00:00:00 2001 From: leebj Date: Tue, 25 Mar 2025 10:04:58 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=84=EB=8C=80=EA=B8=B0=EC=97=85=20?= =?UTF-8?q?=EC=B0=A8=EB=9F=89=20=EB=93=B1=EB=A1=9D=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cokr/xit/fims/rent/RentEntVhclMpng.java | 39 ++++ .../fims/rent/dao/UserRentEntMpngMapper.java | 31 +++ .../xit/fims/rent/service/RentEntService.java | 25 ++ .../fims/rent/service/bean/RentEntBean.java | 68 ++++++ .../rent/service/bean/RentEntServiceBean.java | 16 ++ .../xit/fims/rent/web/Rent01Controller.java | 215 ++++++++++++++++++ .../fims/rent/userRentEntMpng-mapper.xml | 127 +++++++++++ 7 files changed, 521 insertions(+) create mode 100644 src/main/java/cokr/xit/fims/rent/RentEntVhclMpng.java diff --git a/src/main/java/cokr/xit/fims/rent/RentEntVhclMpng.java b/src/main/java/cokr/xit/fims/rent/RentEntVhclMpng.java new file mode 100644 index 00000000..8b577429 --- /dev/null +++ b/src/main/java/cokr/xit/fims/rent/RentEntVhclMpng.java @@ -0,0 +1,39 @@ +package cokr.xit.fims.rent; + +import cokr.xit.foundation.AbstractEntity; +import lombok.Getter; +import lombok.Setter; + +/** + * 임대 기업 차량 매핑 + * @author leebj + */ +@Getter +@Setter +public class RentEntVhclMpng extends AbstractEntity { + /** + * 매핑 ID + */ + private String mpngId; + + /** + * 매핑 IDs + */ + private String[] mpngIds; + + /** + * 기업 ID + */ + private String entId; + + /** + * 차량번호 + */ + private String vhrno; + + /** + * 삭제 여부 + */ + private String delYn; + +} diff --git a/src/main/java/cokr/xit/fims/rent/dao/UserRentEntMpngMapper.java b/src/main/java/cokr/xit/fims/rent/dao/UserRentEntMpngMapper.java index 90421338..e3eb0496 100644 --- a/src/main/java/cokr/xit/fims/rent/dao/UserRentEntMpngMapper.java +++ b/src/main/java/cokr/xit/fims/rent/dao/UserRentEntMpngMapper.java @@ -4,6 +4,7 @@ import java.util.List; import org.egovframe.rte.psl.dataaccess.mapper.Mapper; +import cokr.xit.fims.rent.RentEntVhclMpng; import cokr.xit.fims.rent.RentQuery; import cokr.xit.fims.rent.UserRentEntMpng; import cokr.xit.foundation.component.AbstractMapper; @@ -81,4 +82,34 @@ public interface UserRentEntMpngMapper extends AbstractMapper { */ int deleteUserRentEntMpng(UserRentEntMpng userRentEntMpng); + List selectEnterpriseCarMappingList(RentQuery req); + + + /**지정한 임대 기업 차량 매핑을 삭제한다. + * @param params 파라미터 + * + * @return 저장된 정보수 + */ + int deleteRentEntVhclMpng(RentEntVhclMpng rentEntVhclMpng); + + /**임대 기업 차량 매핑 정보의 중복 여부를 확인한다. + * @param params 파라미터 + * + * @return 저장된 정보수 + */ + int countRentEntVhclMpngInfo(RentEntVhclMpng rentEntVhclMpng); + + /**지정한 임대 기업 차량 매핑을 등록한다. + * @param params 파라미터 + * + * @return 저장된 정보수 + */ + int createRentEntVhclMpng(RentEntVhclMpng rentEntVhclMpng); + } diff --git a/src/main/java/cokr/xit/fims/rent/service/RentEntService.java b/src/main/java/cokr/xit/fims/rent/service/RentEntService.java index 7fe187ae..ea052cc1 100644 --- a/src/main/java/cokr/xit/fims/rent/service/RentEntService.java +++ b/src/main/java/cokr/xit/fims/rent/service/RentEntService.java @@ -3,6 +3,7 @@ package cokr.xit.fims.rent.service; import java.util.List; import cokr.xit.fims.rent.RentEnt; +import cokr.xit.fims.rent.RentEntVhclMpng; import cokr.xit.fims.rent.RentQuery; import cokr.xit.fims.rent.UserRentEntMpng; import cokr.xit.foundation.data.DataObject; @@ -100,4 +101,28 @@ public interface RentEntService { */ String removeRentEnt(RentEnt rentEnt); + /**지정한 조건에 따라 임대 기업 차량 매핑 목록을 조회하여 반환한다. + * @param req 임대 기업 차량 매핑 조회 조건 + * @return 임대 기업 차량 매핑 목록 + */ + List getEnterpriseCarMappingList(RentQuery req); + + /**임대 기업 차량 매핑 정보를 삭제한다. + * @param rentEntMpng 임대 기업 차량 매핑 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + String removeRentEntVhclMpng(RentEntVhclMpng rentEntVhclMpng); + + /**임대 기업 차량 매핑 정보를 등록한다. + * @param rentEntVhclMpng 임대 기업 차량 매핑 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + String createRentEntVhclMpng(RentEntVhclMpng rentEntVhclMpng); + } diff --git a/src/main/java/cokr/xit/fims/rent/service/bean/RentEntBean.java b/src/main/java/cokr/xit/fims/rent/service/bean/RentEntBean.java index 783be966..aedd6eb7 100644 --- a/src/main/java/cokr/xit/fims/rent/service/bean/RentEntBean.java +++ b/src/main/java/cokr/xit/fims/rent/service/bean/RentEntBean.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Component; import cokr.xit.fims.cmmn.CmmnUtil; import cokr.xit.fims.rent.RentEnt; +import cokr.xit.fims.rent.RentEntVhclMpng; import cokr.xit.fims.rent.RentQuery; import cokr.xit.fims.rent.UserRentEntMpng; import cokr.xit.fims.rent.dao.RentEntMapper; @@ -274,4 +275,71 @@ public class RentEntBean extends AbstractBean { return "[S] 삭제 작업이 정상 처리 되었습니다."; } + /**지정한 조건에 따라 임대 기업 차량 매핑 목록을 조회하여 반환한다. + * @param req 임대 기업 차량 매핑 조회 조건 + * @return 임대 기업 차량 매핑 목록 + */ + public List getEnterpriseCarMappingList(RentQuery req) { + + // 삭제 여부 확인 + if (req.getDelYn() == null) { + req.setDelYn("N"); + } + // 정렬 확인 + if (req.getOrderBy() == null) { + if (req.getBy() == null) { + req.setOrderBy("VHRNO"); + } else { + req.setOrderBy(CmmnUtil.convertCamelCaseToSnakeCase(req.getBy())); + } + } + + return userRentEntMpngMapper.selectEnterpriseCarMappingList(req); + } + + /**임대 기업 차량 정보를 삭제한다. + * @param rentEntVhclMpng 임대 기업 차량 매핑 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public String removeRentEntVhclMpng(RentEntVhclMpng rentEntVhclMpng) { + + // 임대 기업 차량 매핑(TB_RENT_ENT_VHCL_MPNG) 대장을 삭제한다. + int rtnNocs = userRentEntMpngMapper.deleteRentEntVhclMpng(rentEntVhclMpng); + if (rtnNocs < 1) { + throw new RuntimeException("[F] 삭제 작업에 실패하였습니다."); // 예외를 발생시켜서 DB Rollback + } + + return "[S] 삭제 작업이 정상 처리 되었습니다."; + } + + /**임대 기업 차량 정보를 등록한다. + * @param rentEntVhclMpng 임대 기업 차량 매핑 + * @return 저장 여부 + *
  • 저장됐으면 true
  • + *
  • 그렇지 않으면 false
  • + *
+ */ + public String createRentEntVhclMpng(RentEntVhclMpng rentEntVhclMpng) { + + RentQuery req = new RentQuery(); + req.setUserId(rentEntVhclMpng.getCreatedBy()); + req.setEntId(rentEntVhclMpng.getEntId()); + DataObject userEntInfo = userRentEntMpngMapper.selectUserRentEntMpngInfo(req); + if(userEntInfo == null || userEntInfo.isEmpty()) { + return "[F] 차량 등록 권한이 없습니다."; + } + int vhclCnt = userRentEntMpngMapper.countRentEntVhclMpngInfo(rentEntVhclMpng); + if(vhclCnt > 0) { + return "[S] 등록된 차량입니다."; + } + int result = userRentEntMpngMapper.createRentEntVhclMpng(rentEntVhclMpng); + if(result < 1) { + return "[F] 차량 등록 작업에 실패하였습니다."; + } + return "[S] 차량 등록 작업이 정상 처리 되었습니다."; + } + } diff --git a/src/main/java/cokr/xit/fims/rent/service/bean/RentEntServiceBean.java b/src/main/java/cokr/xit/fims/rent/service/bean/RentEntServiceBean.java index 1c69d161..022a1adb 100644 --- a/src/main/java/cokr/xit/fims/rent/service/bean/RentEntServiceBean.java +++ b/src/main/java/cokr/xit/fims/rent/service/bean/RentEntServiceBean.java @@ -7,6 +7,7 @@ import javax.annotation.Resource; import org.springframework.stereotype.Service; import cokr.xit.fims.rent.RentEnt; +import cokr.xit.fims.rent.RentEntVhclMpng; import cokr.xit.fims.rent.RentQuery; import cokr.xit.fims.rent.UserRentEntMpng; import cokr.xit.fims.rent.service.RentEntService; @@ -85,4 +86,19 @@ public class RentEntServiceBean extends AbstractServiceBean implements RentEntSe return rentEntBean.removeRentEnt(rentEnt); } + @Override + public List getEnterpriseCarMappingList(RentQuery req) { + return rentEntBean.getEnterpriseCarMappingList(req); + } + + @Override + public String removeRentEntVhclMpng(RentEntVhclMpng rentEntVhclMpng) { + return rentEntBean.removeRentEntVhclMpng(rentEntVhclMpng); + } + + @Override + public String createRentEntVhclMpng(RentEntVhclMpng rentEntVhclMpng) { + return rentEntBean.createRentEntVhclMpng(rentEntVhclMpng); + } + } diff --git a/src/main/java/cokr/xit/fims/rent/web/Rent01Controller.java b/src/main/java/cokr/xit/fims/rent/web/Rent01Controller.java index 7e8ac0a6..5e8d644b 100644 --- a/src/main/java/cokr/xit/fims/rent/web/Rent01Controller.java +++ b/src/main/java/cokr/xit/fims/rent/web/Rent01Controller.java @@ -1,6 +1,10 @@ package cokr.xit.fims.rent.web; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -9,10 +13,17 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.xssf.usermodel.XSSFCell; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; +import cokr.xit.applib.AppCmmnUtil; import cokr.xit.base.code.CommonCode; import cokr.xit.base.docs.xls.CellDef; import cokr.xit.base.docs.xls.Format; @@ -24,6 +35,7 @@ import cokr.xit.fims.cmmn.service.bean.StngBean; import cokr.xit.fims.cmmn.xls.FormatMaker; import cokr.xit.fims.cmmn.xls.StyleMaker; import cokr.xit.fims.rent.RentEnt; +import cokr.xit.fims.rent.RentEntVhclMpng; import cokr.xit.fims.rent.RentQuery; import cokr.xit.fims.rent.UserRentEntMpng; import cokr.xit.fims.rent.service.RentEntService; @@ -61,6 +73,10 @@ public class Rent01Controller extends ApplicationController { , getRentEnterprise = "/040/list.do" // 임대 기업 대장 상세 정보 조회 , createRentEnterprise = "/040/createEnt.do" // 임대 기업 대장 등록 , updateRentEnterprise = "/040/updateEnt.do" // 임대 기업 대장 수정 + , enterpriseCarMappingMain = "/050/main.do" + , getEnterpriseCarMappingList = "/050/list.do" + , removeRentEnterpriseCarMapping = "/050/removeMpng.do" + , createRentEnterpriseCarMapping = "/050/create.do" ; } @@ -430,4 +446,203 @@ public class Rent01Controller extends ApplicationController { .addObject("rtnMsg", rtnMsg); } + /**임대기업 차량 매핑 메인화면(fims/rent/rent01050-main)을 연다. + * @return fims/rent/rent01050-main + */ + @RequestMapping(name = "임대기업 차량 매핑 메인", value=METHOD_URL.enterpriseCarMappingMain) + public ModelAndView enterpriseCarMappingMain() { + ModelAndView mav = new ModelAndView("fims/rent/rent01050-main"); + + // 사용자 정보 + FimsUser fimsUser = (FimsUser)currentUser().getUser(); + + // 사용자와 매핑되어있는 임대업체 정보 조회 + RentQuery req = new RentQuery(); + req.setUserId(fimsUser.getId()); + + List entRegNoList = rentEntService.getUserRentEntMpngs(req); + + return mav + .addObject("pageName", "rent01050") // jsp pageName + .addObject("prefixUrl", CLASS_URL) // prefixUrl + .addObject("userId", req.getUserId()) // 사용자 ID + .addObject("userAcnt", fimsUser.getAccount()) // 사용자 계정(USER_ACNT) + .addObject("entRegNoList", entRegNoList) // 임대업체 목록 + ; + } + + /**임대기업 차량 목록을 조회하여 반환한다.
+ * {@link RentEntService#getEnterpriseCarMappingList(RentEntQuery)} 참고 + * @param req 임대 기업 차량 조회 조건 + * @return jsonView + *
 {
+     *     "rentEntList": [임대 기업 매핑 차량 목록]
+     *     "rentEntStart": 임대 기업 매핑 차량 목록 시작 인덱스
+     *     "rentEntFetch": 한 번에 가져오는 임대 기업 매핑 차량 목록 수
+     *     "rentEntTotal": 조회 결과 찾은 전체 임대 기업 매핑 차량 수
+     * }
+ */ + @Task("CMN") + @RequestMapping(name = "임대기업 차량 조회", value=METHOD_URL.getEnterpriseCarMappingList) + public ModelAndView getEnterpriseCarMappingList(RentQuery req) { + // 사용자 정보 + FimsUser fimsUser = (FimsUser)currentUser().getUser(); + + // 사용자와 매핑되어있는 임대업체 정보 조회 + req.setUserId(fimsUser.getId()); + + if (!"xls".equals(req.getDownload())) { + List result = rentEntService.getEnterpriseCarMappingList(setFetchSize(req)); + return setPagingInfo(new ModelAndView("jsonView"), result, ""); + } + + + // 현재 날짜 구하기 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + String dateTime = dateFormat.format(System.currentTimeMillis()); + + List cellDefs = fromJson(req.getCellDefs(), CellDef.listType()); + + XLSWriter xlsx = new XLSWriter().worksheet(0); + Format format = new Format(xlsx); + CellStyle center = format.cellStyle(Style.CENTER); + CellStyle dateDT = format.yyyy_mm_dd_hh_mm_ss(); + + List list = rentEntService.getEnterpriseCarMappingList(req.setFetchSize(0)); + + Map valueMap = new HashMap(); + valueMap.put("사용자계정", format.of("USER_ACNT")); + valueMap.put("사용자명", format.of("USER_NM").style(center)); + valueMap.put("기업구분", format.of("ENT_SE_NM").style(center)); + valueMap.put("기업명", format.of("ENT_NM")); + valueMap.put("법인(사업자)번호", format.of("ENT_REG_NO").style(center)); + valueMap.put("차량번호", format.of("VHRNO").style(center)); + valueMap.put("등록일시", FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "REG_DT").style(dateDT)); + valueMap.put("등록사용자", format.of("RGTR_NM").style(center)); + + CellDef.setValues(cellDefs, valueMap); + + xlsx.cell(0, 0).value("임대기업차량").value(center).merge(0, cellDefs.size() - 1) + .cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx))) + .cell(4, 0).values(list, CellDef.values(cellDefs.stream().map(i -> { if(i.getValue() instanceof Format) { i.setField(null); }; return i; }).toList())); + + return new ModelAndView("downloadView") + .addObject("download", xlsx.getDownloadable().setFilename("임대기업차량" + "_목록_" + dateTime + ".xlsx")); + } + + /**지정한 임대 기업 차량 매핑 대장을 제거한다. + * @param userRentEntMpngIDs 임대 기업 차량 매핑 아이디 + * @return jsonView + *
 {
+     *     "affected": 저장된 정보수
+     *     "saved": 저장되었으면 true, 그렇지 않으면 false
+     * }
+ */ + @Task("CMN") + @RequestMapping(name = "임대 기업 차량 매핑 대장 제거", value = METHOD_URL.removeRentEnterpriseCarMapping) + public ModelAndView removeRentEnterpriseCarMapping(RentEntVhclMpng rentEntVhclMpng) { + + boolean saved = false; + + String rtnMsg = rentEntService.removeRentEntVhclMpng(rentEntVhclMpng); + + if (rtnMsg.contains("[S]")) { + saved = true; + } else { + saved = false; + } + + return new ModelAndView("jsonView") + .addObject("saved", saved) + .addObject("rtnMsg", rtnMsg); + } + + + /**임대 기업 차량 매핑 대장을 등록한다. + * @param + * @return jsonView + *
 {
+     *     "saved": 등록되었으면 true, 그렇지 않으면 false
+     * }
+ */ + @PostMapping(name = "임대 기업 차량 매핑 대장 등록", value = METHOD_URL.createRentEnterpriseCarMapping) + public ModelAndView createRentEnterpriseCarMapping(String excelUploadEntId, MultipartFile excelUploadFile) throws InterruptedException, IOException { + boolean saved = false; + String rtnMsg = ""; + + + byte[] bytesOfFile = excelUploadFile.getBytes(); + InputStream in = new ByteArrayInputStream(bytesOfFile); + XSSFWorkbook workbook = new XSSFWorkbook(in); + + List vhrnoList = new ArrayList<>(); + int successCnt = 0; + + in.close(); + + int rowNo = 0; + + XSSFSheet sheet = workbook.getSheetAt(0); // 0 번째 시트를 가져온다 + + int rows = sheet.getPhysicalNumberOfRows(); // 사용자가 입력한 엑셀 Row수를 가져온다 + for(rowNo = 0; rowNo < rows; rowNo++){ + + XSSFRow row = sheet.getRow(rowNo); + if(row == null) { + continue; + } + XSSFCell cell = row.getCell(0); // 0번째 셀의 값을 가져온다 + if(cell == null){ + continue; + } + + String vhrno = cell.getStringCellValue() + ""; + + if(vhrno.equals("")) { + continue; + } + + if(!AppCmmnUtil.isValidCarNumber(vhrno)) { + continue; + } + + vhrnoList.add(vhrno); + } + + workbook.close(); + + String userId = currentUser().getId(); + + for (String vhrno : vhrnoList) { + RentEntVhclMpng rentEntVhclMpng = new RentEntVhclMpng(); + rentEntVhclMpng.setVhrno(vhrno); + rentEntVhclMpng.setEntId(excelUploadEntId); + rentEntVhclMpng.setCreatedBy(userId); + + // 등록 호출 + String ret = rentEntService.createRentEntVhclMpng(rentEntVhclMpng); + if(ret.contains("[S]")) { + successCnt++; + } + } + + if(vhrnoList.size() == 0) { + rtnMsg = "[F] 파일에 유효한 차량번호가 없습니다."; + } else if(successCnt == 0){ + rtnMsg = "[F] 차량 등록 작업에 실패하였습니다."; + } else { + rtnMsg = "[S] 차량 등록 작업이 정상 처리 되었습니다."; + } + + if (rtnMsg.contains("[S]")) { + saved = true; + } else { + saved = false; + } + + return new ModelAndView("jsonView") + .addObject("saved", saved) + .addObject("rtnMsg", rtnMsg); + } + } diff --git a/src/main/resources/sql/mapper/fims/rent/userRentEntMpng-mapper.xml b/src/main/resources/sql/mapper/fims/rent/userRentEntMpng-mapper.xml index 0ab369b7..4854ff48 100644 --- a/src/main/resources/sql/mapper/fims/rent/userRentEntMpng-mapper.xml +++ b/src/main/resources/sql/mapper/fims/rent/userRentEntMpng-mapper.xml @@ -141,4 +141,131 @@ + + + + + + /* 임대 기업 차량 매핑 삭제(userRentEntMpngMapper.deleteRentEntVhclMpng) */ + UPDATE TB_RENT_ENT_VHCL_MPNG + SET DEL_YN = 'Y' + , DEL_DT = + , DLTR = #{modifiedBy} + + + WHERE MPNG_ID IN ( + #{mpngId} + ) + + + WHERE MPNG_ID = #{mpngId} + + + + + + + + /* 임대 기업 차량 매핑 등록(userRentEntMpngMapper.createRentEntVhclMpng) */ + + + + + + + + INSERT + INTO TB_RENT_ENT_VHCL_MPNG ( + MPNG_ID + , ENT_ID + , VHRNO + , DEL_YN + , REG_DT + , RGTR + , MDFCN_DT + , MDFR + ) + VALUES ( + #{mpngId} + , #{entId} + , #{vhrno} + , 'N' + , + , #{createdBy} + , + , #{createdBy} + ) +