///////
Search
😃

김준호

Hospital

package com.line.domain; import java.util.ArrayList; import java.util.List; public class Hospital { //"A1120837", "서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)","C",... private String id; // [0] private String address; // [1] private String district; // [1] 수정 private String category; // [2] private int emergencyRoom; // [6] private String name; // [10] private String subdivision; // [10] 수정 public Hospital() { } public Hospital(String id, String address, String category, int emergencyRoom, String name, String subdivision) { this.id = id; this.address = address; this.category = category; this.emergencyRoom = emergencyRoom; this.name = name; this.subdivision = subdivision; this.setDistrict(this.address); } public Hospital(String s) { } public void setDistrict(String address) { String[] splitted = this.address.split(" "); this.district = String.format("%s %s", splitted[0], splitted[1]); } public String getId() { return id; } public String getAddress() { return address; } public String getDistrict() { return district; } public String getCategory() { return category; } public int getEmergencyRoom() { return emergencyRoom; } public String getName() { return name; } public String getSubdivision() { return subdivision; } public String getSQL() { String sql = "INSERT INTO `likelion-db`.`seoul_hospital`\n" + "(`id`, `address`, `district`, `category`, `emergency_room`, `name`, `subdivision`)\n" + "VALUES\n"; return sql; } // 값에 대한 정보만 필요할 수 있으므로 SQL 메소드와 분리하였습니다. public String getTupleString(){ String sql = "('" + this.getId() + "', '" + this.getAddress() + "', " + "'" + this.getDistrict() + "', '" + this.getCategory() + "', " + this.getEmergencyRoom() + ", '" + this.getName() + "', '" + this.getSubdivision() + "'),\n"; return sql; } }
SQL
복사

HospitalParser

package com.line.parser; import com.line.domain.Hospital; public class HospitalParser implements Parser<Hospital> { // 들어온 String 데이터를 분리한 후 생성자를 활용하여 데이터를 입력하였습니다. @Override public Hospital parse(String str) { str = str.replaceAll("\"", ""); String[] splitted = str.split(","); return new Hospital(splitted[0], splitted[1], splitted[2] , getNumber(splitted[6]), splitted[10], getSubdivision(splitted[10])); } // splitted 데이터를 넘겨받아서 해당 글자가 포함되었다면 해당 단어를 return하였습니다. public String getSubdivision(String name){ String[] subdivisions = {"내과", "소아", "피부", "성형", "정형외과", "척추", "교정", "산부인과", "영유아", "안과", "건강의학과", "가정의학과", "재활의학과", "비뇨기과", "치과", "외과", "한의원", "한방병원"}; for (String s : subdivisions) { if (name.contains(s)) { return s; } } return ""; } public int getNumber(String str) { return Integer.parseInt(str); } }
SQL
복사

TDD

package com.line.parser; import com.line.domain.Hospital; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class HospitalParserTest { String line1 = "\"A1120837\",\"서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)\",\"C\",\"의원\",\"G099\",\"응급의료기관 이외\",\"2\",\"외과: 상시진료 내과는 당분간 휴진\",\"서울시 송파구 문정동 장지동 법조단지 위례 가락동 가락시장역 위치 삼성서울병원 외래교수 출신 구강외과 전문의 진료 진료과목 - 임플란트 치조골 뼈이식 수술 매복 사랑니 발치 턱관절 악관절 질환의 치료 교정 치료 및 기타 보존 보철(크라운 브릿지 인레이) 신경치료\",\"방이역 1번출구 바로옆 굿모닝 신한증권 뒷건물\",\"가산기대찬의원\",\"02-6267-2580\",\"02-920-5374\",\"1930\",\"1930\",\"1930\",\"1930\",\"1930\",\"1500\",\"1500\",\"1500\",\"0900\",\"0900\",\"0900\",\"0900\",\"0900\",\"0900\",\"1000\",\"1000\",\"085\",\"11\",\"126.88412249700781\",\"37.4803938036867\",\"2022-04-07 14:55:00.0\""; private void assertHospital(Hospital hospital, String eId, String eAddress, String eDistrict, String eCategory, int eEmergencyRoom, String eName, String eSubdivision) { Assertions.assertEquals(eId, hospital.getId()); //주소가 잘 파싱 되는지 테스트 추가 Assertions.assertEquals(eAddress, hospital.getAddress()); //District Assertions.assertEquals(eDistrict, hospital.getDistrict()); //Category Assertions.assertEquals(eCategory, hospital.getCategory()); //Emergency Room Assertions.assertEquals(eEmergencyRoom, hospital.getEmergencyRoom()); //Name Assertions.assertEquals(eName, hospital.getName()); // Subdivision Assertions.assertEquals(eSubdivision, hospital.getSubdivision()); } @Test @DisplayName("ID 파싱 확인") void idParsing() { HospitalParser hospitalParser = new HospitalParser(); Hospital hospital = hospitalParser.parse(line1); Assertions.assertEquals("A1120837", hospital.getId()); String address = "서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)"; Assertions.assertEquals(address, hospital.getAddress()); //District Assertions.assertEquals("서울특별시 금천구", hospital.getDistrict()); //Category Assertions.assertEquals("C", hospital.getCategory()); //Emergency Room Assertions.assertEquals(2, hospital.getEmergencyRoom()); //Name Assertions.assertEquals("가산기대찬의원", hospital.getName()); //Name Assertions.assertEquals("", hospital.getSubdivision()); } @Test @DisplayName("ID 파싱") void hospitalParsing() { HospitalParser hospitalParser = new HospitalParser(); Hospital hospital = hospitalParser.parse((this.line1)); String address = "서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)"; assertHospital(hospitalParser.parse(this.line1), "A1120837", "서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)", "서울특별시 금천구", "C", 2, "가산기대찬의원", ""); } @Test @DisplayName("insert 쿼리 테스트") void makeSqlQueryTest() { HospitalParser hospitalParser = new HospitalParser(); Hospital hos = hospitalParser.parse(this.line1); String sql = "INSERT INTO `likelion-db`.`seoul_hospital`\n" + "(`id`, `address`, `district`, `category`, `emergency_room`, `name`, `subdivision`)\n" + "VALUES\n" + "('A1120837', '서울특별시 금천구 벚꽃로 286 삼성리더스타워 111~114호 (가산동)'," + " '서울특별시 금천구', 'C', 2, '가산기대찬의원', ''),\n"; Assertions.assertEquals(sql, hos.getSQL()+hos.getTupleString()); } }
SQL
복사