diff --git a/.gitignore b/.gitignore index a1c2a23..c2065bc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,37 @@ -# Compiled class file -*.class +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ -# Log file -*.log +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ -# BlueJ files -*.ctxt +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ -# Mobile Tools for Java (J2ME) -.mtj.tmp/ +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* +### VS Code ### +.vscode/ diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..123a1d6 --- /dev/null +++ b/build.gradle @@ -0,0 +1,63 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id 'java' + id 'java-library' + id 'maven-publish' + id 'org.jetbrains.kotlin.jvm' version '1.8.10' + id 'org.jetbrains.kotlin.plugin.spring' version '1.8.10' + id "org.jmailen.kotlinter" version "3.13.0" +} + +group = 'herbaccara' +version = '0.0.3' +sourceCompatibility = '1.8' + +publishing { + publications { + shadow(MavenPublication) { + from components.java + + version = version + artifactId = project.name + groupId = rootProject.group + } + } +} + +kotlinter { + disabledRules = ["no-wildcard-imports", "enum-entry-name-case"] +} + +repositories { + mavenCentral() + maven { url = uri("https://jitpack.io") } +} + +dependencies { + implementation 'org.jetbrains.kotlin:kotlin-reflect' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' + + implementation 'org.springframework:spring-context:5.3.20' + implementation 'org.springframework:spring-web:5.3.20' + + implementation 'org.springframework.boot:spring-boot:2.7.0' + implementation 'org.springframework.boot:spring-boot-autoconfigure:2.7.0' + testImplementation 'org.springframework.boot:spring-boot-starter-test:2.7.0' + + implementation 'com.fasterxml.jackson.module:jackson-module-kotlin:2.13.3' + implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3' + + implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.3' +} + +tasks.withType(KotlinCompile) { + kotlinOptions { + freeCompilerArgs = ['-Xjsr305=strict'] + jvmTarget = '1.8' + } +} + +tasks.named('test') { + useJUnitPlatform() +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..943f0cb Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..fc10b60 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..65dcd68 --- /dev/null +++ b/gradlew @@ -0,0 +1,244 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..6689b85 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/jitpack.yml b/jitpack.yml new file mode 100644 index 0000000..c4d6bdf --- /dev/null +++ b/jitpack.yml @@ -0,0 +1,2 @@ +jdk: + - openjdk8 \ No newline at end of file diff --git a/src/main/kotlin/herbaccara/boot/autoconfigure/datakr/DataKrAutoConfiguration.kt b/src/main/kotlin/herbaccara/boot/autoconfigure/datakr/DataKrAutoConfiguration.kt new file mode 100644 index 0000000..1d2c147 --- /dev/null +++ b/src/main/kotlin/herbaccara/boot/autoconfigure/datakr/DataKrAutoConfiguration.kt @@ -0,0 +1,60 @@ +package herbaccara.boot.autoconfigure.datakr + +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.dataformat.xml.XmlMapper +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import herbaccara.datakr.DataKrService +import org.springframework.boot.autoconfigure.AutoConfiguration +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty +import org.springframework.boot.context.properties.EnableConfigurationProperties +import org.springframework.boot.web.client.RestTemplateBuilder +import org.springframework.context.annotation.Bean +import org.springframework.http.converter.StringHttpMessageConverter +import org.springframework.web.client.RestTemplate +import java.nio.charset.StandardCharsets +import java.util.* + +@AutoConfiguration +@EnableConfigurationProperties(DataKrProperties::class) +@ConditionalOnProperty(prefix = "datakr", value = ["enabled"], havingValue = "true") +class DataKrAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + fun objectMapper(): ObjectMapper { + return jacksonObjectMapper().apply { + findAndRegisterModules() + } + } + + @Bean + @ConditionalOnMissingBean + fun xmlMapper(): XmlMapper { + return XmlMapper().apply { + findAndRegisterModules() + } + } + + @Bean + @ConditionalOnMissingBean + fun restTemplate(): RestTemplate = RestTemplate() + + @Bean + fun dataKrService( + objectMapper: ObjectMapper, + xmlMapper: XmlMapper, + properties: DataKrProperties + ): DataKrService { + if (properties.serviceKey.isEmpty()) throw NullPointerException() + + val restTemplate = RestTemplateBuilder() + .rootUri(properties.rootUri) + .messageConverters( + StringHttpMessageConverter(StandardCharsets.UTF_8) + ) + .build() + + return DataKrService(restTemplate, xmlMapper, objectMapper, properties) + } +} diff --git a/src/main/kotlin/herbaccara/boot/autoconfigure/datakr/DataKrProperties.kt b/src/main/kotlin/herbaccara/boot/autoconfigure/datakr/DataKrProperties.kt new file mode 100644 index 0000000..e2111ef --- /dev/null +++ b/src/main/kotlin/herbaccara/boot/autoconfigure/datakr/DataKrProperties.kt @@ -0,0 +1,12 @@ +package herbaccara.boot.autoconfigure.datakr + +import org.springframework.boot.context.properties.ConfigurationProperties +import org.springframework.boot.context.properties.ConstructorBinding + +@ConfigurationProperties(prefix = "datakr") +@ConstructorBinding +data class DataKrProperties( + val enabled: Boolean = true, + val rootUri: String = "https://apis.data.go.kr", + val serviceKey: String +) diff --git a/src/main/kotlin/herbaccara/boot/autoconfigure/datakr/EnableDataKr.kt b/src/main/kotlin/herbaccara/boot/autoconfigure/datakr/EnableDataKr.kt new file mode 100644 index 0000000..aaba071 --- /dev/null +++ b/src/main/kotlin/herbaccara/boot/autoconfigure/datakr/EnableDataKr.kt @@ -0,0 +1,10 @@ +package herbaccara.boot.autoconfigure.datakr + +import org.springframework.context.annotation.Import +import java.lang.annotation.* + +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.RUNTIME) +@MustBeDocumented +@Import(DataKrAutoConfiguration::class) +annotation class EnableDataKr diff --git a/src/main/kotlin/herbaccara/datakr/DataKrService.kt b/src/main/kotlin/herbaccara/datakr/DataKrService.kt new file mode 100644 index 0000000..3b214d3 --- /dev/null +++ b/src/main/kotlin/herbaccara/datakr/DataKrService.kt @@ -0,0 +1,79 @@ +package herbaccara.datakr + +import com.fasterxml.jackson.core.type.TypeReference +import com.fasterxml.jackson.databind.ObjectMapper +import com.fasterxml.jackson.dataformat.xml.XmlMapper +import herbaccara.boot.autoconfigure.datakr.DataKrProperties +import herbaccara.datakr.model.Holiday +import herbaccara.datakr.model.Hopital +import herbaccara.datakr.model.Result +import org.springframework.web.client.RestTemplate +import org.springframework.web.client.getForObject +import org.springframework.web.util.UriComponentsBuilder +import java.net.URI +import java.net.URLEncoder + +class DataKrService( + private val restTemplate: RestTemplate, + private val xmlMapper: XmlMapper, + private val objectMapper: ObjectMapper, + private val properties: DataKrProperties +) { + /*** + * 국립중앙의료원_국립중앙의료원_전국 병·의원 찾기 서비스 - 병/의원 FullData 내려받기 + * https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15000736 + */ + fun getHsptlMdcncFullDown(pageNo: Int, numOfRows: Int): Result { + val uri = UriComponentsBuilder + .fromHttpUrl("${properties.rootUri}/B552657/HsptlAsembySearchService/getHsptlMdcncFullDown") + .queryParam("pageNo", pageNo) + .queryParam("numOfRows", numOfRows) + .toUriString() + "&ServiceKey=" + URLEncoder.encode(properties.serviceKey, "UTF-8") + + val body: String = restTemplate.getForObject(URI(uri)) + + return xmlMapper.readValue(body, object : TypeReference>() {}) + } + + /*** + * @param numOfRows 1000 ~ 5000 개 정도가 적당하다. + */ + fun getHsptlMdcncFullDown(numOfRows: Int, block: (Result) -> Unit) { + val totalCount = getHsptlMdcncFullDown(1, 1).body.totalCount + + var totalPage = totalCount / numOfRows + if (totalCount % numOfRows > 0) { + totalPage++ + } + + (1..totalPage) + .forEach { pageNo: Int -> block(getHsptlMdcncFullDown(pageNo, numOfRows)) } + } + + fun getHsptlMdcncFullDown(numOfRows: Int): List> { + val list = mutableListOf>() + getHsptlMdcncFullDown(numOfRows, list::add) + return list + } + + /*** + * 한국천문연구원_특일 정보 - 공휴일 정보 조회 + * https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15012690 + */ + fun getRestDeInfo(solYear: Int, solMonth: Int): Result { + val uri = UriComponentsBuilder + .fromHttpUrl("${properties.rootUri}/B090041/openapi/service/SpcdeInfoService/getRestDeInfo") + .queryParam("solYear", solYear) + .queryParam("solMonth", solMonth.toString().padStart(2, '0')) + .toUriString() + "&ServiceKey=" + URLEncoder.encode(properties.serviceKey, "UTF-8") + + val body: String = restTemplate.getForObject(URI(uri)) + + return xmlMapper.readValue(body, object : TypeReference>() {}) + } + + fun getRestDeInfo(solYear: Int): List> { + return (1..12) + .map { getRestDeInfo(solYear, it) } + } +} diff --git a/src/main/kotlin/herbaccara/datakr/model/Holiday.kt b/src/main/kotlin/herbaccara/datakr/model/Holiday.kt new file mode 100644 index 0000000..207a552 --- /dev/null +++ b/src/main/kotlin/herbaccara/datakr/model/Holiday.kt @@ -0,0 +1,28 @@ +package herbaccara.datakr.model + +data class Holiday( + /*** + * dateKind + */ + val dateKind: Int, + + /*** + * 명칭 + */ + val dateName: String, + + /*** + * 공공기관 휴일여부 + */ + val isHoliday: String, + + /*** + * 날짜 (yyyyMMdd) + */ + val locdate: Int, + + /*** + * 순번 + */ + val seq: Int +) diff --git a/src/main/kotlin/herbaccara/datakr/model/Hopital.kt b/src/main/kotlin/herbaccara/datakr/model/Hopital.kt new file mode 100644 index 0000000..6095c5a --- /dev/null +++ b/src/main/kotlin/herbaccara/datakr/model/Hopital.kt @@ -0,0 +1,175 @@ +package herbaccara.datakr.model + +import com.fasterxml.jackson.core.JsonParser +import com.fasterxml.jackson.databind.DeserializationContext +import com.fasterxml.jackson.databind.annotation.JsonDeserialize +import com.fasterxml.jackson.databind.deser.std.StdDeserializer +import herbaccara.datakr.model.Hopital.Div +import herbaccara.datakr.model.Hopital.Emcls + +data class Hopital( + /*** + * 일련번호 + */ + val rnum: Int, + + /*** + * 주소 + */ + val dutyAddr: String, + + /*** + * 병원분류 [Div] + */ + val dutyDiv: String, + + /*** + * 병원분류명 + */ + val dutyDivNam: String, + + /*** + * 응급의료기관코드. [Emcls] + */ + val dutyEmcls: String, + + /*** + * 응급의료기관코드명 + */ + val dutyEmclsName: String, + + /*** + * 응급실운영여부(1/2). 1 : 운영, 2 : 미운영. + * 운영이라면 dutyTel3(응급실전화) 에 값이 있다. + */ + @field:JsonDeserialize(using = BooleanDeserializer::class) + val dutyEryn: Boolean, + + /*** + * 비고 + */ + val dutyEtc: String?, + + /*** + * 간이약도 + */ + val dutyMapimg: String?, + + /*** + * 기관명 + */ + val dutyName: String, + + /*** + * 대표전화1 + */ + val dutyTel1: String, + + /*** + * 응급실전화 + */ + val dutyTel3: String?, + + // 월 + val dutyTime1c: String?, + val dutyTime1s: String?, + + // 화 + val dutyTime2c: String?, + val dutyTime2s: String?, + + // 수 + val dutyTime3c: String?, + val dutyTime3s: String?, + + // 목 + val dutyTime4c: String?, + val dutyTime4s: String?, + + // 금 + val dutyTime5c: String?, + val dutyTime5s: String?, + + // 토 + val dutyTime6c: String?, + val dutyTime6s: String?, + + // 일 + val dutyTime7c: String?, + val dutyTime7s: String?, + + // 공휴일 + val dutyTime8c: String?, + val dutyTime8s: String?, + + /*** + * 기관ID : 동일테이블에 기관명을 포함하고 있음 + */ + val hpid: String, + + /*** + * 우편번호1 + */ + val postCdn1: Int, + + /*** + * 우편번호2 + */ + val postCdn2: Int, + + /*** + * 병원위도 + */ + val wgs84Lat: Double, + + /*** + * 병원경도 + */ + val wgs84Lon: Double, + + /*** + * 기관설명상세 + */ + val dutyInf: String? +) { + + /*** + * 병원 분류 + */ + enum class Div(val text: String) { + A("종합병원"), + B("병원"), + C("의원"), + D("요양병원"), + E("한방병원"), + G("한의원"), + I("기타"), + M("치과병원"), + N("치과의원"), + R("보건소"), + W("기타(구급차)"); + } + + /*** + * 응급의료기관코드 + */ + enum class Emcls(val text: String) { + G001("권역응급의료센터"), + G006("지역응급의료센터"), + G007("지역응급의료기관"), + G009("응급실운영신고기관"), + G099("응급의료기관 이외"); + } + + internal class BooleanDeserializer : StdDeserializer(Boolean::class.java) { + + override fun deserialize(p: JsonParser, ctxt: DeserializationContext): Boolean? { + val text = p.text + return if (text != null) { + text.toInt() == 1 + } else { + null + } + } + } +} diff --git a/src/main/kotlin/herbaccara/datakr/model/Result.kt b/src/main/kotlin/herbaccara/datakr/model/Result.kt new file mode 100644 index 0000000..4b45034 --- /dev/null +++ b/src/main/kotlin/herbaccara/datakr/model/Result.kt @@ -0,0 +1,18 @@ +package herbaccara.datakr.model + +open class Result( + val header: Header, + val body: Body +) { + data class Header( + val resultCode: String, + val resultMsg: String + ) + + data class Body( + val items: List, + val numOfRows: Int, + val pageNo: Int, + val totalCount: Int + ) +} diff --git a/src/main/resources/META-INF/spring.factories b/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..44cfeac --- /dev/null +++ b/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ + herbaccara.boot.autoconfigure.datakr.DataKrAutoConfiguration \ No newline at end of file diff --git a/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigue.AutoConfiguration.imports b/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigue.AutoConfiguration.imports new file mode 100644 index 0000000..75c1c1d --- /dev/null +++ b/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigue.AutoConfiguration.imports @@ -0,0 +1 @@ +herbaccara.boot.autoconfigure.datakr.DataKrAutoConfiguration \ No newline at end of file diff --git a/src/test/kotlin/herbaccara/datakr/DataKrServiceTest.kt b/src/test/kotlin/herbaccara/datakr/DataKrServiceTest.kt new file mode 100644 index 0000000..a35379c --- /dev/null +++ b/src/test/kotlin/herbaccara/datakr/DataKrServiceTest.kt @@ -0,0 +1,52 @@ +package herbaccara.datakr + +import com.fasterxml.jackson.core.type.TypeReference +import com.fasterxml.jackson.dataformat.xml.XmlMapper +import herbaccara.boot.autoconfigure.datakr.DataKrAutoConfiguration +import herbaccara.datakr.model.Hopital +import herbaccara.datakr.model.Result +import org.junit.jupiter.api.Test +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.test.context.TestPropertySource + +@SpringBootTest( + classes = [ + DataKrAutoConfiguration::class + ] +) +@TestPropertySource(locations = ["classpath:application.yml"]) +class DataKrServiceTest { + + @Autowired + lateinit var dataKrService: DataKrService + + @Test + fun xmlMapper() { + val xml = DataKrServiceTest::class.java.getResourceAsStream("/test.xml")!!.reader().readText() + + val xmlMapper = XmlMapper().apply { + findAndRegisterModules() + } + val readValue = xmlMapper.readValue(xml, object : TypeReference>() {}) + println() + } + + @Test + fun getRestDeInfo() { + val restDeInfo = dataKrService.getRestDeInfo(2023, 3) + println(restDeInfo) + } + + @Test + fun getRestDeInfo2() { + val restDeInfo = dataKrService.getRestDeInfo(2023) + println(restDeInfo) + } + + @Test + fun getHsptlMdcncFullDown() { + val hsptlMdcncFullDown = dataKrService.getHsptlMdcncFullDown(1, 1000) + println(hsptlMdcncFullDown) + } +} diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml new file mode 100644 index 0000000..91624cd --- /dev/null +++ b/src/test/resources/application.yml @@ -0,0 +1,3 @@ +datakr: + enabled: true + service-key: \ No newline at end of file diff --git a/src/test/resources/test.xml b/src/test/resources/test.xml new file mode 100644 index 0000000..26dec5a --- /dev/null +++ b/src/test/resources/test.xml @@ -0,0 +1,2831 @@ + + +
+ 00 + NORMAL SERVICE. +
+ + + + 경기도 화성시 남양읍 남양중앙로 293, 4,5층 + E + 한방병원 + G099 + 응급의료기관 이외 + 2 + 남양한방병원 + 031-613-3700 + 2100 + 1100 + 2100 + 1100 + 2100 + 1100 + 2100 + 1100 + 1700 + 1000 + 1700 + 1100 + B2100562 + 182 + 66 + 1 + 37.201075000000003 + 127.071597222222223 + + + 경기도 화성시 동탄순환대로 704, 성산타워 A동 5,6,7층 (영천동) + E + 한방병원 + G099 + 응급의료기관 이외 + 2 + 동탄2튼튼한방병원 + 1566-8327 + 2000 + 0930 + 2000 + 0930 + 2000 + 0930 + 2000 + 0930 + 2000 + 0930 + 1330 + 0930 + 1330 + 0930 + 1330 + 0930 + C2108658 + 184 + 66 + 2 + 37.2075871399824 + 127.110780749687 + + + 경기도 화성시 동탄솔빛로 57, 케이에이치스퀘어 2,3,4층 (반송동) + E + 한방병원 + G099 + 응급의료기관 이외 + 2 + 동탄더하다한방병원 + 1644-7889 + 2100 + 0900 + 2100 + 0900 + 2100 + 0900 + 2100 + 0900 + 2100 + 0900 + 1600 + 0900 + 1600 + 0900 + 1600 + 0900 + C2109157 + 184 + 43 + 3 + 37.1941132102769 + 127.07356228837 + + + 경기도 화성시 봉담읍 상리2길 55, 6~8층 + E + 한방병원 + G099 + 응급의료기관 이외 + 2 + 봉담한방병원 + 031-295-2000 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1300 + 0900 + C2109270 + 183 + 09 + 4 + 37.2250766059125 + 126.946957598813 + + + 경기도 화성시 노들길 6-8, 3,4,5층 (새솔동) + E + 한방병원 + G099 + 응급의료기관 이외 + 2 + 송산한방병원 + 031-357-8825 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + C2108128 + 182 + 42 + 5 + 37.2799811574415 + 126.819750356033 + + + 경기도 화성시 동탄지성로 116, 강남프라자 2,3,4,5층 (반송동) + E + 한방병원 + G099 + 응급의료기관 이외 + 2 + 튼튼한방병원 + 031-1566-8375 + 1800 + 1000 + 1800 + 1000 + 1800 + 1000 + 1800 + 1000 + 1800 + 1000 + C2107885 + 184 + 34 + 6 + 37.20896807284877 + 127.06285634148524 + + + 경기도 화성시 동탄신리천로 411, 우성스타타워 4층,5층 (목동) + E + 한방병원 + G099 + 응급의료기관 이외 + 2 + 법정공휴일은 휴무 + 한독한방병원 + 031-375-5812 + 1930 + 0930 + 1930 + 0930 + 1930 + 0930 + 1930 + 0930 + 1930 + 0930 + 1500 + 0930 + 1500 + 0930 + 1500 + 0930 + C2108109 + 184 + 84 + 7 + 37.1827023571775 + 127.124116387163 + + + 경기도 화성시 남양읍 시청로160번길 46, 6,7층 + E + 한방병원 + G099 + 응급의료기관 이외 + 2 + 한송한방병원 + 031-366-7070 + 1800 + 1000 + 1800 + 1000 + 1800 + 1000 + 1800 + 1000 + 1800 + 1000 + C2108558 + 182 + 70 + 8 + 37.1988127806919 + 126.825639887 + + + 경기도 화성시 향남읍 발안양감로 187, 4,5층 + E + 한방병원 + G099 + 응급의료기관 이외 + 2 + 화성한방병원 + 031-356-8275 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + 1250 + 0930 + C2108072 + 186 + 06 + 9 + 37.11640182703012 + 126.91088238867312 + + + 경기도 화성시 동탄대로 469-12, 1050,1051호 (오산동, 동탄역 린스트라우스) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 1층더행복한의원 + 031-831-8292 + 2030 + 1000 + 2030 + 1000 + 2030 + 1000 + 2030 + 1000 + 2030 + 1000 + 1430 + 1000 + B2104481 + 184 + 78 + 10 + 37.195857294639 + 127.09805947085711 + + + 경기도 화성시 수노을중앙로 146, 호평프라자 5층 502,503호 (새솔동) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 점심시간: 13시-14시 + 365청담한의원 + 031-356-7470 + 1930 + 0930 + 2030 + 0930 + 1930 + 0930 + 2030 + 0930 + 1930 + 0930 + 1400 + 0900 + 1400 + 0900 + B2104465 + 182 + 44 + 11 + 37.2840185325376 + 126.81886690758468 + + + 경기도 화성시 남양성지로 119, 2층 (남양동, 성지빌딩) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 감동한의원 + 031-355-5175 + 2100 + 0900 + 1900 + 0900 + 1900 + 0900 + 2100 + 0900 + 1900 + 0900 + 1500 + 0900 + B2100149 + 182 + 61 + 12 + 37.20792177439277 + 126.81675530067582 + + + 경기도 화성시 효행로 235 (기안동) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 한국농수산대학 건너편 + 감초한의원 + 031-255-4357 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1500 + 0930 + B2100151 + 183 + 37 + 13 + 37.226811059866776 + 126.97204461193559 + + + 경기도 화성시 동탄솔빛로 68, 402호 (반송동, 계림네이처) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 오전 12시, 오후6시 접수마감 + 반송동 나루마을 상가 + 경희나루한의원 + 031-613-6780 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1230 + 0930 + B2100082 + 184 + 42 + 14 + 37.194425284632935 + 127.07493647894317 + + + 경기도 화성시 효행로 1073, 거성프라자 202호 (진안동) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희나비솔한의원 + 031-237-2030 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1400 + 0930 + B2104559 + 183 + 98 + 15 + 37.2154178429317 + 127.043948205852 + + + 경기도 화성시 서신면 매화2길 53-3, 1,2층 + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희내외한의원 + 031-366-8644 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1400 + 0900 + B2104745 + 185 + 55 + 16 + 37.1714148550407 + 126.700542956579 + + + 경기도 화성시 동탄대로 557-9, 우성르보아시티 A동 3층 301~311호,4층401~410호,B동 305~311호 (오산동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 점심시간 : 13~14시(토요일 점심시간 없음, 1시간 전까지 접수) + <<과별 진료시간 상이>> + 1.소아과 ~13시 + 2.가정의학과 ~14시 + 3. 정신건강의학과 ~14시 + + 메디피움동탄의원 + 031-630-1300 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1400 + 0900 + A2116701 + 184 + 78 + 17 + 37.20318832874035 + 127.09796532053136 + + + 경기도 화성시 동탄중앙로 220 (반송동, 메타폴리스) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 메타폴리스내과의원 + 031-831-5582 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1400 + 0900 + A2113717 + 184 + 45 + 18 + 37.20527828170168 + 127.06956515739051 + + + 경기도 화성시 향남읍 발안로 111, 4층 (향남읍) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 멘파워비뇨의학과의원 + 031-352-1110 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1400 + 0900 + A2117528 + 185 + 91 + 19 + 37.1316847208799 + 126.922770100075 + + + 경기도 화성시 동탄지성로 148, 304호 (능동, 제이스프라자) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 명의원 + 031-8015-1245 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1400 + 0930 + A2102492 + 184 + 33 + 20 + 37.21013120554677 + 127.05959281581471 + + + 경기도 화성시 동탄대로 557-9, 우성르보아시티 B동 601~603호 (오산동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 뮤즈의원 + 1661-4029 + 2000 + 1100 + 2000 + 1100 + 2000 + 1100 + 2000 + 1100 + 2000 + 1100 + 1600 + 1100 + A2118605 + 184 + 78 + 21 + 37.2031891394877 + 127.097965546869 + + + 경기도 화성시 영통로 14-10, 토마토프라자 2층 202,203호 (반월동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 산부인과 전문의 1명 + 내과, 성형외과, 피부과 + + 미라클의원 + 031-202-6701 + 1900 + 1000 + 2030 + 1000 + 1900 + 1000 + 2030 + 1400 + 1900 + 1000 + 1330 + 0930 + A2104675 + 183 + 80 + 22 + 37.2331878831355 + 127.06500153893128 + + + 경기도 화성시 우정읍 조암남로 39, 3층 + C + 의원 + G099 + 응급의료기관 이외 + 2 + 미래의원 + 031-831-8518 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + A2117038 + 185 + 67 + 23 + 37.0843942376216 + 126.81931824701 + + + 경기도 화성시 떡전골로 72-3, 4층 402호 (병점동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 점심시간: 12:30~14:00 + 리치프라자 4층/ 목요일 오전 진료불가능, 폐쇄병동있음, 밤에도 입원가능함. + 미래정신건강의학과의원 + 031-234-7475 + 1830 + 0930 + 2000 + 0930 + 1830 + 0930 + 1830 + 0930 + 1300 + 0930 + A2106182 + 184 + 12 + 24 + 37.20529611701895 + 127.03488495497453 + + + 경기도 화성시 봉담읍 상리2길 55, 409~411호 + C + 의원 + G099 + 응급의료기관 이외 + 2 + 미엔느의원 + 031-893-4520 + 1900 + 1030 + 1300 + 1030 + 1900 + 1030 + 1300 + 1030 + 2030 + 1030 + A2113713 + 183 + 09 + 25 + 37.216575259698544 + 126.9588636957358 + + + 경기도 화성시 수노을중앙로 136, 401~403호 (새솔동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 미엘피부과의원 + 031-357-9780 + 1900 + 0930 + 2030 + 0930 + 1900 + 0930 + 1900 + 0930 + 2030 + 0930 + 1500 + 0930 + A2118278 + 182 + 44 + 26 + 37.2847226058721 + 126.818221887063 + + + 경기도 화성시 효행로 1063, 301호 (진안동, 메디프렌드) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 미즈맘산부인과의원 + 031-223-0020 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1400 + 0930 + A2102969 + 183 + 98 + 27 + 37.21496412289638 + 127.04312084668746 + + + 경기도 화성시 봉담읍 동화길 89, 4층 403,404호 (주공프라자) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 미즈여성의원 + 031-297-8787 + 1830 + 0930 + 1830 + 0930 + 2100 + 0930 + 1830 + 0930 + 1830 + 0930 + 1300 + 0930 + A2101250 + 183 + 02 + 28 + 37.21665533864912 + 126.95857637564421 + + + 경기도 화성시 동탄지성로 139, 2~8층 (능동, 양진빌딩) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 미즈파크산부인과의원 + 031-8003-7575 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1600 + 0830 + 1300 + 1000 + 1300 + 0900 + A2103209 + 184 + 31 + 29 + 37.20931908859999 + 127.0601439157 + + + 경기도 화성시 동탄대로 537, 라스플로레스 325.326 (오산동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 바노바기의원동탄 + 031-372-6508 + 2000 + 1000 + 2000 + 1000 + 2000 + 1000 + 2000 + 1000 + 2000 + 1000 + 1600 + 1000 + A2118929 + 184 + 78 + 30 + 37.2022219858232 + 127.097923632495 + + + 경기도 화성시 동탄순환대로 706, 501.502.503.504호 (영천동, 서건에듀프라자) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 바로본신경외과의원 + 031-8050-8579 + 2000 + 1000 + 2000 + 1000 + 2100 + 1400 + 2000 + 1000 + 2000 + 1000 + 1500 + 0900 + A2114479 + 184 + 66 + 31 + 37.20781221773317 + 127.11059283707249 + + + 경기도 화성시 남양읍 시청로 6, 4층 + C + 의원 + G099 + 응급의료기관 이외 + 2 + 바로튼튼신경외과의원 + 031-357-8586 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1300 + 0900 + A2118880 + 182 + 68 + 32 + 37.2084041510997 + 126.81853454757 + + + 경기도 화성시 봉담읍 상리2길 51, 403호 + C + 의원 + G099 + 응급의료기관 이외 + 2 + 바른속내과의원 + 031-305-8484 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + A2118779 + 183 + 09 + 33 + 37.2245561538362 + 126.947144105744 + + + 경기도 화성시 남양읍 시청로 109 + C + 의원 + G099 + 응급의료기관 이외 + 2 + 바른수정형외과의원 + 031-357-7569 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1300 + 0900 + A2115503 + 182 + 71 + 34 + 37.2011508843 + 126.8258011068 + + + 경기도 화성시 동탄지성로 133 (능동) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 가나팀치과의원 + 031-8003-2080 + 1900 + 1000 + 1900 + 1000 + 1900 + 1000 + 1900 + 1000 + 1900 + 1000 + 1330 + 0930 + A2107206 + 184 + 31 + 35 + 37.209110608558724 + 127.06083572466144 + + + 경기도 화성시 우정읍 조암남로 15, 2층 (우정읍) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 강치과의원 + 031-358-8485 + 1900 + 0930 + 1700 + 0930 + 1900 + 0930 + 1700 + 0930 + 1900 + 0930 + 1400 + 0930 + A2107077 + 185 + 67 + 36 + 37.082702777777776 + 126.817222222222227 + + + 경기도 화성시 봉담읍 와우로 24, 도원프라자 A동 202,203호 + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 건강한건치과의원 + 031-305-2279 + 2030 + 0930 + 1830 + 0930 + 1830 + 0930 + 2030 + 0930 + 1830 + 0930 + A2117704 + 183 + 20 + 37 + 37.2145369437181 + 126.969058471802 + + + 경기도 화성시 봉담읍 삼천병마로 1273, 3층 (이안건물) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 골든치과의원 + 031-296-2870 + 1800 + 0930 + 1800 + 0930 + 2000 + 0930 + 1800 + 0930 + 1800 + 0930 + 1300 + 0900 + A2113533 + 183 + 13 + 38 + 37.22017485000376 + 126.94860289591341 + + + 경기도 화성시 향남읍 발안공단로 101, 2층 + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 구문치과의원 + 031-8059-2842 + 2000 + 0930 + 1830 + 0930 + 2000 + 0930 + 1830 + 0930 + 1830 + 0930 + 1330 + 0930 + A2106544 + 186 + 23 + 39 + 37.08634011592528 + 126.90818391042373 + + + 경기도 화성시 팔탄면 푸른들판로 671, 2층 (팔탄면) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 구장치과의원 + 031-8059-2871 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1700 + 0930 + 1900 + 0930 + A2107836 + 185 + 29 + 40 + 37.16796420365549 + 126.89450504781738 + + + 경기도 화성시 효행로 1069 (진안동) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 굿모닝치과의원 + 031-221-4393 + 1830 + 1000 + 2000 + 1000 + 1830 + 1000 + 2000 + 1000 + 1830 + 1000 + 1400 + 0930 + A2108261 + 183 + 98 + 41 + 37.215227048887385 + 127.04362571809037 + + + 경기도 화성시 경기대로 1042, 새서울메디컬 2층 (진안동) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 권치과의원 + 031-237-5028 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1300 + 0930 + A2107075 + 184 + 01 + 42 + 37.20803597707781 + 127.03463212474293 + + + 경기도 화성시 정남면 서봉로 1006-4 (정남면) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 정남면 면사무소 앞 + 김대섭치과의원 + 031-359-8280 + 1830 + 1000 + 1830 + 1000 + 1830 + 1000 + 1830 + 1000 + 1830 + 1000 + 1300 + 1000 + A2106598 + 185 + 19 + 43 + 37.16084363672315 + 126.97181804849487 + + + 경기도 화성시 동탄순환대로 702, A동 401호 (영천동, 성산타워) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 꿈꾸는 소아치과의원 + 031-372-0770 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1400 + 0900 + A2114725 + 184 + 66 + 44 + 37.207379368634946 + 127.11096170213916 + + + 경기도 화성시 동탄순환대로18길 16, 센타프라자 301,302,303호 (목동) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 나노치과의원 + 031-373-2870 + 1900 + 1000 + 2000 + 1000 + 1900 + 1000 + 1900 + 1000 + 1400 + 1000 + 1400 + 1000 + A2116904 + 184 + 84 + 45 + 37.183120571203645 + 127.12434095085182 + + + 경기도 화성시 남양읍 시청로 6, 303,304,305호 + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 남양바른탑치과의원 + 031-8077-2600 + 2030 + 0930 + 1830 + 0930 + 2030 + 0930 + 1830 + 0930 + 1830 + 0930 + 1400 + 0930 + A2116171 + 182 + 68 + 46 + 37.2084024384 + 126.8185341011 + + + 경기도 화성시 남양성지로 141 (남양동) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 구강외과 진료가능 + 남양서울치과의원 + 031-356-6120 + 1830 + 0930 + 1830 + 0930 + 2030 + 0930 + 1830 + 0930 + 1830 + 0930 + 1400 + 0930 + A2107223 + 182 + 61 + 47 + 37.20922798906178 + 126.81866732892602 + + + 경기도 화성시 남양읍 남양성지로 123, 5층 (삼기프라자) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 점심시간 12:00~13:30 + 남양선연합치과의원 + 031-355-2875 + 1900 + 0930 + 2030 + 0930 + 1900 + 0930 + 2030 + 0930 + 1900 + 0930 + 1400 + 0930 + A2108209 + 182 + 61 + 48 + 37.20814590588586 + 126.81718733642961 + + + 경기도 화성시 남양읍 남양로 671, 7층 + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + - 월, 수, 목 저녁시간: 17:30~18:00 + - 월, 금 점심시간: 13:00~14:00 + + 남양스타치과의원 + 031-357-2885 + 2000 + 0900 + 1800 + 0900 + 2000 + 0900 + 2000 + 0900 + 1800 + 0900 + 1330 + 0900 + A2117177 + 182 + 70 + 49 + 37.198481416504 + 126.826036459501 + + + 경기도 화성시 남양성지로 139-1, 3층 (남양동, 국제포인트프라자) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 남양연세치과의원 + 031-355-2755 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1400 + 0930 + A2107222 + 182 + 61 + 50 + 37.209127777777780 + 126.818316666666661 + + + 경기도 화성시 남양읍 시청로 7, 위더스프라자 307,308호 + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 기업은행 2층 + 남양좋은치과의원 + 031-355-8275 + 1830 + 1000 + 1830 + 1000 + 1830 + 1000 + 1830 + 1000 + 1830 + 1000 + 1300 + 1000 + A2108291 + 182 + 62 + 51 + 37.20896328435923 + 126.81901933627242 + + + 경기도 화성시 남양읍 시청로 3, 2층 + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 남양참플란트치과의원 + 031-356-7674 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 2030 + 0900 + 1800 + 0900 + 1300 + 0900 + A2116916 + 182 + 62 + 52 + 37.20896187971881 + 126.81905096843242 + + + 경기도 화성시 남양성지로 135, 301호 (남양동, 남양빌딩) + N + 치과의원 + G099 + 응급의료기관 이외 + 2 + 경기도 화성시 남양동 1203번지 우리은행 건물3층 + 남양현대치과의원 + 031-355-7528 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1400 + 0900 + A2107207 + 182 + 61 + 53 + 37.20887391543681 + 126.81810490835069 + + + 경기도 화성시 우정읍 쌍봉로 109-14 (우정읍) + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 우정보건지소 + 031-369-2891 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100715 + 185 + 63 + 54 + 37.0898241607824 + 126.81534169957375 + + + 경기도 화성시 장안면 포승장안로 1219 + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 장안보건지소 + 031-369-2890 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100066 + 185 + 83 + 55 + 37.067497222222222 + 126.847244444444442 + + + 경기도 화성시 정남면 서봉로 998 (정남면사무소) + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 정남보건지소 + 031-5189-4470 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100718 + 185 + 19 + 56 + 37.16019130967996 + 126.97195340024274 + + + 경기도 화성시 팔탄면 서촌길1번길 15 (팔탄면) + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 팔탄보건지소 + 031-369-2889 + 1730 + 0900 + 1730 + 0900 + 1730 + 0900 + 1730 + 0900 + 1730 + 0900 + E2100045 + 185 + 27 + 57 + 37.162126913814184 + 126.90464578009937 + + + 경기도 화성시 서신면 궁평항로 1419 (서신면) + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 궁평보건진료소 + 031-357-2730 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100186 + 185 + 56 + 58 + 37.14275335530201 + 126.70182261404739 + + + 경기도 화성시 팔탄면 아랫사내길 66 + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 기천보건진료소 + 031-354-8224 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100138 + 445 + 910 + 59 + 37.17816925592576 + 126.90924219875268 + + + 경기도 화성시 우정읍 기아자동차로 221-6 + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 매향보건진료소 + 031-358-2616 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100132 + 185 + 70 + 60 + 37.049255801573366 + 126.76534362114654 + + + 경기도 화성시 정남면 문학로 84 + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 문학보건진료소 + 031-5189-7089 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100140 + 185 + 22 + 61 + 37.15106549739539 + 126.973145801175 + + + 경기도 화성시 양감면 사창길 18-18 + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 사창보건진료소 + 031-352-1007 + 2000 + 0830 + 2000 + 0830 + 2000 + 0830 + 2000 + 0830 + 2000 + 0830 + 1600 + 0830 + E2100139 + 186 + 26 + 62 + 37.093191725862226 + 126.96942835747862 + + + 경기도 화성시 팔탄면 대평안길 6 (팔탄면) + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 서근보건진료소 + 031-358-6371 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100137 + 185 + 75 + 63 + 37.13148066547991 + 126.84347646713448 + + + 경기도 화성시 송산면 신천길 85 + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 신천보건진료소 + 031-357-7582 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100130 + 185 + 46 + 64 + 37.24877320111239 + 126.7174962318985 + + + 경기도 화성시 고향의봄길216번길 101 (안석동) + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 안석보건진료소 + 031-356-3014 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100157 + 445 + 100 + 65 + 37.177075252283124 + 126.81891534573054 + + + 경기도 화성시 비봉면 남이로 241-5 (비봉면) + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 유포보건진료소 + 031-356-7179 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100185 + 182 + 82 + 66 + 37.24814345002086 + 126.84098472412786 + + + 경기도 화성시 비봉면 하저자안로210번길 14 + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 자안보건진료소 + 031-356-3562 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100125 + 182 + 93 + 67 + 37.20155229601869 + 126.87338911835135 + + + 경기도 화성시 서신면 해안길 156-2 (서신면) + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 제부보건진료소 + 031-366-9118 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100256 + 185 + 53 + 68 + 37.16360321237214 + 126.62223488153893 + + + 경기도 화성시 양감면 은행나무로 265 + R + 보건소 + G099 + 응급의료기관 이외 + 2 + 양감보건지소 + 031-369-2587 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + E2100059 + 186 + 34 + 69 + 37.08180702290927 + 126.94469400801795 + + + 경기도 화성시 동탄반석로 204, 504호 (반송동, 제일프라자) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희맥한의원 + 031-613-7591 + 2100 + 0930 + 2100 + 0930 + 2100 + 0930 + 2100 + 0930 + 2100 + 0930 + 1700 + 0930 + 1700 + 0930 + B2101088 + 184 + 53 + 70 + 37.206750000000000 + 127.072741666666673 + + + 경기도 화성시 화산중앙로 33, 201호 (송산동, 창현빌딩) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 한솔미메이드 1차 아파트 맞은편 + 경희봄길한의원 + 031-224-2908 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1500 + 0900 + B2100122 + 183 + 62 + 71 + 37.207081320458784 + 127.0132011385821 + + + 경기도 화성시 우정읍 조암남로 5, 2층 + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 점심시간은 13:00~14:00까지 입니다. + 경희삼성한의원 + 031-358-3633 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1300 + 0900 + B2103545 + 185 + 67 + 72 + 37.08228003238354 + 126.81659933911845 + + + 경기도 화성시 동탄원천로 163, 405호 (반송동, 위너스타) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희스토리한의원 + 031-306-5533 + 2030 + 0930 + 2030 + 0930 + 2030 + 0930 + 2030 + 0930 + 2030 + 0930 + 1400 + 0930 + 1400 + 0930 + 1400 + 0930 + B2100232 + 184 + 53 + 73 + 37.207395059461255 + 127.07374864915921 + + + 경기도 화성시 동탄반석로 130, 302호 (반송동, 드림프라자) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희아이들한방소아과한의원 + 031-8015-1079 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1600 + 0930 + B2103802 + 184 + 55 + 74 + 37.200468121608374 + 127.07140101282442 + + + 경기도 화성시 동탄지성로 125, 3층 304호 (반송동, 토마토프라자) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 다이어트 / 수험생 / 교통사고후유증 / 피부질환 / 산전후관리 / 안면신경마비 / 만성피로 / 불면&middot;공황&middot;불안장애 / 통증&middot;재활 + / 비염&middot;축농증 / 다한증&middot;갱년기 / 만성&middot;난치질환 한약치료 + + 능동사거리 신한은행 빌딩 + 경희여울한의원 + 031-8003-0471 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1300 + 0900 + B2102232 + 184 + 35 + 75 + 37.20885795323582 + 127.06155650480181 + + + 경기도 화성시 동탄순환대로 127-23, 우성에듀파크 314호 (산척동) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 공휴일 전화 후 방문 + 경희용한의원 + 031-215-1275 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 1830 + 0930 + 2030 + 0930 + 1600 + 0930 + B2104468 + 185 + 05 + 76 + 37.16776525808841 + 127.10726476555877 + + + 경기도 화성시 송산면 송산포도로 77, 1층 + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희우리한의원 + 031-356-3303 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1300 + 0930 + B2104764 + 185 + 50 + 77 + 37.2131720261174 + 126.73987279173 + + + 경기도 화성시 우정읍 조암서로 3, 2층 + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희제일한의원 + 031-351-3536 + 1730 + 0900 + 1730 + 0900 + 1730 + 0900 + 1730 + 0900 + 1730 + 0900 + 1300 + 0900 + B2104133 + 185 + 68 + 78 + 37.0819036967 + 126.8156375419 + + + 경기도 화성시 동탄지성로 144, 201호 (능동, 아이비타워) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희참사랑한의원 + 031-8003-8555 + 2100 + 0930 + 1900 + 0930 + 1900 + 0930 + 2100 + 0930 + 1900 + 0930 + 1500 + 0930 + B2100558 + 184 + 33 + 79 + 37.20993643407646 + 127.05989007415953 + + + 경기도 화성시 향남읍 발안로 111, 2층 + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희청담연한의원 + 031-352-2799 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + B2104675 + 185 + 91 + 80 + 37.1316847208799 + 126.922770100075 + + + 경기도 화성시 봉담읍 와우로 20, 미래프라자 202호 + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희청익한의원 + 031-222-7510 + 2000 + 0930 + 1830 + 0930 + 1830 + 0930 + 2000 + 0930 + 1830 + 0930 + 1430 + 0930 + B2104515 + 183 + 20 + 81 + 37.21525201310429 + 126.96904466019552 + + + 경기도 화성시 동탄순환대로 685, 301.302호 (영천동, 메디피아빌딩) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희푸른한의원 + 031-376-2229 + 2100 + 0930 + 1900 + 0930 + 1900 + 0930 + 2100 + 0930 + 1900 + 0930 + 1600 + 0930 + B2103794 + 184 + 72 + 82 + 37.205955740403844 + 127.11092807602509 + + + 경기도 화성시 영통로50번길 48, 201호 (반월동, 호평프라자) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 경희햇살한의원 + 031-206-9171 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1500 + 0930 + B2104748 + 183 + 79 + 83 + 37.2343636797661 + 127.065992440176 + + + 경기도 화성시 봉담읍 동화길 93-2, 302호 (제이스프라자) + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 광명한의원 + 031-297-1475 + 1930 + 0900 + 1930 + 0900 + 1930 + 0900 + 1930 + 0900 + 1930 + 0900 + 1600 + 0900 + B2102264 + 183 + 02 + 84 + 37.21630822128343 + 126.95916896127062 + + + 경기도 화성시 우정읍 조암남로 3-3 + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 구인한의원 + 031-351-1500 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1300 + 0900 + B2100924 + 185 + 67 + 85 + 37.082218175 + 126.8162216028 + + + 경기도 화성시 우정읍 기아자동차로 95 + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 점심시간 11:00~12:00 + 굿모닝한의원 + 031-359-4389 + 1730 + 0830 + 1730 + 0830 + 1730 + 0830 + 1730 + 0830 + 1730 + 0830 + B2100848 + 185 + 71 + 86 + 37.032666676893896 + 126.78101745432335 + + + 경기도 화성시 봉담읍 삼천병마로 1277, 이안건물 3,4층 + G + 한의원 + G099 + 응급의료기관 이외 + 2 + 귤림당한의원 + 031-278-1075 + 2100 + 0900 + 2100 + 0900 + 2100 + 0900 + 2100 + 0900 + 2100 + 0900 + 1700 + 1000 + 1700 + 1000 + 1700 + 1000 + B2104609 + 183 + 13 + 87 + 37.2201472510328 + 126.948616630432 + + + 경기도 화성시 병점2로 6, 4층 (병점동, 금강빌딩) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 바른정형외과의원 + 031-238-4321 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1400 + 0900 + A2104449 + 184 + 13 + 88 + 37.20505435341242 + 127.03793814223485 + + + 경기도 화성시 효행로 1385 (반월동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 박동수외과의원 + 031-204-8275 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1300 + 0900 + A2101287 + 183 + 84 + 89 + 37.23104244490298 + 127.06529967778589 + + + 경기도 화성시 동탄광역환승로 73, 124,125호 (오산동, 동탄역 반도유보라 아이비파크 8.0) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 반디소아청소년과의원 + 031-372-8220 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1300 + 0900 + A2115118 + 184 + 79 + 90 + 37.2028876791906 + 127.090211479364 + + + 경기도 화성시 향남읍 발안로 116 (향남읍) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 마취통증의학과 전문의 1명 + 신경과, 정형외과, 재활의학과, 가정의학과 + + 발안마취통증의학과의원 + 031-352-8607 + 1900 + 0900 + 1800 + 0900 + 1300 + 0900 + 1900 + 0900 + 1800 + 0900 + 1330 + 0900 + A2102500 + 186 + 00 + 91 + 37.13101805997247 + 126.92289847615062 + + + 경기도 화성시 향남읍 발안남로55번길 27 (향남읍) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 발안우리들의원 + 031-366-1980 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1300 + 0900 + A2104676 + 185 + 94 + 92 + 37.1298802786419 + 126.904943470636 + + + 경기도 화성시 향남읍 발안로 103-6, 3층 (향남읍) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 공휴일 방문 전 전화확인 필요 + 발안제일의원 + 031-352-3711 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1800 + 0900 + 1300 + 0900 + 1300 + 0900 + A2104617 + 185 + 91 + 93 + 37.13128672223113 + 126.90999613921596 + + + 경기도 화성시 봉담읍 동화길 93-2, 301호 (제이스프라자) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 밝은성모안과의원 + 031-227-2064 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1830 + 0900 + 1500 + 0900 + A2103148 + 183 + 02 + 94 + 37.216324999999998 + 126.959052777777771 + + + 경기도 화성시 동탄신리천로 406, 리더스퀘어 204~209호 (목동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 밴스성형외과의원 + 031-376-0650 + 1900 + 1000 + 1900 + 1000 + 1900 + 1000 + 1900 + 1000 + 1900 + 1000 + 1700 + 1000 + A2118675 + 184 + 90 + 95 + 37.1821551701882 + 127.122970771029 + + + 경기도 화성시 동탄반석로 196, 302,303호 (반송동, 아이프라자) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 베스탑비뇨기과의원 + 031-8003-7070 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1900 + 0930 + 1400 + 0900 + A2103073 + 184 + 53 + 96 + 37.206090043418015 + 127.07245169666292 + + + 경기도 화성시 동탄대로 537, 라스플로레스 A동 235~239,244~247호 (오산동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 베스트내과의원 + 031-365-3611 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + A2117579 + 184 + 78 + 97 + 37.2022219858232 + 127.097923632495 + + + 경기도 화성시 꽃내음1길 19-6, 401-403호 (새솔동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 변상희산부인과는 자궁경 수술 전문의원으로 초음파 검진(자궁 근종, 난소 종양 등), 암 검진(자궁암, 난소암), 질염, 예방 접종, 갱년기 검진과 함께 일반 여성 질환 + 진료를 진행합니다. + + 변상희산부인과의원 + 031-355-8839 + 1730 + 0900 + 1730 + 0900 + 1730 + 0900 + 1300 + 0900 + 2000 + 0900 + 1530 + 0900 + A2118589 + 182 + 44 + 98 + 37.2842181380217 + 126.818119694231 + + + 경기도 화성시 경기대로 1008, 2층 (병점동) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 병점메디칼의원 + 031-224-7102 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1900 + 0900 + 1500 + 0900 + 1300 + 0900 + 1300 + 0900 + A2101446 + 184 + 11 + 99 + 37.20611790205983 + 127.03689327313434 + + + 경기도 화성시 병점1로 221, 4층 (진안동, 화인메디칼프라자) + C + 의원 + G099 + 응급의료기관 이외 + 2 + 병점신안과의원 + 031-238-5800 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + 1800 + 0930 + 1300 + 0930 + A2104433 + 184 + 04 + 100 + 37.2136166151844 + 127.04181325201318 + + + 100 + 1 + 74663 + +
\ No newline at end of file