단속 > 단속 등록&열람: Grid1 제거 및 위치정보 관리(pstn) 화면 추가, 그리드 컬럼 정의 및 팝업 UI 구현

dev
박성영 4 months ago
parent 52d770a4cf
commit 51d8892f62

@ -0,0 +1,8 @@
CREATE SEQUENCE seq_pstn_info_id
START WITH 1000
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999999999999999
CACHE 1000
CYCLE;

@ -46,36 +46,36 @@ INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, US
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NOTICE_DIV_CD', '6', '행정대집행', '행정대집행', 7, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NOTICE_DIV_CD', '7', '최초현장조사', '최초현장조사', 8, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
-- 대표지목 (JIMOK_REPR_CD)
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '1', '', '', 1, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '2', '', '', 2, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '3', '대지', '대지', 3, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '4', '하천', '하천', 4, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '5', '잡종지', '잡종지', 5, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '6', '주차장', '주차장', 6, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '7', '공원', '공원', 7, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '8', '공장용지', '공장용지', 8, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '9', '과수원', '과수원', 9, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '10', '광천지', '광천지', 10, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '11', '구거', '구거', 11, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '12', '도로', '도로', 12, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '13', '목장용지', '목장용지', 13, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '14', '묘지', '묘지', 14, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '15', '사적지', '사적지', 15, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '16', '수도용지', '수도용지', 16, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '17', '양어장', '양어장', 17, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '18', '염전', '염전', 18, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '19', '유원지', '유원지', 19, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '20', '유지', '유지', 20, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '21', '임야', '임야', 21, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '22', '제방', '제방', 22, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '23', '종교용지', '종교용지', 23, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '24', '주유소용지', '주유소용지', 24, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '25', '창고용지', '창고용지', 25, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '26', '철도용지', '철도용지', 26, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '27', '체육용지', '체육용지', 27, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '28', '학교용지', '학교용지', 28, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '999', '기타', '기타', 29, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
-- 대표지목 (LDCG_CD)
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '1', '', '', 1, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '2', '', '', 2, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '3', '대지', '대지', 3, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '4', '하천', '하천', 4, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '5', '잡종지', '잡종지', 5, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '6', '주차장', '주차장', 6, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '7', '공원', '공원', 7, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '8', '공장용지', '공장용지', 8, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '9', '과수원', '과수원', 9, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '10', '광천지', '광천지', 10, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '11', '구거', '구거', 11, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '12', '도로', '도로', 12, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '13', '목장용지', '목장용지', 13, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '14', '묘지', '묘지', 14, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '15', '사적지', '사적지', 15, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '16', '수도용지', '수도용지', 16, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '17', '양어장', '양어장', 17, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '18', '염전', '염전', 18, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '19', '유원지', '유원지', 19, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '20', '유지', '유지', 20, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '21', '임야', '임야', 21, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '22', '제방', '제방', 22, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '23', '종교용지', '종교용지', 23, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '24', '주유소용지', '주유소용지', 24, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '25', '창고용지', '창고용지', 25, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '26', '철도용지', '철도용지', 26, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '27', '체육용지', '체육용지', 27, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '28', '학교용지', '학교용지', 28, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '999', '기타', '기타', 29, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
-- 지종 (JIJONG_CD)
INSERT INTO ibmsdb.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIJONG_CD', '1', '일반번지', '일반번지', 1, 'Y', NULL, NULL, NULL, NULL, NULL, '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);

@ -8,7 +8,7 @@ INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, R
INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('DSCL_MTHD_CD', '적발 방법', '적발(인지) 방법 코드', 'Y', '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('RETURN_DIV_CD', '반송 구분', '우편 반송 사유 구분 코드', 'Y', '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NOTICE_DIV_CD', '통지 구분', '행정 통지 단계/종류 코드', 'Y', '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIMOK_REPR_CD', '대표지목', '토지 대표 지목 코드', 'Y', '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('LDCG_CD', '대표지목', '토지 대표 지목 코드', 'Y', '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('JIJONG_CD', '지종', '지번 종류(지종) 코드', 'Y', '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('USER_ACT_DIV_CD', '사용자 행위 구분', '업무 처리 사용자 행위 로그 구분 코드', 'Y', '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);
INSERT INTO ibmsdb.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('STDG_EMD_CD', '행정동 코드', '행정동 식별 코드', 'Y', '2025-08-25 10:19:00', 'SYSTEM', NULL, NULL);

@ -0,0 +1,117 @@
package go.kr.project.crdn.crndRegistAndView.pstnInfo.controller;
import egovframework.constant.MessageConstants;
import egovframework.constant.TilesConstants;
import egovframework.util.ApiResponseUtil;
import egovframework.util.SessionUtil;
import go.kr.project.common.model.CmmnCodeSearchVO;
import go.kr.project.common.service.CommonCodeService;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.service.PstnInfoService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
/**
*
* : Grid1( ) / API . (setTotalCountsetPagingYn) .
*/
@Controller
@RequestMapping("/crdn/crndRegistAndView/pstnInfo")
@RequiredArgsConstructor
@Slf4j
@Tag(name = "단속 위치정보", description = "단속 자료 위치정보 API")
public class PstnInfoController {
private final PstnInfoService service;
private final CommonCodeService commonCodeService;
/**
* (AJAX)
*/
@Operation(summary = "위치정보 목록 조회", description = "단속연도/번호로 위치정보를 조회합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "조회 성공"),
@ApiResponse(responseCode = "400", description = "조회 실패")
})
@PostMapping("/list.ajax")
public ResponseEntity<?> listAjax(@ModelAttribute PstnInfoVO vo) {
// 1. 총 개수 조회
int totalCount = service.selectPstnInfoListTotalCount(vo);
// 2. 응답 데이터 구성
vo.setTotalCount(totalCount);
// 3. 페이징 처리 (가이드 준수)
vo.setPagingYn("Y");
List<PstnInfoVO> list = service.selectPstnInfoList(vo);
return ApiResponseUtil.successWithGrid(list, vo);
}
/**
*
* : / , (, ) .
*/
@GetMapping("/popup.do")
@Operation(summary = "위치정보 등록 팝업", description = "위치정보 등록을 위한 팝업 화면을 제공합니다.")
public ModelAndView popup(
@Parameter(description = "단속 연도") @RequestParam String crdnYr,
@Parameter(description = "단속 번호") @RequestParam String crdnNo,
@Parameter(description = "모드(C/U/V)") @RequestParam(defaultValue = "C") String mode,
Model model) {
// 법정동 코드 목록
CmmnCodeSearchVO emdSearch = CmmnCodeSearchVO.builder()
.searchCdGroupId("STDG_EMD_CD")
.sortColumn("SORT_ORDR")
.sortAscending(true)
.build();
model.addAttribute("stdgEmdCdList", commonCodeService.selectCodeDetailList(emdSearch));
// 지목 코드 목록
CmmnCodeSearchVO ldcgSearch = CmmnCodeSearchVO.builder()
.searchCdGroupId("LDCG_CD")
.sortColumn("SORT_ORDR")
.sortAscending(true)
.build();
model.addAttribute("ldcgCdList", commonCodeService.selectCodeDetailList(ldcgSearch));
ModelAndView mav = new ModelAndView("crdn/crndRegistAndView/pstnInfo/popup" + TilesConstants.POPUP);
mav.addObject("crdnYr", crdnYr);
mav.addObject("crdnNo", crdnNo);
mav.addObject("mode", mode);
return mav;
}
/**
* (AJAX)
* : ID . DEL_YN 'N' .
*/
@Operation(summary = "위치정보 등록", description = "단속 자료의 위치정보를 등록합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "400", description = "등록 실패")
})
@PostMapping("/insert.ajax")
public ResponseEntity<?> insertAjax(@ModelAttribute PstnInfoVO vo) {
vo.setRgtr(SessionUtil.getUserId());
// 세션의 조직코드를 시군구 코드로 설정
vo.setSggCd(SessionUtil.getSessionVO().getUser().getOrgCd());
int result = service.insertPstnInfo(vo);
if (result > 0) {
return ApiResponseUtil.success(MessageConstants.Common.SAVE_SUCCESS);
}
return ApiResponseUtil.error(MessageConstants.Common.SAVE_ERROR);
}
}

@ -0,0 +1,23 @@
package go.kr.project.crdn.crndRegistAndView.pstnInfo.mapper;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* MyBatis
* : tb_pstn_info CRUD / .
*/
@Mapper
public interface PstnInfoMapper {
/** 목록 조회 */
List<PstnInfoVO> selectPstnInfoList(PstnInfoVO vo);
/** 총 개수 */
int selectPstnInfoListTotalCount(PstnInfoVO vo);
/** 등록 */
int insertPstnInfo(PstnInfoVO vo);
}

@ -0,0 +1,69 @@
package go.kr.project.crdn.crndRegistAndView.pstnInfo.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import go.kr.project.common.model.PagingVO;
import lombok.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* VO
* : tb_pstn_info , (//) .
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PstnInfoVO extends PagingVO {
// ============ 테이블 컬럼 ============
private String pstnInfoId; // 위치 정보 ID
private String sggCd; // 시군구 코드(ORG_CD)
private String crdnYr; // 단속 연도
private String crdnNo; // 단속 번호
private String stdgEmdCd; // 법정동 읍면동 코드
private String ldcgCd; // 지목 코드
private BigDecimal ptout; // 지적
private BigDecimal oalp; // 공시지가
private String lotnoWholAddr; // 지번 전체 주소
private String roadNmWholAddr; // 도로명 전체 주소
private String zip; // 우편번호
private String lotnoAddr; // 지번 주소
private String roadNmAddr; // 도로명 주소
private String dtlAddr; // 상세 주소
private String refAddr; // 참고 주소
private String pbadmsZoneCd; // 행정 구역 코드
private String roadNmCd; // 도로명 코드
private String lotnoMno; // 지번 본번
private String lotnoSno; // 지번 부번
private String bldgMno; // 건물 본번
private String bldgSno; // 건물 부번
private String udgdYnCd; // 지하 여부 코드
private String mtnYnCd; // 산 여부 코드
private String rmrk; // 비고
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul")
private LocalDateTime regDt; // 등록 일시
private String rgtr; // 등록자
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul")
private LocalDateTime mdfcnDt; // 수정 일시
private String mdfr; // 수정자
private String delYn; // 삭제 여부
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul")
private LocalDateTime delDt; // 삭제 일시
private String dltr; // 삭제자
// ============ 조인 컬럼(코드명) ============
private String sggCdNm; // 시군구 코드명(ORG_CD)
private String stdgEmdCdNm; // 법정동 코드명
private String ldcgCdNm; // 지목 코드명
}

@ -0,0 +1,14 @@
package go.kr.project.crdn.crndRegistAndView.pstnInfo.service;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO;
import java.util.List;
/**
*
*/
public interface PstnInfoService {
List<PstnInfoVO> selectPstnInfoList(PstnInfoVO vo);
int selectPstnInfoListTotalCount(PstnInfoVO vo);
int insertPstnInfo(PstnInfoVO vo);
}

@ -0,0 +1,38 @@
package go.kr.project.crdn.crndRegistAndView.pstnInfo.service.impl;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.mapper.PstnInfoMapper;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO;
import go.kr.project.crdn.crndRegistAndView.pstnInfo.service.PstnInfoService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
*
* : - , .
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class PstnInfoServiceImpl extends EgovAbstractServiceImpl implements PstnInfoService {
private final PstnInfoMapper mapper;
@Override
public List<PstnInfoVO> selectPstnInfoList(PstnInfoVO vo) {
return mapper.selectPstnInfoList(vo);
}
@Override
public int selectPstnInfoListTotalCount(PstnInfoVO vo) {
return mapper.selectPstnInfoListTotalCount(vo);
}
@Override
public int insertPstnInfo(PstnInfoVO vo) {
return mapper.insertPstnInfo(vo);
}
}

@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="go.kr.project.crdn.crndRegistAndView.pstnInfo.mapper.PstnInfoMapper">
<!-- 위치정보 목록 조회 -->
<select id="selectPstnInfoList" parameterType="go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO"
resultType="go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO">
/* PstnInfoMapper.selectPstnInfoList : 위치정보 목록 조회 */
SELECT
p.PSTN_INFO_ID,
p.SGG_CD,
sgg.CD_NM AS SGG_CD_NM,
p.CRDN_YR,
p.CRDN_NO,
p.STDG_EMD_CD,
emd.CD_NM AS STDG_EMD_CD_NM,
p.LDCG_CD,
ld.CD_NM AS LDCG_CD_NM,
p.PTOUT,
p.OALP,
p.LOTNO_WHOL_ADDR,
p.ROAD_NM_WHOL_ADDR,
p.ZIP,
p.LOTNO_ADDR,
p.ROAD_NM_ADDR,
p.DTL_ADDR,
p.REF_ADDR,
p.PBADMS_ZONE_CD,
p.ROAD_NM_CD,
p.LOTNO_MNO,
p.LOTNO_SNO,
p.BLDG_MNO,
p.BLDG_SNO,
p.UDGD_YN_CD,
p.MTN_YN_CD,
p.RMRK,
p.REG_DT,
p.RGTR,
p.MDFCN_DT,
p.MDFR,
p.DEL_YN,
p.DEL_DT,
p.DLTR
FROM tb_pstn_info p
LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = p.SGG_CD AND sgg.USE_YN = 'Y'
LEFT JOIN tb_cd_detail emd ON emd.CD_GROUP_ID = 'STDG_EMD_CD' AND emd.CD_ID = p.STDG_EMD_CD AND emd.USE_YN = 'Y'
LEFT JOIN tb_cd_detail ld ON ld.CD_GROUP_ID = 'LDCG_CD' AND ld.CD_ID = p.LDCG_CD AND ld.USE_YN = 'Y'
WHERE p.DEL_YN = 'N'
<if test='crdnYr != null and crdnYr != ""'>
AND p.CRDN_YR = #{crdnYr}
</if>
<if test='crdnNo != null and crdnNo != ""'>
AND p.CRDN_NO = #{crdnNo}
</if>
ORDER BY p.REG_DT DESC, p.PSTN_INFO_ID DESC
<if test='pagingYn != null and pagingYn == "Y"'>
limit #{startIndex}, #{perPage} /* 서버사이드 페이징 처리 */
</if>
</select>
<!-- 위치정보 총 개수 조회 -->
<select id="selectPstnInfoListTotalCount" parameterType="go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO" resultType="int">
/* PstnInfoMapper.selectPstnInfoListTotalCount : 위치정보 총 개수 조회 */
SELECT COUNT(*)
FROM tb_pstn_info p
WHERE p.DEL_YN = 'N'
<if test='crdnYr != null and crdnYr != ""'>
AND p.CRDN_YR = #{crdnYr}
</if>
<if test='crdnNo != null and crdnNo != ""'>
AND p.CRDN_NO = #{crdnNo}
</if>
</select>
<!-- 위치정보 등록 (시컨스 사용) -->
<insert id="insertPstnInfo" parameterType="go.kr.project.crdn.crndRegistAndView.pstnInfo.model.PstnInfoVO">
/* PstnInfoMapper.insertPstnInfo : 위치정보 등록 */
INSERT INTO tb_pstn_info (
PSTN_INFO_ID,
SGG_CD,
CRDN_YR,
CRDN_NO,
STDG_EMD_CD,
LDCG_CD,
PTOUT,
OALP,
LOTNO_WHOL_ADDR,
ROAD_NM_WHOL_ADDR,
ZIP,
LOTNO_ADDR,
ROAD_NM_ADDR,
DTL_ADDR,
REF_ADDR,
PBADMS_ZONE_CD,
ROAD_NM_CD,
LOTNO_MNO,
LOTNO_SNO,
BLDG_MNO,
BLDG_SNO,
UDGD_YN_CD,
MTN_YN_CD,
RMRK,
REG_DT,
RGTR,
DEL_YN
) VALUES (
LPAD(NEXTVAL(seq_pstn_info_id), 10, '0'),
#{sggCd},
#{crdnYr},
#{crdnNo},
#{stdgEmdCd},
#{ldcgCd},
#{ptout},
#{oalp},
#{lotnoWholAddr},
#{roadNmWholAddr},
#{zip},
#{lotnoAddr},
#{roadNmAddr},
#{dtlAddr},
#{refAddr},
#{pbadmsZoneCd},
#{roadNmCd},
#{lotnoMno},
#{lotnoSno},
#{bldgMno},
#{bldgSno},
#{udgdYnCd},
#{mtnYnCd},
#{rmrk},
NOW(),
#{rgtr},
'N'
)
</insert>
</mapper>

@ -20,6 +20,10 @@
<div class="box_column">
<div class="containers">
<div class="forms_table_non">
<ul class="box_title" style="padding: 0px;">
<li class="tit">기본정보</li>
</ul>
<form id="crdnForm" name="crdnForm">
<input type="hidden" id="mode" name="mode" value="U" />
<input type="hidden" id="crdnYr" name="crdnYr" value="${crdnYr}" />
@ -98,10 +102,13 @@
<div class="col-sm-6">
<div class="box_column">
<ul class="box_title">
<li class="tit">단속자료 위치정보</li>
<li class="tit">위치 정보</li>
<li class="rig">
<button type="button" id="pstnInfoRegistBtn" class="newbtn bg2-1">위치정보 추가</button>
</li>
</ul>
<div class="containers">
<div id="grid1"></div>
<div id="pstnGrid"></div>
</div>
</div>
</div>
@ -121,7 +128,7 @@
<div class="col-sm-6">
<div class="box_column">
<ul class="box_title">
<li class="tit">행위자정보</li>
<li class="tit">불법행위 정보</li>
</ul>
<div class="containers">
<div id="grid3"></div>
@ -131,7 +138,7 @@
<div class="col-sm-6">
<div class="box_column">
<ul class="box_title">
<li class="tit">수유자정보</li>
<li class="tit">행위자 정보</li>
</ul>
<div class="containers">
<div id="grid4"></div>
@ -145,7 +152,7 @@
<!-- /Main body -->
<!-- 각 그리드별 개별 JSP 포함 -->
<%@ include file="detailView-grid1.jsp" %>
<%@ include file="pstnInfo/detailView-pstn.jsp" %>
<%@ include file="detailView-grid2.jsp" %>
<%@ include file="detailView-grid3.jsp" %>
<%@ include file="detailView-grid4.jsp" %>
@ -189,7 +196,7 @@
*/
grids: {
// 각 그리드 모듈 인스턴스들
grid1: null,
pstn: null,
grid2: null,
grid3: null,
grid4: null
@ -293,10 +300,6 @@
} else {
alert(response.message || '저장에 실패했습니다.');
}
},
error: function(xhr, status, error) {
console.error('저장 오류:', error);
alert('저장 중 오류가 발생했습니다.');
}
});
}
@ -320,8 +323,8 @@
*/
refreshAllGrids: function() {
// 각 그리드 모듈의 검색 함수 호출
if (this.grids.grid1 && this.grids.grid1.search) {
this.grids.grid1.search();
if (this.grids.pstn && this.grids.pstn.search) {
this.grids.pstn.search();
}
if (this.grids.grid2 && this.grids.grid2.search) {
this.grids.grid2.search();
@ -357,6 +360,21 @@
window.close();
}
});
// 위치정보 추가 팝업 오픈
$('#pstnInfoRegistBtn').on('click', function() {
var crdnYr = $('#crdnYr').val();
var crdnNo = $('#crdnNo').val();
if (!crdnYr || !crdnNo) {
alert('단속 기본정보가 없습니다.');
return;
}
var url = '<c:url value="/crdn/crndRegistAndView/pstnInfo/popup.do"/>' + '?crdnYr=' + encodeURIComponent(crdnYr) + '&crdnNo=' + encodeURIComponent(crdnNo) + '&mode=C';
var w = 1200, h = 800;
var left = Math.max(0, (screen.width - w) / 2);
var top = Math.max(0, (screen.height - h) / 2);
window.open(url, 'pstnInfoPopup', 'width=' + w + ',height=' + h + ',left=' + left + ',top=' + top + ',resizable=yes,scrollbars=yes');
});
},
/**

@ -2,16 +2,16 @@
<script type="text/javascript">
/**
* 단속자료 위치정보 그리드 모듈 (Grid1)
* 위치 정보 그리드 모듈 (pstn)
* 단속 데이터의 위치 관련 정보를 표시합니다.
*/
(function(window, $) {
'use strict';
/**
* Grid1 (단속자료 위치정보) 관리 네임스페이스
* pstn (위치 정보) 관리 네임스페이스
*/
var CrdnDetailViewGrid1 = {
var CrdnDetailViewPstn = {
/**
* 그리드 관련 객체
*/
@ -34,7 +34,7 @@
// 기본 설정
gridConfig.setOptDataSource(dataSource); // 데이터소스 연결
gridConfig.setOptGridId('grid1'); // 그리드를 출력할 Element ID
gridConfig.setOptGridId('pstnGrid'); // 그리드를 출력할 Element ID
gridConfig.setOptGridHeight(200); // 그리드 높이(단위: px)
gridConfig.setOptRowHeight(30); // 그리드 행 높이(단위: px)
gridConfig.setOptRowHeaderType('rowNum'); // 행 첫번째 셀 타입(rowNum: 순번)
@ -52,50 +52,37 @@
*/
getGridColumns: function() {
return [
{
header: '단속년도',
name: 'crdnYr',
align: 'center',
width: 80,
sortable: true
},
{
header: '단속번호',
name: 'crdnNo',
align: 'center',
width: 90,
sortable: true
},
{
header: '지역구분',
name: 'rgnSeCdNm',
align: 'center',
width: 100
},
{
header: '소재지',
name: 'lctnAddr',
align: 'left',
width: 200
},
{
header: '지번',
name: 'lotNoAddr',
align: 'left',
width: 150
},
{
header: '도로명주소',
name: 'roadNmAddr',
align: 'left',
width: 200
},
{
header: '상세주소',
name: 'dtlAddr',
align: 'left',
width: 150
}
{ header: '위치정보ID', name: 'pstnInfoId', align: 'center', width: 110 },
{ header: '단속년도', name: 'crdnYr', align: 'center', width: 80 },
{ header: '단속번호', name: 'crdnNo', align: 'center', width: 90 },
{ header: '시군구', name: 'sggCdNm', align: 'center', width: 100 },
{ header: '법정동', name: 'stdgEmdCdNm', align: 'center', width: 100 },
{ header: '지목', name: 'ldcgCdNm', align: 'center', width: 90 },
{ header: '지번 전체주소', name: 'lotnoWholAddr', align: 'left', width: 200 },
{ header: '도로명 전체주소', name: 'roadNmWholAddr', align: 'left', width: 220 },
{ header: '우편번호', name: 'zip', align: 'center', width: 90 },
{ header: '지번 주소', name: 'lotnoAddr', align: 'left', width: 180 },
{ header: '도로명 주소', name: 'roadNmAddr', align: 'left', width: 200 },
{ header: '상세주소', name: 'dtlAddr', align: 'left', width: 180 },
{ header: '참고주소', name: 'refAddr', align: 'left', width: 180 },
{ header: '행정구역코드', name: 'pbadmsZoneCd', align: 'center', width: 130 },
{ header: '도로명 코드', name: 'roadNmCd', align: 'center', width: 120 },
{ header: '지번 본번', name: 'lotnoMno', align: 'right', width: 90 },
{ header: '지번 부번', name: 'lotnoSno', align: 'right', width: 90 },
{ header: '건물 본번', name: 'bldgMno', align: 'right', width: 90 },
{ header: '건물 부번', name: 'bldgSno', align: 'right', width: 90 },
{ header: '지하여부', name: 'udgdYnCd', align: 'center', width: 80 },
{ header: '산여부', name: 'mtnYnCd', align: 'center', width: 80 },
{ header: '지적(PTOUT)', name: 'ptout', align: 'right', width: 120, formatter: function(e){ return e.value != null ? Number(e.value).toLocaleString(undefined, { minimumFractionDigits: 0, maximumFractionDigits: 2 }) : ''; } },
{ header: '공시지가(OALP)', name: 'oalp', align: 'right', width: 130, formatter: function(e){ return e.value != null ? Number(e.value).toLocaleString() : ''; } },
{ header: '비고', name: 'rmrk', align: 'left', width: 200 },
{ header: '등록일시', name: 'regDt', align: 'center', width: 150, formatter: function (e) { return e.value ? moment(e.value).format('YYYY-MM-DD HH:mm:ss') : ''; } },
{ header: '등록자', name: 'rgtr', align: 'center', width: 100 },
{ header: '수정일시', name: 'mdfcnDt', align: 'center', width: 150, formatter: function (e) { return e.value ? moment(e.value).format('YYYY-MM-DD HH:mm:ss') : ''; } },
{ header: '수정자', name: 'mdfr', align: 'center', width: 100 },
{ header: '삭제여부', name: 'delYn', align: 'center', width: 80 },
{ header: '삭제일시', name: 'delDt', align: 'center', width: 150, formatter: function (e) { return e.value ? moment(e.value).format('YYYY-MM-DD HH:mm:ss') : ''; } },
{ header: '삭제자', name: 'dltr', align: 'center', width: 100 }
];
},
@ -107,7 +94,7 @@
return {
api: {
readData: {
url: '<c:url value="/crdn/crndRegistAndView/list.ajax"/>',
url: '<c:url value="/crdn/crndRegistAndView/pstnInfo/list.ajax"/>' ,
method: 'POST',
contentType: 'application/x-www-form-urlencoded',
processData: true
@ -117,11 +104,12 @@
serializer: function(params) {
// 기본 파라미터 (페이지 정보 등)
var defaultParams = $.param(params);
// 검색 조건 가져오기
var searchCond = window.CrdnDetailView ? window.CrdnDetailView.getSearchCondition() : {};
var searchParams = $.param(searchCond);
// detailView 화면의 hidden 입력값에서 단속연도/번호를 가져온다.
var crdnYr = $('#crdnYr').val();
var crdnNo = $('#crdnNo').val();
var extra = $.param({ crdnYr: crdnYr, crdnNo: crdnNo });
// 모든 파라미터 조합
return defaultParams + '&' + searchParams;
return defaultParams + '&' + extra;
}
};
},
@ -155,7 +143,7 @@
this.instance.on('click', function(ev) {
if (ev.rowKey !== undefined && ev.rowKey !== null) {
var rowData = self.instance.getRow(ev.rowKey);
console.log('Grid1 행 클릭:', rowData);
console.log('위치 정보 행 클릭:', rowData);
}
});
@ -164,7 +152,7 @@
var rowKey = ev.rowKey;
var rowData = self.instance.getRow(rowKey);
if (rowData) {
console.log('Grid1 행 더블클릭:', rowData);
console.log('위치 정보 행 더블클릭:', rowData);
// 상세 정보 표시 또는 추가 동작 구현 가능
}
});
@ -178,7 +166,7 @@
search: function() {
if (this.grid.instance) {
this.grid.instance.readData();
console.log('Grid1 검색 실행');
console.log('위치 정보 검색 실행');
}
},
@ -191,10 +179,10 @@
// 메인 모듈에 자신을 등록
if (window.CrdnDetailView) {
window.CrdnDetailView.registerGrid('grid1', this);
window.CrdnDetailView.registerGrid('pstn', this);
}
console.log('Grid1 (단속자료 위치정보) 모듈이 초기화되었습니다.');
console.log('pstn (위치 정보) 모듈이 초기화되었습니다.');
}
};
@ -202,12 +190,12 @@
$(document).ready(function() {
// 메인 모듈이 로드될 때까지 약간의 지연
setTimeout(function() {
CrdnDetailViewGrid1.init();
CrdnDetailViewPstn.init();
}, 100);
});
// 전역 네임스페이스에 모듈 노출
window.CrdnDetailViewGrid1 = CrdnDetailViewGrid1;
window.CrdnDetailViewPstn = CrdnDetailViewPstn;
})(window, jQuery);
</script>
</script>

