단속내역서 출력 추가
parent
aa59ef40db
commit
f7362cca9e
@ -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];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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<Control> 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);
|
||||||
|
}
|
||||||
|
}
|
@ -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);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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<String> strings = new ArrayList<String>();
|
||||||
|
strings.add(value);
|
||||||
|
FieldFinder.setClickHereText(whpFile, clickHereName, strings);
|
||||||
|
} catch (Exception e){
|
||||||
|
throw new RuntimeException("한글 문서 생성 중 오류가 발생하였습니다.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -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<DataObject> 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<Cell> cellList = CellFinder.findAll(baseFile, "내부");
|
||||||
|
Cell cell = cellList.get(0);
|
||||||
|
|
||||||
|
|
||||||
|
AddUtil.insertTableInCell(attachFormatFile, baseFile, cell);
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch(Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new RuntimeException("한글 파일 출력 중 오류가 발생하였습니다.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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<String, Object> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
package cokr.xit.fims.sprt;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class PrintOption {
|
||||||
|
|
||||||
|
String privateInfoYn; //개인정보표시
|
||||||
|
|
||||||
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue