From f7362cca9e03494276e206fa7538e517b0279ca5 Mon Sep 17 00:00:00 2001 From: leebeomjun Date: Tue, 21 Nov 2023 08:41:31 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8B=A8=EC=86=8D=EB=82=B4=EC=97=AD=EC=84=9C?= =?UTF-8?q?=20=EC=B6=9C=EB=A0=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cokr/xit/fims/cmmn/CmmnUtil.java | 44 +++ .../java/cokr/xit/fims/cmmn/FactionUtil.java | 10 + .../cokr/xit/fims/cmmn/dao/FactionMapper.java | 5 + .../java/cokr/xit/fims/cmmn/hwp/AddUtil.java | 77 +++++ .../hwp/AddingParagraphBetweenHWPFile.java | 23 -- .../xit/fims/cmmn/hwp/ClickHereEditor.java | 25 ++ .../cokr/xit/fims/cmmn/hwp/PrintUtil.java | 262 ++++++++++++++++++ .../fims/cmmn/service/bean/FactionBean.java | 43 +++ .../service/bean/CrdnCvlcptServiceBean.java | 4 +- .../java/cokr/xit/fims/sprt/PrintOption.java | 12 + .../xit/fims/sprt/service/Sprt01Service.java | 11 + .../sprt/service/bean/Sprt01ServiceBean.java | 112 ++++++++ .../xit/fims/sprt/web/Sprt01Controller.java | 46 ++- .../cokr/xit/fims/task/web/CmnController.java | 17 +- src/main/resources/format/crdnConfirm.hwp | Bin 0 -> 25088 bytes src/main/resources/format/crdnList_inner.hwp | Bin 0 -> 22016 bytes src/main/resources/format/crdnList_root.hwp | Bin 0 -> 33280 bytes .../sql/mapper/fims/cmmn/faction-mapper.xml | 14 + .../sql/mapper/fims/crdn/crdn-list-mapper.xml | 11 + .../fims/sprt/integrationSearch-mapper.xml | 12 +- .../WEB-INF/jsp/fims/sprt/sprt01110-info.jsp | 54 +++- 21 files changed, 741 insertions(+), 41 deletions(-) create mode 100644 src/main/java/cokr/xit/fims/cmmn/FactionUtil.java create mode 100644 src/main/java/cokr/xit/fims/cmmn/hwp/AddUtil.java delete mode 100644 src/main/java/cokr/xit/fims/cmmn/hwp/AddingParagraphBetweenHWPFile.java create mode 100644 src/main/java/cokr/xit/fims/cmmn/hwp/ClickHereEditor.java create mode 100644 src/main/java/cokr/xit/fims/cmmn/hwp/PrintUtil.java create mode 100644 src/main/java/cokr/xit/fims/cmmn/service/bean/FactionBean.java create mode 100644 src/main/java/cokr/xit/fims/sprt/PrintOption.java create mode 100644 src/main/resources/format/crdnConfirm.hwp create mode 100644 src/main/resources/format/crdnList_inner.hwp create mode 100644 src/main/resources/format/crdnList_root.hwp diff --git a/src/main/java/cokr/xit/fims/cmmn/CmmnUtil.java b/src/main/java/cokr/xit/fims/cmmn/CmmnUtil.java index c3c257b9..b9f4e370 100644 --- a/src/main/java/cokr/xit/fims/cmmn/CmmnUtil.java +++ b/src/main/java/cokr/xit/fims/cmmn/CmmnUtil.java @@ -5,6 +5,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.time.DayOfWeek; import java.time.LocalDate; @@ -35,11 +36,21 @@ public class CmmnUtil { return str; } + /** + * 문자열 안의 모든 문자가 숫자인지 테스트한다. + * @param 문자열 + * @return boolean + */ public static boolean isNumeric(String str) { String REGEXP_PATTERN_NUMBER = "^[\\d]*$"; return Pattern.matches(REGEXP_PATTERN_NUMBER, str); } + /** + * 문자열 안의 모든 문자가 한글인지 테스트한다. + * @param 문자열 + * @return boolean + */ public static boolean isKorean(String str) { String REGEXP_PATTERN_KOR = "^[가-힣]*$"; return Pattern.matches(REGEXP_PATTERN_KOR, str); @@ -234,6 +245,11 @@ public class CmmnUtil { return yyyyMMddFormat.format(cal.getTime()); } + /** + * 날짜형 문자열 입력받아 요일을 한글 문자 하나로 반환한다. + * @param dateStr 날짜 + * @return 요일 + */ public static String getDayOfWeek(String dateStr) { int y = Integer.parseInt(dateStr.substring(0,4)); int m = Integer.parseInt(dateStr.substring(4,6)); @@ -243,4 +259,32 @@ public class CmmnUtil { String dow = dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.KOREAN); return dow; } + + /**'-'와 ':'로 구분된 날짜(yyyy-MM-dd hh:mm:ss)를 반환한다. + * @param dateStr '-',':'이 없는 날짜 + * @return '-'와 ':'로로 구분된 날짜 + */ + public static String yyyy_mm_dd_hh_mm_ss(String dateStr) { + if (dateStr == null || dateStr.equals("")) return ""; + + return dateStr.substring(0, 4) + "-" + dateStr.substring(4, 6) + "-" + dateStr.substring(6, 8) + + " " + dateStr.substring(8, 10) + ":" + dateStr.substring(10, 12) + ":" + dateStr.substring(12, 14); + } + + /** 숫자형 문자열에 세자리 마다 콤마를 찍어 반환한다. + * @param str 숫자형 문자열 + * @return 콤마가 표시된 숫자형 문자열 + */ + public static String addCommaToNumber(String str) { + if (str == null || str.equals("")) return ""; + + int number = Integer.parseInt(str); + DecimalFormat decFormat = new DecimalFormat("###,###"); + return decFormat.format(number); + } + + public static String addCommaToNumber(int number) { + DecimalFormat decFormat = new DecimalFormat("###,###"); + return decFormat.format(number); + } } diff --git a/src/main/java/cokr/xit/fims/cmmn/FactionUtil.java b/src/main/java/cokr/xit/fims/cmmn/FactionUtil.java new file mode 100644 index 00000000..5ac3e38f --- /dev/null +++ b/src/main/java/cokr/xit/fims/cmmn/FactionUtil.java @@ -0,0 +1,10 @@ +package cokr.xit.fims.cmmn; + +public class FactionUtil { + + public static String getLastWord(String faction) { + String splitString[] = faction.split(" ", -1); + return splitString[splitString.length-1]; + } + +} diff --git a/src/main/java/cokr/xit/fims/cmmn/dao/FactionMapper.java b/src/main/java/cokr/xit/fims/cmmn/dao/FactionMapper.java index 92722ed7..3bf299bf 100644 --- a/src/main/java/cokr/xit/fims/cmmn/dao/FactionMapper.java +++ b/src/main/java/cokr/xit/fims/cmmn/dao/FactionMapper.java @@ -34,4 +34,9 @@ public interface FactionMapper extends AbstractMapper { */ List selectAbleFactionList(Map params); + /**사용자의 시군구코드,시군구명,기관코드,기관명,부서코드,부서명을 반환한다.
+ * @param 사용자ID + * @return 시군구코드,시군구명,기관코드,기관명,부서코드,부서명 + */ + DataObject selectFactionInfoOfUser(String userId); } diff --git a/src/main/java/cokr/xit/fims/cmmn/hwp/AddUtil.java b/src/main/java/cokr/xit/fims/cmmn/hwp/AddUtil.java new file mode 100644 index 00000000..48154c3a --- /dev/null +++ b/src/main/java/cokr/xit/fims/cmmn/hwp/AddUtil.java @@ -0,0 +1,77 @@ +package cokr.xit.fims.cmmn.hwp; +import java.util.ArrayList; + +import kr.dogfoot.hwplib.object.HWPFile; +import kr.dogfoot.hwplib.object.bodytext.ParagraphListInterface; +import kr.dogfoot.hwplib.object.bodytext.control.Control; +import kr.dogfoot.hwplib.object.bodytext.control.ControlType; +import kr.dogfoot.hwplib.object.bodytext.control.table.Cell; +import kr.dogfoot.hwplib.object.bodytext.paragraph.Paragraph; +import kr.dogfoot.hwplib.object.bodytext.paragraph.ParagraphList; +import kr.dogfoot.hwplib.tool.objectfinder.ControlFilter; +import kr.dogfoot.hwplib.tool.paragraphadder.ParagraphAdder; + +public class AddUtil { + + /**한글파일을 병합한다. + * @param attachHWPFile 기준파일 마지막 페이지에 붙일 파일, baseHWPFile 기준 파일 + * @return + */ + public static void appendToLast(HWPFile attachHWPFile, HWPFile baseHWPFile) throws Exception { + + if (attachHWPFile != null && baseHWPFile != null) { + + + Paragraph attachParagraph = attachHWPFile.getBodyText().getSectionList().get(0).getParagraph(0); + + + ParagraphListInterface baseSection = baseHWPFile.getBodyText().getSectionList().get(0); + + ParagraphAdder paraAdder = new ParagraphAdder(baseHWPFile, baseSection); + paraAdder.add(attachHWPFile, attachParagraph); + + } + } + + /** 외부 한글파일의 테이블을 기준파일의 특정 테이블셀에 삽입한다. + * @param attachHWPFile 테이블을 가져올 외부파일, baseHWPFile 기준 파일, cell 기준 파일의 테이블셀 + * @return + */ + public static void insertTableInCell(HWPFile attachHWPFile, HWPFile baseHWPFile, Cell cell) throws Exception { + + Paragraph attachParagraph = attachHWPFile.getBodyText().getSectionList().get(0).getParagraph(0); + + + boolean isEmptyCell = true; + + ParagraphList cpl = cell.getParagraphList(); + if(cpl.getParagraphCount() >= 1) { + ArrayList cl = cpl.getParagraph(0).getControlList(); + if(cl != null && cl.size() != 0) { + + ControlFilter tableFilter = (control, paragrpah, section) -> { + ControlType ct = control.getType(); + if(ct.getCtrlId() == ControlType.Table.getCtrlId()) { + return true; + } else { + return false; + } + }; + + for(Control c : cl) { + boolean matched = tableFilter.isMatched(c, null, null); + if(matched) { + isEmptyCell = false; + } + } + } + } + + if(isEmptyCell) { + cpl.deleteAllParagraphs(); + } + + ParagraphAdder paraAdder = new ParagraphAdder(baseHWPFile, cpl); + paraAdder.add(attachHWPFile, attachParagraph); + } +} diff --git a/src/main/java/cokr/xit/fims/cmmn/hwp/AddingParagraphBetweenHWPFile.java b/src/main/java/cokr/xit/fims/cmmn/hwp/AddingParagraphBetweenHWPFile.java deleted file mode 100644 index d8cc0f98..00000000 --- a/src/main/java/cokr/xit/fims/cmmn/hwp/AddingParagraphBetweenHWPFile.java +++ /dev/null @@ -1,23 +0,0 @@ -package cokr.xit.fims.cmmn.hwp; -import kr.dogfoot.hwplib.object.HWPFile; -import kr.dogfoot.hwplib.object.bodytext.ParagraphListInterface; -import kr.dogfoot.hwplib.object.bodytext.paragraph.Paragraph; -import kr.dogfoot.hwplib.tool.paragraphadder.ParagraphAdder; - -public class AddingParagraphBetweenHWPFile { - public static void fileMerge(HWPFile sourceHWPFile, HWPFile targetHWPFile) throws Exception { - - if (sourceHWPFile != null && targetHWPFile != null) { - - ParagraphListInterface targetFirstSection = targetHWPFile.getBodyText().getSectionList().get(0); - - Paragraph sourceParagraph = sourceHWPFile.getBodyText().getSectionList().get(0).getParagraph(0); - - ParagraphAdder paraAdder = new ParagraphAdder(targetHWPFile, targetFirstSection); - paraAdder.add(sourceHWPFile, sourceParagraph); - - - - } - } -} diff --git a/src/main/java/cokr/xit/fims/cmmn/hwp/ClickHereEditor.java b/src/main/java/cokr/xit/fims/cmmn/hwp/ClickHereEditor.java new file mode 100644 index 00000000..66be94eb --- /dev/null +++ b/src/main/java/cokr/xit/fims/cmmn/hwp/ClickHereEditor.java @@ -0,0 +1,25 @@ +package cokr.xit.fims.cmmn.hwp; + +import java.util.ArrayList; + +import kr.dogfoot.hwplib.object.HWPFile; +import kr.dogfoot.hwplib.tool.objectfinder.FieldFinder; + +public class ClickHereEditor { + private HWPFile whpFile; + + public ClickHereEditor(HWPFile whpFile){ + this.whpFile = whpFile; + } + + public void set(String clickHereName, String value) { + try { + ArrayList strings = new ArrayList(); + strings.add(value); + FieldFinder.setClickHereText(whpFile, clickHereName, strings); + } catch (Exception e){ + throw new RuntimeException("한글 문서 생성 중 오류가 발생하였습니다."); + } + + } +} diff --git a/src/main/java/cokr/xit/fims/cmmn/hwp/PrintUtil.java b/src/main/java/cokr/xit/fims/cmmn/hwp/PrintUtil.java new file mode 100644 index 00000000..4eb94a5f --- /dev/null +++ b/src/main/java/cokr/xit/fims/cmmn/hwp/PrintUtil.java @@ -0,0 +1,262 @@ +package cokr.xit.fims.cmmn.hwp; + +import java.io.File; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.springframework.core.io.ClassPathResource; + +import cokr.xit.fims.cmmn.CmmnUtil; +import cokr.xit.fims.cmmn.FactionUtil; +import cokr.xit.fims.sprt.PrintOption; +import cokr.xit.foundation.UserInfo; +import cokr.xit.foundation.data.DataFormat; +import cokr.xit.foundation.data.DataObject; +import kr.dogfoot.hwplib.object.HWPFile; +import kr.dogfoot.hwplib.object.bodytext.control.table.Cell; +import kr.dogfoot.hwplib.reader.HWPReader; +import kr.dogfoot.hwplib.tool.objectfinder.CellFinder; +import kr.dogfoot.hwplib.writer.HWPWriter; + +public class PrintUtil { + + private String formatType; + private String formatName; + private String formatKorName; + private String printRequestDt; + private int recordPerPartFile; + + private String baseFormatFilePath; + private String attachFormatFilePath; + + private UserInfo printRequestUserInfo; + + private int totalPartFileCount; + + public String getFormatType() { + return this.formatType; + } + + public String getFormatName() { + return this.formatName; + } + + public String getFormatKorName() { + return this.formatKorName; + } + + public String getPrintRequestDt() { + return this.printRequestDt; + } + + public UserInfo getPrintRequestUserInfo() { + return this.printRequestUserInfo; + }; + + public int getRecordPerPartFile() { + return this.recordPerPartFile; + } + + public int getTotalPartFileCount() { + return this.totalPartFileCount; + } + + public String getBaseFormatFilePath() { + return this.baseFormatFilePath; + } + + public String getAttachFormatFilePath() { + return this.attachFormatFilePath; + } + + public void calcTotalPartFileCount(int totalDataCount) { + + if(this.formatType.equals("list")) { + + if(totalDataCount <= this.recordPerPartFile) { + this.totalPartFileCount = 1; + } else { + + int mod = (totalDataCount % this.recordPerPartFile); + + this.totalPartFileCount = (totalDataCount - mod) / this.recordPerPartFile; + if(mod > 0) { + this.totalPartFileCount = this.totalPartFileCount + 1; + } + + } + } else { + this.totalPartFileCount = totalDataCount; + } + + } + + + public void setPrintRequestUserInfo(UserInfo printRequestUserInfo) { + this.printRequestUserInfo = printRequestUserInfo; + }; + + public void setting(String formatType, String formatName) { + this.formatType = formatType; + this.formatName = formatName; + SimpleDateFormat ymdhmsFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + this.printRequestDt = ymdhmsFormat.format(new Date()); + + if(!formatType.equals("list")) { + this.recordPerPartFile = 1; + } else { + switch (formatName) { + case "crdnList": { + this.recordPerPartFile = 6; + } + + } + } + + switch (formatName) { + case "crdnConfirm": { + this.formatKorName = "단속확인서"; + this.baseFormatFilePath = "format/crdnConfirm.hwp"; + this.attachFormatFilePath = ""; + } + case "crdnList": { + this.formatKorName = "단속내역서"; + this.baseFormatFilePath = "format/crdnList_root.hwp"; + this.attachFormatFilePath = "format/crdnList_inner.hwp"; + } + + } + + } + + /**한글 포맷 파일을 복사하여 새 한글파일을 생성한다. + * @param formatFile 한글 포맷 파일 + * @return 새 파일 경로 + */ + public String newFileFromFormatFile() { + try { + + InputStream baseFormatIS = new ClassPathResource(this.getBaseFormatFilePath()).getInputStream(); + HWPFile baseFormatFile = HWPReader.fromInputStream(baseFormatIS); + + SimpleDateFormat ymdhmsFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + String currentTime = ymdhmsFormat.format(new Date()); + String year = currentTime.substring(0, 4); + String month = currentTime.substring(4, 6); + String day = currentTime.substring(6, 8); + String formatFileResultRootPath = "files" + File.separator + "result" + File.separator + "print"; + String formatFileResultFolderPath = formatFileResultRootPath + + File.separator + year + File.separator + month + File.separator + day; + File formatFileResultFolder = new File(formatFileResultFolderPath); + if(!formatFileResultFolder.exists()) { + formatFileResultFolder.mkdirs(); + } + String resultHwpPath = formatFileResultFolderPath + File.separator + currentTime + ".hwp"; + + HWPWriter.toFile(baseFormatFile, resultHwpPath); + return resultHwpPath; + + } catch (Exception e){ + throw new RuntimeException("한글 파일 출력 중 오류가 발생하였습니다."); + } + + } + + /**한글 파일의 공통정보를 입력한다. + * @param dataObjectList 데이터목록, baseFile 한글파일 + * @return + */ + public void setGlobalInfo(PrintOption printOption, List dataObjectList, HWPFile baseFile) { + int totalDataCount = dataObjectList.size(); + + + boolean privateInfoYn = true; + if(printOption.getPrivateInfoYn() != null && printOption.getPrivateInfoYn().equals("N")) { + privateInfoYn = false; + } + + + if(this.formatName.equals("crdnList")){ + + String globalRtpyrNm = dataObjectList.get(0).string("RTPYR_NM"); + String globalRtpyrNo = dataObjectList.get(0).string("RTPYR_NO"); + String globalRtpyrFullAddr = dataObjectList.get(0).string("RTPYR_FULL_ADDR"); + int globalTotalAmount = dataObjectList.stream().mapToInt(i -> i.number("LEVY_AMT").intValue()).sum(); + + //상단 + ClickHereEditor baseFileEditor = new ClickHereEditor(baseFile); + baseFileEditor.set("성명", globalRtpyrNm); + if(privateInfoYn) { + baseFileEditor.set("주민번호", globalRtpyrNo); + } else { + baseFileEditor.set("주민번호", "*************"); + } + + baseFileEditor.set("주소", globalRtpyrFullAddr); + baseFileEditor.set("총건수", CmmnUtil.addCommaToNumber(totalDataCount)); + baseFileEditor.set("총금액", CmmnUtil.addCommaToNumber(globalTotalAmount)); + baseFileEditor.set("출력일시", CmmnUtil.yyyy_mm_dd_hh_mm_ss(this.printRequestDt)); + + String instNm = (String) this.printRequestUserInfo.getInfo().get("instNm"); + instNm = FactionUtil.getLastWord(instNm); + baseFileEditor.set("발신", instNm); + } + } + + /**한글파일 서식에 대해 데이터 건별로 처리한다. + * @param dataObject 데이터, baseFile 한글파일 + * @return + */ + public void setBySingleData(PrintOption printOption, DataObject dataObject, HWPFile baseFile) { + try { + if(this.formatType.equals("list")) { + InputStream attachFormatIS = new ClassPathResource(this.getAttachFormatFilePath()).getInputStream(); + HWPFile attachFormatFile = HWPReader.fromInputStream(attachFormatIS); + ClickHereEditor attachFileEditor = new ClickHereEditor(attachFormatFile); + + if(this.formatName.equals("crdnList")){ + + attachFileEditor.set("과태료", dataObject.string("TASK_SE_NM")); + attachFileEditor.set("시군구명", dataObject.string("SGG_NM")); + String crdnYmdTm = dataObject.string("CRDN_YMD_TM"); + crdnYmdTm = CmmnUtil.yyyy_mm_dd_hh_mm_ss(crdnYmdTm); + attachFileEditor.set("단속일시", crdnYmdTm); + attachFileEditor.set("단속장소", dataObject.string("CRDN_PLC")); + attachFileEditor.set("차량번호", dataObject.string("VHRNO")); + attachFileEditor.set("대체차량번호", dataObject.string("RPM_SZR_VHRNO")); + attachFileEditor.set("고지번호", dataObject.string("GOJI_NO")); + attachFileEditor.set("금액", CmmnUtil.addCommaToNumber(dataObject.string("LEVY_AMT"))); + attachFileEditor.set("가상계좌번호", dataObject.string("VR_ACTNO")); + attachFileEditor.set("전자납부번호", dataObject.string("EPAYNO")); + attachFileEditor.set("처리상태", dataObject.string("CRDN_STTS_NM")); + String crdnSttsChgDt = dataObject.string("CRDN_STTS_CHG_DT"); + crdnSttsChgDt = DataFormat.yyyy_mm_dd(crdnSttsChgDt.substring(0, 8)); + attachFileEditor.set("처리일자", crdnSttsChgDt); + attachFileEditor.set("납부기한", DataFormat.yyyy_mm_dd(dataObject.string("DUDT_YMD"))); + attachFileEditor.set("수납일자", DataFormat.yyyy_mm_dd(dataObject.string("RCVMT_YMD"))); + } + + + ArrayList cellList = CellFinder.findAll(baseFile, "내부"); + Cell cell = cellList.get(0); + + + AddUtil.insertTableInCell(attachFormatFile, baseFile, cell); + + + } else { + + + + } + } catch(Exception e) { + e.printStackTrace(); + throw new RuntimeException("한글 파일 출력 중 오류가 발생하였습니다."); + } + + } + +} diff --git a/src/main/java/cokr/xit/fims/cmmn/service/bean/FactionBean.java b/src/main/java/cokr/xit/fims/cmmn/service/bean/FactionBean.java new file mode 100644 index 00000000..c322be87 --- /dev/null +++ b/src/main/java/cokr/xit/fims/cmmn/service/bean/FactionBean.java @@ -0,0 +1,43 @@ +package cokr.xit.fims.cmmn.service.bean; + +import java.util.Map; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import cokr.xit.base.user.dao.UserMapper; +import cokr.xit.fims.cmmn.dao.FactionMapper; +import cokr.xit.fims.crdn.dao.GlobalStngMapper; +import cokr.xit.foundation.AbstractComponent; +import cokr.xit.foundation.UserInfo; +import cokr.xit.foundation.data.DataObject; + +@Component("factionBean") +public class FactionBean extends AbstractComponent { + + @Resource(name = "factionMapper") + private FactionMapper factionMapper; + + @Resource(name = "globalStngMapper") + private GlobalStngMapper globalStngMapper; + + @Resource(name = "userMapper") + private UserMapper userMapper; + + public void initUserInfo(UserInfo userInfo) { + + DataObject factionInfo = factionMapper.selectFactionInfoOfUser(userInfo.getId()); + + Map infoMap = userInfo.getInfo(); + infoMap.put("sggCd", factionInfo.string("SGG_CD")); + infoMap.put("sggNm", factionInfo.string("SGG_NM")); + infoMap.put("instCd", factionInfo.string("INST_CD")); + infoMap.put("instNm", factionInfo.string("INST_NM")); + infoMap.put("deptCd", factionInfo.string("DEPT_CD")); + infoMap.put("deptNm", factionInfo.string("DEPT_NM")); + + userInfo.setInfo(infoMap); + } + +} diff --git a/src/main/java/cokr/xit/fims/cvlc/service/bean/CrdnCvlcptServiceBean.java b/src/main/java/cokr/xit/fims/cvlc/service/bean/CrdnCvlcptServiceBean.java index 49b35e82..20680e4a 100644 --- a/src/main/java/cokr/xit/fims/cvlc/service/bean/CrdnCvlcptServiceBean.java +++ b/src/main/java/cokr/xit/fims/cvlc/service/bean/CrdnCvlcptServiceBean.java @@ -23,7 +23,7 @@ import cokr.xit.fims.cmmn.CmmnUtil; import cokr.xit.fims.cmmn.CrdnSttsHstry; import cokr.xit.fims.cmmn.dao.CrdnPayerHstryMapper; import cokr.xit.fims.cmmn.dao.CrdnSttsHstryMapper; -import cokr.xit.fims.cmmn.hwp.AddingParagraphBetweenHWPFile; +import cokr.xit.fims.cmmn.hwp.AddUtil; import cokr.xit.fims.cmmn.hwp.InsertingImageCell; import cokr.xit.fims.cmmn.service.bean.CrdnSttsHstryBean; import cokr.xit.fims.crdn.Crdn; @@ -219,7 +219,7 @@ public class CrdnCvlcptServiceBean extends AbstractServiceBean implements CrdnCv InsertingImageCell.IMPL_InsertPicture(attachFormatFile, "왼쪽아래사진", fileInfoList.get(i+2).string("URL")); if(i+3 < photoCnt) InsertingImageCell.IMPL_InsertPicture(attachFormatFile, "오른쪽아래사진", fileInfoList.get(i+3).string("URL")); - AddingParagraphBetweenHWPFile.fileMerge(attachFormatFile, resultFile); + AddUtil.appendToLast(attachFormatFile, resultFile); } HWPWriter.toFile(resultFile, resultHwpPath); diff --git a/src/main/java/cokr/xit/fims/sprt/PrintOption.java b/src/main/java/cokr/xit/fims/sprt/PrintOption.java new file mode 100644 index 00000000..f95f2da9 --- /dev/null +++ b/src/main/java/cokr/xit/fims/sprt/PrintOption.java @@ -0,0 +1,12 @@ +package cokr.xit.fims.sprt; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class PrintOption { + + String privateInfoYn; //개인정보표시 + +} diff --git a/src/main/java/cokr/xit/fims/sprt/service/Sprt01Service.java b/src/main/java/cokr/xit/fims/sprt/service/Sprt01Service.java index d1c512f8..08c0f6b2 100644 --- a/src/main/java/cokr/xit/fims/sprt/service/Sprt01Service.java +++ b/src/main/java/cokr/xit/fims/sprt/service/Sprt01Service.java @@ -1,7 +1,9 @@ package cokr.xit.fims.sprt.service; import java.util.List; +import java.util.Map; +import cokr.xit.fims.sprt.PrintOption; import cokr.xit.fims.sprt.SprtQuery; import cokr.xit.foundation.data.DataObject; @@ -29,4 +31,13 @@ public interface Sprt01Service { */ boolean updateEtcCn(String etcCn, String... crdnIds); + /** 한글 서식 출력물을 생성한다. + * @param formatType 서식유형 ,formatName 서식명, printOption 출력옵션, crdnIds 출력대상 + * @return map 출력 요청 결과 + *
  • filePath: 결과 파일 경로
  • + *
  • fileName: 다운로드 파일명
  • + *
+ */ + Map makeFileFromHwpFormat(String formatType, String formatName, PrintOption printOption, String... crdnIds); + } diff --git a/src/main/java/cokr/xit/fims/sprt/service/bean/Sprt01ServiceBean.java b/src/main/java/cokr/xit/fims/sprt/service/bean/Sprt01ServiceBean.java index cfeec6c9..818558a6 100644 --- a/src/main/java/cokr/xit/fims/sprt/service/bean/Sprt01ServiceBean.java +++ b/src/main/java/cokr/xit/fims/sprt/service/bean/Sprt01ServiceBean.java @@ -1,15 +1,28 @@ package cokr.xit.fims.sprt.service.bean; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.annotation.Resource; import org.springframework.stereotype.Service; +import cokr.xit.fims.cmmn.hwp.AddUtil; +import cokr.xit.fims.cmmn.hwp.PrintUtil; +import cokr.xit.fims.cmmn.service.bean.FactionBean; +import cokr.xit.fims.crdn.CrdnQuery; +import cokr.xit.fims.crdn.dao.CrdnListMapper; +import cokr.xit.fims.sprt.PrintOption; import cokr.xit.fims.sprt.SprtQuery; import cokr.xit.fims.sprt.service.Sprt01Service; +import cokr.xit.foundation.UserInfo; import cokr.xit.foundation.component.AbstractServiceBean; import cokr.xit.foundation.data.DataObject; +import kr.dogfoot.hwplib.object.HWPFile; +import kr.dogfoot.hwplib.reader.HWPReader; +import kr.dogfoot.hwplib.writer.HWPWriter; /**통합 조회 서비스 구현체. * @@ -28,6 +41,12 @@ public class Sprt01ServiceBean extends AbstractServiceBean implements Sprt01Serv @Resource(name="sprt01Bean") protected Sprt01Bean sprt01Bean; + @Resource(name="factionBean") + protected FactionBean factionBean; + + @Resource(name="crdnListMapper") + protected CrdnListMapper crdnListMapper; + @Override public List getIntegrationDataList(SprtQuery query) { return sprt01Bean.getIntegrationDataList(query); @@ -40,4 +59,97 @@ public class Sprt01ServiceBean extends AbstractServiceBean implements Sprt01Serv } + @Override + public Map makeFileFromHwpFormat(String formatType, String formatName, PrintOption printOption, String... crdnIds) { + Map result = new HashMap<>(); + + PrintUtil printUtil = new PrintUtil(); + printUtil.setting(formatType, formatName); + + UserInfo userInfo = currentUser(); + factionBean.initUserInfo(userInfo); + printUtil.setPrintRequestUserInfo(userInfo); + + List dataObjectList = null; + + if(formatName.equals("crdnList")) { + CrdnQuery query = new CrdnQuery(); + query.setCrdnIDs(crdnIds); + dataObjectList = crdnListMapper.selectCrackdownList(query); + } else if(formatName.equals("crdnConfirm")) { + CrdnQuery query = new CrdnQuery(); + query.setCrdnIDs(crdnIds); + dataObjectList = crdnListMapper.selectCrackdownList(query); + } + + int totalDataCount = dataObjectList.size(); + List partFileList = new ArrayList<>(); + printUtil.calcTotalPartFileCount(totalDataCount); + + + try { + + int dataIndex = 0; + + for(int partFileIndex = 0; partFileIndex < printUtil.getTotalPartFileCount(); partFileIndex++) { + + //새 파일 생성 + String resultHwpPath = printUtil.newFileFromFormatFile(); + HWPFile resultFile = HWPReader.fromFile(resultHwpPath); + + //공통사항 세팅 + printUtil.setGlobalInfo(printOption, dataObjectList, resultFile); + HWPWriter.toFile(resultFile, resultHwpPath); + + //데이터 건별 처리 + for(int recordIndex = 0; recordIndex < printUtil.getRecordPerPartFile(); recordIndex++) { + if(dataIndex < dataObjectList.size()) { + DataObject dataObject = dataObjectList.get(dataIndex); + + printUtil.setBySingleData(printOption, dataObject, resultFile); + } + + if(formatType.equals("list")) { + dataIndex++; + } + + } + + if(!formatType.equals("list")) { + dataIndex++; + } + + HWPWriter.toFile(resultFile, resultHwpPath); + partFileList.add(resultHwpPath); + } + + //결과파일 병합 + if(partFileList.size() >= 2) { + String basePath = partFileList.get(0); + HWPFile baseFile = HWPReader.fromFile(basePath); + + + for(int i=2; i <= partFileList.size();i++) { + String attachPath = partFileList.get(i-1); + HWPFile attachFile = HWPReader.fromFile(attachPath); + AddUtil.appendToLast(attachFile, baseFile); + } + HWPWriter.toFile(baseFile, basePath); + } + + String downlaodFileName = printUtil.getFormatKorName()+"_"+printUtil.getPrintRequestDt()+".hwp"; + result.put("fileName", downlaodFileName); + result.put("filePath", partFileList.get(0)); + + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("한글 파일 출력 중 오류가 발생하였습니다."); + + } + + return result; + } + + + } diff --git a/src/main/java/cokr/xit/fims/sprt/web/Sprt01Controller.java b/src/main/java/cokr/xit/fims/sprt/web/Sprt01Controller.java index 403d98f8..cb9e3b0e 100644 --- a/src/main/java/cokr/xit/fims/sprt/web/Sprt01Controller.java +++ b/src/main/java/cokr/xit/fims/sprt/web/Sprt01Controller.java @@ -14,8 +14,10 @@ import cokr.xit.base.code.CommonCode; import cokr.xit.base.user.ManagedUser; import cokr.xit.base.user.dao.UserMapper; import cokr.xit.base.web.ApplicationController; +import cokr.xit.fims.crdn.Crdn; import cokr.xit.fims.crdn.dao.GlobalStngMapper; import cokr.xit.fims.sprt.Keyword; +import cokr.xit.fims.sprt.PrintOption; import cokr.xit.fims.sprt.SprtQuery; import cokr.xit.fims.sprt.service.Sprt01Service; import cokr.xit.foundation.data.DataObject; @@ -43,6 +45,8 @@ public class Sprt01Controller extends ApplicationController { inputEtcCnMain = "/100/info.do", inputEtcCn = "/100/update.do", printCrdnMain = "/110/info.do", + makeCrdnListFileFromHwpFormat = "/110/makeCrdnListFileFromHwpFormat.do", + makeCrdnConfirmFileFromHwpFormat = "/110/makeCrdnConfirmFileFromHwpFormat.do", printBillMain = "/120/info.do" ; } @@ -241,7 +245,7 @@ public class Sprt01Controller extends ApplicationController { */ public ModelAndView inputEtcCnMain(String... crdnIds) { ModelAndView mav = new ModelAndView("fims/sprt/sprt01100-info"); - + mav.addObject("pageName", "sprt01100-info"); mav.addObject("crdnIds", toJson(crdnIds)); return mav; @@ -255,12 +259,12 @@ public class Sprt01Controller extends ApplicationController { * "saved": 저장되었으면 true, 그렇지 않으면 false * } */ - public ModelAndView inputEtcCn(String etcCn, String... crdnIds) { + public ModelAndView inputEtcCn(Crdn crdn, String... crdnIds) { ModelAndView mav = new ModelAndView("jsonView"); boolean saved = false; - saved = sprt01Service.updateEtcCn(etcCn, crdnIds); + saved = sprt01Service.updateEtcCn(crdn.getEtcCn(), crdnIds); mav.addObject("saved", saved); @@ -273,21 +277,53 @@ public class Sprt01Controller extends ApplicationController { */ public ModelAndView printCrdnMain(String... crdnIds) { ModelAndView mav = new ModelAndView("fims/sprt/sprt01110-info"); - + mav.addObject("pageName", "sprt01110-info"); mav.addObject("crdnIds", toJson(crdnIds)); return mav; } + /** 단속내역서를 한글 파일로 작성한다. + * @return hwp파일 + */ + public ModelAndView makeCrdnListFileFromHwpFormat(String privateInfoYn, String[] crdnIds) { + Map result = null; + String format = "crdnList"; + PrintOption printOption = new PrintOption(); + printOption.setPrivateInfoYn(privateInfoYn); + + result = sprt01Service.makeFileFromHwpFormat("list", format, printOption ,crdnIds); + + ModelAndView mav = new ModelAndView("jsonView"); + mav.addAllObjects(result); + return mav; + } + + /** 단속확인서를 한글 파일로 작성한다. + * @return hwp파일 + */ + public ModelAndView makeCrdnConfirmFileFromHwpFormat(String[] crdnIds) { + Map result = null; + String format = "crdnConfirm"; + PrintOption printOption = new PrintOption(); + + result = sprt01Service.makeFileFromHwpFormat("info", format, printOption, crdnIds); + + ModelAndView mav = new ModelAndView("jsonView"); + mav.addAllObjects(result); + return mav; + } + /**교부청구서,채권신고서 출력 화면을 연다. * * @return /fims/sprt/sprt01120 */ public ModelAndView printBillMain(String... crdnIds) { ModelAndView mav = new ModelAndView("fims/sprt/sprt01120-info"); - + mav.addObject("pageName", "sprt01120-info"); mav.addObject("crdnIds", toJson(crdnIds)); return mav; } + } diff --git a/src/main/java/cokr/xit/fims/task/web/CmnController.java b/src/main/java/cokr/xit/fims/task/web/CmnController.java index 365218f8..fd974a6b 100644 --- a/src/main/java/cokr/xit/fims/task/web/CmnController.java +++ b/src/main/java/cokr/xit/fims/task/web/CmnController.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +import cokr.xit.fims.crdn.Crdn; import cokr.xit.fims.sprt.SprtQuery; import cokr.xit.fims.stat.StatQuery; @@ -356,8 +357,8 @@ public class CmnController { @Override @RequestMapping(name="특기사항 일괄 입력", value=METHOD_URL.inputEtcCn) - public ModelAndView inputEtcCn(String etcCn, String... crdnIds) { - return super.inputEtcCn(etcCn, crdnIds); + public ModelAndView inputEtcCn(Crdn crdn, String... crdnIds) { + return super.inputEtcCn(crdn, crdnIds); } @Override @@ -366,6 +367,18 @@ public class CmnController { return super.printCrdnMain(crdnIds); } + @Override + @RequestMapping(name="단속 내역서 한글 파일 생성", value=METHOD_URL.makeCrdnListFileFromHwpFormat) + public ModelAndView makeCrdnListFileFromHwpFormat(String privateInfoYn, String... crdnIds) { + return super.makeCrdnListFileFromHwpFormat(privateInfoYn, crdnIds); + } + + @Override + @RequestMapping(name="단속 확인서 한글 파일 생성", value=METHOD_URL.makeCrdnConfirmFileFromHwpFormat) + public ModelAndView makeCrdnConfirmFileFromHwpFormat(String... crdnIds) { + return super.makeCrdnConfirmFileFromHwpFormat(crdnIds); + } + @Override @RequestMapping(name="교부청구서,채권신고서 출력 화면", value=METHOD_URL.printBillMain) public ModelAndView printBillMain(String... crdnIds) { diff --git a/src/main/resources/format/crdnConfirm.hwp b/src/main/resources/format/crdnConfirm.hwp new file mode 100644 index 0000000000000000000000000000000000000000..f1f5719c903a86ffe23da7ec68fcc3ae36f6eb95 GIT binary patch literal 25088 zcmeHv2Ut_fwto;68-fambivL6L8;P2X^IMh6hS~iY9N52R|ORdMO0Afiu5K5L`Z0Y zL{SL6g(3t9EeS{oB?GS!>ps*?SsrJHEZl z=jn(2#wo*?VT|R?u#G>(GlB5Bwg2oe*ijIM;uy=z%TP2k00{o+{*5T02Xh7=H<%Di z9fkn@4VX97m4CP6f^GOqpF?BeZ#iA~6@DG=E+#2(QN_;HD>Y#DFh`g*Obg%|>^k_p z@wc-0t28dyI;Qm?78;ij+5hT---*}<#r>%422ipm%mts z65|Hy=nP_h&xwPQf9~$zyXLoXd?2FkNBL?XXDirRdB45#zyHtv50nq_w9AIoyd{B0 z|G5GGW?@M790zTH{A0k^2ao}f1&{-f2RH$s0H6q<1fUF{0&o&Q72p)WX#h0fE555$6~+-DgbN;03^zH z0dN3t0&oHB2H*zR1Hc2o3joPIegFXgK>#6uy#T@hA^?zF-Vbm9;2^*ufWrVs07L

f`gkcH10|J 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/format/crdnList_root.hwp b/src/main/resources/format/crdnList_root.hwp new file mode 100644 index 0000000000000000000000000000000000000000..97c7730910e07f831cde7f0d8db1980a1e2c7023 GIT binary patch literal 33280 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 + + \ No newline at end of file diff --git a/src/main/resources/sql/mapper/fims/crdn/crdn-list-mapper.xml b/src/main/resources/sql/mapper/fims/crdn/crdn-list-mapper.xml index 28a742d1..b1bba302 100644 --- a/src/main/resources/sql/mapper/fims/crdn/crdn-list-mapper.xml +++ b/src/main/resources/sql/mapper/fims/crdn/crdn-list-mapper.xml @@ -10,6 +10,7 @@ SELECT C.CRDN_ID , C.SGG_CD , (SELECT SGG_NM FROM TB_SGG_INFO WHERE SGG_CD = C.SGG_CD) AS SGG_NM , C.TASK_SE_CD + , (SELECT GET_CODE_NM('FIM054', C.TASK_SE_CD) FROM DUAL) AS TASK_SE_NM , C.CRDN_REG_SE_CD , C.CRDN_INPT_SE_CD , C.LINK_TBL_NM @@ -40,6 +41,11 @@ SELECT C.CRDN_ID , C.OPNN_SBMSN_YN , L.LEVY_ID , (CONCAT(L.FYR, '-', L.LEVY_NO)) AS GOJI_NO + , L.EPAYNO + , L.VR_ACTNO + , (L.LEVY_PCPTAX + L.LEVY_ADAMT + L.INSPY_INT) AS LEVY_AMT + , L.DUDT_YMD + , L.RCVMT_YMD , C.CRDN_STTS_CD , (SELECT GET_CODE_NM('FIM010', C.CRDN_STTS_CD) FROM DUAL) AS CRDN_STTS_NM , C.CRDN_STTS_CHG_DT @@ -85,6 +91,8 @@ SELECT C.CRDN_ID , LE.LEVY_EXCL_YMD , LE.ETC_CN AS LEVY_EXCL_ETC_CN , P.RTPYR_NM + , P.RTPYR_NO + , CONCAT(P.ADDR, ' ', P.DTL_ADDR) AS RTPYR_FULL_ADDR /* 납부자 전체 주소 */ , C.DEL_YN , C.RGTR , C.REG_DT @@ -104,6 +112,9 @@ WHERE C.DEL_YN = 'N' AND C.SGG_CD = #{sggCd} AND C.CRDN_ID = #{crdnId} + + AND C.CRDN_ID IN (#{CRDN_ID}) + AND C.TASK_SE_CD = #{taskSeCd} AND C.VHRNO LIKE CONCAT('%', #{vhrno}, '%') AND C.CRDN_INPT_SE_CD = #{crdnInptSeCd} diff --git a/src/main/resources/sql/mapper/fims/sprt/integrationSearch-mapper.xml b/src/main/resources/sql/mapper/fims/sprt/integrationSearch-mapper.xml index 4566f6dc..e375df96 100644 --- a/src/main/resources/sql/mapper/fims/sprt/integrationSearch-mapper.xml +++ b/src/main/resources/sql/mapper/fims/sprt/integrationSearch-mapper.xml @@ -176,7 +176,7 @@ LEFT OUTER JOIN TB_RCVMT R ON (L.LEVY_ID = R.LEVY_ID AND R.DEL_YN = 'N - AND L.RPM_SZR_VHRNO LIKE CONCAT ('%' || #{item.value} || '%') + AND L.RPM_SZR_VHRNO LIKE CONCAT ('%' , #{item.value} , '%') AND L.RPM_SZR_VHRNO = #{item.value} @@ -186,7 +186,7 @@ LEFT OUTER JOIN TB_RCVMT R ON (L.LEVY_ID = R.LEVY_ID AND R.DEL_YN = 'N - AND C.VHRNO LIKE CONCAT ('%' || #{item.value} || '%') + AND C.VHRNO LIKE CONCAT ('%' , #{item.value} , '%') AND C.VHRNO = #{item.value} @@ -196,7 +196,7 @@ LEFT OUTER JOIN TB_RCVMT R ON (L.LEVY_ID = R.LEVY_ID AND R.DEL_YN = 'N - AND P.RTPYR_NM LIKE CONCAT ('%' || #{item.value} || '%') + AND P.RTPYR_NM LIKE CONCAT ('%' , #{item.value} , '%') AND P.RTPYR_NM = #{item.value} @@ -226,10 +226,10 @@ LEFT OUTER JOIN TB_RCVMT R ON (L.LEVY_ID = R.LEVY_ID AND R.DEL_YN = 'N - AND P.ADDR LIKE CONCAT ('%' || #{item.value} || '%') + AND P.ADDR LIKE CONCAT ('%' , #{item.value} , '%') - AND P.DTL_ADDR LIKE CONCAT ('%' || #{item.value} || '%') + AND P.DTL_ADDR LIKE CONCAT ('%' , #{item.value} , '%') AND CONCAT(L.FYR, '-', L.LEVY_NO) = #{item.value} @@ -253,7 +253,7 @@ LEFT OUTER JOIN TB_RCVMT R ON (L.LEVY_ID = R.LEVY_ID AND R.DEL_YN = 'N AND C.CRDN_STDG_NM = #{item.value} - AND C.CRDN_PLC LIKE CONCAT ('%' || #{item.value} || '%') + AND C.CRDN_PLC LIKE CONCAT ('%' , #{item.value} , '%') AND CC.CVLCPT_LIST_NO = #{item.value} diff --git a/src/main/webapp/WEB-INF/jsp/fims/sprt/sprt01110-info.jsp b/src/main/webapp/WEB-INF/jsp/fims/sprt/sprt01110-info.jsp index 511d382b..a25444f5 100644 --- a/src/main/webapp/WEB-INF/jsp/fims/sprt/sprt01110-info.jsp +++ b/src/main/webapp/WEB-INF/jsp/fims/sprt/sprt01110-info.jsp @@ -9,10 +9,10 @@

- - + +
@@ -73,6 +73,8 @@
+ +
@@ -93,6 +95,52 @@ $(document).ready(function(){ $("#tbody--${pageName}").setCurrentRow(key); } + //단속내역서 파일 생성 + $P.fnMakeCrdnListFile = () => { + + var privateInfoYn = "Y"; + if($("#privateInfoYn--${pageName}").is(":checked")){ + privateInfoYn = "N"; + } + + ajax.post({ + url : wctx.url("/sprt/sprt01/110/makeCrdnListFileFromHwpFormat.do"), + data : { + crdnIds : $P.crdnIds.join(","), + privateInfoYn : privateInfoYn + }, + success : resp => { + var a = document.createElement("a"); + a.href = resp.filePath; + a.download = resp.fileName; + document.getElementById("tempArea--${pageName}").appendChild(a); + a.click(); + document.getElementById("tempArea--${pageName}").removeChild(a); + } + }); + } + + $P.fnMakeCrdnConfirmFile = () => { + ajax.post({ + url : wctx.url("/sprt/sprt01/110/makeCrdnConfirmFileFromHwpFormat.do"), + data : { + crdnIds : $P.crdnIds.join(",") + }, + success : resp => { + var a = document.createElement("a"); + a.href = resp.filePath; + a.download = resp.fileName; + document.getElementById("tempArea--${pageName}").appendChild(a); + a.click(); + document.getElementById("tempArea--${pageName}").removeChild(a); + } + }); + } + + //버튼 이벤트 + $("#btnPrintCrdnList--${pageName}").on("click", () => $P.fnMakeCrdnListFile() ); + $("#btnPrintCrdnConfirm--${pageName}").on("click", () => $P.fnMakeCrdnConfirmFile() ); + //첫번째 줄 클릭 $("#tbody--${pageName}").find("tr:eq(0)").click(); });