@ -0,0 +1,268 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<!-- 위치정보 등록 팝업 -->
<div class="popup_wrap">
<div class="popup_inner">
<div class="popup_tit">
<h2 class="tit">위치정보 등록</h2>
<a href="#" class="pop-x-btn modalclose" id="btnCloseTop"></a>
</div>
<div class="popup_con">
<div class="forms_table_non">
<!-- 중요로직: 단속연도/번호는 부모창에서 전달받아 그대로 저장에 사용 -->
<form id="pstnInfoForm" name="pstnInfoForm">
<input type="hidden" id="mode" name="mode" value="${mode}" />
<input type="hidden" id="crdnYr" name="crdnYr" value="${crdnYr}" />
<input type="hidden" id="crdnNo" name="crdnNo" value="${crdnNo}" />
<table>
<colgroup>
<col style="width: 18%;" />
<col style="width: 32%;" />
<col style="width: 18%;" />
<col style="width: 32%;" />
</colgroup>
<tr>
<th class="th">단속년도</th>
<td>
<input type="text" class="input" value="${crdnYr}" readonly style="width: 120px;"/>
</td>
<th class="th">단속번호</th>
<td>
<input type="text" class="input" value="${crdnNo}" readonly style="width: 140px;"/>
</td>
</tr>
<tr>
<th class="th"><span class="required">*</span> 법정동</th>
<td>
<select id="stdgEmdCd" name="stdgEmdCd" class="input" style="width: 180px;" validation-check="required">
<option value="">선택하세요</option>
<c:forEach var="code" items="${stdgEmdCdList}">
<option value="${code.cdId}">${code.cdNm}</option>
</c:forEach>
</select>
</td>
<th class="th"><span class="required">*</span> 지목</th>
<td>
<select id="ldcgCd" name="ldcgCd" class="input" style="width: 180px;" validation-check="required">
<option value="">선택하세요</option>
<c:forEach var="code" items="${ldcgCdList}">
<option value="${code.cdId}">${code.cdNm}</option>
</c:forEach>
</select>
</td>
</tr>
<tr>
<th class="th"><span class="required">*</span> 행정구역코드</th>
<td>
<input type="text" id="pbadmsZoneCd" name="pbadmsZoneCd" class="input" maxlength="10" style="width: 180px;" placeholder="예) 4128700000"/>
</td>
<th class="th">우편번호</th>
<td>
<input type="text" id="zip" name="zip" class="input" maxlength="6" style="width: 120px;" />
</td>
</tr>
<tr>
<th class="th">지번 전체주소</th>
<td colspan="3">
<input type="text" id="lotnoWholAddr" name="lotnoWholAddr" class="input" style="width: 95%;" maxlength="2000"/>
</td>
</tr>
<tr>
<th class="th">도로명 전체주소</th>
<td colspan="3">
<input type="text" id="roadNmWholAddr" name="roadNmWholAddr" class="input" style="width: 95%;" maxlength="2000"/>
</td>
</tr>
<tr>
<th class="th">상세주소</th>
<td colspan="3">
<input type="text" id="dtlAddr" name="dtlAddr" class="input" style="width: 95%;" maxlength="320"/>
</td>
</tr>
<tr>
<th class="th">비고</th>
<td colspan="3">
<textarea id="rmrk" name="rmrk" class="textarea" rows="3" maxlength="1000" style="width: 95%;"></textarea>
</td>
</tr>
<!-- 아래부터 tb_pstn_info 누락 컬럼 입력 영역 추가 -->
<!-- 중요로직: sggCd(시군구 코드는 세션에서 서버가 설정) -->
<tr>
<th class="th">지번 주소</th>
<td>
<input type="text" id="lotnoAddr" name="lotnoAddr" class="input" style="width: 95%;" maxlength="320"/>
</td>
<th class="th">도로명 주소</th>
<td>
<input type="text" id="roadNmAddr" name="roadNmAddr" class="input" style="width: 95%;" maxlength="320"/>
</td>
</tr>
<tr>
<th class="th">참고 주소</th>
<td>
<input type="text" id="refAddr" name="refAddr" class="input" style="width: 95%;" maxlength="320"/>
</td>
<th class="th">도로명 코드</th>
<td>
<input type="text" id="roadNmCd" name="roadNmCd" class="input" style="width: 180px;" maxlength="12"/>
</td>
</tr>
<tr>
<th class="th">지번 본번</th>
<td>
<input type="text" id="lotnoMno" name="lotnoMno" class="input" style="width: 120px;" maxlength="4"/>
</td>
<th class="th">지번 부번</th>
<td>
<input type="text" id="lotnoSno" name="lotnoSno" class="input" style="width: 120px;" maxlength="4"/>
</td>
</tr>
<tr>
<th class="th">건물 본번</th>
<td>
<input type="text" id="bldgMno" name="bldgMno" class="input" style="width: 120px;" maxlength="4"/>
</td>
<th class="th">건물 부번</th>
<td>
<input type="text" id="bldgSno" name="bldgSno" class="input" style="width: 120px;" maxlength="4"/>
</td>
</tr>
<tr>
<th class="th">지하 여부</th>
<td>
<select id="udgdYnCd" name="udgdYnCd" class="input" style="width: 120px;">
<option value="">선택</option>
<option value="Y">Y</option>
<option value="N">N</option>
</select>
</td>
<th class="th">산 여부</th>
<td>
<select id="mtnYnCd" name="mtnYnCd" class="input" style="width: 120px;">
<option value="">선택</option>
<option value="Y">Y</option>
<option value="N">N</option>
</select>
</td>
</tr>
<tr>
<th class="th">지적(PTOUT)</th>
<td>
<input type="text" id="ptout" name="ptout" class="input" style="width: 180px;" maxlength="22" placeholder="예) 12345.67"/>
</td>
<th class="th">공시지가(OALP)</th>
<td>
<input type="text" id="oalp" name="oalp" class="input" style="width: 180px;" maxlength="13" placeholder="예) 1000000"/>
</td>
</tr>
<!-- 시스템 정보 (읽기전용 표시) -->
<tr>
<th class="th">위치정보 ID</th>
<td>
<input type="text" id="pstnInfoId" name="pstnInfoId" class="input" style="width: 180px;" readonly />
</td>
<th class="th">등록 일시</th>
<td>
<input type="text" id="regDt" name="regDt" class="input" style="width: 180px;" readonly />
</td>
</tr>
<tr>
<th class="th">등록자</th>
<td>
<input type="text" id="rgtr" name="rgtr" class="input" style="width: 180px;" readonly />
</td>
<th class="th">수정 일시</th>
<td>
<input type="text" id="mdfcnDt" name="mdfcnDt" class="input" style="width: 180px;" readonly />
</td>
</tr>
<tr>
<th class="th">수정자</th>
<td>
<input type="text" id="mdfr" name="mdfr" class="input" style="width: 180px;" readonly />
</td>
<td colspan="2"></td>
</tr>
<tr>
<th class="th">삭제 여부</th>
<td>
<input type="text" id="delYn" name="delYn" class="input" style="width: 120px;" readonly />
</td>
<th class="th">삭제 일시 / 삭제자</th>
<td>
<input type="text" id="delDt" name="delDt" class="input" style="width: 180px;" readonly />
<input type="text" id="dltr" name="dltr" class="input" style="width: 120px; margin-left: 6px;" readonly />
</td>
</tr>
</table>
</form>
</div>
</div>
<div class="popup_foot">
<div class="mainccs rig">
<button type="button" id="saveBtn" class="newbtn bg1">저장</button>
<button type="button" id="closeBtn" class="newbtn bg2" style="margin-left: 5px;">닫기</button>
</div>
</div>
</div>
</div>
<script type="text/javascript">
(function(window, $) {
'use strict';
// 중요로직: 필수값(법정동, 지목, 행정구역코드) 검증 후 서버에 저장
function savePstnInfo() {
if (!$('#stdgEmdCd').val()) {
alert('법정동을 선택하세요.');
$('#stdgEmdCd').focus();
return;
}
if (!$('#ldcgCd').val()) {
alert('지목을 선택하세요.');
$('#ldcgCd').focus();
return;
}
if (!$('#pbadmsZoneCd').val()) {
alert('행정구역코드를 입력하세요.');
$('#pbadmsZoneCd').focus();
return;
}
var formData = $('#pstnInfoForm').serialize();
$.ajax({
url: '<c:url value="/crdn/crndRegistAndView/pstnInfo/insert.ajax"/>',
type: 'POST',
data: formData,
success: function (res) {
if (res && res.success) {
alert('저장되었습니다.');
try {
if (window.opener && window.opener.CrdnDetailViewPstn && window.opener.CrdnDetailViewPstn.search) {
window.opener.CrdnDetailViewPstn.search(); // 부모창 위치 정보 그리드 새로고침
}
} catch (e) { console.warn(e); }
window.close();
} else {
alert(res.message || '저장에 실패했습니다.');
}
},
error: function(xhr) {
alert('저장 중 오류가 발생했습니다.');
console.error(xhr);
}
});
}
$(document).ready(function() {
$('#saveBtn').on('click', savePstnInfo);
$('#closeBtn, #btnCloseTop').on('click', function(e){ e.preventDefault(); window.close(); });
});
})(window, jQuery);
</script>
Loading…
Cancel
Save