From 6373dbb9423bf43f0bd9e9aa2eedd55ae4e51dfd Mon Sep 17 00:00:00 2001 From: mjkhan21 Date: Wed, 30 Oct 2024 17:02:22 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AF=BC=EC=9B=90=20=EB=AA=A9=EB=A1=9D/?= =?UTF-8?q?=EC=83=81=EC=84=B8,=20(=EC=B6=94=EA=B0=80)=EB=8B=B5=EB=B3=80=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 6 + src/main/resources/application.yml | 6 +- src/main/resources/intf-conf/gpki.conf | 19 +- src/main/resources/intf-conf/xit-saeol.conf | 21 +- src/main/resources/logback-spring.xml | 2 +- .../resources/spring/context-scheduler.xml | 51 +++ .../resources/sql/mapper/base/file-mapper.xml | 129 ++++++ .../resources/sql/mapper/base/test-mapper.xml | 2 + .../sql/mapper/saeol/saeol-mapper.xml | 370 ++++++++++++++++++ src/main/resources/xit-crypto.conf | 13 + src/sql/xit-saeol-mariadb.sql | 187 +++++++++ 11 files changed, 788 insertions(+), 18 deletions(-) create mode 100644 src/main/resources/spring/context-scheduler.xml create mode 100644 src/main/resources/sql/mapper/base/file-mapper.xml create mode 100644 src/main/resources/sql/mapper/saeol/saeol-mapper.xml create mode 100644 src/main/resources/xit-crypto.conf create mode 100644 src/sql/xit-saeol-mariadb.sql diff --git a/pom.xml b/pom.xml index 190aa43..ae23003 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,12 @@ 23.04.01-SNAPSHOT + + org.quartz-scheduler + quartz + 2.3.2 + + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index abc8f48..e07a834 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -35,13 +35,13 @@ spring: driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy # MariaDB # jdbc-url: jdbc:log4jdbc:mariadb://호스트:포트/DB이름?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&useSSL=false&autocommit=false - jdbc-url: jdbc:log4jdbc:mariadb://211.119.124.9:4407/electricparking_pt?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&useSSL=false&autocommit=false + jdbc-url: jdbc:log4jdbc:mariadb://localhost:3114/xit-base?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&useSSL=false&autocommit=false # Oracle # jdbc-url: jdbc:log4jdbc:oracle:thin:@호스트:포트:SID # username: 사용자 아이디 # password: 사용자 비밀번호 - username: fimsweb - password: fimsweb!@ + username: root + password: mjkhan auto-commit: false mvc: diff --git a/src/main/resources/intf-conf/gpki.conf b/src/main/resources/intf-conf/gpki.conf index d989a36..21273fc 100644 --- a/src/main/resources/intf-conf/gpki.conf +++ b/src/main/resources/intf-conf/gpki.conf @@ -1,25 +1,26 @@ { "enabled": true, /* 활성화(사용) 여부 */ "license": "C:\\GPKI\\Lic", /* 이용기관 GPKI API 라이센스 디렉토리 */ - "charset": "UTF-8", /* 문자셋 */ + "charset": "EUC-KR", /* 문자셋 */ "server": { - "local": "SVR1311000030", /* 이용기관 서버 CN */ - "targets": "SVR1500000015" /* 대상기관 서버인증서 아이디, 여러 개일 경우 컴마(,)로 구분 */ + "local": "SVR3160269001", /* 이용기관 서버 CN */ + "targets": "SVR3160000003" /* 대상기관 서버인증서 아이디, 여러 개일 경우 컴마(,)로 구분 */ }, "ldapUrl": "ldap://10.1.7.118:389/cn=", /* 대상기관 인증서 다운로드를 위한 행정망 LDAP URL */ /*"ldapUrl": "ldap://152.99.57.127:389/cn=", 대상기관 인증서 다운로드를 위한 인터넷망 LDAP URL */ "certDir": "C:\\GPKI\\Certificate\\class1", /* 서버 인증서, 키 저장 디렉토리 */ + "targetCert": "{serverID}_env.cer", "env": { /* 이용기관 서버 인증서 */ - "certFile": "SVR1311000030_env.cer", - "privateKeyFile": "SVR1311000030_env.key", - "privateKeyPassword": "기후대기3395!" + "certFile": "SVR3160269001_env.cer", + "privateKeyFile": "SVR3160269001_env.key", + "privateKeyPassword": "elddy5720@" }, "sig": { /* 이용기관 서버 전자서명 */ - "certFile": "SVR1311000030_sig.cer", - "privateKeyFile": "SVR1311000030_sig.key", - "privateKeyPassword": "기후대기3395!" + "certFile": "SVR3160269001_sig.cer", + "privateKeyFile": "SVR3160269001_sig.key", + "privateKeyPassword": "elddy5720@" } } \ No newline at end of file diff --git a/src/main/resources/intf-conf/xit-saeol.conf b/src/main/resources/intf-conf/xit-saeol.conf index d42c0cb..5571af9 100644 --- a/src/main/resources/intf-conf/xit-saeol.conf +++ b/src/main/resources/intf-conf/xit-saeol.conf @@ -3,12 +3,23 @@ "sido": "", /* 시도코드 */ "sigungu": "", /* 시군구 코드 */ + "deptCodes": ["12345"], /* 부서코드 */ - "sources": ["3010000"], /* 이용기관 정보 */ + "k_anc_code": "3150000", /* 기관코드 */ + "k_anc_id": "SU44526786720", /* 연계 ID */ + "k_anc_passwd": "ZUDDN1129404", /* 연계 비밀번호 */ + + "logXml": "files/xml/{date}/{interfaceID}/{msgKey}.xml", /* xml 로그파일 이름 패턴, 로그파일을 남기지 않으려면 제거할 것 */ + "logToDatabase": true, /* 전문 데이터베이스 사용 여부 */ + "attachmentDir": "files/attachment/{date}", /* 첨부파일 디렉토리 경로 패턴, 전문 데이터베이스를 사용하지 않을 경우에만 유효 */ + "sources": ["3160004"], /* 이용기관 정보 */ + "target": { /* 제공기관 정보 */ - "org": "4640000", /* 기관코드 */ - "url": "http://10.46.147.212:3100/stmr/websvc/std/ws?wsdl={interfaceID}", /* 서비스 제공 URL, {interfaceID} = 연계 ID */ - "certServer": "SVR1311000030" /* 세올행정 서버인증서 아이디 */ - } + "org": "3160004", /* 기관코드 */ + "url": "http://98.17.2.101:3100/stmr/websvc/std/ws?wsdl={interfaceID}", /* 서비스 제공 URL, {interfaceID} = 연계 ID */ + "certServer": "SVR3160000003" /* 세올행정 서버인증서 아이디 */ + }, + + "minwonDates": 5 /* 민원목록 조회일자수 */ } \ No newline at end of file diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 29f62ca..69dbda3 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -5,7 +5,7 @@ - + diff --git a/src/main/resources/spring/context-scheduler.xml b/src/main/resources/spring/context-scheduler.xml new file mode 100644 index 0000000..7d78a5d --- /dev/null +++ b/src/main/resources/spring/context-scheduler.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/sql/mapper/base/file-mapper.xml b/src/main/resources/sql/mapper/base/file-mapper.xml new file mode 100644 index 0000000..019e077 --- /dev/null +++ b/src/main/resources/sql/mapper/base/file-mapper.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + +CONCAT('files/', DIR, DATE_FORMAT(CURRENT_DATE, '%Y/%m/%d/')) +FILE_PATH + +SELECT INF_TYPE + , DIR + FROM ( + SELECT '011' INF_TYPE, 'attachment/' DIR FROM DUAL + ) FILE_DIRS + + + +SELECT A.*, URL + FROM TB_FILE A + WHERE FILE_ID IN (#{fileID}) + ORDER BY FILE_ID + +SELECT A.*, URL + FROM TB_FILE A + + AND A.INF_TYPE = #{infoType} + AND INF_KEY IN (#{infoKey}) + AND USE_YN = 'Y' + + + + + + + + + + +/* 파일 등록(fileMapper.insertFile) */ + +SELECT NEW_ID, CONCAT(DIR, NEW_ID, '.', #{file.extension}) PATH + FROM ( + SELECT NVL(MAX(FILE_ID) + 1, CONCAT(THIS_DAY, '00001')) NEW_ID + FROM () B LEFT OUTER JOIN TB_FILE A ON FILE_ID LIKE CONCAT(THIS_DAY, '%') + ) T1, ( + + WHERE INF_TYPE = #{file.infoType} + ) T2 +INSERT INTO TB_FILE ( + FILE_ID + , INF_TYPE + , INF_KEY + , SUB_TYPE + , SUB_CODE + , FILE_NM + , FILE_PATH + , MIME_TYPE + , FILE_SIZE + , DNLD_CNT + , SRT_ORD + , RGTR + , REG_DT + , USE_YN +) VALUES ( + #{file.id} + , #{file.infoType} + , #{file.infoKey} + , #{file.subType} + , #{file.subCode} + , #{file.name} + , #{file.path} + , #{file.mimeType} + , #{file.size} + , #{file.downloadCount} + , #{file.sortOrder} + , #{currentUser.id} + , + , 'Y' +) + + +/* 파일 순서 변경(fileMapper.reorder) */ +UPDATE TB_FILE SET + SRT_ORD = CASE FILE_ID + WHEN #{fileID} THEN #{index} + + ELSE SRT_ORD END +WHERE FILE_ID IN (#{fileID}) + +/* 다운로드 횟수 증가(fileMapper.updateDownloadCount) */ +UPDATE TB_FILE SET + DNLD_CNT = DNLD_CNT + 1 + WHERE USE_YN = 'Y' + AND FILE_ID IN (#{fileID}) + +/* 파일 제거(fileMapper.removeFiles) */ +UPDATE TB_FILE SET + USE_YN = 'N' + WHERE USE_YN = 'Y' + AND FILE_ID IN (#{fileID}) + + AND INF_TYPE = #{infoType} + AND INF_KEY IN (#{infoKey}) + +/* 파일 삭제(fileMapper.deleteFiles) */ +DELETE FROM TB_FILE +WHERE FILE_ID IN (#{fileID}) + + + \ No newline at end of file diff --git a/src/main/resources/sql/mapper/base/test-mapper.xml b/src/main/resources/sql/mapper/base/test-mapper.xml index d674130..8a897ec 100644 --- a/src/main/resources/sql/mapper/base/test-mapper.xml +++ b/src/main/resources/sql/mapper/base/test-mapper.xml @@ -2,6 +2,8 @@ + + ${sql} ${sql} diff --git a/src/main/resources/sql/mapper/saeol/saeol-mapper.xml b/src/main/resources/sql/mapper/saeol/saeol-mapper.xml new file mode 100644 index 0000000..7b1eaa4 --- /dev/null +++ b/src/main/resources/sql/mapper/saeol/saeol-mapper.xml @@ -0,0 +1,370 @@ + + + + + + +/* 민원목록 등록(saeolMapper.insertSOHNN00004) */ +INSERT INTO TB_SOHNN00004 ( + CNSL_QNA_NO + , MSG_KEY + , ROW_NO + , MW_CNSL_SJ + , REG_DT + , INQ_NUM + , DEAL_STATE_NM + , TOT_CNT + , BBS_SNO + , IN_CNSL_QNA_NO + , PROCESS_STATE + , MW_CHAR_DEP_SE + , USR_NM + , ANS_ANSW_LMT + , DEP_CODE + , CNSL_DEP_NM + , ANS_USR_NM + , BBS_SE_NM + , TAKE_SE_NM + , FILE_ID + , FILE_YN + , SID + , QNA_OPEN_NM + , PROC_YN +) +SELECT #{cnsl_qna_no} + , #{msg_key} + , #{row_no} + , #{mw_cnsl_sj} + , #{reg_dt} + , #{inq_num} + , #{deal_state_nm} + , #{tot_cnt} + , #{bbs_sno} + , #{in_cnsl_qna_no} + , #{process_state} + , #{mw_char_dep_se} + , #{usr_nm} + , #{ans_answ_lmt} + , #{dep_code} + , #{cnsl_dep_nm} + , #{ans_usr_nm} + , #{bbs_se_nm} + , #{take_se_nm} + , #{file_id} + , #{file_yn} + , #{sid} + , #{qna_open_nm} + , 'N' + FROM DUAL + WHERE NOT EXISTS ( + SELECT * FROM TB_SOHNN00004 WHERE CNSL_QNA_NO = #{cnsl_qna_no} + ) + +/* 민원목록 업데이트(saeolMapper.updateSOHNN00004) */ +UPDATE TB_SOHNN00004 + SET USR_NM = #{usr_nm} + WHERE CNSL_QNA_NO = #{cnsl_qna_no} + AND USR_NM != #{usr_nm} + +/* 민원목록 상태 업데이트(saeolMapper.updateSOHNN00004Status) */ +UPDATE TB_SOHNN00004 + SET PROC_YN = 'Y' + AND CNSL_QNA_NO IN (#{cnsl_qna_no}) + AND MSG_KEY IN (#{msg_key}) + AND PROC_YN = 'N' + + +/* 민원상세 등록(saeolMapper.insertSOHNN00011) */ +INSERT INTO TB_SOHNN00011 ( + CNSL_QNA_NO + , MSG_KEY + , CLASS_SYS_CODE + , MW_CNSL_SJ + , MW_APPL_CN + , ANSW_CHASU + , SPEC_ITEM + , EL_BAS + , QNA_OPEN_NM + , USR_ID + , USR_NM + , MWIN_DETAIL_ADDR + , TELNO + , HPNO + , POST_NO + , EMAIL + , ANS_ANSW_LMT + , DEP_CODE + , CNSL_DEP_NM + , MW_CNSL_SE_CODE + , REMW_WHY + , MW_DEAL_ORG_CODE + , TAKE_SE + , REGR_ID + , REG_DT + , MW_ANSW_CNT + , DEAL_STATE_NM + , MW_CHAR_DEP_SE + , CNSL_QNA_NO_M + , CLASS_SYS_CODE_M + , MW_CNSL_SJ_M + , MW_APPL_CN_M + , USR_NM_M + , MWIN_DETAIL_ADDR_M + , TELNO_M + , HPNO_M + , POST_NO_M + , EMAIL_M + , REG_DT_M + , TAKE_SE_NM + , FILE_ID_M + , FILE_ID_P + , MW_ORG_CODE + , INET_QNA_NO + , SID + , INQ_NUM + , TAKE_NM + , CNTCT_TELNO + , RMNT_ORG_CODE + , TAKE_NO + , APPL_NO + , CL_HIS_SNO + , RE_CL_RQST_CNT + , MW_LTTR_NOTIFY_YN + , EMAIL_RPRT_YN + , SMS_RPRT_YN + , MW_DRP_YN + , MW_DRP_WHY + , MW_DRP_DT + , DELETE_YN + , BBS_SE + , BBS_SNO + , SATF_RATNG_CN + , SATF_RATNG_PNT + , CIVIL_GIST + , CIVIL_ABSTRACT + , PETI_PATH_GUBUN + , PCD_GUBUN + , PRE_CNSL_QNA_NO + , PRE_MINWON_YN + , PROC_YN +) +SELECT #{cnsl_qna_no} + , #{msg_key} + , #{class_sys_code} + , #{mw_cnsl_sj} + , #{mw_appl_cn} + , #{answ_chasu} + , #{spec_item} + , #{el_bas} + , #{qna_open_nm} + , #{usr_id} + , #{usr_nm} + , #{mwin_detail_addr} + , #{telno} + , #{hpno} + , #{post_no} + , #{email} + , #{ans_answ_lmt} + , #{dep_code} + , #{cnsl_dep_nm} + , #{mw_cnsl_se_code} + , #{remw_why} + , #{mw_deal_org_code} + , #{take_se} + , #{regr_id} + , #{reg_dt} + , #{mw_answ_cnt} + , #{deal_state_nm} + , #{mw_char_dep_se} + , #{cnsl_qna_no_m} + , #{class_sys_code_m} + , #{mw_cnsl_sj_m} + , #{mw_appl_cn_m} + , #{usr_nm_m} + , #{mwin_detail_addr_m} + , #{telno_m} + , #{hpno_m} + , #{post_no_m} + , #{email_m} + , #{reg_dt_m} + , #{take_se_nm} + , #{file_id_m} + , #{file_id_p} + , #{mw_org_code} + , #{inet_qna_no} + , #{sid} + , #{inq_num} + , #{take_nm} + , #{cntct_telno} + , #{rmnt_org_code} + , #{take_no} + , #{appl_no} + , #{cl_his_sno} + , #{re_cl_rqst_cnt} + , #{mw_lttr_notify_yn} + , #{email_rprt_yn} + , #{sms_rprt_yn} + , #{mw_drp_yn} + , #{mw_drp_why} + , #{mw_drp_dt} + , #{delete_yn} + , #{bbs_se} + , #{bbs_sno} + , #{satf_ratng_cn} + , #{satf_ratng_pnt} + , #{civil_gist} + , #{civil_abstract} + , #{peti_path_gubun} + , #{pcd_gubun} + , #{pre_cnsl_qna_no} + , #{pre_minwon_yn} + , 'N' + FROM DUAL + WHERE NOT EXISTS ( + SELECT * FROM TB_SOHNN00011 WHERE CNSL_QNA_NO = #{cnsl_qna_no} + ) + +/* 민원상세 업데이트(saeolMapper.updateSOHNN00011) */ +UPDATE TB_SOHNN00011 + SET CNSL_QNA_NO_M = #{cnsl_qna_no_m} + WHERE CNSL_QNA_NO = #{cnsl_qna_no} + AND CNSL_QNA_NO_M != #{cnsl_qna_no_m} + +/* 민원상세 상태 업데이트(saeolMapper.updateSOHNN00011Status) */ +UPDATE TB_SOHNN00011 + SET PROC_YN = 'Y' + AND CNSL_QNA_NO IN (#{cnsl_qna_no}) + AND MSG_KEY IN (#{msg_key}) + AND PROC_YN = 'N' + + +/* 민원파일 등록(saeolMapper.insertSOHNN00011File) */ +INSERT INTO TB_SOHNN00011_FILE ( + CNSL_QNA_NO + , MSG_KEY + , FILE_TYPE + , FILE_ID + , FILE_SEQ + , FILE_PATH + , SYS_FILE_NM + , USR_FILE_NM +) VALUES ( + #{cnsl_qna_no} + , #{msg_key} + , #{file_type} + ,#{file_id_m}#{file_id_p} + , #{file_seq} + , #{file_path} + , #{sys_file_nm} + , #{usr_file_nm} +) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* 답변등록(saeolMapper.insertSOINN00050) */ + +SELECT CONCAT(TODAY, LPAD(NVL(SUBSTR(MAX(MSG_ID), 9) + 1, 1), 5, '0')) NEW_ID + FROM () B + LEFT OUTER JOIN TB_SOINN00050 A ON MSG_ID LIKE CONCAT(TODAY, '%') +INSERT INTO TB_SOINN00050 ( + MSG_ID + , CNSL_QNA_NO + , PARENT_QNA_NO + , PSAL_VAT_YN + , IF_YN + , S_USERID + , S_USERNAME + , MW_CNSL_SJ + , MW_APPL_CN + , TELNO + , EMAIL + , CNSL_DEP_NM + , DEP_CODE + , MW_ANSW_CNT + , MW_CHAR_DEP_SE + , MW_CNSL_SE_CODE + , MW_ORG_CODE + , CIVIL_GIST + , CIVIL_ABSTRACT + , PCD_GUBUN + , MSG_KEY + , STATE_CODE + , STATE_MSG + , STATE_DTL +) VALUES ( + #{msgId} + , #{request.cnsl_qna_no} + , #{request.parent_qna_no} + , #{request.psal_vat_yn} + , #{request.if_yn} + , #{request.s_userid} + , #{request.s_username} + , #{request.mw_cnsl_sj} + , #{request.mw_appl_cn} + , #{request.telno} + , #{request.email} + , #{request.cnsl_dep_nm} + , #{request.dep_code} + , #{request.mw_answ_cnt} + , #{request.mw_char_dep_se} + , #{request.mw_cnsl_se_code} + , #{request.mw_org_code} + , #{request.civil_gist} + , #{request.civil_abstract} + , #{request.pcd_gubun} + , #{response.msg_key} + , #{response.state_code} + , #{response.state_msg} + , #{response.state_dtl} +) + +/* 답변등록 결과 업데이트(saeolMapper.updateSOINN00050) */ +UPDATE TB_SOINN00050 + SET MSG_KEY = #{response.msg_key} + , STATE_CODE = #{response.state_code} + , STATE_MSG = #{response.state_msg} + , STATE_DTL = #{response.state_dtl} + WHERE CNSL_QNA_NO = #{response.cnsl_qna_no} + AND MSG_ID = #{msgId} + + \ No newline at end of file diff --git a/src/main/resources/xit-crypto.conf b/src/main/resources/xit-crypto.conf new file mode 100644 index 0000000..0158b7d --- /dev/null +++ b/src/main/resources/xit-crypto.conf @@ -0,0 +1,13 @@ +{ "enabled": true, + "cryptoDefs": [ + { "name": "xit-aria", + "class": "cokr.xit.base.crypto.bean.XitAria", + "settings": { + "version": 1, + "charset": "EUC-KR", + "key": "3AsrGqpYYnkHIu3D", + "keySize": 128 + } + } + ] +} \ No newline at end of file diff --git a/src/sql/xit-saeol-mariadb.sql b/src/sql/xit-saeol-mariadb.sql new file mode 100644 index 0000000..de58444 --- /dev/null +++ b/src/sql/xit-saeol-mariadb.sql @@ -0,0 +1,187 @@ +CREATE OR REPLACE TABLE TB_SOHNN00004 ( + CNSL_QNA_NO CHAR(18) COMMENT '민원접수번호', + MSG_KEY VARCHAR(25) COMMENT '메시지 키', + ROW_NO INT COMMENT '순번', + + MW_CNSL_SJ VARCHAR(500) COMMENT '글제목', + REG_DT VARCHAR(14) COMMENT '접수일자', + INQ_NUM VARCHAR(4) COMMENT '조회수', + DEAL_STATE_NM VARCHAR(20) COMMENT '처리상태', + TOT_CNT VARCHAR(4) COMMENT '총건수', + BBS_SNO VARCHAR(9) COMMENT '게시물번호', + IN_CNSL_QNA_NO CHAR(18) COMMENT '내부접수번호', + PROCESS_STATE VARCHAR(500) COMMENT '진행상태', + MW_CHAR_DEP_SE VARCHAR(4) COMMENT '부서구분', + USR_NM VARCHAR(60) COMMENT '사용자명', + ANS_ANSW_LMT VARCHAR(14) COMMENT '민원답변기한', + DEP_CODE CHAR(11) COMMENT '부서코드', + CNSL_DEP_NM VARCHAR(600) COMMENT '부서명', + ANS_USR_NM VARCHAR(60) COMMENT '담당자명', + BBS_SE_NM VARCHAR(20) COMMENT '게시판종류', + TAKE_SE_NM VARCHAR(100) COMMENT '접수경로', + FILE_ID VARCHAR(50) COMMENT '파일id', + FILE_YN CHAR(1) COMMENT '첨부파일유무', + SID VARCHAR(13) COMMENT '사용자시스템id', + QNA_OPEN_NM VARCHAR(10) COMMENT '공개여부', + + PROC_YN VARCHAR(1) COMMENT '처리여부', + + PRIMARY KEY (CNSL_QNA_NO), + INDEX (DEP_CODE) +) COMMENT '민원목록'; + +CREATE OR REPLACE TABLE TB_SOHNN00011 ( + CNSL_QNA_NO CHAR(18) COMMENT '민원접수번호', + MSG_KEY VARCHAR(25) COMMENT '메시지 키', + + CLASS_SYS_CODE VARCHAR(50) COMMENT '시스템연계구분코드', + MW_CNSL_SJ VARCHAR(500) COMMENT '답변제목', + MW_APPL_CN TEXT COMMENT '답변내용', + ANSW_CHASU CHAR(1) COMMENT '추가답변차수', + SPEC_ITEM VARCHAR(250) COMMENT '특기사항', + EL_BAS VARCHAR(200) COMMENT '관련근거', + QNA_OPEN_NM VARCHAR(8) COMMENT '공개여부', + USR_ID VARCHAR(20) COMMENT '답변자ID', + USR_NM VARCHAR(60) COMMENT '답변자명', + MWIN_DETAIL_ADDR VARCHAR(400) COMMENT '답변자주소', + TELNO VARCHAR(20) COMMENT '답변자전화번호', + HPNO VARCHAR(20) COMMENT '답변자핸드폰', + POST_NO CHAR(6) COMMENT '우편번호', + EMAIL CHAR(50) COMMENT '이메일', + ANS_ANSW_LMT VARCHAR(14) COMMENT '답변처리기한', + DEP_CODE CHAR(11) COMMENT '답변자부서코드', + CNSL_DEP_NM VARCHAR(600) COMMENT '답변자부서명', + MW_CNSL_SE_CODE CHAR(3) COMMENT '민원상담구분코드', + REMW_WHY VARCHAR(2000) COMMENT '이송사유', + MW_DEAL_ORG_CODE CHAR(7) COMMENT '민원처리기관코드', + TAKE_SE CHAR(3) COMMENT '접수구분코드', + REGR_ID VARCHAR(20) COMMENT '답변자ID', + REG_DT VARCHAR(14) COMMENT '답변일자', + MW_ANSW_CNT CHAR(1) COMMENT '추가답변카운트', + DEAL_STATE_NM VARCHAR(8) COMMENT '처리상태', + MW_CHAR_DEP_SE VARCHAR(4) COMMENT '부서구분', + CNSL_QNA_NO_M CHAR(18) COMMENT '답변접수번호', + CLASS_SYS_CODE_M VARCHAR(50) COMMENT '시스템연계구분코드(민원)', + MW_CNSL_SJ_M VARCHAR(500) COMMENT '민원제목', + MW_APPL_CN_M TEXT COMMENT '민원내용', + USR_NM_M VARCHAR(60) COMMENT '민원인명', + MWIN_DETAIL_ADDR_M VARCHAR(400) COMMENT '민원인주소', + TELNO_M VARCHAR(20) COMMENT '민원인전화번호', + HPNO_M VARCHAR(20) COMMENT '민원인핸드폰', + POST_NO_M CHAR(6) COMMENT '우편번호(민원)', + EMAIL_M CHAR(50) COMMENT '이메일(민원)', + REG_DT_M VARCHAR(14) COMMENT '민원등록일시', + TAKE_SE_NM VARCHAR(100) COMMENT '접수경로', + FILE_ID_M VARCHAR(50) COMMENT '민원인 첨부파일 고유id', + FILE_ID_P VARCHAR(50) COMMENT '답변자 첨부파일 고유id', + MW_ORG_CODE VARCHAR(7) COMMENT '최초등록기관 코드', + INET_QNA_NO VARCHAR(18) COMMENT '최초등록기관 접수번호', + SID VARCHAR(13) COMMENT '시스템사용자ID', + INQ_NUM INT COMMENT '민원조회수', + TAKE_NM VARCHAR(60) COMMENT '방문접수 담당자명', + CNTCT_TELNO VARCHAR(20) COMMENT '방문접수 담당자 전화번호', + RMNT_ORG_CODE CHAR(7) COMMENT '이송된 기관코드', + TAKE_NO VARCHAR(18) COMMENT '신문고 접수번호', + APPL_NO VARCHAR(18) COMMENT '신문고 신청번호', + CL_HIS_SNO VARCHAR(12) COMMENT '분류이력일련번호', + RE_CL_RQST_CNT INT COMMENT '재분류요청건수', + MW_LTTR_NOTIFY_YN CHAR(1) COMMENT '서신통지여부', + EMAIL_RPRT_YN CHAR(1) COMMENT '이메일통지여부', + SMS_RPRT_YN CHAR(1) COMMENT 'SMS통지여부', + MW_DRP_YN CHAR(1) COMMENT '취하여부', + MW_DRP_WHY TEXT COMMENT '취하사유', + MW_DRP_DT CHAR(14) COMMENT '취하일시', + DELETE_YN CHAR(1) COMMENT '삭제여부', + BBS_SE VARCHAR(3) COMMENT '게시판번호', + BBS_SNO VARCHAR(9) COMMENT '게시물번호', + SATF_RATNG_CN VARCHAR(500) COMMENT '만족도평가내용', + SATF_RATNG_PNT INT COMMENT '만족도점수', + CIVIL_GIST VARCHAR(512) COMMENT '민원요지', + CIVIL_ABSTRACT TEXT COMMENT '민원처리결과요약', + PETI_PATH_GUBUN VARCHAR(8) COMMENT '신문고민원구분', + PCD_GUBUN VARCHAR(8) COMMENT '안전신고답변유형 또는 처리구분', + PRE_CNSL_QNA_NO CHAR(18) COMMENT '선행상담QNA번호', + PRE_MINWON_YN VARCHAR(1) COMMENT '선행민원등록여부', + + PROC_YN VARCHAR(1) COMMENT '처리여부', + + PRIMARY KEY (CNSL_QNA_NO), + INDEX (DEP_CODE) +) COMMENT '민원상세'; + +CREATE OR REPLACE TABLE TB_SOHNN00011_FILE ( + CNSL_QNA_NO CHAR(18) COMMENT '민원접수번호', + MSG_KEY VARCHAR(25) COMMENT '메시지 키', + + FILE_TYPE CHAR(1) COMMENT '첨부파일 유형(M: 민원인, P: 답변자)', + FILE_ID VARCHAR(50) COMMENT '첨부파일 고유ID', + FILE_SEQ INT COMMENT '파일순번', + FILE_PATH VARCHAR(2000) COMMENT '파일시스템파일경로', + SYS_FILE_NM VARCHAR(200) COMMENT '파일시스템실제저장파일명', + USR_FILE_NM VARCHAR(200) COMMENT '사용자파일명', + + PRIMARY KEY (CNSL_QNA_NO, FILE_TYPE, FILE_ID, FILE_SEQ) +) COMMENT '민원상세 파일'; + +CREATE OR REPLACE TABLE TB_FILE ( + FILE_ID VARCHAR(13) NOT NULL COMMENT '파일 ID', + INF_TYPE VARCHAR(3) NOT NULL COMMENT '관련정보 유형', + INF_KEY VARCHAR(64) NOT NULL COMMENT '관련정보 Key', + SUB_TYPE VARCHAR(3) COMMENT '관련정보 하위 분류(애플리케이션에서 정의)', + SUB_CODE VARCHAR(64) COMMENT '관련정보 하위 코드(애플리케이션에서 정의)', + FILE_NM VARCHAR(128) NOT NULL COMMENT '파일 이름', + FILE_PATH VARCHAR(256) NOT NULL COMMENT '파일 경로', + MIME_TYPE VARCHAR(80) COMMENT '파일 유형', + FILE_SIZE DECIMAL(8) NOT NULL COMMENT '파일 사이즈', + DNLD_CNT DECIMAL(5) DEFAULT 0 NOT NULL COMMENT '다운로드 횟수', + SRT_ORD TINYINT NOT NULL COMMENT '정렬 순서', + REG_DT DATE NOT NULL COMMENT '등록 일자', + RGTR VARCHAR(20) NOT NULL COMMENT '등록자 ID', + USE_YN VARCHAR(1) DEFAULT 'Y' NOT NULL COMMENT '사용 여부(Y:사용 , N:사용하지 않음)', + PRIMARY KEY (FILE_ID), + INDEX (INF_TYPE, INF_KEY) +) COMMENT = '관련 파일(답변 첨부 파일)'; + +CREATE OR REPLACE TABLE TB_SOINN00050 ( + MSG_ID VARCHAR(13) COMMENT '메시지 아이디', + CNSL_QNA_NO CHAR(18) COMMENT '답변접수번호', + PARENT_QNA_NO CHAR(18) COMMENT '상위QNA번호', + PSAL_VAT_YN CHAR(1) COMMENT '국민제안신청여부', + IF_YN CHAR(1) COMMENT '국민신문고연계여부', + S_USERID VARCHAR(20) COMMENT '담당자 ID', + S_USERNAME VARCHAR(60) COMMENT '담당자명', + MW_CNSL_SJ VARCHAR(500) COMMENT '처리구분', + MW_APPL_CN TEXT COMMENT '답변내용', + TELNO VARCHAR(20) COMMENT '전화번호', + EMAIL VARCHAR(50) COMMENT '이메일', + CNSL_DEP_NM VARCHAR(600) COMMENT '부서명', + DEP_CODE CHAR(11) COMMENT '부서코드', + MW_ANSW_CNT CHAR(1) COMMENT '추가답변카운터', + MW_CHAR_DEP_SE CHAR(1) COMMENT '민원담당부서구분', + MW_CNSL_SE_CODE CHAR(3) COMMENT '민원구분코드', + MW_ORG_CODE CHAR(7) COMMENT '민원기관코드', + CIVIL_GIST VARCHAR(512) COMMENT '민원요지', + CIVIL_ABSTRACT TEXT COMMENT '민원처리결과요약', + PCD_GUBUN VARCHAR(8) COMMENT '안전신고답변유형', + MSG_KEY VARCHAR(25) COMMENT '메시지키', + STATE_CODE VARCHAR(3) COMMENT '상태코드', + STATE_MSG VARCHAR(100) COMMENT '상태메시지', + STATE_DTL VARCHAR(15) COMMENT '처리일시', + + PRIMARY KEY (MSG_ID), + INDEX (CNSL_QNA_NO) +) COMMENT '답변등록/추가답변'; + +/* +DELIMITER $$ +CREATE FUNCTION NVL(IP_DATA VARCHAR(100), IP_CONVERT VARCHAR(100)) RETURNS VARCHAR(100) +BEGIN + DECLARE RTN_DATA VARCHAR(100); + + SET RTN_DATA := IFNULL(IP_DATA, IP_CONVERT); + + RETURN RTN_DATA; +END $$ + +DELIMITER ; +*/ \ No newline at end of file