package cokr.xit.fims.sprt.web;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.apache.poi.ss.usermodel.CellStyle;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import cokr.xit.applib.Print;
import cokr.xit.base.code.CommonCode;
import cokr.xit.base.docs.xls.CellDef;
import cokr.xit.base.docs.xls.Format;
import cokr.xit.base.docs.xls.Style;
import cokr.xit.base.docs.xls.XLSWriter;
import cokr.xit.base.file.service.FileQuery;
import cokr.xit.base.file.service.bean.FileBean;
import cokr.xit.base.user.ManagedUser;
import cokr.xit.base.user.dao.UserMapper;
import cokr.xit.base.web.ApplicationController;
import cokr.xit.fims.cmmn.CmmnUtil;
import cokr.xit.fims.cmmn.FimsPrintOption;
import cokr.xit.fims.cmmn.OtptStngQuery;
import cokr.xit.fims.cmmn.OutsourcingFileMaker;
import cokr.xit.fims.cmmn.OutsourcingStngQuery;
import cokr.xit.fims.cmmn.dao.OtptStngMapper;
import cokr.xit.fims.cmmn.hwp.format.CrdnConfirm;
import cokr.xit.fims.cmmn.hwp.format.CrdnList;
import cokr.xit.fims.cmmn.hwp.format.RcvmtConfirm;
import cokr.xit.fims.cmmn.hwp.format.ReportOnClaims;
import cokr.xit.fims.cmmn.hwp.format.RequestForDelivery;
import cokr.xit.fims.cmmn.pdf.print.format.Advntce;
import cokr.xit.fims.cmmn.pdf.print.format.Nht;
import cokr.xit.fims.cmmn.service.bean.OtptStngBean;
import cokr.xit.fims.cmmn.service.bean.OutsourcingStngBean;
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.crdn.Crdn;
import cokr.xit.fims.crdn.CrdnQuery;
import cokr.xit.fims.crdn.dao.CrdnListMapper;
import cokr.xit.fims.mngt.service.bean.FactionBean;
import cokr.xit.fims.mngt.service.bean.TaskBean;
import cokr.xit.fims.sndb.SndbQuery;
import cokr.xit.fims.sndb.Sndng;
import cokr.xit.fims.sndb.service.bean.SndngBean;
import cokr.xit.fims.sprt.Keyword;
import cokr.xit.fims.sprt.SprtQuery;
import cokr.xit.fims.sprt.dao.IntegrationSearchMapper;
import cokr.xit.fims.sprt.service.IntegrationSearchService;
import cokr.xit.fims.sprt.service.bean.MediaBean;
import cokr.xit.fims.stat.dao.StatMapper;
import cokr.xit.foundation.UserInfo;
import cokr.xit.foundation.data.DataObject;
/**통합 조회 서비스의 웹 컨트롤러
*
*
상세 설명:
*
*
* ============ 변경 이력 ============
* 2023-08-18 JoJH 최초 작성
* ================================
*
*/
@Controller
@RequestMapping(name = "통합 조회", value = Sprt01Controller.CLASS_URL)
public class Sprt01Controller extends ApplicationController {
public static final String CLASS_URL = "/sprt/sprt01";
public class METHOD_URL {
public static final String
integrationSearchMain = "/010/main.do",
getIntegrationDataList = "/010/list.do",
manageEtcCnMain = "/020/info.do",
inputEtcCnMain = "/100/info.do",
inputEtcCn = "/100/update.do",
printCrdnMain = "/110/info.do",
makeCrdnListFileFromHwpFormat = "/110/makeCrdnListFileFromHwpFormat.do",
makeCrdnConfirmFileFromHwpFormat = "/110/makeCrdnConfirmFileFromHwpFormat.do",
printBillMain = "/120/info.do",
makeRequestForDeliveryFileFromHwpFormat = "/120/makeRequestForDeliveryFileFromHwpFormat.do",
makeReportOnClaimsFileFromHwpFormat = "/120/makeReportOnClaimsFileFromHwpFormat.do",
makeRcvmtConfirmFileFromHwpFormat = "/130/makeRcvmtConfirmFileFromHwpFormat.do",
printAdvntceMain = "/140/info.do",
makeAdvntcePdf = "/140/makeAdvntcePdf.do",
makeAdvntceOutsourcing = "/140/makeAdvntceOutsourcing.do",
printNhtMain = "/150/info.do",
makeNhtPdf = "/150/makeNhtPdf.do",
makeNhtOutsourcing = "/150/makeNhtOutsourcing.do"
;
}
/**통합 조회 서비스*/
@Resource(name="integrationSearchService")
private IntegrationSearchService integrationSearchService;
@Resource(name="userMapper")
protected UserMapper userMapper;
@Resource(name="statMapper")
protected StatMapper statMapper;
@Resource(name="otptStngBean")
protected OtptStngBean otptStngBean;
@Resource(name="outsourcingStngBean")
protected OutsourcingStngBean outsourcingStngBean;
@Resource(name = "fileBean")
private FileBean fileBean;
@Resource(name = "sndngBean")
private SndngBean sndngBean;
@Resource(name = "taskBean")
private TaskBean taskBean;
@Resource(name = "factionBean")
private FactionBean factionBean;
@Resource(name = "mediaBean")
private MediaBean mediaBean;
@Resource(name = "stngBean")
private StngBean stngBean;
@Resource(name = "crdnListMapper")
private CrdnListMapper crdnListMapper;
@Resource(name = "integrationSearchMapper")
private IntegrationSearchMapper integrationSearchMapper;
@Resource(name = "otptStngMapper")
private OtptStngMapper otptStngMapper;
/**통합 조회 메인화면(fims/sprt/sprt01/010-main)을 연다.
*
* @return /fims/sprt/sprt01010
*/
@RequestMapping(name="통합조회 메인", value=METHOD_URL.integrationSearchMain)
public ModelAndView integrationSearchMain(HttpServletRequest req) {
ModelAndView mav = new ModelAndView("fims/sprt/sprt01010-main");
mav.addObject("pageName", "sprt01010");
ManagedUser currentUser = (ManagedUser) currentUser().getUser();
String sggCd = currentUser.getOrgID();
mav.addObject("sggCd", sggCd);
Map> commonCodes = getCodesOf("FIM003", "FIM010", "FIM026", "FIM054"
,"FIM004","FIM005","FIM006","FIM061","FIM064");
mav.addObject("FIM003List", commonCodes.get("FIM003"));
mav.addObject("FIM010List", commonCodes.get("FIM010"));
mav.addObject("FIM026List", commonCodes.get("FIM026"));
mav.addObject("FIM054List", commonCodes.get("FIM054"));
mav.addObject("TaskListForSgg", stngBean.filterTaskSectionCodeForSgg(commonCodes.get("FIM054")));
mav.addObject("FIM004List", commonCodes.get("FIM004"));
mav.addObject("FIM005List", commonCodes.get("FIM005"));
mav.addObject("FIM006List", commonCodes.get("FIM006"));
mav.addObject("FIM061List", commonCodes.get("FIM061"));
mav.addObject("FIM064List", commonCodes.get("FIM064"));
addCodes(commonCodes, mav, "FIM003", "FIM010", "FIM026", "FIM054"
,"FIM004","FIM005","FIM006","FIM061","FIM064");
String fastBy = req.getParameter("fastBy");
String fastTerm = req.getParameter("fastTerm");
if(!ifEmpty(fastBy, () -> "").equals("") && !ifEmpty(fastTerm, () -> "").equals("")) {
mav.addObject("fastSearch", toJson(Map.of(
"fastBy", fastBy,
"fastTerm", fastTerm
)));
} else {
mav.addObject("fastSearch", "null");
}
return mav;
}
/**지정한 조건에 따라 통합 조회 자료 목록을 반환한다.
* {@link IntegrationSearchService#getIntegrationDataList(SprtQuery)} 참고
* @param query 통합 조회 조건
* @return jsonView
*/
@RequestMapping(name="통합조회 자료 목록", value=METHOD_URL.getIntegrationDataList)
public ModelAndView getIntegrationDataList(SprtQuery query, HttpServletRequest req) {
ModelAndView mav = new ModelAndView("jsonView");
this.makeIntegrationSearchQuery(query, req);
List list = integrationSearchService.getIntegrationDataList(query);
List upList = list.stream().filter(item -> item.string("RCVMT_ETC_YN").equals("N")).toList();
List downList = list.stream().filter(item -> item.string("RCVMT_ETC_YN").equals("Y")).toList();
if("xls".equals(query.getDownload())) {
List cellDefs = fromJson(query.getCellDefs(), CellDef.listType());
String fileName = "통합조회자료 목록";
List listForExcel;
if(ifEmpty(query.getGridType(), () -> "").equals("up")) {
fileName += "(미납자료)";
listForExcel = upList;
} else if(ifEmpty(query.getGridType(), () -> "").equals("down")) {
fileName += "(수납,기타)";
listForExcel = downList;
} else {
listForExcel = list;
}
XLSWriter xlsx = new XLSWriter().worksheet(0);
Format format = new Format(xlsx);
CellStyle center = format.cellStyle(Style.CENTER);
CellStyle numeric = format.n_nn0();
CellStyle dateYMD = format.yyyy_mm_dd();
CellStyle dateDT = format.yyyy_mm_dd_hh_mm_ss();
Map valueMap = new HashMap();
valueMap.put("시군구명" , format.of("SGG_NM").style(center));
valueMap.put("과태료명" , format.of("TASK_SE_NM").style(center));
valueMap.put("단속입력구분" , format.of("CRDN_INPT_SE_NM").style(center));
valueMap.put("단속일시" , FormatMaker.yyyy_mm_dd_hh_mm_ss(format, "CRDN_YMD_TM").style(dateDT));
valueMap.put("신고자명" , format.of("CVLCPT_APLCNT_NM").style(center));
valueMap.put("민원접수번호" , format.of("CVLCPT_RCPT_NO").style(center));
valueMap.put("민원접수일자" , FormatMaker.yyyy_mm_dd(format, "CVLCPT_RCPT_YMD").style(dateYMD));
valueMap.put("민원목록번호" , format.of("CVLCPT_LIST_NO").style(center));
valueMap.put("단속차량번호" , format.of("VHRNO"));
valueMap.put("대체차량번호" , format.of("RPM_SZR_VHRNO"));
valueMap.put("사진건수" , format.of("ATCH_FILE_CNT").style(center));
valueMap.put("차량확인" , format.of("PARKNG_PSBLTY_RSLT_NM").style(center));
valueMap.put("납부자명" , format.of("RTPYR_NM").style(center));
valueMap.put("납부자번호" , format.of("RTPYR_NO").style(center));
valueMap.put("처리상태" , format.of("CRDN_STTS_NM").style(center));
valueMap.put("제외사유" , format.of("LEVY_EXCL_RSN_NM"));
valueMap.put("제외일자" , FormatMaker.yyyy_mm_dd(format, "LEVY_EXCL_YMD").style(dateYMD));
valueMap.put("기타사항" , format.of("ETC_CN"));
valueMap.put("고지번호" , format.of("GOJI_NO").style(center));
valueMap.put("처리일자" , FormatMaker.yyyy_mm_dd(format, "CRDN_STTS_CHG_YMD").style(dateYMD));
valueMap.put("단속장소" , format.of("CRDN_PLC"));
valueMap.put("단속구분" , format.of("CRDN_SE_NM").style(center));
valueMap.put("의견진술여부" , format.of("OPNN_SBMSN_YN_NM").style(center));
valueMap.put("의견진술기한" , FormatMaker.yyyy_mm_dd(format, "ADVNTCE_DUDT_YMD").style(dateYMD));
valueMap.put("견인여부" , format.of("TOWNG_YN_NM").style(center));
valueMap.put("압류일자" , FormatMaker.yyyy_mm_dd(format, "SZR_YMD").style(dateYMD));
valueMap.put("압류해제일자" , FormatMaker.yyyy_mm_dd(format, "SZR_RMV_YMD").style(dateYMD));
valueMap.put("잔액" , format.of("SUM_AMT").style(numeric));
valueMap.put("부과금액" , format.of("LEVY_AMT").style(numeric));
valueMap.put("본세" , format.of("LEVY_PCPTAX").style(numeric));
valueMap.put("가산금" , format.of("LEVY_ADAMT").style(numeric));
valueMap.put("납부기한" , FormatMaker.yyyy_mm_dd(format, "DUDT_YMD").style(dateYMD));
valueMap.put("납기후일자" , FormatMaker.yyyy_mm_dd(format, "DUDT_AFTR_YMD").style(dateYMD));
valueMap.put("납기후금액" , format.of("DUDT_AFTR_AMT").style(numeric));
valueMap.put("가상계좌번호" , format.of("VR_ACTNO").style(center));
valueMap.put("전자납부번호" , format.of("EPAYNO").style(center));
valueMap.put("수납유형" , format.of("PAY_MTHD_SE_NM").style(center));
valueMap.put("수납일자" , FormatMaker.yyyy_mm_dd(format, "RCVMT_YMD").style(dateYMD));
valueMap.put("수납금액" , format.of("RCVMT_AMT").style(numeric));
valueMap.put("수납본세" , format.of("RCVMT_PCPTAX").style(numeric));
valueMap.put("수납가산금" , format.of("RCVMT_ADAMT").style(numeric));
valueMap.put("단속등록구분" , format.of("CRDN_REG_SE_NM").style(center));
valueMap.put("납부자주소" , format.of("RTPYR_FULL_ADDR"));
valueMap.put("거주상태" , format.of("RTPYR_STTS_NM").style(center));
valueMap.put("차량번호", format.of("VHRNO"));
valueMap.put("성명", format.of("RTPYR_NM"));
valueMap.put("주소", format.of("RTPYR_ADDR"));
valueMap.put("번지", format.of("RTPYR_DTL_ADDR"));
CellDef.setValues(cellDefs, valueMap);
xlsx.cell(0, 0).value(fileName).value(center).merge(0, cellDefs.size()-1)
.cell(3, 0).rowValues(CellDef.header(cellDefs, () -> StyleMaker.headerStyle(xlsx)))
.cell(4, 0).values(listForExcel, 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(fileName+".xlsx"))
.addObject("downloadData", listForExcel).addObject("dataNames", cellDefs.stream().map(CellDef::getLabel).toList());
}
mav.addObject("upList", upList);
mav.addObject("downList", downList);
return mav;
}
private void makeIntegrationSearchQuery(SprtQuery query, HttpServletRequest req) {
Map pm = req.getParameterMap();
Enumeration pns = req.getParameterNames();
List ischKeywordSet = new ArrayList<>();
List ischOnlyDataSet = new ArrayList<>();
List ischExclDataSet = new ArrayList<>();
while(pns.hasMoreElements()) {
String key = pns.nextElement();
String[] value = pm.get(key);
if(!key.startsWith("isch")) {
continue;
}
if(value == null || value.length == 0) {
continue;
}
if(value.length == 1 && ifEmpty(value[0], () -> "").equals("")) {
continue;
}
if(key.startsWith("ischOnlyData") || key.startsWith("ischExclData")) {
String word = this.fnFirstLower(key.substring(12));
if(key.startsWith("ischOnlyData")) {
ischOnlyDataSet.add(word);
} else if(key.startsWith("ischExclData")) {
ischExclDataSet.add(word);
}
continue;
}
String word = this.fnFirstLower(key.substring(4));
int substringEnd = 0;
if(key.endsWith("Similar")){
substringEnd = 7;
} else if(key.endsWith("From")) {
substringEnd = 4;
} else if(key.endsWith("To")){
substringEnd = 2;
}
if(substringEnd != 0) {
word = word.substring(0, word.length() - substringEnd);
}
int findIndex = -1;
for (int i = 0; i < ischKeywordSet.size(); i++) {
if (ischKeywordSet.get(i).getName().equals(word)) {
findIndex = i;
break;
}
}
if(findIndex == -1){
Keyword keyword = new Keyword();
keyword.setName(word);
if(key.endsWith("Similar")){
keyword.setSimilar(value[0]);
} else if(key.endsWith("From")){
keyword.setFrom(value[0]);
} else if(key.endsWith("To")){
keyword.setTo(value[0]);
} else {
keyword.setValue(value[0]);
}
ischKeywordSet.add(keyword);
} else {
if(key.endsWith("Similar")){
ischKeywordSet.get(findIndex).setSimilar(value[0]);
} else if(key.endsWith("From")){
ischKeywordSet.get(findIndex).setFrom(value[0]);
} else if(key.endsWith("To")){
ischKeywordSet.get(findIndex).setTo(value[0]);
} else {
ischKeywordSet.get(findIndex).setValue(value[0]);
}
}
}
ischKeywordSet.removeIf(item -> item.getSimilar() != null && item.getValue() == null);
query.setIschKeywordSet(ischKeywordSet);
query.setIschOnlyDataSet(ischOnlyDataSet);
query.setIschExclDataSet(ischExclDataSet);
}
private String fnFirstLower(String string) {
String temp1 = string.substring(0,1).toLowerCase();
String temp2 = string.substring(1);
return temp1 + temp2;
}
/**특기사항 일괄 입력 화면을 연다.
*
* @return /fims/sprt/sprt01100
*/
@RequestMapping(name="특기사항 일괄 입력 화면", value=METHOD_URL.inputEtcCnMain)
public ModelAndView inputEtcCnMain(String... crdnIds) {
ModelAndView mav = new ModelAndView("fims/sprt/sprt01100-info");
mav.addObject("pageName", "sprt01100");
mav.addObject("crdnIds", toJson(crdnIds));
return mav;
}
/**특기사항을 일괄 갱신한다.
* @param etcCn 특기사항, crdnIds 단속 ID 목록
* @return jsonView
* {
* "affected": 저장된 정보수
* "saved": 저장되었으면 true, 그렇지 않으면 false
* }
*/
@RequestMapping(name="특기사항 일괄 입력", value=METHOD_URL.inputEtcCn)
public ModelAndView inputEtcCn(Crdn crdn, String... crdnIds) {
ModelAndView mav = new ModelAndView("jsonView");
boolean saved = false;
String rtnMsg = integrationSearchService.updateEtcCn(crdn.getEtcCn(), crdnIds);
if(rtnMsg.contains("[S]")) {
saved = true;
}
mav.addObject("saved", saved);
return mav;
}
/**단속내역서,확인서 출력 화면을 연다.
*
* @return /fims/sprt/sprt01110
*/
@RequestMapping(name="단속 내역서,확인서 출력 화면", value=METHOD_URL.printCrdnMain)
public ModelAndView printCrdnMain(String... crdnIds) {
ModelAndView mav = new ModelAndView("fims/sprt/sprt01110-info");
mav.addObject("pageName", "sprt01110");
mav.addObject("crdnIds", toJson(crdnIds));
return mav;
}
/** 단속내역서를 한글 파일로 작성한다.
* @return 단속내역서 hwp파일
*/
@RequestMapping(name="단속 내역서 한글 파일 생성", value=METHOD_URL.makeCrdnListFileFromHwpFormat)
public ModelAndView makeCrdnListFileFromHwpFormat(String privateInfoYn, String... crdnIds) {
FimsPrintOption printOption = new FimsPrintOption();
printOption.setPrivateInfoYn(privateInfoYn);
UserInfo userInfo = currentUser();
factionBean.initUserInfo(userInfo);
Print print = new Print();
print.setPrintRequestUserInfo(userInfo);
CrdnQuery query = new CrdnQuery();
query.setCrdnIds(crdnIds);
List dataObjectList = crdnListMapper.selectCrackdownList(query);
CrdnList hwpFormat = new CrdnList(print, printOption, dataObjectList);
HashMap result = hwpFormat.makeFile().andDownload();
ModelAndView mav = new ModelAndView("downloadView");
mav.addAllObjects(result);
return mav;
}
/** 단속확인서를 한글 파일로 작성한다.
* @return 단속확인서 hwp파일
*/
@RequestMapping(name="단속 확인서 한글 파일 생성", value=METHOD_URL.makeCrdnConfirmFileFromHwpFormat)
public ModelAndView makeCrdnConfirmFileFromHwpFormat(String... crdnIds) {
FimsPrintOption printOption = new FimsPrintOption();
UserInfo userInfo = currentUser();
factionBean.initUserInfo(userInfo);
Print print = new Print();
print.setPrintRequestUserInfo(userInfo);
CrdnQuery query = new CrdnQuery();
query.setCrdnIds(crdnIds);
List dataObjectList = crdnListMapper.selectCrackdownList(query);
for(int i=0; i < dataObjectList.size(); i++) {
DataObject dataObject = dataObjectList.get(i);
String crndId = dataObject.string("CRDN_ID");
FileQuery fileQuery = new FileQuery();
fileQuery.setInfoType(Crdn.INF_TYPE);
fileQuery.setInfoKeys(crndId);
List fileInfoList = fileBean.getFileList(fileQuery);
if(fileInfoList != null && fileInfoList.size() > 0) {
dataObject.set("PHOTO1", fileInfoList.get(0).string("URL"));
if(fileInfoList.size() >= 2)
dataObject.set("PHOTO2", fileInfoList.get(1).string("URL"));
if(fileInfoList.size() >= 3)
dataObject.set("PHOTO3", fileInfoList.get(2).string("URL"));
if(fileInfoList.size() >= 4)
dataObject.set("PHOTO4", fileInfoList.get(3).string("URL"));
}
}
CrdnConfirm hwpFormat = new CrdnConfirm(print, printOption, dataObjectList);
HashMap result = hwpFormat.makeFile().andDownload();
ModelAndView mav = new ModelAndView("downloadView");
mav.addAllObjects(result);
return mav;
}
/**교부청구서,채권신고서 출력 화면을 연다.
*
* @return /fims/sprt/sprt01120
*/
@RequestMapping(name="교부청구서,채권신고서 출력 화면", value=METHOD_URL.printBillMain)
public ModelAndView printBillMain(String... crdnIds) {
ModelAndView mav = new ModelAndView("fims/sprt/sprt01120-info");
mav.addObject("pageName", "sprt01120");
mav.addObject("crdnIds", toJson(crdnIds));
return mav;
}
/** 교부청구서를 한글 파일로 작성한다.
* @return hwp파일
*/
@RequestMapping(name="교부청구서 한글 파일 생성", value=METHOD_URL.makeRequestForDeliveryFileFromHwpFormat)
public ModelAndView makeRequestForDeliveryFileFromHwpFormat(FimsPrintOption printOption, String globalVariableInfo, String... crdnIds) {
DataObject sggStngInfo = stngBean.getStng("sgg");
DataObject deptStngInfo = stngBean.getStng("dept");
Map globalVariable = new HashMap();
DataObject dataObject = fromJson(globalVariableInfo, DataObject.class);
globalVariable.put("docNo", dataObject.string("docNo"));
globalVariable.put("caseNo", dataObject.string("caseNo"));
globalVariable.put("receiver", dataObject.string("receiver"));
globalVariable.put("rtpyrNm", dataObject.string("rtpyrNm"));
globalVariable.put("rtpyrNo", dataObject.string("rtpyrNo"));
globalVariable.put("vhrno", dataObject.string("vhrno"));
globalVariable.put("rtpyrFullAddr", dataObject.string("rtpyrFullAddr"));
globalVariable.put("dtbnBankNm", deptStngInfo.string("DTBN_BANK_NM"));
globalVariable.put("dtbnActno", deptStngInfo.string("DTBN_ACTNO"));
globalVariable.put("offcsFilePath", sggStngInfo.string("OFFCS_FILE_PATH"));
printOption.setGlobalVariable(globalVariable);
UserInfo userInfo = currentUser();
factionBean.initUserInfo(userInfo);
Print print = new Print();
print.setPrintRequestUserInfo(userInfo);
SprtQuery sprtQuery = new SprtQuery();
sprtQuery.setCrdnIds(crdnIds);
List dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
RequestForDelivery hwpFormat = new RequestForDelivery(print, printOption, dataObjectList);
HashMap result = hwpFormat.makeFile().andDownload();
ModelAndView mav = new ModelAndView("downloadView");
mav.addAllObjects(result);
return mav;
}
/** 채권신고서를 한글 파일로 작성한다.
* @return 채권신고서 hwp파일
*/
@RequestMapping(name="채권신고서 한글 파일 생성", value=METHOD_URL.makeReportOnClaimsFileFromHwpFormat)
public ModelAndView makeReportOnClaimsFileFromHwpFormat(FimsPrintOption printOption, String globalVariableInfo, String... crdnIds) {
DataObject sggStngInfo = stngBean.getStng("sgg");
DataObject deptStngInfo = stngBean.getStng("dept");
UserInfo userInfo = currentUser();
factionBean.initUserInfo(userInfo);
Print print = new Print();
print.setPrintRequestUserInfo(userInfo);
Map globalVariable = new HashMap();
DataObject dataObject = fromJson(globalVariableInfo, DataObject.class);
globalVariable.put("caseNo", dataObject.string("caseNo"));
globalVariable.put("rtpyrNm", dataObject.string("rtpyrNm"));
globalVariable.put("rtpyrNo", dataObject.string("rtpyrNo"));
globalVariable.put("rtpyrFullAddr", dataObject.string("rtpyrFullAddr"));
String deptNm = (String) print.getPrintRequestUserInfo().getInfo().get("deptNm");
String deptAddr = sggStngInfo.string("INST_FULL_ADDR") + " " + deptNm;
globalVariable.put("deptAddr", deptAddr);
globalVariable.put("deptTelno", deptStngInfo.string("DEPT_TELNO"));
globalVariable.put("deptFxno", deptStngInfo.string("DEPT_FXNO"));
globalVariable.put("offcsFilePath", sggStngInfo.string("OFFCS_FILE_PATH"));
printOption.setGlobalVariable(globalVariable);
SprtQuery sprtQuery = new SprtQuery();
sprtQuery.setCrdnIds(crdnIds);
List dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
ReportOnClaims hwpFormat = new ReportOnClaims(print, printOption, dataObjectList);
HashMap result = hwpFormat.makeFile().andDownload();
ModelAndView mav = new ModelAndView("downloadView");
mav.addAllObjects(result);
return mav;
}
/** 납부확인서를 한글 파일로 작성한다.
* @return 납부확인서 hwp파일
*/
@RequestMapping(name="납부확인서 한글 파일 생성", value=METHOD_URL.makeRcvmtConfirmFileFromHwpFormat)
public ModelAndView makeRcvmtConfirmFileFromHwpFormat(String... crdnIds) {
UserInfo userInfo = currentUser();
factionBean.initUserInfo(userInfo);
Print print = new Print();
print.setPrintRequestUserInfo(userInfo);
FimsPrintOption printOption = new FimsPrintOption();
printOption.setGlobalVariable(new HashMap());
SprtQuery sprtQuery = new SprtQuery();
sprtQuery.setCrdnIds(crdnIds);
List dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
RcvmtConfirm hwpFormat = new RcvmtConfirm(print, printOption, dataObjectList);
HashMap result = hwpFormat.makeFile().andDownload();
ModelAndView mav = new ModelAndView("downloadView");
mav.addAllObjects(result);
return mav;
}
/**사전통지서 출력 화면을 연다.
*
* @return /fims/sprt/sprt01140
*/
@RequestMapping(name="사전통지서 출력 화면", value=METHOD_URL.printAdvntceMain)
public ModelAndView printAdvntceMain(String... crdnIds) {
ModelAndView mav = new ModelAndView("fims/sprt/sprt01140-info");
mav.addObject("pageName", "sprt01140");
mav.addObject("crdnIds", toJson(crdnIds));
return mav;
}
/** 사전통지서를 PDF 파일로 작성한다.
* @return 사전통지서 PDF파일
*/
@RequestMapping(name="사전통지서 pdf 파일 생성", value=METHOD_URL.makeAdvntcePdf)
public ModelAndView makeAdvntcePdf(String[] crdnIds, Sndng sndng, FimsPrintOption printOption) {
UserInfo userInfo = currentUser();
factionBean.initUserInfo(userInfo);
sndng.setSggCd((String)userInfo.getInfo().get("sggCd"));
ModelAndView mav = new ModelAndView("downloadView");
SprtQuery sprtQuery = new SprtQuery();
sprtQuery.setCrdnIds(crdnIds);
List dataObjectList = new ArrayList();
if(crdnIds.length == 1 && crdnIds[0].equals("sample")) {
DataObject sample = new Advntce().createSampleData();
dataObjectList.add(sample);
} else {
//발송 등록
List dataObjectList0 = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
SndbQuery sndbQuery = new SndbQuery();
sndbQuery.setCrdnIDs(crdnIds);
sndng.setSndngSeCd("02");
sndng.setTnocs(crdnIds.length);
sndng.setGramt(CmmnUtil.sumByKey(dataObjectList0, "FFNLG_AMT"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String today = sdf.format(new Date());
sndng.setSndngYmd(today);
sndbQuery.setSggCd(sndng.getSggCd());
sndbQuery.setTaskSeCd(sndng.getTaskSeCd());
DataObject advntceYmdInfo = taskBean.getAdvntceYmdInfo(sndbQuery);
String sndngEndYmd = CmmnUtil.addDay(today, advntceYmdInfo.number("ADVNTCE_DAY_CNT").intValue());
sndng.setSndngEndYmd(sndngEndYmd);
DataObject first = dataObjectList0.get(0);
sndng.setTtlNm(first.string("TASK_SE_NM")+" "+first.string("VLTN_ARTCL")+" "+"사전통지서");
sndng.setResndYn("N");
String insertSndngResult = sndngBean.createAdvntceSndngList(sndbQuery, sndng);
if(insertSndngResult.contains("[F]")) {
throw new RuntimeException(insertSndngResult);
}
//발송 등록 후 출력대상조회
dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
for(int i=0; i < dataObjectList.size(); i++) {
DataObject dataObject = dataObjectList.get(i);
String crdnId = dataObject.string("CRDN_ID");
FileQuery fileQuery = new FileQuery();
fileQuery.setInfoType(Crdn.INF_TYPE);
fileQuery.setInfoKeys(crdnId);
List fileInfoList = fileBean.getFileList(fileQuery);
if(fileInfoList != null && fileInfoList.size() > 0) {
for(int j=0; j mosSet = mediaBean.getMosaicList(fileInfoList.get(j).string("FILE_ID"));
if(mosSet != null && !mosSet.isEmpty()) {
dataObject.set("MOS"+fileInfoList.get(j).string("FILE_ID"), mosSet);
}
}
}
}
}
Print print = new Print();
print.setPrintRequestUserInfo(userInfo);
//출력물 기본 설정
OtptStngQuery otptStngQuery = new OtptStngQuery();
String paperSeCd = printOption.getPaperSeCd();
String taskSeCd = printOption.getTaskSeCd();
otptStngQuery.setSggCd((String)userInfo.getInfo().get("sggCd"));
otptStngQuery.setTaskSeCd(taskSeCd);
otptStngQuery.setSndngSeCd("02");
otptStngQuery.setPaperSeCd(paperSeCd);
DataObject otptBscStng = otptStngMapper.selectOtptBscStng(otptStngQuery);
if(otptBscStng == null) {
otptBscStng = new DataObject();
}
//출력 요소별 설정
List otptArtclStngList = otptStngMapper.selectOtptArtclStngList(otptStngQuery);
DataObject sggStngInfo = stngBean.getStng("sgg");
DataObject deptStngInfo = stngBean.getStng("dept");
//
Map globalVariable = printOption.getGlobalVariable();
if(globalVariable == null) {
globalVariable = new HashMap();
}
globalVariable.put("offcsFilePath", sggStngInfo.string("OFFCS_FILE_PATH"));
globalVariable.put("logoFilePath", sggStngInfo.string("LOGO_FILE_PATH"));
globalVariable.put("instAddr", sggStngInfo.string("INST_ADDR"));
globalVariable.put("instDaddr", sggStngInfo.string("INST_DADDR"));
globalVariable.put("instZip", sggStngInfo.string("INST_ZIP"));
globalVariable.put("deptTelno", deptStngInfo.string("DEPT_TELNO"));
globalVariable.put("deptFxno", deptStngInfo.string("DEPT_FXNO"));
if(!otptBscStng.string("BCRN_IMG_PATH").equals("")) {
globalVariable.put("bcrnImgPath", otptBscStng.string("BCRN_IMG_PATH"));
}
printOption.setGlobalVariable(globalVariable);
Advntce pdfFormat = new Advntce(print,printOption,otptBscStng,otptArtclStngList,paperSeCd,dataObjectList);
Map result = pdfFormat.makeFile();
mav.addAllObjects(result);
return mav;
}
/** 사전통지 정보로 txt파일,이미지파일을 생성하고 압축파일로 반환한다.
* @return 사전통지서 압축파일
*/
@RequestMapping(name="사전통지서 외주 파일 생성", value=METHOD_URL.makeAdvntceOutsourcing)
public ModelAndView makeAdvntceOutsourcing(String[] crdnIds, Sndng sndng, FimsPrintOption printOption) {
UserInfo userInfo = currentUser();
factionBean.initUserInfo(userInfo);
sndng.setSggCd((String)userInfo.getInfo().get("sggCd"));
ModelAndView mav = new ModelAndView("downloadView");
SprtQuery sprtQuery = new SprtQuery();
sprtQuery.setCrdnIds(crdnIds);
//발송 등록
List dataObjectList0 = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
SndbQuery sndbQuery = new SndbQuery();
sndbQuery.setCrdnIDs(crdnIds);
sndng.setSndngSeCd("02");
sndng.setTnocs(crdnIds.length);
sndng.setGramt(CmmnUtil.sumByKey(dataObjectList0, "FFNLG_AMT"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String today = sdf.format(new Date());
sndng.setSndngYmd(today);
sndbQuery.setSggCd(sndng.getSggCd());
sndbQuery.setTaskSeCd(sndng.getTaskSeCd());
DataObject advntceYmdInfo = taskBean.getAdvntceYmdInfo(sndbQuery);
String sndngEndYmd = CmmnUtil.addDay(today, advntceYmdInfo.number("ADVNTCE_DAY_CNT").intValue());
sndng.setSndngEndYmd(sndngEndYmd);
DataObject first = dataObjectList0.get(0);
sndng.setTtlNm(first.string("TASK_SE_NM")+" "+first.string("VLTN_ARTCL")+" "+"사전통지서");
sndng.setResndYn("N");
String insertSndngResult = sndngBean.createAdvntceSndngList(sndbQuery, sndng);
if(insertSndngResult.contains("[F]")) {
throw new RuntimeException(insertSndngResult);
}
//발송 등록 후 출력대상조회
List dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
String taskSeCd = "";
for(int i=0; i < dataObjectList.size(); i++) {
DataObject sndngDtl = integrationSearchMapper.selectLatestSndngDtlInfo(dataObjectList.get(i).string("CRDN_ID"));
dataObjectList.get(i).set("SNDNG_DTL_ID",sndngDtl.string("SNDNG_DTL_ID"));
dataObjectList.get(i).set("SNDNG_YMD",sndngDtl.string("SNDNG_YMD"));
dataObjectList.get(i).set("OPNN_RANGE",
dataObjectList.get(i).string("SNDNG_YMD")+"~"+dataObjectList.get(i).string("DUDT_YMD"));
dataObjectList.get(i).set("RG_NO",sndngDtl.string("RG_NO"));
}
for(int i=0; i < dataObjectList.size(); i++) {
DataObject dataObject = dataObjectList.get(i);
if(taskSeCd.equals("")) {
taskSeCd = dataObject.string("TASK_SE_CD");
}
FileQuery fileQuery = new FileQuery();
fileQuery.setInfoType(Crdn.INF_TYPE);
fileQuery.setInfoKeys(dataObject.string("CRDN_ID"));
List fileInfoList = fileBean.getFileList(fileQuery);
if(fileInfoList != null) {
int crdnPhotoCnt = fileInfoList.size();
for(int j=0; j < fileInfoList.size(); j++) {
DataObject fileInfo = fileInfoList.get(j);
dataObject.set("CRDN_PHOTO"+(j+1), fileInfo.string("FILE_PATH"));
dataObject.set("CRDN_PHOTO"+(j+1)+"KEY", fileInfo.string("FILE_ID"));
List mosSet = mediaBean.getMosaicList(fileInfo.string("FILE_ID"));
if(mosSet != null) {
for(int k=0; k < mosSet.size(); k++) {
dataObject.set("MOS"+fileInfo.string("FILE_ID"), mosSet);
}
}
}
dataObject.set("CRDN_PHOTO_CNT", crdnPhotoCnt);
} else {
dataObject.set("CRDN_PHOTO_CNT", 0);
}
}
ManagedUser currentUser = (ManagedUser) currentUser().getUser();
String sggCd = currentUser.getOrgID();
OutsourcingStngQuery stngQuery = new OutsourcingStngQuery();
stngQuery.setSggCd(sggCd);
stngQuery.setTaskSeCd(taskSeCd);
stngQuery.setSndngSeCd("02");
List printStngItems = outsourcingStngBean.getArtclStngList(stngQuery);
OutsourcingFileMaker osMaker = new OutsourcingFileMaker("사전통지", printOption, printStngItems, dataObjectList);
Map result = osMaker.makeFile();
mav.addAllObjects(result);
return mav;
}
/**고지서 출력 화면을 연다.
*
* @return /fims/sprt/sprt01150
*/
@RequestMapping(name="고지서 출력 화면", value=METHOD_URL.printNhtMain)
public ModelAndView printNhtMain(String... crdnIds) {
ModelAndView mav = new ModelAndView("fims/sprt/sprt01150-info");
mav.addObject("pageName", "sprt01150");
mav.addObject("crdnIds", toJson(crdnIds));
return mav;
}
/** 고지서를 PDF 파일로 작성한다.
* @return 고지서 PDF파일
*/
@RequestMapping(name="고지서 pdf 파일 생성", value=METHOD_URL.makeNhtPdf)
public ModelAndView makeNhtPdf(String[] crdnIds, Sndng sndng, FimsPrintOption printOption) {
UserInfo userInfo = currentUser();
factionBean.initUserInfo(userInfo);
sndng.setSggCd((String)userInfo.getInfo().get("sggCd"));
ModelAndView mav = new ModelAndView("downloadView");
SprtQuery sprtQuery = new SprtQuery();
sprtQuery.setCrdnIds(crdnIds);
List dataObjectList = new ArrayList();
if(crdnIds.length == 1 && crdnIds[0].equals("sample")) {
DataObject sample = new Nht().createSampleData();
dataObjectList.add(sample);
} else {
//발송 등록
List dataObjectList0 = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
SndbQuery sndbQuery = new SndbQuery();
sndbQuery.setCrdnIDs(crdnIds);
sndng.setSndngSeCd("03");
sndng.setTnocs(crdnIds.length);
sndng.setGramt(CmmnUtil.sumByKey(dataObjectList0, "FFNLG_AMT"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String today = sdf.format(new Date());
sndng.setSndngYmd(today);
sndbQuery.setSggCd(sndng.getSggCd());
sndbQuery.setTaskSeCd(sndng.getTaskSeCd());
DataObject advntceYmdInfo = taskBean.getAdvntceYmdInfo(sndbQuery);
String sndngEndYmd = CmmnUtil.addDay(today, advntceYmdInfo.number("ADVNTCE_DAY_CNT").intValue());
sndng.setSndngEndYmd(sndngEndYmd);
DataObject first = dataObjectList0.get(0);
sndng.setTtlNm(first.string("TASK_SE_NM")+" "+first.string("VLTN_ARTCL")+" "+"고지서");
sndng.setResndYn("N");
String insertSndngResult = sndngBean.createAdvntceSndngList(sndbQuery, sndng);
if(insertSndngResult.contains("[F]")) {
throw new RuntimeException(insertSndngResult);
}
//발송 등록 후 출력대상조회
dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
for(int i=0; i < dataObjectList.size(); i++) {
DataObject dataObject = dataObjectList.get(i);
String crdnId = dataObject.string("CRDN_ID");
FileQuery fileQuery = new FileQuery();
fileQuery.setInfoType(Crdn.INF_TYPE);
fileQuery.setInfoKeys(crdnId);
List fileInfoList = fileBean.getFileList(fileQuery);
if(fileInfoList != null && fileInfoList.size() > 0) {
for(int j=0; j mosSet = mediaBean.getMosaicList(fileInfoList.get(j).string("FILE_ID"));
if(mosSet != null && !mosSet.isEmpty()) {
dataObject.set("MOS"+fileInfoList.get(j).string("FILE_ID"), mosSet);
}
}
}
}
}
Print print = new Print();
print.setPrintRequestUserInfo(userInfo);
//출력물 기본 설정
OtptStngQuery otptStngQuery = new OtptStngQuery();
String paperSeCd = printOption.getPaperSeCd();
String taskSeCd = printOption.getTaskSeCd();
otptStngQuery.setSggCd((String)userInfo.getInfo().get("sggCd"));
otptStngQuery.setTaskSeCd(taskSeCd);
otptStngQuery.setSndngSeCd("03");
otptStngQuery.setPaperSeCd(paperSeCd);
DataObject otptBscStng = otptStngMapper.selectOtptBscStng(otptStngQuery);
if(otptBscStng == null) {
otptBscStng = new DataObject();
}
//출력 요소별 설정
List otptArtclStngList = otptStngMapper.selectOtptArtclStngList(otptStngQuery);
DataObject sggStngInfo = stngBean.getStng("sgg");
DataObject deptStngInfo = stngBean.getStng("dept");
//
Map globalVariable = printOption.getGlobalVariable();
if(globalVariable == null) {
globalVariable = new HashMap();
}
globalVariable.put("offcsFilePath", sggStngInfo.string("OFFCS_FILE_PATH"));
globalVariable.put("logoFilePath", sggStngInfo.string("LOGO_FILE_PATH"));
globalVariable.put("instAddr", sggStngInfo.string("INST_ADDR"));
globalVariable.put("instDaddr", sggStngInfo.string("INST_DADDR"));
globalVariable.put("instZip", sggStngInfo.string("INST_ZIP"));
globalVariable.put("deptTelno", deptStngInfo.string("DEPT_TELNO"));
globalVariable.put("deptFxno", deptStngInfo.string("DEPT_FXNO"));
if(!otptBscStng.string("BCRN_IMG_PATH").equals("")) {
globalVariable.put("bcrnImgPath", otptBscStng.string("BCRN_IMG_PATH"));
}
printOption.setGlobalVariable(globalVariable);
Nht pdfFormat = new Nht(print,printOption,otptBscStng,otptArtclStngList,paperSeCd,dataObjectList);
Map result = pdfFormat.makeFile();
mav.addAllObjects(result);
return mav;
}
/** 고지 정보로 txt파일,이미지파일을 생성하고 압축파일로 반환한다.
* @return 고지서 압축파일
*/
@RequestMapping(name="고지서 외주 파일 생성", value=METHOD_URL.makeNhtOutsourcing)
public ModelAndView makeNhtOutsourcing(String[] crdnIds, Sndng sndng, FimsPrintOption printOption) {
UserInfo userInfo = currentUser();
factionBean.initUserInfo(userInfo);
sndng.setSggCd((String)userInfo.getInfo().get("sggCd"));
ModelAndView mav = new ModelAndView("downloadView");
SprtQuery sprtQuery = new SprtQuery();
sprtQuery.setCrdnIds(crdnIds);
//발송 등록
List dataObjectList0 = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
SndbQuery sndbQuery = new SndbQuery();
sndbQuery.setCrdnIDs(crdnIds);
sndng.setSndngSeCd("03");
sndng.setTnocs(crdnIds.length);
sndng.setGramt(CmmnUtil.sumByKey(dataObjectList0, "FFNLG_AMT"));
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String today = sdf.format(new Date());
sndng.setSndngYmd(today);
sndbQuery.setSggCd(sndng.getSggCd());
sndbQuery.setTaskSeCd(sndng.getTaskSeCd());
DataObject advntceYmdInfo = taskBean.getAdvntceYmdInfo(sndbQuery);
String sndngEndYmd = CmmnUtil.addDay(today, advntceYmdInfo.number("ADVNTCE_DAY_CNT").intValue());
sndng.setSndngEndYmd(sndngEndYmd);
DataObject first = dataObjectList0.get(0);
sndng.setTtlNm(first.string("TASK_SE_NM")+" "+first.string("VLTN_ARTCL")+" "+"고지서");
sndng.setResndYn("N");
String insertSndngResult = sndngBean.createAdvntceSndngList(sndbQuery, sndng);
if(insertSndngResult.contains("[F]")) {
throw new RuntimeException(insertSndngResult);
}
//발송 등록 후 출력대상조회
List dataObjectList = integrationSearchMapper.selectIntegrationDataList(sprtQuery);
String taskSeCd = "";
for(int i=0; i < dataObjectList.size(); i++) {
DataObject sndngDtl = integrationSearchMapper.selectLatestSndngDtlInfo(dataObjectList.get(i).string("CRDN_ID"));
dataObjectList.get(i).set("SNDNG_DTL_ID",sndngDtl.string("SNDNG_DTL_ID"));
dataObjectList.get(i).set("SNDNG_YMD",sndngDtl.string("SNDNG_YMD"));
dataObjectList.get(i).set("OPNN_RANGE",
dataObjectList.get(i).string("SNDNG_YMD")+"~"+dataObjectList.get(i).string("DUDT_YMD"));
dataObjectList.get(i).set("RG_NO",sndngDtl.string("RG_NO"));
}
for(int i=0; i < dataObjectList.size(); i++) {
DataObject dataObject = dataObjectList.get(i);
if(taskSeCd.equals("")) {
taskSeCd = dataObject.string("TASK_SE_CD");
}
FileQuery fileQuery = new FileQuery();
fileQuery.setInfoType(Crdn.INF_TYPE);
fileQuery.setInfoKeys(dataObject.string("CRDN_ID"));
List fileInfoList = fileBean.getFileList(fileQuery);
if(fileInfoList != null) {
int crdnPhotoCnt = fileInfoList.size();
for(int j=0; j < fileInfoList.size(); j++) {
DataObject fileInfo = fileInfoList.get(j);
dataObject.set("CRDN_PHOTO"+(j+1), fileInfo.string("FILE_PATH"));
dataObject.set("CRDN_PHOTO"+(j+1)+"KEY", fileInfo.string("FILE_ID"));
List mosSet = mediaBean.getMosaicList(fileInfo.string("FILE_ID"));
if(mosSet != null) {
for(int k=0; k < mosSet.size(); k++) {
dataObject.set("MOS"+fileInfo.string("FILE_ID"), mosSet);
}
}
}
dataObject.set("CRDN_PHOTO_CNT", crdnPhotoCnt);
} else {
dataObject.set("CRDN_PHOTO_CNT", 0);
}
}
ManagedUser currentUser = (ManagedUser) currentUser().getUser();
String sggCd = currentUser.getOrgID();
OutsourcingStngQuery stngQuery = new OutsourcingStngQuery();
stngQuery.setSggCd(sggCd);
stngQuery.setTaskSeCd(taskSeCd);
stngQuery.setSndngSeCd("03");
List printStngItems = outsourcingStngBean.getArtclStngList(stngQuery);
OutsourcingFileMaker osMaker = new OutsourcingFileMaker("고지서", printOption, printStngItems, dataObjectList);
Map result = osMaker.makeFile();
mav.addAllObjects(result);
return mav;
}
}