diff --git a/src/main/java/kr/xit/fims/biz/ec/service/EcNatlNewspaperService.java b/src/main/java/kr/xit/fims/biz/ec/service/EcNatlNewspaperService.java new file mode 100644 index 00000000..f3d33f6b --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ec/service/EcNatlNewspaperService.java @@ -0,0 +1,39 @@ +package kr.xit.fims.biz.ec.service; + +import java.util.Arrays; +import java.util.List; + +import org.springframework.stereotype.Service; + +import kr.xit.framework.biz.cmm.model.NatlNewspaperRcvXmlDto; +import kr.xit.framework.support.util.xml.XmlParseUtils; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +public class EcNatlNewspaperService { + private NatlNewspaperRcvXmlDto natlNewspaperXmlDto; + + public void saveEsbRvc(final List fullFileList) { + List list = Arrays.asList( + "D:/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959023e60d9$EPOUGA$1140100_2022091609485096255243399.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959269e166c$EPOUGA$1140100_2022091609490868474847710.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609590430a45c$EPOUGA$1140100_2022091609483801480139449.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609590685e4d0$EPOUGA$1140100_2022091609483205285052976.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609591011a94b$EPOUGA$1140100_2022091609484378849086728.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/20220916095908123eab$EPOUGA$1140100_2022091609484239715980892.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959384350e0$EPOUGA$1140100_2022091609485968983152594.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/20220916095854881357$EPOUGA$1140100_2022091609485673727045043.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609585009058a$EPOUGA$1140100_2022091609484095150560203.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609585264580e$EPOUGA$1140100_2022091609485381568241998.xml" + ); + NatlNewspaperRcvXmlDto dto = XmlParseUtils.readXmlToObject(NatlNewspaperRcvXmlDto.class, list.get(0)); + + } + + + + // public static void main(String[] args) { + // getData(NatlNewspaperRcvXmlDto.class); + // } +} diff --git a/src/main/java/kr/xit/fims/biz/ec/web/EcNatlNewspaperMgtController.java b/src/main/java/kr/xit/fims/biz/ec/web/EcNatlNewspaperMgtController.java new file mode 100644 index 00000000..d50fdbfb --- /dev/null +++ b/src/main/java/kr/xit/fims/biz/ec/web/EcNatlNewspaperMgtController.java @@ -0,0 +1,81 @@ +package kr.xit.fims.biz.ec.web; + +import java.util.Arrays; +import java.util.List; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.ModelAndView; + +import kr.xit.fims.biz.cmm.FimsConst; +import kr.xit.framework.biz.cmm.model.NatlNewspaperRcvXmlDto; +import kr.xit.framework.core.constants.FrameworkConstants; +import kr.xit.framework.support.util.AjaxMessageMapRenderer; +import kr.xit.framework.support.util.constants.MessageKey; +import kr.xit.framework.support.util.xml.XmlParseUtils; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Controller +@RequestMapping(value = "/fims/biz/ec") +public class EcNatlNewspaperMgtController { + private NatlNewspaperRcvXmlDto natlNewspaperXmlDto; + + + @RequestMapping(value = "/ecNatlNewspaperMgtForm") + public void ecNatlNewspaperMgt(){ + } + + @RequestMapping(value = "/ecNatlNewspaperFileSelPopup") + public ModelAndView ecNatlNewspaperFileSelPopup(){ + return new ModelAndView(FimsConst.FIMS_JSP_BASE_PATH +"ec/ecNatlNewspaperFileSelPopup.popup"); + } + + @RequestMapping(value = "/findDirFiles", consumes = {"multipart/form-data"}) + public ModelAndView findDirFiles(@RequestParam(required=false) final MultipartFile mf){ + return new ModelAndView(FimsConst.FIMS_JSP_BASE_PATH +"ec/ecNatlNewspaperFileSelPopup.popup"); + } + + @PostMapping(value = "/saveNatlNewspaer", consumes = {"multipart/form-data"}) + //public String uploadZipCodeByExcel(MultipartHttpServletRequest request) { + public ModelAndView saveNatlNewspaer(@RequestParam(required=false) final MultipartFile mf) { + ModelAndView mav = new ModelAndView(FrameworkConstants.JSON_VIEW); + + + + + + AjaxMessageMapRenderer.success(mav, MessageKey.CMM_SUCCESS); + return mav; + + } + + @RequestMapping(value = "/saveNatlNewspaper") + public ModelAndView saveEsbRvc() { + ModelAndView mav = new ModelAndView(); + List list = Arrays.asList( + "D:/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959023e60d9$EPOUGA$1140100_2022091609485096255243399.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959269e166c$EPOUGA$1140100_2022091609490868474847710.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609590430a45c$EPOUGA$1140100_2022091609483801480139449.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609590685e4d0$EPOUGA$1140100_2022091609483205285052976.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609591011a94b$EPOUGA$1140100_2022091609484378849086728.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/20220916095908123eab$EPOUGA$1140100_2022091609484239715980892.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959384350e0$EPOUGA$1140100_2022091609485968983152594.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/20220916095854881357$EPOUGA$1140100_2022091609485673727045043.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609585009058a$EPOUGA$1140100_2022091609484095150560203.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609585264580e$EPOUGA$1140100_2022091609485381568241998.xml" + ); + NatlNewspaperRcvXmlDto dto = XmlParseUtils.readXmlToObject(NatlNewspaperRcvXmlDto.class, list.get(0)); + log.debug(dto.toString()); + return mav; + } + + + + // public static void main(String[] args) { + // getData(NatlNewspaperRcvXmlDto.class); + // } +} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaper.java b/src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaper.java deleted file mode 100644 index 64406fa4..00000000 --- a/src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaper.java +++ /dev/null @@ -1,272 +0,0 @@ -package kr.xit.framework.biz.cmm.model; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.StringReader; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.Arrays; -import java.util.List; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.json.JSONObject; -import org.json.XML; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.traversal.DocumentTraversal; -import org.w3c.dom.traversal.NodeFilter; -import org.w3c.dom.traversal.NodeIterator; -import org.xml.sax.InputSource; - -import com.sun.xml.internal.ws.developer.JAXBContextFactory; - -import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; - -public class NatlNewspaper { - private NatlNewspaperXmlDto natlNewspaperXmlDto; - - - - - - public static void main(String[] args) { - // String fileFullPath = "file:///Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959023e60d9$EPOUGA$1140100_2022091609485096255243399.xml"; - // try { - // Document doc = XMLFilePath2Doc(fileFullPath); - // getNodeList(doc, "dmndinfo"); - // //getNodeList(doc, "apndfilinfo"); - // //getNodeList(doc, "apndfilcont1"); - // - // //byte[] decode = Base64.decode(getNodeList(doc, "apndfilcont1")); - // //apndfilinfo - // } catch (Exception e) { - // e.printStackTrace(); - // } - - String fpath = "/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959023e60d9$EPOUGA$1140100_2022091609485096255243399.xml"; - // String jsonStr = null; - // try(BufferedReader reader = new BufferedReader(new InputStreamReader(Files.newInputStream(Paths.get(fpath)), - // StandardCharsets.UTF_8) , 1024*1024*2)) { - // //JSONObject json = XML.toJSONObject(reader); - // jsonStr = XML.toString(reader); - // System.out.println(jsonStr); - // }catch(IOException fe){ - // - // } - // - // JAXBContext context = null; - // try { - // context = JAXBContext.newInstance(NatlNewspaperXmlDto.class); - // Unmarshaller unmarshaller = context.createUnmarshaller(); - // NatlNewspaperXmlDto unmarshal = (NatlNewspaperXmlDto)unmarshaller.unmarshal(new StringReader(jsonStr)); - // System.out.println(unmarshal); - // } catch (JAXBException e) { - // throw new RuntimeException(e); - // } - - - try { - Person person = new Person("jaxb", "jaxb@hello.com"); - // JAXBContext 생성 & marshaller 생성 - JAXBContext context = JAXBContext.newInstance(Person.class); - Marshaller marshaller = context.createMarshaller(); - // 보기 좋게 출력해주는 옵션 - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); - // 표준 출력으로 결과를 보여준다. - marshaller.marshal(person, System.out); - - //JAXBContext context = JAXBContextFactory.createContext(new Class[]{Person.class}, someProperties); - - List list = Arrays.asList( - "/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959023e60d9$EPOUGA$1140100_2022091609485096255243399.xml" - ,"/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959269e166c$EPOUGA$1140100_2022091609490868474847710.xml" - ,"/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609590430a45c$EPOUGA$1140100_2022091609483801480139449.xml" - ,"/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609590685e4d0$EPOUGA$1140100_2022091609483205285052976.xml" - ,"/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609591011a94b$EPOUGA$1140100_2022091609484378849086728.xml" - ,"/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/20220916095908123eab$EPOUGA$1140100_2022091609484239715980892.xml" - ,"/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959384350e0$EPOUGA$1140100_2022091609485968983152594.xml" - ,"/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/20220916095854881357$EPOUGA$1140100_2022091609485673727045043.xml" - ,"/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609585009058a$EPOUGA$1140100_2022091609484095150560203.xml" - ,"/Users/minuk/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609585264580e$EPOUGA$1140100_2022091609485381568241998.xml" - ); - - list.forEach((path) -> { - try{ - // JAXBContext 생성 & marshaller 생성 - FileInputStream fileInputStream = new FileInputStream(path); - JAXBContext jaxbContext = JAXBContext.newInstance(NatlNewspaperXmlDto.class); - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); - unmarshaller.setEventHandler(new CustomEventHandler()); - - // When - NatlNewspaperXmlDto xmlListTag = (NatlNewspaperXmlDto)unmarshaller.unmarshal(fileInputStream); - System.out.println(xmlListTag.toString()); - // 표준 출력으로 결과를 보여준다. - //unmarshaller.unmarshal(xmlListTag); - - - //AppendFileInfo fileInfo = (AppendFileInfo)unmarshaller.unmarshal(fileInputStream); - //System.out.println(fileInfo.toString()); - - fileInputStream.close(); - }catch(Exception e){ - - } - }); - - - - }catch(Exception e){ - - } - // try { - // Document doc = XMLFilePath2Doc(fileFullPath); - // getTraversalNodeList(doc); - // } catch (Exception e) { - // e.printStackTrace(); - // } - } - - - - - - /** - * XML String을 Document 로 반환 - * @param XMLString - * @return Document - */ - public static Document XMLString2Doc(String XMLString) throws Exception { - - InputSource is = new InputSource(new StringReader(XMLString)); - is.setEncoding(StandardCharsets.UTF_8.toString()); - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - - return dBuilder.parse(is); - } - - /** - * XML 파일 Document 로 반환 - * @param fullFilePath - * @return - * @throws Exception - */ - public static Document XMLFilePath2Doc(String fullFilePath) throws Exception { - - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - - return dBuilder.parse(fullFilePath); - } - - /** - * Doc 내에 노드 list 가져오기 - * @param doc - * @param getNodeList - */ - public static void getNodeList(Document doc, String getNodeList) { - doc.getDocumentElement().normalize(); - - String nm = doc.getDocumentElement().getNodeName(); - System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); - NodeList nList = doc.getElementsByTagName(getNodeList); - - travNode(nList); - } - //노드 순회 메서드 - public static void travNode (NodeList nodes) { - - for (int i = 0; i < nodes.getLength(); i++) { - Node n = nodes.item(i); - - if (n.getNodeType() == Node.ELEMENT_NODE) { - NodeList childNodes = n.getChildNodes(); - int cnt = childNodes.getLength(); - - if (cnt == 1) { - System.out.printf("%s : %s%n", n.getNodeName(), n.getTextContent()); - } else { - System.out.printf("--------[ " + n.getNodeName() + " ]--------%n"); - } - - if (cnt > 1) { - travNode(childNodes); - } - } - } - } - - /** - * 모든 노드 순회 가져오기 - * @param doc - */ - public static void getTraversalNodeList (Document doc) { - //Doc 순회 - DocumentTraversal trav = (DocumentTraversal) doc; - DocFilter docFilter = new DocFilter("params");//조건에 따른 필터 처리 - - NodeIterator it = trav.createNodeIterator(doc.getDocumentElement(), - NodeFilter.SHOW_ELEMENT, docFilter, true); - - for (Node n = it.nextNode(); n != null; n = it.nextNode()) { - int cnt = n.getChildNodes().getLength(); - - if (cnt == 1) { - System.out.printf("%s : %s%n", n.getNodeName(), n.getTextContent()); - } else { - System.out.printf("--------[ " + n.getNodeName() + " ]--------%n"); - } - } - } - //DocumentTraversal 필터 - static class DocFilter implements NodeFilter { - - String deptId = ""; - - public DocFilter (String deptId) { - this.deptId = deptId; - } - - @Override - public short acceptNode(Node thisNode) { - - if (thisNode.getNodeType() == Node.ELEMENT_NODE) { - Element e = (Element) thisNode; - String nodeName = e.getNodeName(); - - if (! "params".equals(this.deptId)) { - return NodeFilter.FILTER_REJECT; - } - } - - return NodeFilter.FILTER_ACCEPT;// NodeFilter.FILTER_REJECT; - } - } - - @NoArgsConstructor - @AllArgsConstructor - @XmlRootElement - private static class Person { - @XmlElement - private String name; - @XmlElement - private String email; - - // 생성자, getter, setter 생략 - } -} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaperRcvXmlDto.java b/src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaperRcvXmlDto.java new file mode 100644 index 00000000..9f0b6de1 --- /dev/null +++ b/src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaperRcvXmlDto.java @@ -0,0 +1,428 @@ +package kr.xit.framework.biz.cmm.model; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlTransient; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + *
+ * 공공기관 interface
+ * XmlRootElement
+ *     JAXBContext에 등록
+ * XmlAccessorType
+ *     FIELD - 클래스의 모든 필드(static이 아니고 transient가 아닌)를 모두 XML에 바인딩
+ *     NONE - 어노테이션으로 지정하지 않는한 모든 필드는 XML에 바운딩되지 않는다.
+ *     PROPERTY - getter/setter를 가진 모든 필드들은 자동으로 XML에 바운드된다.
+ *     PUBLIC_MEMBER - 모든 public getter/setter들은 자동으로 XML에 바운드된다.
+ *
+ * 각 필드 comment중 이관 / 처리결과 / 반송에 따른 값이 차이가 있는경우
+ * 이관 / 처리결과 / 반송 순서로 각각 내용 표시
+ * 
+ */ +@Getter +@Setter +@ToString +@XmlRootElement(name = "dmndinfo") +@XmlAccessorType(XmlAccessType.FIELD) +public class NatlNewspaperRcvXmlDto { //extends ExtlEsbDataType { + + /** + * 인터페이스 키: 필수 + * PK : number(30) - YYYYMMDDHH24MISSFF+random(9) + */ + @XmlElement(name = "interface_seq_n") + private String interfaceSeqN; + + /** + * 시스템 구분: 필수 + * char(88) + * EC010008 과태료시스템 + */ + @XmlElement(name = "sys_gubun_c") + private String sysGubunC; + + /** + * 송신 기관 코드: 필수 + * varchar2(7) + * 1140100 / 신청기관코드 / 신청기관코드 + * ex)경기도 - 641000 + */ + @XmlElement(name = "anc_code_v") + private String ancCodeV; + + /** + * 민원 구분: 필수 + * char(3) + * 140:민원이송(기관코드-신문고) / 180: 답변 / 140: 반송(기관코드-연계기관) + */ + @XmlElement(name = "peti_gubun_c") + private String petiGubunC; + + /** + * 민원 기관 코드: 필수 + * varchar2(7) + * 최초 신청기관코드 그대로 사용(절대변경불가) + */ + @XmlElement(name = "peti_anc_code_v") + private String petiAncCodeV; + + /** + * 민원 신청 번호: 필수 + * varchar2(16) + * 국민신문고에서 생성(국민신문고의 민원 번호), 최초 이송이첩시는 null값 임. + * (신문고에서 생성된 데이터가 있을 경우는 넣어줌) + */ + @XmlElement(name = "peti_no_c") + private String petiNoC; + + /** + * 민원 접수 번호: 필수 + * varchar2(16) + * 국민신문고에서 생성(국민신문고의 접수 번호), 최초 이송이첩시는 null값 임. + * (신문고에서 생성된 데이터가 있을 경우는 넣어줌)" + */ + @XmlElement(name = "civil_no_c") + private String civilNoC; + + /** + * 민원 신청인 명: 이관 / 반송시 필수 + * varchar2(128) + */ + @XmlElement(name = "peter_name_v") + private String peterNameV; + + /** + * 민원 신청인 우편번호: 이관 / 반송시 필수 + * varchar2(7) + */ + @XmlElement(name = "zip_code_c") + private String zipCodeC; + + /** + * 민원 신청인 주소: 이관 / 반송시 필수 + * varchar2(400) + */ + @XmlElement(name = "address_v") + private String addressV; + + /** + * 민원 신청인 이메일 + * varchar2(64) + */ + @XmlElement(name = "email_v") + private String emailV; + + /** + * 민원 신청인 핸드폰 번호 + * varchar2(20) + */ + @XmlElement(name = "cel_no_v") + private String celNoV; + + /** + * 민원 신청인 전화 번호 + * varchar2(20) + */ + @XmlElement(name = "tel_no_v") + private String telNoV; + + /** + * 민원 신청 제목: 이관 / 반송시 필수 + * varchar2(500) + */ + @XmlElement(name = "peti_title_v") + private String petiTitleV; + + /** + * 민원 신청 내용: 이관 / 반송시 필수 + * clob + */ + @XmlElement(name = "peti_reason_l") + private String petiReasonL; + + /** + * 민원 공개 여부: 이관 / 반송시 필수 + * char(1) + * Y = 공개, N = 비공개 (default N) + * Y로 수신 시에도 내부적용 시에는 비공개로 적용 요함(개인정보보호지침) + * 송신 시는 모두 N으로 송신 + */ + @XmlElement(name = "open_yn_c") + private String openYnC; + + /** + * 민원 신청일: 이관 / 반송시 필수 + * date : YYYYMMDDHH24MISS + */ + @XmlElement(name = "peti_reg_d") + private String petiRegD; + + /** + * 민원 신청 내용 첨부 여부: 이관시 필수 + * char(1) + * Y = 첨부, N = 미첨부(default) + */ + @XmlElement(name = "peti_reason_attach_yn_c") + private String petiReasonAttachYnC; + + /** + * 민원 신청 첨부파일 크기: 이관시 필수 + * number(10) + */ + @XmlElement(name = "peti_file_size_n") + private String petiFileSizeN; + + //------------------------------------------------------------- + /** + * 민원 신청 첨부파일명1 + * varchar2(2000) + */ + @XmlElement(name = "peti_file_path1_v") + private String petiFilePath1V; + + /** + * 민원 신청 첨부파일명2 + * varchar2(2000) + */ + @XmlElement(name = "peti_file_path2_v") + private String petiFilePath2V; + + /** + * 민원 신청 첨부파일명3 + * varchar2(2000) + */ + @XmlElement(name = "peti_file_path3_v") + private String petiFilePath3V; + + /** + * 민원 신청 첨부파일명4 + * varchar2(2000) + */ + @XmlElement(name = "peti_file_path4_v") + private String petiFilePath4V; + + /** + * 민원 신청 첨부파일명5 + * varchar2(2000) + */ + @XmlElement(name = "peti_file_path5_v") + private String petiFilePath5V; + //----------------------------------------------------------------------------- + + /** + * 등록 일자: 필수 + * date + * 반영시에 sysdate(YYYYMMDDHH24MISS)로 생성 + */ + @XmlElement(name = "reg_d") + private String regD; + + /** + * 송신 여부: 필수 + * char(1) + * 1:송신 / 2:수신 / 1:송신 + */ + @XmlElement(name = "send_yn_c") + private String sendYnC; + + /** + * 송신 일자 + * date : YYYYMMDDHH24MISS + */ + @XmlElement(name = "send_d") + private String sendD; + + /** + * 적용 일자: 필수 + * date + * interface DB->XML로 적용 시 sysdate(YYYYMMDDHH24MISS)로 생성 + */ + @XmlElement(name = "apply_d") + private String applyD; + + /** + * 완료 구분: 필수 + * char(1) + * 적용완료:Y OR N (default:N , 각 기관의 실 민원 DB에 반영 후 Y로 변경) + */ + @XmlElement(name = "apply_gubun_c") + private String applyGubunC; + + //------------------------------------------------------------------------------------ + /** + * 처리 구분1: 필수 + * varchar2(400) + * 0 / / 0 + */ + @XmlElement(name = "pcd_gubun_v") + private String pcdGubunV; + + /** + * 처리 구분2: 필수 + * varchar2(400) + */ + @XmlElement(name = "pcd_gubun2_v") + private String pcdGubun2V; + + /** + * 처리 구분3: 처리 결과시 필수 + * varchar2(400) + */ + @XmlElement(name = "pcd_gubun3_v") + private String pcdGubun3V; + /** + * xml 인터페이스 아이디: 필수 + * varchar2(10) + */ + @XmlElement(name = "ifid") + private String ifid; + + /** + * 소스 기관 코드: 필수 + * varchar2(7) + * 해당 연계 기관 코드 + */ + @XmlElement(name = "srcorgcd") + private String srcorgcd; + + /** + * 타겟 기관 코드: 필수 + * varchar2(7) + * 연계 기관에서 insert시 무조건 1140100 값을 넣어 준다 + */ + @XmlElement(name = "tgtorgcd") + private String tgtorgcd; + + + + + + @XmlElement(name = "apndfilinfo") + private AppendFileInfo appendFileInfo; + //------------------------------------------------------------------------------------- + + + + @XmlElement(name = "peti_path_gubun_c") + private String petiPathGubunC; + + /** + * 처리 부서 코드: 결과 처리시 필수 + * varchar2(7) + */ + @XmlElement(name = "pcd_dept_v") + private String pcdDeptV; + + /** + * 민원 처리 부서명: 결과 처리시 필수 + * varchar2(50) + */ + @XmlElement(name = "pcd_dept_nm_v") + private String pcdDeptNmV; + + /** + * 민원 처리 담당자 명: 결과 처리시 필수 + * varchar2(50) + */ + @XmlElement(name = "duty_id_v") + private String dutyIdV; + + /** + * 담당자 이메일: 결과 처리시 필수 + * varchar2(64) + */ + @XmlElement(name = "pcd_email_v") + private String pcdEmailV; + + /** + * 담당자 전화 번호: 결과 처리시 필수 + * varchar2(20) + */ + @XmlElement(name = "pcd_tel_v") + private String pcdTelV; + + + + + //------------------------------------------------------------------------------------- + // 선택사항 + //------------------------------------------------------------------------------------- + /** + * 접수 일자 + * date + */ + @XmlElement(name = "anc_reg_d") + private String ancRegD; + + /** + * 한마디 더 + * varchar2(4000) + */ + @XmlElement(name = "more_again_v") + private String moreAgainV; + + //------------------------------------------------------------------------------ + /** + * 만족도 항목1 + * char(8) + */ + @XmlElement(name = "satisfy_c") + private String satisfyC; + + /** + * 만족도 항목2 + * char(8) + */ + @XmlElement(name = "satisfy2_c") + private String satisfy2C; + + /** + * 만족도 항목3 + * char(8) + */ + @XmlElement(name = "satisfy3_c") + private String satisfy3C; + //------------------------------------------------------------------------------ + + /** + * 만족도 입력일 + * date + */ + @XmlElement(name = "satisfy_reg_d") + private String satisfyRegD; + + /** + * 민원 실 처리 기관 코드: 처리 결과시 필수 + * varchar2(7) + * ex)경기도 6410000 + */ + @XmlElement(name = "pcd_anc_code_v") + private String pcdAncCodeV; + + /** + * 민원 처리 기간 + * number(5) + */ + @XmlElement(name = "peti_proc_dur_n") + private String petiProcDurN; + + /** + * 처리 예정일 + * date + */ + @XmlElement(name = "peti_end_d") + private String petiEndD; + + @XmlTransient + private String registDt; + @XmlTransient + private String register; +} + + diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaperXmlDto.java b/src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaperSendXmlDto.java similarity index 96% rename from src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaperXmlDto.java rename to src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaperSendXmlDto.java index 21977eb8..3d356876 100644 --- a/src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaperXmlDto.java +++ b/src/main/java/kr/xit/framework/biz/cmm/model/NatlNewspaperSendXmlDto.java @@ -5,7 +5,10 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @@ -26,10 +29,13 @@ import lombok.ToString; */ @Getter @Setter +@NoArgsConstructor +@AllArgsConstructor +@Builder @ToString @XmlRootElement(name = "dmndinfo") @XmlAccessorType(XmlAccessType.FIELD) -public class NatlNewspaperXmlDto { +public class NatlNewspaperSendXmlDto { /** * 인터페이스 키: 필수 @@ -89,146 +95,186 @@ public class NatlNewspaperXmlDto { @XmlElement(name = "civil_no_c") private String civilNoC; + //---------------------------------------------------------------------------------------------------- + // 결과(응답) 처리 + //---------------------------------------------------------------------------------------------------- /** - * 민원 신청인 명: 이관 / 반송시 필수 - * varchar2(128) + * 민원 요지: 결과 처리시 필수 + * varchar2(512) + * 민원요지를 입력하면 민원제목대신 민원요지를 표출 */ - @XmlElement(name = "peter_name_v") - private String peterNameV; + @XmlElement(name = "civil_gist_v") + private String civilGistV; /** - * 민원 신청인 우편번호: 이관 / 반송시 필수 + * 민원 처리 요약: 결과 처리시 필수 + * clob + * 처리를 요약하여 표시 + */ + @XmlElement(name = "civil_abstract_l") + private String civilAbstractL; + + /** + * 처리 부서 코드: 결과 처리시 필수 * varchar2(7) */ - @XmlElement(name = "zip_code_c") - private String zipCodeC; + @XmlElement(name = "pcd_dept_v") + private String pcdDeptV; /** - * 민원 신청인 주소: 이관 / 반송시 필수 - * varchar2(400) + * 민원 처리 부서명: 결과 처리시 필수 + * varchar2(50) */ - @XmlElement(name = "address_v") - private String addressV; + @XmlElement(name = "pcd_dept_nm_v") + private String pcdDeptNmV; /** - * 민원 신청인 이메일 + * 민원 처리 담당자 명: 결과 처리시 필수 + * varchar2(50) + */ + @XmlElement(name = "duty_id_v") + private String dutyIdV; + + /** + * 담당자 이메일: 결과 처리시 필수 * varchar2(64) */ - @XmlElement(name = "email_v") - private String emailV; + @XmlElement(name = "pcd_email_v") + private String pcdEmailV; /** - * 민원 신청인 핸드폰 번호 + * 담당자 전화 번호: 결과 처리시 필수 * varchar2(20) */ - @XmlElement(name = "cel_no_v") - private String celNoV; + @XmlElement(name = "pcd_tel_v") + private String pcdTelV; /** - * 민원 신청인 전화 번호 - * varchar2(20) + * 민원 처리 결과: 결과 처리시 필수 + * clob */ - @XmlElement(name = "tel_no_v") - private String telNoV; + @XmlElement(name = "pcd_rst_cont_l") + private String pcdRstContL; /** - * 민원 신청 제목: 이관 / 반송시 필수 - * varchar2(500) + * 민원 처리 완료 일자: 결과 처리시 필수 + * varchar2(14) : YYYYMMDDHH24MISS */ - @XmlElement(name = "peti_title_v") - private String petiTitleV; + @XmlElement(name = "do_reg_d") + private String doRegD; /** - * 민원 신청 내용: 이관 / 반송시 필수 - * clob + * 민원 처리 결과 첨부 여부: 결과 처리시 필수 + * char(1) + * Y = 첨부, N = 미첨부(default) */ - @XmlElement(name = "peti_reason_l") - private String petiReasonL; + @XmlElement(name = "pcd_rst_cont_attach_yn_c") + private String pcdRstContAttachYnC; /** - * 민원 공개 여부: 이관 / 반송시 필수 + * 민원 실 처리 기관 코드: 처리 결과시 필수 + * varchar2(7) + * ex)경기도 6410000 + */ + @XmlElement(name = "pcd_anc_code_v") + private String pcdAncCodeV; + + /** + * 등록 일자: 필수 + * date + * 반영시에 sysdate(YYYYMMDDHH24MISS)로 생성 + */ + @XmlElement(name = "reg_d") + private String regD; + + /** + * 송신 여부: 필수 * char(1) - * Y = 공개, N = 비공개 (default N) - * Y로 수신 시에도 내부적용 시에는 비공개로 적용 요함(개인정보보호지침) - * 송신 시는 모두 N으로 송신 + * 1:송신 / 2:수신 / 1:송신 */ - @XmlElement(name = "open_yn_c") - private String openYnC; + @XmlElement(name = "send_yn_c") + private String sendYnC; /** - * 민원 신청일: 이관 / 반송시 필수 + * 송신 일자 * date : YYYYMMDDHH24MISS */ - @XmlElement(name = "peti_reg_d") - private String petiRegD; + @XmlElement(name = "send_d") + private String sendD; /** - * 민원 신청 내용 첨부 여부: 이관시 필수 + * 적용 일자: 필수 + * date + * interface DB->XML로 적용 시 sysdate(YYYYMMDDHH24MISS)로 생성 + */ + @XmlElement(name = "apply_d") + private String applyD; + + /** + * 완료 구분: 필수 * char(1) - * Y = 첨부, N = 미첨부(default) + * 적용완료:Y OR N (default:N , 각 기관의 실 민원 DB에 반영 후 Y로 변경) */ - @XmlElement(name = "peti_reason_attach_yn_c") - private String petiReasonAttachYnC; + @XmlElement(name = "apply_gubun_c") + private String applyGubunC; + //------------------------------------------------------------------------------------ /** - * 민원 신청 첨부파일 크기: 이관시 필수 - * number(10) + * 처리 구분1: 필수 + * varchar2(400) + * 0 / / 0 */ - @XmlElement(name = "peti_file_size_n") - private String petiFileSizeN; + @XmlElement(name = "pcd_gubun_v") + private String pcdGubunV; - //------------------------------------------------------------- /** - * 민원 신청 첨부파일명1 - * varchar2(2000) + * 처리 구분2: 필수 + * varchar2(400) */ - @XmlElement(name = "peti_file_path1_v") - private String petiFilePath1V; + @XmlElement(name = "pcd_gubun2_v") + private String pcdGubun2V; /** - * 민원 신청 첨부파일명2 - * varchar2(2000) + * 처리 구분3: 처리 결과시 필수 + * varchar2(400) */ - @XmlElement(name = "peti_file_path2_v") - private String petiFilePath2V; + @XmlElement(name = "pcd_gubun3_v") + private String pcdGubun3V; + //------------------------------------------------------------------------------------- /** - * 민원 신청 첨부파일명3 - * varchar2(2000) + * xml 인터페이스 아이디: 필수 + * varchar2(10) */ - @XmlElement(name = "peti_file_path3_v") - private String petiFilePath3V; + @XmlElement(name = "ifid") + private String ifid; /** - * 민원 신청 첨부파일명4 - * varchar2(2000) + * 소스 기관 코드: 필수 + * varchar2(7) + * 해당 연계 기관 코드 */ - @XmlElement(name = "peti_file_path4_v") - private String petiFilePath4V; + @XmlElement(name = "srcorgcd") + private String srcorgcd; /** - * 민원 신청 첨부파일명5 - * varchar2(2000) + * 타겟 기관 코드: 필수 + * varchar2(7) + * 연계 기관에서 insert시 무조건 1140100 값을 넣어 준다 */ - @XmlElement(name = "peti_file_path5_v") - private String petiFilePath5V; - //----------------------------------------------------------------------------- -/* - @Getter - @Setter - @XmlRootElement(name="petiFilePaths") - private static class PetiFilePaths{ - private List petiFilePath; + @XmlElement(name = "tgtorgcd") + private String tgtorgcd; + + + + + + + + + - @Getter - @Setter - @XmlRootElement(name="petiFilePath") - public static class PetiFilePath { - private String petiFilePath; - } - } - */ @@ -280,177 +326,168 @@ public class NatlNewspaperXmlDto { @XmlElement(name = "satisfy_reg_d") private String satisfyRegD; - /** - * 등록 일자: 필수 - * date - * 반영시에 sysdate(YYYYMMDDHH24MISS)로 생성 - */ - @XmlElement(name = "reg_d") - private String regD; - /** - * 송신 여부: 필수 - * char(1) - * 1:송신 / 2:수신 / 1:송신 - */ - @XmlElement(name = "send_yn_c") - private String sendYnC; - /** - * 송신 일자 - * date : YYYYMMDDHH24MISS - */ - @XmlElement(name = "send_d") - private String sendD; - /** - * 적용 일자: 필수 - * date - * interface DB->XML로 적용 시 sysdate(YYYYMMDDHH24MISS)로 생성 - */ - @XmlElement(name = "apply_d") - private String applyD; + + + + + + + + + + + + + + + + + + + + + /** - * 완료 구분: 필수 - * char(1) - * 적용완료:Y OR N (default:N , 각 기관의 실 민원 DB에 반영 후 Y로 변경) + * 민원 신청인 명: 이관 / 반송시 필수 + * varchar2(128) */ - @XmlElement(name = "apply_gubun_c") - private String applyGubunC; + @XmlElement(name = "peter_name_v") + private String peterNameV; - //------------------------------------------------------------------------------------ /** - * 처리 구분1: 필수 - * varchar2(400) - * 0 / / 0 + * 민원 신청인 우편번호: 이관 / 반송시 필수 + * varchar2(7) */ - @XmlElement(name = "pcd_gubun_v") - private String pcdGubunV; + @XmlElement(name = "zip_code_c") + private String zipCodeC; /** - * 처리 구분2: 필수 + * 민원 신청인 주소: 이관 / 반송시 필수 * varchar2(400) */ - @XmlElement(name = "pcd_gubun2_v") - private String pcdGubun2V; + @XmlElement(name = "address_v") + private String addressV; /** - * 처리 구분3: 처리 결과시 필수 - * varchar2(400) + * 민원 신청인 이메일 + * varchar2(64) */ - @XmlElement(name = "pcd_gubun3_v") - private String pcdGubun3V; - //------------------------------------------------------------------------------------- + @XmlElement(name = "email_v") + private String emailV; /** - * xml 인터페이스 아이디: 필수 - * varchar2(10) + * 민원 신청인 핸드폰 번호 + * varchar2(20) */ - @XmlElement(name = "ifid") - private String ifid; + @XmlElement(name = "cel_no_v") + private String celNoV; /** - * 소스 기관 코드: 필수 - * varchar2(7) - * 해당 연계 기관 코드 + * 민원 신청인 전화 번호 + * varchar2(20) */ - @XmlElement(name = "srcorgcd") - private String srcorgcd; + @XmlElement(name = "tel_no_v") + private String telNoV; /** - * 타겟 기관 코드: 필수 - * varchar2(7) - * 연계 기관에서 insert시 무조건 1140100 값을 넣어 준다 + * 민원 신청 제목: 이관 / 반송시 필수 + * varchar2(500) */ - @XmlElement(name = "tgtorgcd") - private String tgtorgcd; - - - @XmlElement(name = "peti_path_gubun_c") - private String petiPathGubunC; - - @XmlElement(name = "apndfilinfo") - private AppendFileInfo appendFileInfo; - - - + @XmlElement(name = "peti_title_v") + private String petiTitleV; - //---------------------------------------------------------------------------------------------------- - // 결과(응답) 처리 - //---------------------------------------------------------------------------------------------------- /** - * 민원 요지: 결과 처리시 필수 - * varchar2(512) - * 민원요지를 입력하면 민원제목대신 민원요지를 표출 + * 민원 신청 내용: 이관 / 반송시 필수 + * clob */ - @XmlElement(name = "civil_gist_v") - private String civilGistV; + @XmlElement(name = "peti_reason_l") + private String petiReasonL; /** - * 민원 처리 요약: 결과 처리시 필수 - * clob - * 처리를 요약하여 표시 + * 민원 공개 여부: 이관 / 반송시 필수 + * char(1) + * Y = 공개, N = 비공개 (default N) + * Y로 수신 시에도 내부적용 시에는 비공개로 적용 요함(개인정보보호지침) + * 송신 시는 모두 N으로 송신 */ - @XmlElement(name = "civil_abstract_l") - private String civilAbstractL; + @XmlElement(name = "open_yn_c") + private String openYnC; /** - * 처리 부서 코드: 결과 처리시 필수 - * varchar2(7) + * 민원 신청일: 이관 / 반송시 필수 + * date : YYYYMMDDHH24MISS */ - @XmlElement(name = "pcd_dept_v") - private String pcdDeptV; + @XmlElement(name = "peti_reg_d") + private String petiRegD; /** - * 민원 처리 부서명: 결과 처리시 필수 - * varchar2(50) + * 민원 신청 내용 첨부 여부: 이관시 필수 + * char(1) + * Y = 첨부, N = 미첨부(default) */ - @XmlElement(name = "pcd_dept_nm_v") - private String pcdDeptNmV; + @XmlElement(name = "peti_reason_attach_yn_c") + private String petiReasonAttachYnC; /** - * 민원 처리 담당자 명: 결과 처리시 필수 - * varchar2(50) + * 민원 신청 첨부파일 크기: 이관시 필수 + * number(10) */ - @XmlElement(name = "duty_id_v") - private String dutyIdV; + @XmlElement(name = "peti_file_size_n") + private String petiFileSizeN; + //------------------------------------------------------------- /** - * 담당자 이메일: 결과 처리시 필수 - * varchar2(64) + * 민원 신청 첨부파일명1 + * varchar2(2000) */ - @XmlElement(name = "pcd_email_v") - private String pcdEmailV; + @XmlElement(name = "peti_file_path1_v") + private String petiFilePath1V; /** - * 담당자 전화 번호: 결과 처리시 필수 - * varchar2(20) + * 민원 신청 첨부파일명2 + * varchar2(2000) */ - @XmlElement(name = "pcd_tel_v") - private String pcdTelV; + @XmlElement(name = "peti_file_path2_v") + private String petiFilePath2V; /** - * 민원 처리 결과: 결과 처리시 필수 - * clob + * 민원 신청 첨부파일명3 + * varchar2(2000) */ - @XmlElement(name = "pcd_rst_cont_l") - private String pcdRstContL; + @XmlElement(name = "peti_file_path3_v") + private String petiFilePath3V; /** - * 민원 처리 완료 일자: 결과 처리시 필수 - * varchar2(14) : YYYYMMDDHH24MISS + * 민원 신청 첨부파일명4 + * varchar2(2000) */ - @XmlElement(name = "do_reg_d") - private String doRegD; + @XmlElement(name = "peti_file_path4_v") + private String petiFilePath4V; /** - * 민원 처리 결과 첨부 여부: 결과 처리시 필수 - * char(1) - * Y = 첨부, N = 미첨부(default) + * 민원 신청 첨부파일명5 + * varchar2(2000) */ - @XmlElement(name = "pcd_rst_cont_attach_yn_c") - private String pcdRstContAttachYnC; + @XmlElement(name = "peti_file_path5_v") + private String petiFilePath5V; + //----------------------------------------------------------------------------- + + + @XmlElement(name = "peti_path_gubun_c") + private String petiPathGubunC; + + + + + + + + + /** * 민원 처리 첨부 파일 크기 @@ -496,14 +533,6 @@ public class NatlNewspaperXmlDto { private String pcdFilePath5V; //---------------------------------------------------------------------- - /** - * 민원 실 처리 기관 코드: 처리 결과시 필수 - * varchar2(7) - * ex)경기도 6410000 - */ - @XmlElement(name = "pcd_anc_code_v") - private String pcdAncCodeV; - /** * 민원 처리 기간 * number(5) diff --git a/src/main/java/kr/xit/framework/support/util/AjaxMessageMapRenderer.java b/src/main/java/kr/xit/framework/support/util/AjaxMessageMapRenderer.java index b72b9d9d..2625baca 100644 --- a/src/main/java/kr/xit/framework/support/util/AjaxMessageMapRenderer.java +++ b/src/main/java/kr/xit/framework/support/util/AjaxMessageMapRenderer.java @@ -191,7 +191,7 @@ public abstract class AjaxMessageMapRenderer { //if(EXCEPTION_LOG_TRACE) { throw BizRuntimeException.create( - MessageUtils.getMessageKey(resultCode), + resultCode, MessageUtils.getMessageArguments(resultArgs) ); // }else { diff --git a/src/main/java/kr/xit/framework/support/util/JsonUtil.java b/src/main/java/kr/xit/framework/support/util/JsonUtils.java similarity index 98% rename from src/main/java/kr/xit/framework/support/util/JsonUtil.java rename to src/main/java/kr/xit/framework/support/util/JsonUtils.java index 9fb2e018..c9d32b73 100644 --- a/src/main/java/kr/xit/framework/support/util/JsonUtil.java +++ b/src/main/java/kr/xit/framework/support/util/JsonUtils.java @@ -16,7 +16,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; /** * JSON Util Class */ -public class JsonUtil { +public class JsonUtils { /** * Object 를 json string으로 변환 @@ -93,7 +93,7 @@ public class JsonUtil { String rltStr; try { - rltStr = jsonEnterConvert((JsonUtil.toJson(obj))); + rltStr = jsonEnterConvert((JsonUtils.toJson(obj))); } catch(Exception e) { rltStr = ""; } diff --git a/src/main/java/kr/xit/framework/support/util/MessageUtils.java b/src/main/java/kr/xit/framework/support/util/MessageUtils.java index 21dc729b..76c55558 100644 --- a/src/main/java/kr/xit/framework/support/util/MessageUtils.java +++ b/src/main/java/kr/xit/framework/support/util/MessageUtils.java @@ -2,23 +2,12 @@ package kr.xit.framework.support.util; import org.springframework.util.StringUtils; -import kr.xit.framework.support.util.constants.MessageGroupKey; - /** * Message 관련 Utility 메소드를 제공한다. * @author julim */ public abstract class MessageUtils { - /** - * EndUser에게 노출되는 메시지 키를 구성한다. prefix로 message key group인 "user"를 추가한다. - * @param messageKey message key group을 제외한 message key. - * @return message key group이 추가된 message key. - */ - public static String getMessageKey(String messageKey) { - return MessageGroupKey.MESSAGE_CATEGORY_USER+"."+messageKey; - } - /** * ";" delimiter로 구성된 message arguments 문자열을 String 배열로 구성하여 반환한다. * @param argumentList ";" delimiter로 구성된 message arguments 문자열 diff --git a/src/main/java/kr/xit/framework/support/util/constants/MessageGroupKey.java b/src/main/java/kr/xit/framework/support/util/constants/MessageGroupKey.java deleted file mode 100644 index 7cef4209..00000000 --- a/src/main/java/kr/xit/framework/support/util/constants/MessageGroupKey.java +++ /dev/null @@ -1,18 +0,0 @@ -package kr.xit.framework.support.util.constants; - -/** - * @author jeonghoyeol - */ -public abstract class MessageGroupKey { - - - /** - * EndUser 에게 다국어 메시지를 노출하기 위해 사용되는 메시지 키 그룹이다. - * - * EndUser 에게 노출 되는 메시지 메시지 키 코드는 [메세지그룹키].[메시지키] 형태로 구성되는 데 이 때 - * [메시지그룹키] 값은 반드시 'user' 라는 prefix 값으로 시작해야 한다. - * 예) user.cmm.success.system - * - */ - public static final String MESSAGE_CATEGORY_USER = "user"; -} diff --git a/src/main/java/kr/xit/framework/biz/cmm/model/CustomEventHandler.java b/src/main/java/kr/xit/framework/support/util/xml/JAXCustomEventHandler.java similarity index 77% rename from src/main/java/kr/xit/framework/biz/cmm/model/CustomEventHandler.java rename to src/main/java/kr/xit/framework/support/util/xml/JAXCustomEventHandler.java index 1c20dec8..b4d02e11 100644 --- a/src/main/java/kr/xit/framework/biz/cmm/model/CustomEventHandler.java +++ b/src/main/java/kr/xit/framework/support/util/xml/JAXCustomEventHandler.java @@ -1,9 +1,11 @@ -package kr.xit.framework.biz.cmm.model; +package kr.xit.framework.support.util.xml; import javax.xml.bind.ValidationEvent; import javax.xml.bind.ValidationEventHandler; import javax.xml.bind.ValidationEventLocator; +import kr.xit.framework.support.exception.BizRuntimeException; +import kr.xit.framework.support.util.constants.MessageKey; import lombok.extern.slf4j.Slf4j; /** @@ -13,19 +15,19 @@ import lombok.extern.slf4j.Slf4j; * ValidationEvent.FATAL_ERROR(정수 값 2) */ @Slf4j -public class CustomEventHandler implements ValidationEventHandler { +public class JAXCustomEventHandler implements ValidationEventHandler { public boolean handleEvent(ValidationEvent event) { if (event.getSeverity() == ValidationEvent.FATAL_ERROR || event.getSeverity() == ValidationEvent.ERROR) { ValidationEventLocator locator = event.getLocator(); String message = event.getMessage(); - log.error("Severity: " + event.getSeverity()); log.error("Line Number: " + locator.getLineNumber()); log.error("Column Number: " + locator.getColumnNumber()); log.error("Event Message: " + message); //log.error("{}", event); log.error("{}", locator); + throw BizRuntimeException.create(MessageKey.CUSTOM_MSG, message); } // 이벤트 에러 발생시 중단 : true - 계속 진행 return false; diff --git a/src/main/java/kr/xit/framework/support/util/xml/XmlParseUtils.java b/src/main/java/kr/xit/framework/support/util/xml/XmlParseUtils.java new file mode 100644 index 00000000..3186dd71 --- /dev/null +++ b/src/main/java/kr/xit/framework/support/util/xml/XmlParseUtils.java @@ -0,0 +1,104 @@ +package kr.xit.framework.support.util.xml; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.List; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; + +import kr.xit.framework.biz.cmm.model.NatlNewspaperRcvXmlDto; +import kr.xit.framework.biz.cmm.model.NatlNewspaperSendXmlDto; +import kr.xit.framework.support.exception.BizRuntimeException; +import kr.xit.framework.support.util.constants.MessageKey; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class XmlParseUtils { + public static T readXmlToObject(final Class t, final String fullFilePath){ + + // JAXBContext 생성 & marshaller 생성 + try(FileInputStream fileInputStream = new FileInputStream(fullFilePath)) { + JAXBContext jaxbContext = JAXBContext.newInstance(t); + Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); + //JAXBContext context = JAXBContextFactory.createContext(new Class[]{clz}, someProperties); + unmarshaller.setEventHandler(new JAXCustomEventHandler()); + + Object o = unmarshaller.unmarshal(fileInputStream); + return t.cast(o); + }catch(IOException | JAXBException e){ + throw BizRuntimeException.create(MessageKey.CUSTOM_MSG, e.getMessage()); + } + } + + @SuppressWarnings("UnusedReturnValue") + public static String readObjectToXml(final T t, final Class clz){ + StringWriter sw = new StringWriter(); + + // xml 생성 + try{ + // JAXBContext 생성 & marshaller 생성 + JAXBContext context = JAXBContext.newInstance(clz); + Marshaller marshaller = context.createMarshaller(); + marshaller.setEventHandler(new JAXCustomEventHandler()); + // 옵션 ------------------------------------------------- + //standalone="yes" + //xmlStreamWriter.writeProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\""); + + // xmlHeader 제거 : standalone="yes"가 붙어서 ... + marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); + marshaller.setProperty(Marshaller.JAXB_ENCODING, StandardCharsets.UTF_8.name()); + marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); + + // xmlHeader write + sw.write("\n"); + // xml 파일 생성 + marshaller.marshal(t, sw); + }catch(JAXBException e){ + throw BizRuntimeException.create(MessageKey.CUSTOM_MSG, e.getMessage()); + } + return sw.toString(); + } + + + public static void main(String[] args) { + NatlNewspaperSendXmlDto sendDto = NatlNewspaperSendXmlDto.builder() + .interfaceSeqN("999999") + .pcdRstContL("1. 교통질서 확립에 힘써주신 점에 대해 감사드립니다.\n" + + "\n" + + "2. 귀하께서 안전신문고를 통해 신청하신 민원에 대한 검토 결과를 다음과 같이 알려드립니다.\n" + + "\n" + + "3. 귀하의 민원내용은 불법 주?정차 신고에 관한 것으로 판단됩니다.\n" + + "\n" + + "4. 귀하의 신고에 대해 검토한 결과는 다음과 같습니다.\n" + + " 가. 해당 차량은 ?도로교통법?제32조, 제33조, 제34조, 제35조에 의거한 불법 주?정차 차량으로 판단됩니다.\n" + + " 나. 따라서, 위반 차량에 대해 주?정차 위반 과태료 부과 처분이 이루어졌음을 알려드립니다.\n" + + "\n" + + "5. 안전을 위한 시민 정신에 감사드리며, 답변 내용에 대한 추가 설명이 필요한 경우 군포시청 차량관리과 주차단속팀 박효주 주무관(☏031-390-0291)에게 연락 주시면 친절히 안내해 드리도록 하겠습니다. 감사합니다.") + .addressV("ldlldl") + .applyGubunC("Y").build(); + String xmlStr = XmlParseUtils.readObjectToXml(sendDto, NatlNewspaperSendXmlDto.class); + log.debug(xmlStr); + log.debug("\n\n\n"); + + List list = Arrays.asList( + "D:/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959023e60d9$EPOUGA$1140100_2022091609485096255243399.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959269e166c$EPOUGA$1140100_2022091609490868474847710.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609590430a45c$EPOUGA$1140100_2022091609483801480139449.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609590685e4d0$EPOUGA$1140100_2022091609483205285052976.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609591011a94b$EPOUGA$1140100_2022091609484378849086728.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/20220916095908123eab$EPOUGA$1140100_2022091609484239715980892.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/202209160959384350e0$EPOUGA$1140100_2022091609485968983152594.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/20220916095854881357$EPOUGA$1140100_2022091609485673727045043.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609585009058a$EPOUGA$1140100_2022091609484095150560203.xml" + // ,"D:/project_data/fims/01. 연계/01. 국민신문고/rcv/2022091609585264580e$EPOUGA$1140100_2022091609485381568241998.xml" + ); + NatlNewspaperRcvXmlDto dto = XmlParseUtils.readXmlToObject(NatlNewspaperRcvXmlDto.class, list.get(0)); + log.debug(dto.toString()); + } +} diff --git a/src/main/webapp/WEB-INF/jsp/fims/biz/ec/ecNatlNewspaperFileSelPopup.jsp b/src/main/webapp/WEB-INF/jsp/fims/biz/ec/ecNatlNewspaperFileSelPopup.jsp new file mode 100644 index 00000000..4c00c8fc --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/fims/biz/ec/ecNatlNewspaperFileSelPopup.jsp @@ -0,0 +1,100 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ include file="/WEB-INF/jsp/framework/taglibs.jsp" %> + +