├── .gitignore ├── README.md ├── documents ├── ExternalSystems.txt └── process.txt ├── student-order ├── pom.xml └── src │ ├── main │ ├── java │ │ └── edu │ │ │ └── javacourse │ │ │ └── studentorder │ │ │ ├── SaveStudentOrder.java │ │ │ ├── StudentOrderValidator.java │ │ │ ├── config │ │ │ └── Config.java │ │ │ ├── dao │ │ │ ├── ConnectionBuilder.java │ │ │ ├── DictionaryDao.java │ │ │ ├── DictionaryDaoImpl.java │ │ │ ├── StudentOrderDao.java │ │ │ └── StudentOrderDaoImpl.java │ │ │ ├── domain │ │ │ ├── Address.java │ │ │ ├── Adult.java │ │ │ ├── Child.java │ │ │ ├── CountryArea.java │ │ │ ├── PassportOffice.java │ │ │ ├── Person.java │ │ │ ├── RegisterOffice.java │ │ │ ├── Street.java │ │ │ ├── StudentOrder.java │ │ │ ├── StudentOrderStatus.java │ │ │ ├── University.java │ │ │ ├── children │ │ │ │ └── AnswerChildren.java │ │ │ ├── register │ │ │ │ ├── AnswerCityRegister.java │ │ │ │ ├── AnswerCityRegisterItem.java │ │ │ │ ├── CityRegisterRequest.java │ │ │ │ └── CityRegisterResponse.java │ │ │ ├── student │ │ │ │ └── AnswerStudent.java │ │ │ └── wedding │ │ │ │ └── AnswerWedding.java │ │ │ ├── exception │ │ │ ├── CityRegisterException.java │ │ │ └── DaoException.java │ │ │ ├── mail │ │ │ └── MailSender.java │ │ │ ├── util │ │ │ └── LocalDateAdapter.java │ │ │ └── validator │ │ │ ├── ChildrenValidator.java │ │ │ ├── CityRegisterValidator.java │ │ │ ├── StudentValidator.java │ │ │ ├── WeddingValidator.java │ │ │ └── register │ │ │ ├── CityRegisterChecker.java │ │ │ └── RealCityRegisterChecker.java │ └── resources │ │ ├── config.properties │ │ ├── student_data.sql │ │ └── student_project.sql │ └── test │ ├── java │ └── edu │ │ └── javacourse │ │ └── studentorder │ │ ├── dao │ │ ├── DBInit.java │ │ ├── DictionaryDaoImplTest.java │ │ ├── SimpleRunner.java │ │ └── StudentOrderDaoImplTest.java │ │ └── validator │ │ └── register │ │ └── FakeCityRegisterChecker.java │ └── resources │ └── log4j.xml └── student-project ├── src ├── dao.properties └── edu │ └── javacourse │ └── studentorder │ ├── SaveStudentOrder.java │ ├── StudentOrderValidator.java │ ├── config │ └── Config.java │ ├── dao │ ├── DictionaryDao.java │ ├── DictionaryDaoImpl.java │ ├── StudentOrderDao.java │ └── StudentOrderDaoImpl.java │ ├── domain │ ├── Address.java │ ├── Adult.java │ ├── Child.java │ ├── CountryArea.java │ ├── PassportOffice.java │ ├── Person.java │ ├── RegisterOffice.java │ ├── Street.java │ ├── StudentOrder.java │ ├── StudentOrderStatus.java │ ├── University.java │ ├── children │ │ └── AnswerChildren.java │ ├── register │ │ ├── AnswerCityRegister.java │ │ ├── AnswerCityRegisterItem.java │ │ └── CityRegisterResponse.java │ ├── student │ │ └── AnswerStudent.java │ └── wedding │ │ └── AnswerWedding.java │ ├── exception │ ├── CityRegisterException.java │ ├── DaoException.java │ └── TransportException.java │ ├── mail │ └── MailSender.java │ └── validator │ ├── ChildrenValidator.java │ ├── CityRegisterValidator.java │ ├── StudentValidator.java │ ├── WeddingValidator.java │ └── register │ ├── CityRegisterChecker.java │ ├── FakeCityRegisterChecker.java │ └── RealCityRegisterChecker.java ├── student-project.iml ├── student_data.sql └── student_project.sql /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | out 3 | .idea/ 4 | .DS_Store 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # java-project simple 2 | 3 | 4 | -------------------------------------------------------------------------------- /documents/ExternalSystems.txt: -------------------------------------------------------------------------------- 1 | 1. ГРН 2 | - ФИО, дата рождения, код улицы, дом, корпус, квартира 3 | 4 | 2. ЗАГС 5 | - Свидетельство о браке, дата выдачи, Код поселения + Название 6 | - муж: ФИО, Дата рождения, паспорт, серия, номер, дата, Код поселения + Название 7 | - жена: ФИО, Дата рождения, паспорт, серия, номер, дата, Код поселения + Название 8 | 9 | - ФИО, дата рождения, номер свидетельства, дата выдачи, Код поселения + Название 10 | - отец: ФИО, дата рождения 11 | - мать: ФИО, дата рождения 12 | 13 | 3. Студент 14 | - ФИО, дата рождения, паспорт, серия, номер, дата, Код поселения + Название, 15 | Код ВУЗа, Номер билета 16 | -------------------------------------------------------------------------------- /documents/process.txt: -------------------------------------------------------------------------------- 1 | 1. Требования 2 | 2. Написать код - система управления исходным кодом 3 | 3. Сборка - система сборки проекта 4 | 4. Автоматическое Unit-тестирование 5 | 5. Система установки готового продукта на стенд (DEV, QA, PROD) 6 | 6. Автоматическое интеграционое тестирование -------------------------------------------------------------------------------- /student-order/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | edu.javacourse 8 | student-order 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 1.7.25 13 | 2.11.1 14 | 2.28 15 | 2.3.1 16 | 17 | 18 | 19 | 20 | org.postgresql 21 | postgresql 22 | 42.2.5 23 | 24 | 25 | 26 | org.slf4j 27 | slf4j-api 28 | ${slf4j.version} 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | org.slf4j 38 | slf4j-log4j12 39 | ${slf4j.version} 40 | 41 | 42 | 43 | org.apache.logging.log4j 44 | log4j-core 45 | ${log4j.version} 46 | 47 | 48 | 49 | org.glassfish.jersey.core 50 | jersey-client 51 | ${jersey.version} 52 | 53 | 54 | org.glassfish.jersey.inject 55 | jersey-hk2 56 | ${jersey.version} 57 | 58 | 59 | 60 | org.glassfish.jersey.media 61 | jersey-media-moxy 62 | ${jersey.version} 63 | 64 | 65 | javax.xml.bind 66 | jaxb-api 67 | ${jaxb.version} 68 | 69 | 70 | 71 | 72 | junit 73 | junit 74 | 4.12 75 | test 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | org.apache.maven.plugins 84 | maven-compiler-plugin 85 | 86 | 8 87 | 8 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/SaveStudentOrder.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder; 2 | 3 | import edu.javacourse.studentorder.dao.DictionaryDaoImpl; 4 | import edu.javacourse.studentorder.dao.StudentOrderDao; 5 | import edu.javacourse.studentorder.dao.StudentOrderDaoImpl; 6 | import edu.javacourse.studentorder.domain.*; 7 | 8 | import java.time.LocalDate; 9 | import java.util.List; 10 | 11 | public class SaveStudentOrder 12 | { 13 | 14 | static long saveStudentOrder(StudentOrder studentOrder) { 15 | long answer = 199; 16 | System.out.println("saveStudentOrder"); 17 | 18 | return answer; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/StudentOrderValidator.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder; 2 | 3 | import edu.javacourse.studentorder.dao.StudentOrderDaoImpl; 4 | import edu.javacourse.studentorder.domain.children.AnswerChildren; 5 | import edu.javacourse.studentorder.domain.register.AnswerCityRegister; 6 | import edu.javacourse.studentorder.domain.student.AnswerStudent; 7 | import edu.javacourse.studentorder.domain.wedding.AnswerWedding; 8 | import edu.javacourse.studentorder.domain.StudentOrder; 9 | import edu.javacourse.studentorder.exception.DaoException; 10 | import edu.javacourse.studentorder.mail.MailSender; 11 | import edu.javacourse.studentorder.validator.ChildrenValidator; 12 | import edu.javacourse.studentorder.validator.CityRegisterValidator; 13 | import edu.javacourse.studentorder.validator.StudentValidator; 14 | import edu.javacourse.studentorder.validator.WeddingValidator; 15 | 16 | import java.util.LinkedList; 17 | import java.util.List; 18 | 19 | public class StudentOrderValidator 20 | { 21 | private CityRegisterValidator cityRegisterVal; 22 | private WeddingValidator weddingVal; 23 | private ChildrenValidator childrenVal; 24 | private StudentValidator studentVal; 25 | private MailSender mailSender; 26 | 27 | public StudentOrderValidator() { 28 | cityRegisterVal = new CityRegisterValidator(); 29 | weddingVal = new WeddingValidator(); 30 | childrenVal = new ChildrenValidator(); 31 | studentVal = new StudentValidator(); 32 | mailSender = new MailSender(); 33 | } 34 | 35 | public static void main(String[] args) { 36 | StudentOrderValidator sov = new StudentOrderValidator(); 37 | sov.checkAll(); 38 | } 39 | 40 | public void checkAll() { 41 | try { 42 | List soList = readStudentOrders(); 43 | 44 | for (StudentOrder so : soList) { 45 | checkOneOrder(so); 46 | } 47 | } catch(Exception ex) { 48 | ex.printStackTrace(); 49 | } 50 | } 51 | 52 | public List readStudentOrders() throws DaoException { 53 | return new StudentOrderDaoImpl().getStudentOrders(); 54 | } 55 | 56 | public void checkOneOrder(StudentOrder so) { 57 | AnswerCityRegister cityAnswer = checkCityRegister(so); 58 | 59 | // AnswerWedding wedAnswer = checkWedding(so); 60 | // AnswerChildren childAnswer = checkChildren(so); 61 | // AnswerStudent studentAnswer = checkStudent(so); 62 | 63 | // sendMail(so); 64 | } 65 | 66 | public AnswerCityRegister checkCityRegister(StudentOrder so) { 67 | return cityRegisterVal.checkCityRegister(so); 68 | } 69 | 70 | public AnswerWedding checkWedding(StudentOrder so) { 71 | return weddingVal.checkWedding(so); 72 | } 73 | 74 | public AnswerChildren checkChildren(StudentOrder so) { 75 | return childrenVal.checkChildren(so); 76 | } 77 | 78 | public AnswerStudent checkStudent(StudentOrder so) { 79 | return studentVal.checkStudent(so); 80 | } 81 | 82 | public void sendMail(StudentOrder so) { 83 | mailSender.sendMail(so); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/config/Config.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.config; 2 | 3 | import java.io.InputStream; 4 | import java.util.Properties; 5 | 6 | public class Config 7 | { 8 | public static final String DB_URL = "db.url"; 9 | public static final String DB_LOGIN = "db.login"; 10 | public static final String DB_PASSWORD = "db.password"; 11 | public static final String DB_LIMIT = "db.limit"; 12 | public static final String CR_URL = "cr.url"; 13 | 14 | private static Properties properties = new Properties(); 15 | 16 | public synchronized static String getProperty(String name) { 17 | if (properties.isEmpty()) { 18 | try (InputStream is = Config.class.getClassLoader() 19 | .getResourceAsStream("config.properties")) { 20 | 21 | properties.load(is); 22 | 23 | } catch (Exception ex) { 24 | ex.printStackTrace(); 25 | throw new RuntimeException(ex); 26 | } 27 | } 28 | return properties.getProperty(name); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/dao/ConnectionBuilder.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import edu.javacourse.studentorder.config.Config; 4 | 5 | import java.sql.Connection; 6 | import java.sql.DriverManager; 7 | import java.sql.SQLException; 8 | 9 | public class ConnectionBuilder 10 | { 11 | public static Connection getConnection() throws SQLException { 12 | Connection con = DriverManager.getConnection( 13 | Config.getProperty(Config.DB_URL), 14 | Config.getProperty(Config.DB_LOGIN), 15 | Config.getProperty(Config.DB_PASSWORD)); 16 | return con; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/dao/DictionaryDao.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import edu.javacourse.studentorder.domain.CountryArea; 4 | import edu.javacourse.studentorder.domain.PassportOffice; 5 | import edu.javacourse.studentorder.domain.RegisterOffice; 6 | import edu.javacourse.studentorder.domain.Street; 7 | import edu.javacourse.studentorder.exception.DaoException; 8 | 9 | import java.util.List; 10 | 11 | public interface DictionaryDao 12 | { 13 | List findStreets(String pattern) throws DaoException; 14 | List findPassportOffices(String areaId) throws DaoException; 15 | List findRegisterOffices(String areaId) throws DaoException; 16 | List findAreas(String areaId) throws DaoException; 17 | } 18 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/dao/DictionaryDaoImpl.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import edu.javacourse.studentorder.config.Config; 4 | import edu.javacourse.studentorder.domain.CountryArea; 5 | import edu.javacourse.studentorder.domain.PassportOffice; 6 | import edu.javacourse.studentorder.domain.RegisterOffice; 7 | import edu.javacourse.studentorder.domain.Street; 8 | import edu.javacourse.studentorder.exception.DaoException; 9 | import org.slf4j.Logger; 10 | import org.slf4j.LoggerFactory; 11 | 12 | import java.sql.Connection; 13 | import java.sql.DriverManager; 14 | import java.sql.PreparedStatement; 15 | import java.sql.ResultSet; 16 | import java.sql.SQLException; 17 | import java.util.LinkedList; 18 | import java.util.List; 19 | 20 | public class DictionaryDaoImpl implements DictionaryDao 21 | { 22 | private static final Logger logger = LoggerFactory.getLogger(DictionaryDaoImpl.class); 23 | 24 | private static final String GET_STREET = "SELECT street_code, street_name " + 25 | "FROM jc_street WHERE UPPER(street_name) LIKE UPPER(?)"; 26 | 27 | private static final String GET_PASSPORT = "SELECT * " + 28 | "FROM jc_passport_office WHERE p_office_area_id = ?"; 29 | 30 | private static final String GET_REGISTER = "SELECT * " + 31 | "FROM jc_register_office WHERE r_office_area_id = ?"; 32 | 33 | private static final String GET_AREA = "SELECT * " + 34 | "FROM jc_country_struct WHERE area_id like ? and area_id <> ?"; 35 | 36 | 37 | private Connection getConnection() throws SQLException { 38 | return ConnectionBuilder.getConnection(); 39 | } 40 | 41 | public List findStreets(String pattern) throws DaoException { 42 | List result = new LinkedList<>(); 43 | 44 | try (Connection con = getConnection(); 45 | PreparedStatement stmt = con.prepareStatement(GET_STREET)) { 46 | 47 | stmt.setString(1, "%" + pattern + "%"); 48 | ResultSet rs = stmt.executeQuery(); 49 | while (rs.next()) { 50 | Street str = new Street(rs.getLong("street_code"), 51 | rs.getString("street_name")); 52 | result.add(str); 53 | } 54 | } catch (SQLException ex) { 55 | logger.error(ex.getMessage(), ex); 56 | throw new DaoException(ex); 57 | } 58 | 59 | return result; 60 | } 61 | 62 | @Override 63 | public List findPassportOffices(String areaId) throws DaoException { 64 | List result = new LinkedList<>(); 65 | 66 | try (Connection con = getConnection(); 67 | PreparedStatement stmt = con.prepareStatement(GET_PASSPORT)) { 68 | 69 | stmt.setString(1, areaId); 70 | ResultSet rs = stmt.executeQuery(); 71 | while (rs.next()) { 72 | PassportOffice str = new PassportOffice( 73 | rs.getLong("p_office_id"), 74 | rs.getString("p_office_area_id"), 75 | rs.getString("p_office_name")); 76 | result.add(str); 77 | } 78 | } catch (SQLException ex) { 79 | logger.error(ex.getMessage(), ex); 80 | throw new DaoException(ex); 81 | } 82 | 83 | return result; 84 | } 85 | 86 | @Override 87 | public List findRegisterOffices(String areaId) throws DaoException { 88 | List result = new LinkedList<>(); 89 | 90 | try (Connection con = getConnection(); 91 | PreparedStatement stmt = con.prepareStatement(GET_REGISTER)) { 92 | 93 | stmt.setString(1, areaId); 94 | ResultSet rs = stmt.executeQuery(); 95 | while (rs.next()) { 96 | RegisterOffice str = new RegisterOffice( 97 | rs.getLong("r_office_id"), 98 | rs.getString("r_office_area_id"), 99 | rs.getString("r_office_name")); 100 | result.add(str); 101 | } 102 | } catch (SQLException ex) { 103 | logger.error(ex.getMessage(), ex); 104 | throw new DaoException(ex); 105 | } 106 | 107 | return result; 108 | } 109 | 110 | @Override 111 | public List findAreas(String areaId) throws DaoException { 112 | List result = new LinkedList<>(); 113 | 114 | try (Connection con = getConnection(); 115 | PreparedStatement stmt = con.prepareStatement(GET_AREA)) { 116 | 117 | String param1 = buildParam(areaId); 118 | String param2 = areaId == null ? "" : areaId; 119 | 120 | stmt.setString(1, param1); 121 | stmt.setString(2, param2); 122 | ResultSet rs = stmt.executeQuery(); 123 | while (rs.next()) { 124 | CountryArea str = new CountryArea( 125 | rs.getString("area_id"), 126 | rs.getString("area_name")); 127 | result.add(str); 128 | } 129 | } catch (SQLException ex) { 130 | logger.error(ex.getMessage(), ex); 131 | throw new DaoException(ex); 132 | } 133 | 134 | return result; 135 | } 136 | 137 | private String buildParam(String areaId) throws SQLException { 138 | if (areaId == null || areaId.trim().isEmpty()) { 139 | return "__0000000000"; 140 | } else if (areaId.endsWith("0000000000")) { 141 | return areaId.substring(0, 2) + "___0000000"; 142 | } else if (areaId.endsWith("0000000")) { 143 | return areaId.substring(0, 5) + "___0000"; 144 | } else if (areaId.endsWith("0000")) { 145 | return areaId.substring(0, 8) + "____"; 146 | } 147 | throw new SQLException("Invalid parameter 'areaId':" + areaId); 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/dao/StudentOrderDao.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import edu.javacourse.studentorder.domain.StudentOrder; 4 | import edu.javacourse.studentorder.exception.DaoException; 5 | 6 | import java.util.List; 7 | 8 | public interface StudentOrderDao 9 | { 10 | Long saveStudentOrder(StudentOrder so) throws DaoException; 11 | 12 | List getStudentOrders() throws DaoException; 13 | } 14 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/dao/StudentOrderDaoImpl.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import edu.javacourse.studentorder.config.Config; 4 | import edu.javacourse.studentorder.domain.Address; 5 | import edu.javacourse.studentorder.domain.Adult; 6 | import edu.javacourse.studentorder.domain.Child; 7 | import edu.javacourse.studentorder.domain.PassportOffice; 8 | import edu.javacourse.studentorder.domain.Person; 9 | import edu.javacourse.studentorder.domain.RegisterOffice; 10 | import edu.javacourse.studentorder.domain.Street; 11 | import edu.javacourse.studentorder.domain.StudentOrder; 12 | import edu.javacourse.studentorder.domain.StudentOrderStatus; 13 | import edu.javacourse.studentorder.domain.University; 14 | import edu.javacourse.studentorder.exception.DaoException; 15 | import org.slf4j.Logger; 16 | import org.slf4j.LoggerFactory; 17 | 18 | import java.sql.Connection; 19 | import java.sql.DriverManager; 20 | import java.sql.PreparedStatement; 21 | import java.sql.ResultSet; 22 | import java.sql.SQLException; 23 | import java.time.LocalDate; 24 | import java.time.LocalDateTime; 25 | import java.util.HashMap; 26 | import java.util.LinkedList; 27 | import java.util.List; 28 | import java.util.Map; 29 | import java.util.stream.Collectors; 30 | import java.util.stream.Stream; 31 | 32 | public class StudentOrderDaoImpl implements StudentOrderDao 33 | { 34 | private static final Logger logger = LoggerFactory.getLogger(StudentOrderDaoImpl.class); 35 | 36 | private static final String INSERT_ORDER = 37 | "INSERT INTO jc_student_order(" + 38 | " student_order_status, student_order_date, h_sur_name, " + 39 | " h_given_name, h_patronymic, h_date_of_birth, h_passport_seria, " + 40 | " h_passport_number, h_passport_date, h_passport_office_id, h_post_index, " + 41 | " h_street_code, h_building, h_extension, h_apartment, h_university_id, h_student_number, " + 42 | " w_sur_name, w_given_name, w_patronymic, w_date_of_birth, w_passport_seria, " + 43 | " w_passport_number, w_passport_date, w_passport_office_id, w_post_index, " + 44 | " w_street_code, w_building, w_extension, w_apartment, w_university_id, w_student_number, " + 45 | " certificate_id, register_office_id, marriage_date)" + 46 | " VALUES (?, ?, ?, " + 47 | " ?, ?, ?, ?, " + 48 | " ?, ?, ?, ?, " + 49 | " ?, ?, ?, ?, ?, ?, " + 50 | " ?, ?, ?, ?, ?, " + 51 | " ?, ?, ?, ?, " + 52 | " ?, ?, ?, ?, ?, ?, " + 53 | " ?, ?, ?);"; 54 | 55 | private static final String INSERT_CHILD = 56 | "INSERT INTO jc_student_child(" + 57 | " student_order_id, c_sur_name, c_given_name, " + 58 | " c_patronymic, c_date_of_birth, c_certificate_number, c_certificate_date, " + 59 | " c_register_office_id, c_post_index, c_street_code, c_building, " + 60 | " c_extension, c_apartment)" + 61 | " VALUES (?, ?, ?, " + 62 | " ?, ?, ?, ?, " + 63 | " ?, ?, ?, ?, " + 64 | " ?, ?)"; 65 | 66 | private static final String SELECT_ORDERS = 67 | "SELECT so.*, ro.r_office_area_id, ro.r_office_name, " + 68 | "po_h.p_office_area_id as h_p_office_area_id, " + 69 | "po_h.p_office_name as h_p_office_name, " + 70 | "po_w.p_office_area_id as w_p_office_area_id, " + 71 | "po_w.p_office_name as w_p_office_name " + 72 | "FROM jc_student_order so " + 73 | "INNER JOIN jc_register_office ro ON ro.r_office_id = so.register_office_id " + 74 | "INNER JOIN jc_passport_office po_h ON po_h.p_office_id = so.h_passport_office_id " + 75 | "INNER JOIN jc_passport_office po_w ON po_w.p_office_id = so.w_passport_office_id " + 76 | "WHERE student_order_status = ? ORDER BY student_order_date LIMIT ?"; 77 | 78 | private static final String SELECT_CHILD = 79 | "SELECT soc.*, ro.r_office_area_id, ro.r_office_name " + 80 | "FROM jc_student_child soc " + 81 | "INNER JOIN jc_register_office ro ON ro.r_office_id = soc.c_register_office_id " + 82 | "WHERE soc.student_order_id IN "; 83 | 84 | private static final String SELECT_ORDERS_FULL = 85 | "SELECT so.*, ro.r_office_area_id, ro.r_office_name, " + 86 | "po_h.p_office_area_id as h_p_office_area_id, " + 87 | "po_h.p_office_name as h_p_office_name, " + 88 | "po_w.p_office_area_id as w_p_office_area_id, " + 89 | "po_w.p_office_name as w_p_office_name, " + 90 | "soc.*, ro_c.r_office_area_id, ro_c.r_office_name " + 91 | "FROM jc_student_order so " + 92 | "INNER JOIN jc_register_office ro ON ro.r_office_id = so.register_office_id " + 93 | "INNER JOIN jc_passport_office po_h ON po_h.p_office_id = so.h_passport_office_id " + 94 | "INNER JOIN jc_passport_office po_w ON po_w.p_office_id = so.w_passport_office_id " + 95 | "INNER JOIN jc_student_child soc ON soc.student_order_id = so.student_order_id " + 96 | "INNER JOIN jc_register_office ro_c ON ro_c.r_office_id = soc.c_register_office_id " + 97 | "WHERE student_order_status = ? ORDER BY so.student_order_id LIMIT ?"; 98 | 99 | 100 | private Connection getConnection() throws SQLException { 101 | return ConnectionBuilder.getConnection(); 102 | } 103 | 104 | @Override 105 | public Long saveStudentOrder(StudentOrder so) throws DaoException { 106 | Long result = -1L; 107 | 108 | logger.debug("SO:{}", so); 109 | 110 | try (Connection con = getConnection(); 111 | PreparedStatement stmt = con.prepareStatement(INSERT_ORDER, new String[]{"student_order_id"})) { 112 | 113 | con.setAutoCommit(false); 114 | try { 115 | // Header 116 | stmt.setInt(1, StudentOrderStatus.START.ordinal()); 117 | stmt.setTimestamp(2, java.sql.Timestamp.valueOf(LocalDateTime.now())); 118 | 119 | // Husband and wife 120 | setParamsForAdult(stmt, 3, so.getHusband()); 121 | setParamsForAdult(stmt, 18, so.getWife()); 122 | 123 | // Marriage 124 | stmt.setString(33, so.getMarriageCertificateId()); 125 | stmt.setLong(34, so.getMarriageOffice().getOfficeId()); 126 | stmt.setDate(35, java.sql.Date.valueOf(so.getMarriageDate())); 127 | 128 | stmt.executeUpdate(); 129 | 130 | ResultSet gkRs = stmt.getGeneratedKeys(); 131 | if (gkRs.next()) { 132 | result = gkRs.getLong(1); 133 | } 134 | gkRs.close(); 135 | 136 | saveChildren(con, so, result); 137 | 138 | con.commit(); 139 | } catch (SQLException ex) { 140 | con.rollback(); 141 | throw ex; 142 | } 143 | 144 | } catch (SQLException ex) { 145 | logger.error(ex.getMessage(), ex); 146 | throw new DaoException(ex); 147 | } 148 | 149 | return result; 150 | } 151 | 152 | private void saveChildren(Connection con, StudentOrder so, Long soId) throws SQLException { 153 | try (PreparedStatement stmt = con.prepareStatement(INSERT_CHILD)) { 154 | for (Child child : so.getChildren()) { 155 | stmt.setLong(1, soId); 156 | setParamsForChild(stmt, child); 157 | stmt.addBatch(); 158 | } 159 | stmt.executeBatch(); 160 | } 161 | } 162 | 163 | private void setParamsForAdult(PreparedStatement stmt, int start, Adult adult) throws SQLException { 164 | setParamsForPerson(stmt, start, adult); 165 | stmt.setString(start + 4, adult.getPassportSeria()); 166 | stmt.setString(start + 5, adult.getPassportNumber()); 167 | stmt.setDate(start + 6, java.sql.Date.valueOf(adult.getIssueDate())); 168 | stmt.setLong(start + 7, adult.getIssueDepartment().getOfficeId()); 169 | setParamsForAddress(stmt, start + 8, adult); 170 | stmt.setLong(start + 13, adult.getUnivesity().getUniversityId()); 171 | stmt.setString(start + 14, adult.getStudentId()); 172 | } 173 | 174 | private void setParamsForChild(PreparedStatement stmt, Child child) throws SQLException { 175 | setParamsForPerson(stmt, 2, child); 176 | stmt.setString(6, child.getCertificateNumber()); 177 | stmt.setDate(7, java.sql.Date.valueOf(child.getIssueDate())); 178 | stmt.setLong(8, child.getIssueDepartment().getOfficeId()); 179 | setParamsForAddress(stmt, 9, child); 180 | } 181 | 182 | private void setParamsForPerson(PreparedStatement stmt, int start, Person person) throws SQLException { 183 | stmt.setString(start, person.getSurName()); 184 | stmt.setString(start + 1, person.getGivenName()); 185 | stmt.setString(start + 2, person.getPatronymic()); 186 | stmt.setDate(start + 3, java.sql.Date.valueOf(person.getDateOfBirth())); 187 | } 188 | 189 | private void setParamsForAddress(PreparedStatement stmt, int start, Person person) throws SQLException { 190 | Address adult_address = person.getAddress(); 191 | stmt.setString(start, adult_address.getPostCode()); 192 | stmt.setLong(start + 1, adult_address.getStreet().getStreetCode()); 193 | stmt.setString(start + 2, adult_address.getBuilding()); 194 | stmt.setString(start + 3, adult_address.getExtension()); 195 | stmt.setString(start + 4, adult_address.getApartment()); 196 | } 197 | 198 | 199 | @Override 200 | public List getStudentOrders() throws DaoException { 201 | return getStudentOrdersOneSelect(); 202 | // return getStudentOrdersTwoSelect(); 203 | } 204 | 205 | private List getStudentOrdersOneSelect() throws DaoException { 206 | List result = new LinkedList<>(); 207 | 208 | try (Connection con = getConnection(); 209 | PreparedStatement stmt = con.prepareStatement(SELECT_ORDERS_FULL)) { 210 | 211 | Map maps = new HashMap<>(); 212 | 213 | stmt.setInt(1, StudentOrderStatus.START.ordinal()); 214 | int limit = Integer.parseInt(Config.getProperty(Config.DB_LIMIT)); 215 | stmt.setInt(2, limit); 216 | 217 | ResultSet rs = stmt.executeQuery(); 218 | int counter = 0; 219 | while(rs.next()) { 220 | Long soId = rs.getLong("student_order_id"); 221 | if (!maps.containsKey(soId)) { 222 | StudentOrder so = getFullStudentOrder(rs); 223 | 224 | result.add(so); 225 | maps.put(soId, so); 226 | } 227 | StudentOrder so = maps.get(soId); 228 | so.addChild(fillChild(rs)); 229 | counter++; 230 | } 231 | if (counter >= limit) { 232 | result.remove(result.size() - 1); 233 | } 234 | 235 | rs.close(); 236 | } catch(SQLException ex) { 237 | logger.error(ex.getMessage(), ex); 238 | throw new DaoException(ex); 239 | } 240 | 241 | return result; 242 | } 243 | 244 | private List getStudentOrdersTwoSelect() throws DaoException { 245 | List result = new LinkedList<>(); 246 | 247 | try (Connection con = getConnection(); 248 | PreparedStatement stmt = con.prepareStatement(SELECT_ORDERS)) { 249 | 250 | stmt.setInt(1, StudentOrderStatus.START.ordinal()); 251 | stmt.setInt(2, Integer.parseInt(Config.getProperty(Config.DB_LIMIT))); 252 | ResultSet rs = stmt.executeQuery(); 253 | while(rs.next()) { 254 | StudentOrder so = getFullStudentOrder(rs); 255 | 256 | result.add(so); 257 | } 258 | findChildren(con, result); 259 | 260 | rs.close(); 261 | } catch(SQLException ex) { 262 | logger.error(ex.getMessage(), ex); 263 | throw new DaoException(ex); 264 | } 265 | 266 | return result; 267 | } 268 | 269 | private StudentOrder getFullStudentOrder(ResultSet rs) throws SQLException { 270 | StudentOrder so = new StudentOrder(); 271 | 272 | fillStudentOrder(rs, so); 273 | fillMarriage(rs, so); 274 | 275 | so.setHusband(fillAdult(rs, "h_")); 276 | so.setWife(fillAdult(rs, "w_")); 277 | return so; 278 | } 279 | 280 | private void fillStudentOrder(ResultSet rs, StudentOrder so) throws SQLException { 281 | so.setStudentOrderId(rs.getLong("student_order_id")); 282 | so.setStudentOrderDate(rs.getTimestamp("student_order_date").toLocalDateTime()); 283 | so.setStudentOrderStatus(StudentOrderStatus.fromValue(rs.getInt("student_order_status"))); 284 | } 285 | 286 | private void fillMarriage(ResultSet rs, StudentOrder so) throws SQLException { 287 | so.setMarriageCertificateId(rs.getString("certificate_id")); 288 | so.setMarriageDate(rs.getDate("marriage_date").toLocalDate()); 289 | 290 | Long roId = rs.getLong("register_office_id"); 291 | String areaId = rs.getString("r_office_area_id"); 292 | String name = rs.getString("r_office_name"); 293 | RegisterOffice ro = new RegisterOffice(roId, areaId, name); 294 | so.setMarriageOffice(ro); 295 | } 296 | 297 | private Adult fillAdult(ResultSet rs, String pref) throws SQLException { 298 | Adult adult = new Adult(); 299 | adult.setSurName(rs.getString(pref + "sur_name")); 300 | adult.setGivenName(rs.getString(pref + "given_name")); 301 | adult.setPatronymic(rs.getString(pref + "patronymic")); 302 | adult.setDateOfBirth(rs.getDate(pref + "date_of_birth").toLocalDate()); 303 | adult.setPassportSeria(rs.getString(pref + "passport_seria")); 304 | adult.setPassportNumber(rs.getString(pref + "passport_number")); 305 | adult.setIssueDate(rs.getDate(pref + "passport_date").toLocalDate()); 306 | 307 | Long poId = rs.getLong(pref + "passport_office_id"); 308 | String poArea = rs.getString(pref + "p_office_area_id"); 309 | String poName = rs.getString(pref + "p_office_name"); 310 | PassportOffice po = new PassportOffice(poId, poArea, poName); 311 | adult.setIssueDepartment(po); 312 | Address adr = new Address(); 313 | Street st = new Street(rs.getLong(pref + "street_code"), ""); 314 | adr.setStreet(st); 315 | adr.setPostCode(rs.getString(pref + "post_index")); 316 | adr.setBuilding(rs.getString(pref + "building")); 317 | adr.setExtension(rs.getString(pref + "extension")); 318 | adr.setApartment(rs.getString(pref + "apartment")); 319 | adult.setAddress(adr); 320 | 321 | University uni = new University(rs.getLong(pref + "university_id"), ""); 322 | adult.setUnivesity(uni); 323 | adult.setStudentId(rs.getString(pref + "student_number")); 324 | 325 | return adult; 326 | } 327 | 328 | private void findChildren(Connection con, List result) throws SQLException { 329 | String cl = "(" + result.stream().map(so -> String.valueOf(so.getStudentOrderId())) 330 | .collect(Collectors.joining(",")) + ")"; 331 | 332 | Map maps = result.stream().collect(Collectors 333 | .toMap(so -> so.getStudentOrderId(), so -> so)); 334 | 335 | try (PreparedStatement stmt = con.prepareStatement(SELECT_CHILD + cl)) { 336 | ResultSet rs = stmt.executeQuery(); 337 | while(rs.next()) { 338 | Child ch = fillChild(rs); 339 | StudentOrder so = maps.get(rs.getLong("student_order_id")); 340 | so.addChild(ch); 341 | } 342 | } 343 | } 344 | 345 | private Child fillChild(ResultSet rs) throws SQLException { 346 | String surName = rs.getString("c_sur_name"); 347 | String givenName = rs.getString("c_given_name"); 348 | String patronymic = rs.getString("c_patronymic"); 349 | LocalDate dateOfBirth = rs.getDate("c_date_of_birth").toLocalDate(); 350 | 351 | Child child = new Child(surName,givenName, patronymic, dateOfBirth); 352 | 353 | child.setCertificateNumber(rs.getString("c_certificate_number")); 354 | child.setIssueDate(rs.getDate("c_certificate_date").toLocalDate()); 355 | 356 | Long roId = rs.getLong("c_register_office_id"); 357 | String roArea = rs.getString("r_office_area_id"); 358 | String roName = rs.getString("r_office_name"); 359 | RegisterOffice ro = new RegisterOffice(roId, roArea, roName); 360 | child.setIssueDepartment(ro); 361 | 362 | Address adr = new Address(); 363 | Street st = new Street(rs.getLong("c_street_code"), ""); 364 | adr.setStreet(st); 365 | adr.setPostCode(rs.getString("c_post_index")); 366 | adr.setBuilding(rs.getString("c_building")); 367 | adr.setExtension(rs.getString("c_extension")); 368 | adr.setApartment(rs.getString("c_apartment")); 369 | child.setAddress(adr); 370 | 371 | return child; 372 | } 373 | } 374 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/Address.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class Address 4 | { 5 | private String postCode; 6 | private Street street; 7 | private String building; 8 | private String extension; 9 | private String apartment; 10 | 11 | public Address() { 12 | } 13 | 14 | public Address(String postCode, Street street, String building, String extension, String apartment) { 15 | this.postCode = postCode; 16 | this.street = street; 17 | this.building = building; 18 | this.extension = extension; 19 | this.apartment = apartment; 20 | } 21 | 22 | public String getPostCode() { 23 | return postCode; 24 | } 25 | 26 | public void setPostCode(String postCode) { 27 | this.postCode = postCode; 28 | } 29 | 30 | public Street getStreet() { 31 | return street; 32 | } 33 | 34 | public void setStreet(Street street) { 35 | this.street = street; 36 | } 37 | 38 | public String getBuilding() { 39 | return building; 40 | } 41 | 42 | public void setBuilding(String building) { 43 | this.building = building; 44 | } 45 | 46 | public String getExtension() { 47 | return extension; 48 | } 49 | 50 | public void setExtension(String extension) { 51 | this.extension = extension; 52 | } 53 | 54 | public String getApartment() { 55 | return apartment; 56 | } 57 | 58 | public void setApartment(String apartment) { 59 | this.apartment = apartment; 60 | } 61 | 62 | @Override 63 | public String toString() { 64 | return "Address{" + 65 | "postCode='" + postCode + '\'' + 66 | ", street=" + street + 67 | ", building='" + building + '\'' + 68 | ", extension='" + extension + '\'' + 69 | ", apartment='" + apartment + '\'' + 70 | '}'; 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/Adult.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | 4 | import java.time.LocalDate; 5 | 6 | public class Adult extends Person 7 | { 8 | private String passportSeria; 9 | private String passportNumber; 10 | private LocalDate issueDate; 11 | private PassportOffice issueDepartment; 12 | private University univesity; 13 | private String studentId; 14 | 15 | public Adult() { 16 | } 17 | 18 | public Adult(String surName, String givenName, String patronymic, LocalDate dateOfBirth) { 19 | super(surName, givenName, patronymic, dateOfBirth); 20 | } 21 | 22 | public String getPassportSeria() { 23 | return passportSeria; 24 | } 25 | 26 | public void setPassportSeria(String passportSeria) { 27 | this.passportSeria = passportSeria; 28 | } 29 | 30 | public String getPassportNumber() { 31 | return passportNumber; 32 | } 33 | 34 | public void setPassportNumber(String passportNumber) { 35 | this.passportNumber = passportNumber; 36 | } 37 | 38 | public LocalDate getIssueDate() { 39 | return issueDate; 40 | } 41 | 42 | public void setIssueDate(LocalDate issueDate) { 43 | this.issueDate = issueDate; 44 | } 45 | 46 | public PassportOffice getIssueDepartment() { 47 | return issueDepartment; 48 | } 49 | 50 | public void setIssueDepartment(PassportOffice issueDepartment) { 51 | this.issueDepartment = issueDepartment; 52 | } 53 | 54 | public University getUnivesity() { 55 | return univesity; 56 | } 57 | 58 | public void setUnivesity(University univesity) { 59 | this.univesity = univesity; 60 | } 61 | 62 | public String getStudentId() { 63 | return studentId; 64 | } 65 | 66 | public void setStudentId(String studentId) { 67 | this.studentId = studentId; 68 | } 69 | 70 | @Override 71 | public String toString() { 72 | return "Adult{" + 73 | "passportSeria='" + passportSeria + '\'' + 74 | ", passportNumber='" + passportNumber + '\'' + 75 | ", issueDate=" + issueDate + 76 | ", issueDepartment=" + issueDepartment + 77 | ", univesity=" + univesity + 78 | ", studentId='" + studentId + '\'' + 79 | "} " + super.toString(); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/Child.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | import java.time.LocalDate; 4 | 5 | public class Child extends Person 6 | { 7 | private String certificateNumber; 8 | private LocalDate issueDate; 9 | private RegisterOffice issueDepartment; 10 | 11 | public Child(String surName, String givenName, String patronymic, LocalDate dateOfBirth) { 12 | super(surName, givenName, patronymic, dateOfBirth); 13 | } 14 | 15 | public String getCertificateNumber() { 16 | return certificateNumber; 17 | } 18 | 19 | public void setCertificateNumber(String certificateNumber) { 20 | this.certificateNumber = certificateNumber; 21 | } 22 | 23 | public LocalDate getIssueDate() { 24 | return issueDate; 25 | } 26 | 27 | public void setIssueDate(LocalDate issueDate) { 28 | this.issueDate = issueDate; 29 | } 30 | 31 | public RegisterOffice getIssueDepartment() { 32 | return issueDepartment; 33 | } 34 | 35 | public void setIssueDepartment(RegisterOffice issueDepartment) { 36 | this.issueDepartment = issueDepartment; 37 | } 38 | 39 | @Override 40 | public String toString() { 41 | return "Child{" + 42 | "certificateNumber='" + certificateNumber + '\'' + 43 | ", issueDate=" + issueDate + 44 | ", issueDepartment=" + issueDepartment + 45 | "} " + super.toString(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/CountryArea.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class CountryArea 4 | { 5 | private String areaId; 6 | private String areaName; 7 | 8 | public CountryArea() { 9 | } 10 | 11 | public CountryArea(String areaId, String areaName) { 12 | this.areaId = areaId; 13 | this.areaName = areaName; 14 | } 15 | 16 | public String getAreaId() { 17 | return areaId; 18 | } 19 | 20 | public void setAreaId(String areaId) { 21 | this.areaId = areaId; 22 | } 23 | 24 | public String getAreaName() { 25 | return areaName; 26 | } 27 | 28 | public void setAreaName(String areaName) { 29 | this.areaName = areaName; 30 | } 31 | 32 | @Override 33 | public String toString() { 34 | return "CountryArea{" + 35 | "areaId='" + areaId + '\'' + 36 | ", areaName='" + areaName + '\'' + 37 | '}'; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/PassportOffice.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class PassportOffice 4 | { 5 | private Long officeId; 6 | private String officeAreaId; 7 | private String officeName; 8 | 9 | public PassportOffice() { 10 | } 11 | 12 | public PassportOffice(Long officeId, String officeAreaId, String officeName) { 13 | this.officeId = officeId; 14 | this.officeAreaId = officeAreaId; 15 | this.officeName = officeName; 16 | } 17 | 18 | public Long getOfficeId() { 19 | return officeId; 20 | } 21 | 22 | public void setOfficeId(Long officeId) { 23 | this.officeId = officeId; 24 | } 25 | 26 | public String getOfficeAreaId() { 27 | return officeAreaId; 28 | } 29 | 30 | public void setOfficeAreaId(String officeAreaId) { 31 | this.officeAreaId = officeAreaId; 32 | } 33 | 34 | public String getOfficeName() { 35 | return officeName; 36 | } 37 | 38 | public void setOfficeName(String officeName) { 39 | this.officeName = officeName; 40 | } 41 | 42 | @Override 43 | public String toString() { 44 | return "PassportOffice{" + 45 | "officeId=" + officeId + 46 | ", officeAreaId='" + officeAreaId + '\'' + 47 | ", officeName='" + officeName + '\'' + 48 | '}'; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/Person.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | import java.time.LocalDate; 4 | 5 | public abstract class Person 6 | { 7 | private String surName; 8 | private String givenName; 9 | private String patronymic; 10 | private LocalDate dateOfBirth; 11 | private Address address; 12 | 13 | public Person() { 14 | } 15 | 16 | public Person(String surName, String givenName, String patronymic, LocalDate dateOfBirth) { 17 | this.surName = surName; 18 | this.givenName = givenName; 19 | this.patronymic = patronymic; 20 | this.dateOfBirth = dateOfBirth; 21 | } 22 | 23 | public String getSurName() { 24 | return surName; 25 | } 26 | 27 | public void setSurName(String surName) { 28 | this.surName = surName; 29 | } 30 | 31 | public String getGivenName() { 32 | return givenName; 33 | } 34 | 35 | public void setGivenName(String givenName) { 36 | this.givenName = givenName; 37 | } 38 | 39 | public String getPatronymic() { 40 | return patronymic; 41 | } 42 | 43 | public void setPatronymic(String patronymic) { 44 | this.patronymic = patronymic; 45 | } 46 | 47 | public LocalDate getDateOfBirth() { 48 | return dateOfBirth; 49 | } 50 | 51 | public void setDateOfBirth(LocalDate dateOfBirth) { 52 | this.dateOfBirth = dateOfBirth; 53 | } 54 | 55 | public Address getAddress() { 56 | return address; 57 | } 58 | 59 | public void setAddress(Address address) { 60 | this.address = address; 61 | } 62 | 63 | @Override 64 | public String toString() { 65 | return "Person{" + 66 | "surName='" + surName + '\'' + 67 | ", givenName='" + givenName + '\'' + 68 | ", patronymic='" + patronymic + '\'' + 69 | ", dateOfBirth=" + dateOfBirth + 70 | ", address=" + address + 71 | '}'; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/RegisterOffice.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class RegisterOffice 4 | { 5 | private Long officeId; 6 | private String officeAreaId; 7 | private String officeName; 8 | 9 | public RegisterOffice() { 10 | } 11 | 12 | public RegisterOffice(Long officeId, String officeAreaId, String officeName) { 13 | this.officeId = officeId; 14 | this.officeAreaId = officeAreaId; 15 | this.officeName = officeName; 16 | } 17 | 18 | public Long getOfficeId() { 19 | return officeId; 20 | } 21 | 22 | public void setOfficeId(Long officeId) { 23 | this.officeId = officeId; 24 | } 25 | 26 | public String getOfficeAreaId() { 27 | return officeAreaId; 28 | } 29 | 30 | public void setOfficeAreaId(String officeAreaId) { 31 | this.officeAreaId = officeAreaId; 32 | } 33 | 34 | public String getOfficeName() { 35 | return officeName; 36 | } 37 | 38 | public void setOfficeName(String officeName) { 39 | this.officeName = officeName; 40 | } 41 | 42 | @Override 43 | public String toString() { 44 | return "RegisterOffice{" + 45 | "officeId=" + officeId + 46 | ", officeAreaId='" + officeAreaId + '\'' + 47 | ", officeName='" + officeName + '\'' + 48 | '}'; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/Street.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class Street 4 | { 5 | private Long streetCode; 6 | private String streetName; 7 | 8 | public Street() { 9 | } 10 | 11 | public Street(Long streetCode, String streetName) { 12 | this.streetCode = streetCode; 13 | this.streetName = streetName; 14 | } 15 | 16 | public Long getStreetCode() { 17 | return streetCode; 18 | } 19 | 20 | public void setStreetCode(Long streetCode) { 21 | this.streetCode = streetCode; 22 | } 23 | 24 | public String getStreetName() { 25 | return streetName; 26 | } 27 | 28 | public void setStreetName(String streetName) { 29 | this.streetName = streetName; 30 | } 31 | 32 | @Override 33 | public String toString() { 34 | return "Street{" + 35 | "streetCode=" + streetCode + 36 | ", streetName='" + streetName + '\'' + 37 | '}'; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/StudentOrder.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | import java.time.LocalDate; 4 | import java.time.LocalDateTime; 5 | import java.util.ArrayList; 6 | import java.util.LinkedList; 7 | import java.util.List; 8 | 9 | public class StudentOrder 10 | { 11 | private long studentOrderId; 12 | private StudentOrderStatus studentOrderStatus; 13 | private LocalDateTime studentOrderDate; 14 | private Adult husband; 15 | private Adult wife; 16 | private List children; 17 | private String marriageCertificateId; 18 | private RegisterOffice marriageOffice; 19 | private LocalDate marriageDate; 20 | 21 | public StudentOrderStatus getStudentOrderStatus() { 22 | return studentOrderStatus; 23 | } 24 | 25 | public void setStudentOrderStatus(StudentOrderStatus studentOrderStatus) { 26 | this.studentOrderStatus = studentOrderStatus; 27 | } 28 | 29 | public LocalDateTime getStudentOrderDate() { 30 | return studentOrderDate; 31 | } 32 | 33 | public void setStudentOrderDate(LocalDateTime studentOrderDate) { 34 | this.studentOrderDate = studentOrderDate; 35 | } 36 | 37 | public long getStudentOrderId() { 38 | return studentOrderId; 39 | } 40 | 41 | public void setStudentOrderId(long studentOrderId) { 42 | this.studentOrderId = studentOrderId; 43 | } 44 | 45 | public Adult getHusband() { 46 | return husband; 47 | } 48 | 49 | public void setHusband(Adult husband) { 50 | this.husband = husband; 51 | } 52 | 53 | public Adult getWife() { 54 | return wife; 55 | } 56 | 57 | public void setWife(Adult wife) { 58 | this.wife = wife; 59 | } 60 | 61 | public void addChild(Child child) { 62 | if (children == null) { 63 | children = new ArrayList<>(5); 64 | } 65 | children.add(child); 66 | } 67 | 68 | public List getChildren() { 69 | return children; 70 | } 71 | 72 | public String getMarriageCertificateId() { 73 | return marriageCertificateId; 74 | } 75 | 76 | public void setMarriageCertificateId(String marriageCertificateId) { 77 | this.marriageCertificateId = marriageCertificateId; 78 | } 79 | 80 | public RegisterOffice getMarriageOffice() { 81 | return marriageOffice; 82 | } 83 | 84 | public void setMarriageOffice(RegisterOffice marriageOffice) { 85 | this.marriageOffice = marriageOffice; 86 | } 87 | 88 | public LocalDate getMarriageDate() { 89 | return marriageDate; 90 | } 91 | 92 | public void setMarriageDate(LocalDate marriageDate) { 93 | this.marriageDate = marriageDate; 94 | } 95 | 96 | @Override 97 | public String toString() { 98 | return "StudentOrder{" + 99 | "studentOrderId=" + studentOrderId + 100 | ", studentOrderStatus=" + studentOrderStatus + 101 | ", studentOrderDate=" + studentOrderDate + 102 | ", husband=" + husband + 103 | ", wife=" + wife + 104 | ", children=" + children + 105 | ", marriageCertificateId='" + marriageCertificateId + '\'' + 106 | ", marriageOffice=" + marriageOffice + 107 | ", marriageDate=" + marriageDate + 108 | '}'; 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/StudentOrderStatus.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public enum StudentOrderStatus 4 | { 5 | START, CHECKED; 6 | 7 | public static StudentOrderStatus fromValue(int value) { 8 | for(StudentOrderStatus sos : StudentOrderStatus.values()) { 9 | if(sos.ordinal() == value) { 10 | return sos; 11 | } 12 | } 13 | throw new RuntimeException("Unknown value:" + value); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/University.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class University 4 | { 5 | private Long universityId; 6 | private String universityName; 7 | 8 | public University() { 9 | } 10 | 11 | public University(Long universityId, String universityName) { 12 | this.universityId = universityId; 13 | this.universityName = universityName; 14 | } 15 | 16 | public Long getUniversityId() { 17 | return universityId; 18 | } 19 | 20 | public void setUniversityId(Long universityId) { 21 | this.universityId = universityId; 22 | } 23 | 24 | public String getUniversityName() { 25 | return universityName; 26 | } 27 | 28 | public void setUniversityName(String universityName) { 29 | this.universityName = universityName; 30 | } 31 | 32 | @Override 33 | public String toString() { 34 | return "University{" + 35 | "universityId=" + universityId + 36 | ", universityName='" + universityName + '\'' + 37 | '}'; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/children/AnswerChildren.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.children; 2 | 3 | public class AnswerChildren 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/register/AnswerCityRegister.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.register; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class AnswerCityRegister 7 | { 8 | private List items; 9 | 10 | public void addItem(AnswerCityRegisterItem item) { 11 | if (items == null) { 12 | items = new ArrayList<>(10); 13 | } 14 | items.add(item); 15 | } 16 | 17 | public List getItems() { 18 | return items; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/register/AnswerCityRegisterItem.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.register; 2 | 3 | import edu.javacourse.studentorder.domain.Person; 4 | 5 | public class AnswerCityRegisterItem 6 | { 7 | public enum CityStatus 8 | { 9 | YES, NO, ERROR; 10 | } 11 | 12 | public static class CityError 13 | { 14 | private String code; 15 | private String text; 16 | 17 | public CityError(String code, String text) { 18 | this.code = code; 19 | this.text = text; 20 | } 21 | 22 | public String getCode() { 23 | return code; 24 | } 25 | 26 | public String getText() { 27 | return text; 28 | } 29 | } 30 | 31 | private CityStatus status; 32 | private Person person; 33 | private CityError error; 34 | 35 | public AnswerCityRegisterItem(CityStatus status, Person person) { 36 | this.status = status; 37 | this.person = person; 38 | } 39 | 40 | public AnswerCityRegisterItem(CityStatus status, Person person, CityError error) { 41 | this.status = status; 42 | this.person = person; 43 | this.error = error; 44 | } 45 | 46 | public CityStatus getStatus() { 47 | return status; 48 | } 49 | 50 | public Person getPerson() { 51 | return person; 52 | } 53 | 54 | public CityError getError() { 55 | return error; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/register/CityRegisterRequest.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.register; 2 | 3 | import edu.javacourse.studentorder.domain.Address; 4 | import edu.javacourse.studentorder.domain.Person; 5 | import edu.javacourse.studentorder.util.LocalDateAdapter; 6 | 7 | import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 8 | import java.time.LocalDate; 9 | 10 | public class CityRegisterRequest 11 | { 12 | private String surName; 13 | private String givenName; 14 | private String patronymic; 15 | @XmlJavaTypeAdapter(value = LocalDateAdapter.class) 16 | private LocalDate dateOfBirth; 17 | private Long streetCode; 18 | private String building; 19 | private String extension; 20 | private String apartment; 21 | 22 | public CityRegisterRequest() { 23 | } 24 | 25 | public CityRegisterRequest(Person person) { 26 | surName = person.getSurName(); 27 | givenName = person.getGivenName(); 28 | patronymic = person.getPatronymic(); 29 | dateOfBirth = person.getDateOfBirth(); 30 | Address adr = person.getAddress(); 31 | streetCode = adr.getStreet().getStreetCode(); 32 | building = adr.getBuilding(); 33 | extension = adr.getExtension(); 34 | apartment = adr.getApartment(); 35 | } 36 | 37 | public String getSurName() { 38 | return surName; 39 | } 40 | 41 | public void setSurName(String surName) { 42 | this.surName = surName; 43 | } 44 | 45 | public String getGivenName() { 46 | return givenName; 47 | } 48 | 49 | public void setGivenName(String givenName) { 50 | this.givenName = givenName; 51 | } 52 | 53 | public String getPatronymic() { 54 | return patronymic; 55 | } 56 | 57 | public void setPatronymic(String patronymic) { 58 | this.patronymic = patronymic; 59 | } 60 | 61 | public LocalDate getDateOfBirth() { 62 | return dateOfBirth; 63 | } 64 | 65 | public void setDateOfBirth(LocalDate dateOfBirth) { 66 | this.dateOfBirth = dateOfBirth; 67 | } 68 | 69 | public Long getStreetCode() { 70 | return streetCode; 71 | } 72 | 73 | public void setStreetCode(Long streetCode) { 74 | this.streetCode = streetCode; 75 | } 76 | 77 | public String getBuilding() { 78 | return building; 79 | } 80 | 81 | public void setBuilding(String building) { 82 | this.building = building; 83 | } 84 | 85 | public String getExtension() { 86 | return extension; 87 | } 88 | 89 | public void setExtension(String extension) { 90 | this.extension = extension; 91 | } 92 | 93 | public String getApartment() { 94 | return apartment; 95 | } 96 | 97 | public void setApartment(String apartment) { 98 | this.apartment = apartment; 99 | } 100 | 101 | @Override 102 | public String toString() { 103 | return "CityRegisterRequest{" + 104 | "surName='" + surName + '\'' + 105 | ", givenName='" + givenName + '\'' + 106 | ", patronymic='" + patronymic + '\'' + 107 | ", dateOfBirth=" + dateOfBirth + 108 | ", streetCode=" + streetCode + 109 | ", building='" + building + '\'' + 110 | ", extension='" + extension + '\'' + 111 | ", apartment='" + apartment + '\'' + 112 | '}'; 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/register/CityRegisterResponse.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.register; 2 | 3 | public class CityRegisterResponse 4 | { 5 | private boolean registered; 6 | private boolean temporal; 7 | 8 | public boolean isRegistered() { 9 | return registered; 10 | } 11 | 12 | public void setRegistered(boolean registered) { 13 | this.registered = registered; 14 | } 15 | 16 | public boolean isTemporal() { 17 | return temporal; 18 | } 19 | 20 | public void setTemporal(boolean temporal) { 21 | this.temporal = temporal; 22 | } 23 | 24 | @Override 25 | public String toString() { 26 | return "CityRegisterResponse{" + 27 | "registered=" + registered + 28 | ", temporal=" + temporal + 29 | '}'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/student/AnswerStudent.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.student; 2 | 3 | public class AnswerStudent 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/domain/wedding/AnswerWedding.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.wedding; 2 | 3 | public class AnswerWedding 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/exception/CityRegisterException.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.exception; 2 | 3 | public class CityRegisterException extends Exception 4 | { 5 | private String code; 6 | 7 | public CityRegisterException(String code, String message) { 8 | super(message); 9 | this.code = code; 10 | } 11 | 12 | public CityRegisterException(String code, String message, Throwable cause) { 13 | super(message, cause); 14 | this.code = code; 15 | } 16 | 17 | public String getCode() { 18 | return code; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/exception/DaoException.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.exception; 2 | 3 | public class DaoException extends Exception 4 | { 5 | public DaoException() { 6 | } 7 | 8 | public DaoException(String message) { 9 | super(message); 10 | } 11 | 12 | public DaoException(Throwable cause) { 13 | super(cause); 14 | } 15 | 16 | public DaoException(String message, Throwable cause) { 17 | super(message, cause); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/mail/MailSender.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.mail; 2 | 3 | import edu.javacourse.studentorder.domain.StudentOrder; 4 | 5 | public class MailSender 6 | { 7 | public void sendMail(StudentOrder so) { 8 | System.out.println("Почта отправлена"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/util/LocalDateAdapter.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.util; 2 | 3 | import javax.xml.bind.annotation.adapters.XmlAdapter; 4 | import java.time.LocalDate; 5 | import java.time.format.DateTimeFormatter; 6 | 7 | public class LocalDateAdapter extends XmlAdapter 8 | { 9 | 10 | public static final String PATTERN = "dd.MM.yyyy"; 11 | 12 | @Override 13 | public LocalDate unmarshal(String v) throws Exception { 14 | return LocalDate.parse(v, DateTimeFormatter.ofPattern(PATTERN)); 15 | } 16 | 17 | @Override 18 | public String marshal(LocalDate v) throws Exception { 19 | return v.format(DateTimeFormatter.ofPattern(PATTERN)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/validator/ChildrenValidator.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator; 2 | 3 | import edu.javacourse.studentorder.domain.children.AnswerChildren; 4 | import edu.javacourse.studentorder.domain.StudentOrder; 5 | 6 | public class ChildrenValidator 7 | { 8 | public AnswerChildren checkChildren(StudentOrder so) { 9 | System.out.println("Children Check is running"); 10 | return new AnswerChildren(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/validator/CityRegisterValidator.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator; 2 | 3 | import edu.javacourse.studentorder.domain.Child; 4 | import edu.javacourse.studentorder.domain.Person; 5 | import edu.javacourse.studentorder.domain.register.AnswerCityRegister; 6 | import edu.javacourse.studentorder.domain.register.AnswerCityRegisterItem; 7 | import edu.javacourse.studentorder.domain.register.CityRegisterResponse; 8 | import edu.javacourse.studentorder.domain.StudentOrder; 9 | import edu.javacourse.studentorder.exception.CityRegisterException; 10 | import edu.javacourse.studentorder.validator.register.CityRegisterChecker; 11 | import edu.javacourse.studentorder.validator.register.RealCityRegisterChecker; 12 | 13 | public class CityRegisterValidator 14 | { 15 | public static final String IN_CODE = "NO_GRN"; 16 | 17 | private CityRegisterChecker personChecker; 18 | 19 | public CityRegisterValidator() { 20 | personChecker = new RealCityRegisterChecker(); 21 | } 22 | 23 | public AnswerCityRegister checkCityRegister(StudentOrder so) { 24 | AnswerCityRegister ans = new AnswerCityRegister(); 25 | 26 | ans.addItem(checkPerson(so.getHusband())); 27 | ans.addItem(checkPerson(so.getWife())); 28 | for (Child child : so.getChildren()) { 29 | ans.addItem(checkPerson(child)); 30 | } 31 | 32 | return ans; 33 | } 34 | 35 | private AnswerCityRegisterItem checkPerson(Person person) { 36 | AnswerCityRegisterItem.CityStatus status = null; 37 | AnswerCityRegisterItem.CityError error = null; 38 | 39 | try { 40 | CityRegisterResponse tmp = personChecker.checkPerson(person); 41 | status = tmp.isRegistered() ? 42 | AnswerCityRegisterItem.CityStatus.YES : 43 | AnswerCityRegisterItem.CityStatus.NO; 44 | } catch (CityRegisterException ex) { 45 | ex.printStackTrace(System.out); 46 | status = AnswerCityRegisterItem.CityStatus.ERROR; 47 | error = new AnswerCityRegisterItem.CityError(ex.getCode(), ex.getMessage()); 48 | } catch (Exception ex) { 49 | ex.printStackTrace(System.out); 50 | status = AnswerCityRegisterItem.CityStatus.ERROR; 51 | error = new AnswerCityRegisterItem.CityError(IN_CODE, ex.getMessage()); 52 | } 53 | 54 | AnswerCityRegisterItem ans = 55 | new AnswerCityRegisterItem(status, person, error); 56 | 57 | return ans; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/validator/StudentValidator.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator; 2 | 3 | import edu.javacourse.studentorder.domain.student.AnswerStudent; 4 | import edu.javacourse.studentorder.domain.StudentOrder; 5 | 6 | public class StudentValidator 7 | { 8 | public AnswerStudent checkStudent(StudentOrder so) { 9 | System.out.println("Студенты проверяются"); 10 | return new AnswerStudent(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/validator/WeddingValidator.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator; 2 | 3 | import edu.javacourse.studentorder.domain.wedding.AnswerWedding; 4 | import edu.javacourse.studentorder.domain.StudentOrder; 5 | 6 | public class WeddingValidator 7 | { 8 | public AnswerWedding checkWedding(StudentOrder so) { 9 | System.out.println("Wedding запущен"); 10 | return new AnswerWedding(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/validator/register/CityRegisterChecker.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator.register; 2 | 3 | import edu.javacourse.studentorder.domain.register.CityRegisterResponse; 4 | import edu.javacourse.studentorder.domain.Person; 5 | import edu.javacourse.studentorder.exception.CityRegisterException; 6 | 7 | public interface CityRegisterChecker 8 | { 9 | CityRegisterResponse checkPerson(Person person) 10 | throws CityRegisterException; 11 | } 12 | -------------------------------------------------------------------------------- /student-order/src/main/java/edu/javacourse/studentorder/validator/register/RealCityRegisterChecker.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator.register; 2 | 3 | import edu.javacourse.studentorder.config.Config; 4 | import edu.javacourse.studentorder.domain.register.CityRegisterRequest; 5 | import edu.javacourse.studentorder.domain.register.CityRegisterResponse; 6 | import edu.javacourse.studentorder.domain.Person; 7 | import edu.javacourse.studentorder.exception.CityRegisterException; 8 | 9 | import javax.ws.rs.client.Client; 10 | import javax.ws.rs.client.ClientBuilder; 11 | import javax.ws.rs.client.Entity; 12 | import javax.ws.rs.core.MediaType; 13 | 14 | public class RealCityRegisterChecker implements CityRegisterChecker 15 | { 16 | public CityRegisterResponse checkPerson(Person person) 17 | throws CityRegisterException { 18 | 19 | try { 20 | CityRegisterRequest request = new CityRegisterRequest(person); 21 | 22 | Client client = ClientBuilder.newClient(); 23 | CityRegisterResponse response = client.target( 24 | Config.getProperty(Config.CR_URL)) 25 | .request(MediaType.APPLICATION_JSON) 26 | .post(Entity.entity(request, MediaType.APPLICATION_JSON)) 27 | .readEntity(CityRegisterResponse.class); 28 | 29 | return response; 30 | } catch(Exception ex) { 31 | throw new CityRegisterException("1", ex.getMessage(), ex); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /student-order/src/main/resources/config.properties: -------------------------------------------------------------------------------- 1 | db.url=jdbc:postgresql://localhost/jc_student 2 | db.login=postgres 3 | db.password=postgres 4 | db.limit=1000 5 | 6 | cr.url=http://localhost:8080/city-register-1.0/rest/check -------------------------------------------------------------------------------- /student-order/src/main/resources/student_data.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO jc_street (street_code, street_name) VALUES 2 | (1, 'улица Садовая'), 3 | (2, 'Невский проспект'), 4 | (3, 'улица Стахановцев'), 5 | (4, 'улица Гороховая'), 6 | (5, 'проспект Ветеранов'); 7 | 8 | INSERT INTO jc_university (university_id, university_name) VALUES 9 | (1, 'Санкт-Петербургский Государственный Университет'), 10 | (2, 'Санкт-Петербургский Политехнический Университет'), 11 | (3, 'Санкт-Петербургский Морской Технический Университет'); 12 | 13 | 14 | 15 | INSERT INTO jc_country_struct (area_id, area_name) VALUES 16 | ('010000000000', 'Город'), 17 | ('010010000000', 'Город Район 1'), 18 | ('010020000000', 'Город Район 2'), 19 | ('010030000000', 'Город Район 3'), 20 | ('010040000000', 'Город Район 4'), 21 | 22 | ('020000000000', 'Край'), 23 | ('020010000000', 'Край Область 1'), 24 | ('020010010000', 'Край Область 1 Район 1'), 25 | ('020010010001', 'Край Область 1 Район 1 Поселение 1'), 26 | ('020010010002', 'Край Область 1 Район 1 Поселение 2'), 27 | ('020010020000', 'Край Область 1 Район 2'), 28 | ('020010020001', 'Край Область 1 Район 2 Поселение 1'), 29 | ('020010020002', 'Край Область 1 Район 2 Поселение 2'), 30 | ('020010020003', 'Край Область 1 Район 2 Поселение 3'), 31 | ('020020000000', 'Край Область 2'), 32 | ('020020010000', 'Край Область 2 Район 1'), 33 | ('020020010001', 'Край Область 2 Район 1 Поселение 1'), 34 | ('020020010002', 'Край Область 2 Район 1 Поселение 2'), 35 | ('020020010003', 'Край Область 2 Район 1 Поселение 2'), 36 | ('020020020000', 'Край Область 2 Район 2'), 37 | ('020020020001', 'Край Область 2 Район 2 Поселение 1'), 38 | ('020020020002', 'Край Область 2 Район 2 Поселение 2'); 39 | 40 | INSERT INTO jc_passport_office (p_office_id, p_office_area_id, p_office_name) 41 | VALUES 42 | (1, '010010000000', 'Паспортный стол района 1 города'), 43 | (2, '010020000000', 'Паспортный стол 1 района 2 города'), 44 | (3, '010020000000', 'Паспортный стол 2 района 2 города'), 45 | (4, '010010000000', 'Паспортный стол района 3 города'), 46 | (5, '020010010001', 'Паспортный стол Область 1 поселения 1'), 47 | (6, '020010020002', 'Паспортный стол Область 1 поселения 2'), 48 | (7, '020020010000', 'Паспортный стол Область 2 район 1'), 49 | (8, '020020020000', 'Паспортный стол Область 2 район 2'); 50 | 51 | INSERT INTO jc_register_office (r_office_id, r_office_area_id, r_office_name) VALUES 52 | (1, '010010000000', 'ЗАГС 1 района 1 города'), 53 | (2, '010010000000', 'ЗАГС 2 района 1 города'), 54 | (3, '010020000000', 'ЗАГС района 2 города'), 55 | (4, '020010010001', 'ЗАГС Область 1 поселения 1'), 56 | (5, '020010020002', 'ЗАГС Область 1 поселения 2'), 57 | (6, '020020010000', 'ЗАГС Область 2 район 1'), 58 | (7, '020020020000', 'ЗАГС Область 2 район 2'); 59 | 60 | -------------------------------------------------------------------------------- /student-order/src/main/resources/student_project.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS jc_student_child; 2 | DROP TABLE IF EXISTS jc_student_order; 3 | DROP TABLE IF EXISTS jc_passport_office; 4 | DROP TABLE IF EXISTS jc_register_office; 5 | DROP TABLE IF EXISTS jc_country_struct; 6 | DROP TABLE IF EXISTS jc_university; 7 | DROP TABLE IF EXISTS jc_street; 8 | 9 | CREATE TABLE jc_street 10 | ( 11 | street_code integer not null, 12 | street_name varchar(300), 13 | PRIMARY KEY (street_code) 14 | ); 15 | 16 | CREATE TABLE jc_university 17 | ( 18 | university_id integer not null, 19 | university_name varchar(300), 20 | PRIMARY KEY (university_id) 21 | ); 22 | 23 | CREATE TABLE jc_country_struct 24 | ( 25 | area_id char(12) not null, 26 | area_name varchar(200), 27 | PRIMARY KEY (area_id) 28 | ); 29 | 30 | CREATE TABLE jc_passport_office 31 | ( 32 | p_office_id integer not null, 33 | p_office_area_id char(12) not null, 34 | p_office_name varchar(200), 35 | PRIMARY KEY (p_office_id), 36 | FOREIGN KEY (p_office_area_id) REFERENCES jc_country_struct(area_id) ON DELETE RESTRICT 37 | ); 38 | 39 | CREATE TABLE jc_register_office 40 | ( 41 | r_office_id integer not null, 42 | r_office_area_id char(12) not null, 43 | r_office_name varchar(200), 44 | PRIMARY KEY (r_office_id), 45 | FOREIGN KEY (r_office_area_id) REFERENCES jc_country_struct(area_id) ON DELETE RESTRICT 46 | ); 47 | 48 | 49 | CREATE TABLE jc_student_order 50 | ( 51 | student_order_id SERIAL, 52 | student_order_status int not null, 53 | student_order_date timestamp not null, 54 | h_sur_name varchar(100) not null, 55 | h_given_name varchar(100) not null, 56 | h_patronymic varchar(100) not null, 57 | h_date_of_birth date not null, 58 | h_passport_seria varchar(10) not null, 59 | h_passport_number varchar(10) not null, 60 | h_passport_date date not null, 61 | h_passport_office_id integer not null, 62 | h_post_index varchar(10), 63 | h_street_code integer not null, 64 | h_building varchar(10) not null, 65 | h_extension varchar(10), 66 | h_apartment varchar(10), 67 | h_university_id integer not null, 68 | h_student_number varchar(30) not null, 69 | w_sur_name varchar(100) not null, 70 | w_given_name varchar(100) not null, 71 | w_patronymic varchar(100) not null, 72 | w_date_of_birth date not null, 73 | w_passport_seria varchar(10) not null, 74 | w_passport_number varchar(10) not null, 75 | w_passport_date date not null, 76 | w_passport_office_id integer not null, 77 | w_post_index varchar(10), 78 | w_street_code integer not null, 79 | w_building varchar(10) not null, 80 | w_extension varchar(10), 81 | w_apartment varchar(10), 82 | w_university_id integer not null, 83 | w_student_number varchar(30) not null, 84 | certificate_id varchar(20) not null, 85 | register_office_id integer not null, 86 | marriage_date date not null, 87 | PRIMARY KEY (student_order_id), 88 | FOREIGN KEY (h_street_code) REFERENCES jc_street(street_code) ON DELETE RESTRICT, 89 | FOREIGN KEY (h_passport_office_id) REFERENCES jc_passport_office(p_office_id) ON DELETE RESTRICT, 90 | FOREIGN KEY (h_university_id) REFERENCES jc_university(university_id) ON DELETE RESTRICT, 91 | FOREIGN KEY (w_street_code) REFERENCES jc_street(street_code) ON DELETE RESTRICT, 92 | FOREIGN KEY (w_passport_office_id) REFERENCES jc_passport_office(p_office_id) ON DELETE RESTRICT, 93 | FOREIGN KEY (w_university_id) REFERENCES jc_university(university_id) ON DELETE RESTRICT, 94 | FOREIGN KEY (register_office_id) REFERENCES jc_register_office(r_office_id) ON DELETE RESTRICT 95 | ); 96 | 97 | CREATE TABLE jc_student_child 98 | ( 99 | student_child_id SERIAL, 100 | student_order_id integer not null, 101 | c_sur_name varchar(100) not null, 102 | c_given_name varchar(100) not null, 103 | c_patronymic varchar(100) not null, 104 | c_date_of_birth date not null, 105 | c_certificate_number varchar(10) not null, 106 | c_certificate_date date not null, 107 | c_register_office_id integer not null, 108 | c_post_index varchar(10), 109 | c_street_code integer not null, 110 | c_building varchar(10) not null, 111 | c_extension varchar(10), 112 | c_apartment varchar(10), 113 | PRIMARY KEY (student_child_id), 114 | FOREIGN KEY (student_order_id) REFERENCES jc_student_order(student_order_id) ON DELETE RESTRICT, 115 | FOREIGN KEY (c_street_code) REFERENCES jc_street(street_code) ON DELETE RESTRICT, 116 | FOREIGN KEY (c_register_office_id) REFERENCES jc_register_office(r_office_id) ON DELETE RESTRICT 117 | ); 118 | 119 | CREATE INDEX idx_student_order_status ON jc_student_order(student_order_status); 120 | 121 | CREATE INDEX idx_student_order_id ON jc_student_child(student_order_id); 122 | 123 | -------------------------------------------------------------------------------- /student-order/src/test/java/edu/javacourse/studentorder/dao/DBInit.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import java.net.URL; 4 | import java.nio.file.Files; 5 | import java.nio.file.Paths; 6 | import java.sql.Connection; 7 | import java.sql.Statement; 8 | import java.util.List; 9 | import java.util.stream.Collectors; 10 | 11 | public class DBInit 12 | { 13 | public static void startUp() throws Exception { 14 | URL url1 = DictionaryDaoImplTest.class.getClassLoader() 15 | .getResource("student_project.sql"); 16 | URL url2 = DictionaryDaoImplTest.class.getClassLoader() 17 | .getResource("student_data.sql"); 18 | 19 | List str1 = Files.readAllLines(Paths.get(url1.toURI())); 20 | String sql1 = str1.stream().collect(Collectors.joining()); 21 | 22 | List str2 = Files.readAllLines(Paths.get(url2.toURI())); 23 | String sql2 = str2.stream().collect(Collectors.joining()); 24 | 25 | try (Connection con = ConnectionBuilder.getConnection(); 26 | Statement stmt = con.createStatement(); 27 | ) { 28 | stmt.executeUpdate(sql1); 29 | stmt.executeUpdate(sql2); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /student-order/src/test/java/edu/javacourse/studentorder/dao/DictionaryDaoImplTest.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | 4 | import edu.javacourse.studentorder.domain.CountryArea; 5 | import edu.javacourse.studentorder.domain.PassportOffice; 6 | import edu.javacourse.studentorder.domain.RegisterOffice; 7 | import edu.javacourse.studentorder.domain.Street; 8 | import edu.javacourse.studentorder.exception.DaoException; 9 | import org.junit.Assert; 10 | import org.junit.BeforeClass; 11 | import org.junit.Test; 12 | import org.slf4j.Logger; 13 | import org.slf4j.LoggerFactory; 14 | 15 | import java.net.URL; 16 | import java.nio.file.Files; 17 | import java.nio.file.Paths; 18 | import java.sql.Connection; 19 | import java.sql.Statement; 20 | import java.time.LocalDateTime; 21 | import java.util.List; 22 | import java.util.stream.Collectors; 23 | 24 | 25 | public class DictionaryDaoImplTest 26 | { 27 | private static final Logger logger = LoggerFactory.getLogger(DictionaryDaoImplTest.class); 28 | 29 | @BeforeClass 30 | public static void startUp() throws Exception { 31 | DBInit.startUp(); 32 | } 33 | 34 | @Test 35 | public void testStreet() throws DaoException { 36 | LocalDateTime dt1 = LocalDateTime.now(); 37 | LocalDateTime dt2 = LocalDateTime.now(); 38 | logger.info("TEST {} {}", dt1, dt2); 39 | 40 | List d = new DictionaryDaoImpl().findStreets("про"); 41 | Assert.assertTrue(d.size() == 2); 42 | } 43 | 44 | @Test 45 | public void testPassportOffice() throws DaoException { 46 | List po = new DictionaryDaoImpl().findPassportOffices("010020000000"); 47 | Assert.assertTrue(po.size() == 2); 48 | } 49 | 50 | @Test 51 | public void testRegisterOffice() throws DaoException { 52 | List ro = new DictionaryDaoImpl().findRegisterOffices("010010000000"); 53 | Assert.assertTrue(ro.size() == 2); 54 | } 55 | 56 | @Test 57 | public void testArea() throws DaoException { 58 | List ca1 = new DictionaryDaoImpl().findAreas(""); 59 | Assert.assertTrue(ca1.size() == 2); 60 | List ca2 = new DictionaryDaoImpl().findAreas("020000000000"); 61 | Assert.assertTrue(ca2.size() == 2); 62 | List ca3 = new DictionaryDaoImpl().findAreas("020010000000"); 63 | Assert.assertTrue(ca3.size() == 2); 64 | List ca4 = new DictionaryDaoImpl().findAreas("020010010000"); 65 | Assert.assertTrue(ca4.size() == 2); 66 | } 67 | } -------------------------------------------------------------------------------- /student-order/src/test/java/edu/javacourse/studentorder/dao/SimpleRunner.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import org.junit.Test; 4 | 5 | import java.lang.reflect.Constructor; 6 | import java.lang.reflect.Method; 7 | 8 | public class SimpleRunner 9 | { 10 | public static void main(String[] args) { 11 | SimpleRunner sr = new SimpleRunner(); 12 | 13 | sr.runTests(); 14 | } 15 | 16 | private void runTests() { 17 | try { 18 | Class cl = Class.forName("edu.javacourse.studentorder.dao.DictionaryDaoImplTest"); 19 | 20 | Constructor cst = cl.getConstructor(); 21 | Object entity = cst.newInstance(); 22 | 23 | Method[] methods = cl.getMethods(); 24 | for (Method m : methods) { 25 | Test ann = m.getAnnotation(Test.class); 26 | if (ann != null) { 27 | m.invoke(entity); 28 | } 29 | } 30 | 31 | } catch (Exception ex) { 32 | ex.printStackTrace(); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /student-order/src/test/java/edu/javacourse/studentorder/dao/StudentOrderDaoImplTest.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import edu.javacourse.studentorder.domain.Address; 4 | import edu.javacourse.studentorder.domain.Adult; 5 | import edu.javacourse.studentorder.domain.Child; 6 | import edu.javacourse.studentorder.domain.PassportOffice; 7 | import edu.javacourse.studentorder.domain.RegisterOffice; 8 | import edu.javacourse.studentorder.domain.Street; 9 | import edu.javacourse.studentorder.domain.StudentOrder; 10 | import edu.javacourse.studentorder.domain.University; 11 | import edu.javacourse.studentorder.exception.DaoException; 12 | import org.junit.Assert; 13 | import org.junit.BeforeClass; 14 | import org.junit.Test; 15 | 16 | import java.time.LocalDate; 17 | import java.util.List; 18 | 19 | import static org.junit.Assert.*; 20 | 21 | public class StudentOrderDaoImplTest 22 | { 23 | @BeforeClass 24 | public static void startUp() throws Exception { 25 | DBInit.startUp(); 26 | } 27 | 28 | @Test 29 | public void saveStudentOrder() throws DaoException { 30 | StudentOrder so = buildStudentOrder(10); 31 | Long id = new StudentOrderDaoImpl().saveStudentOrder(so); 32 | } 33 | 34 | @Test(expected = DaoException.class) 35 | public void saveStudentOrderError() throws DaoException { 36 | StudentOrder so = buildStudentOrder(10); 37 | so.getHusband().setSurName(null); 38 | Long id = new StudentOrderDaoImpl().saveStudentOrder(so); 39 | } 40 | 41 | @Test 42 | public void getStudentOrders() throws DaoException { 43 | List list = new StudentOrderDaoImpl().getStudentOrders(); 44 | } 45 | 46 | public StudentOrder buildStudentOrder(long id) { 47 | StudentOrder so = new StudentOrder(); 48 | so.setStudentOrderId(id); 49 | so.setMarriageCertificateId("" + (123456000 + id)); 50 | so.setMarriageDate(LocalDate.of(2016, 7, 4)); 51 | 52 | RegisterOffice ro = new RegisterOffice(1L, "", ""); 53 | so.setMarriageOffice(ro); 54 | 55 | Street street = new Street(1L, "First street"); 56 | 57 | Address address = new Address("195000", street, "10", "2", "121"); 58 | 59 | // Муж 60 | Adult husband = new Adult("Васильев", "Павел", "Николаевич", LocalDate.of(1995, 3, 18)); 61 | husband.setPassportSeria("" + (1000 + id)); 62 | husband.setPassportNumber("" + (100000 + id)); 63 | husband.setIssueDate(LocalDate.of(2017, 9, 15)); 64 | PassportOffice po1 = new PassportOffice(1L, "", ""); 65 | husband.setIssueDepartment(po1); 66 | husband.setStudentId("" + (100000 + id)); 67 | husband.setAddress(address); 68 | husband.setUnivesity(new University(2L, "")); 69 | husband.setStudentId("HH12345"); 70 | 71 | // Жена 72 | Adult wife = new Adult("Васильева", "Ирина", "Петровна", LocalDate.of(1997, 8, 21)); 73 | wife.setPassportSeria("" + (2000 + id)); 74 | wife.setPassportNumber("" + (200000 + id)); 75 | wife.setIssueDate(LocalDate.of(2018, 4, 5)); 76 | PassportOffice po2 = new PassportOffice(2L, "", ""); 77 | wife.setIssueDepartment(po2); 78 | wife.setStudentId("" + (200000 + id)); 79 | wife.setAddress(address); 80 | wife.setUnivesity(new University(1L, "")); 81 | wife.setStudentId("WW12345"); 82 | 83 | // Ребенок 84 | Child child1 = new Child("Васильева", "Евгения", "Павловна", LocalDate.of(2016, 1, 11)); 85 | child1.setCertificateNumber("" + (300000 + id)); 86 | child1.setIssueDate(LocalDate.of(2018, 6, 11)); 87 | RegisterOffice ro2 = new RegisterOffice(2L, "", ""); 88 | child1.setIssueDepartment(ro2); 89 | child1.setAddress(address); 90 | // Ребенок 91 | Child child2 = new Child("Васильев", "Александр", "Павлович", LocalDate.of(2018, 10, 24)); 92 | child2.setCertificateNumber("" + (400000 + id)); 93 | child2.setIssueDate(LocalDate.of(2018, 7, 19)); 94 | RegisterOffice ro3 = new RegisterOffice(3L, "", ""); 95 | child2.setIssueDepartment(ro3); 96 | child2.setAddress(address); 97 | 98 | so.setHusband(husband); 99 | so.setWife(wife); 100 | so.addChild(child1); 101 | so.addChild(child2); 102 | 103 | return so; 104 | } 105 | 106 | } -------------------------------------------------------------------------------- /student-order/src/test/java/edu/javacourse/studentorder/validator/register/FakeCityRegisterChecker.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator.register; 2 | 3 | import edu.javacourse.studentorder.domain.Adult; 4 | import edu.javacourse.studentorder.domain.Child; 5 | import edu.javacourse.studentorder.domain.register.CityRegisterResponse; 6 | import edu.javacourse.studentorder.domain.Person; 7 | import edu.javacourse.studentorder.exception.CityRegisterException; 8 | 9 | public class FakeCityRegisterChecker implements CityRegisterChecker 10 | { 11 | private static final String GOOD_1 = "1000"; 12 | private static final String GOOD_2 = "2000"; 13 | private static final String BAD_1 = "1001"; 14 | private static final String BAD_2 = "2001"; 15 | private static final String ERROR_1 = "1002"; 16 | private static final String ERROR_2 = "2002"; 17 | private static final String ERROR_T_1 = "1003"; 18 | private static final String ERROR_T_2 = "2003"; 19 | 20 | public CityRegisterResponse checkPerson(Person person) 21 | throws CityRegisterException { 22 | 23 | CityRegisterResponse res = new CityRegisterResponse(); 24 | 25 | if (person instanceof Adult) { 26 | Adult t = (Adult) person; 27 | String ps = t.getPassportSeria(); 28 | if (ps.equals(GOOD_1) || ps.equals(GOOD_2)) { 29 | res.setRegistered(true); 30 | res.setTemporal(false); 31 | } 32 | if (ps.equals(BAD_1) || ps.equals(BAD_2)) { 33 | res.setRegistered(false); 34 | } 35 | if (ps.equals(ERROR_1) || ps.equals(ERROR_2)) { 36 | CityRegisterException ex = 37 | new CityRegisterException("1", "GRN ERROR " + ps); 38 | throw ex; 39 | } 40 | } 41 | 42 | if (person instanceof Child) { 43 | res.setRegistered(true); 44 | res.setTemporal(true); 45 | } 46 | 47 | System.out.println(res); 48 | 49 | return res; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /student-order/src/test/resources/log4j.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /student-project/src/dao.properties: -------------------------------------------------------------------------------- 1 | db.url=jdbc:postgresql://localhost/jc_student 2 | db.login=postgres 3 | db.password=postgres 4 | db.limit=1000 -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/SaveStudentOrder.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder; 2 | 3 | import edu.javacourse.studentorder.dao.DictionaryDaoImpl; 4 | import edu.javacourse.studentorder.dao.StudentOrderDao; 5 | import edu.javacourse.studentorder.dao.StudentOrderDaoImpl; 6 | import edu.javacourse.studentorder.domain.*; 7 | 8 | import java.time.LocalDate; 9 | import java.util.List; 10 | 11 | public class SaveStudentOrder 12 | { 13 | public static void main(String[] args) throws Exception { 14 | // List d = new DictionaryDaoImpl().findStreets("про"); 15 | // for(Street s : d) { 16 | // System.out.println(s.getStreetName()); 17 | // } 18 | // List po = new DictionaryDaoImpl().findPassportOffices("010020000000"); 19 | // for(PassportOffice p : po) { 20 | // System.out.println(p.getOfficeName()); 21 | // } 22 | // 23 | // List ro = new DictionaryDaoImpl().findRegisterOffices("010010000000"); 24 | // for(RegisterOffice r : ro) { 25 | // System.out.println(r.getOfficeName()); 26 | // } 27 | 28 | // List ca1 = new DictionaryDaoImpl().findAreas(""); 29 | // for (CountryArea c : ca1) { 30 | // System.out.println(c.getAreaId() + ":" + c.getAreaName()); 31 | // } 32 | // System.out.println("--->"); 33 | // List ca2 = new DictionaryDaoImpl().findAreas("020000000000"); 34 | // for (CountryArea c : ca2) { 35 | // System.out.println(c.getAreaId() + ":" + c.getAreaName()); 36 | // } 37 | // System.out.println("--->"); 38 | // List ca3 = new DictionaryDaoImpl().findAreas("020010000000"); 39 | // for (CountryArea c : ca3) { 40 | // System.out.println(c.getAreaId() + ":" + c.getAreaName()); 41 | // } 42 | // System.out.println("--->"); 43 | // List ca4 = new DictionaryDaoImpl().findAreas("020010010000"); 44 | // for (CountryArea c : ca4) { 45 | // System.out.println(c.getAreaId() + ":" + c.getAreaName()); 46 | // } 47 | 48 | 49 | // StudentOrder s = buildStudentOrder(10); 50 | StudentOrderDao dao = new StudentOrderDaoImpl(); 51 | // Long id = dao.saveStudentOrder(s); 52 | // System.out.println(id); 53 | 54 | List soList = dao.getStudentOrders(); 55 | for(StudentOrder so : soList) { 56 | System.out.println(so.getStudentOrderId()); 57 | } 58 | // StudentOrder so = new StudentOrder(); 59 | // long ans = saveStudentOrder(so); 60 | // System.out.println(ans); 61 | } 62 | 63 | static long saveStudentOrder(StudentOrder studentOrder) { 64 | long answer = 199; 65 | System.out.println("saveStudentOrder"); 66 | 67 | return answer; 68 | } 69 | 70 | public static StudentOrder buildStudentOrder(long id) { 71 | StudentOrder so = new StudentOrder(); 72 | so.setStudentOrderId(id); 73 | so.setMarriageCertificateId("" + (123456000 + id)); 74 | so.setMarriageDate(LocalDate.of(2016, 7, 4)); 75 | 76 | RegisterOffice ro = new RegisterOffice(1L, "", ""); 77 | so.setMarriageOffice(ro); 78 | 79 | Street street = new Street(1L, "First street"); 80 | 81 | Address address = new Address("195000", street, "12", "", "142"); 82 | 83 | // Муж 84 | Adult husband = new Adult("Петров", "Виктор", "Сергеевич", LocalDate.of(1997, 8, 24)); 85 | husband.setPassportSeria("" + (1000 + id)); 86 | husband.setPassportNumber("" + (100000 + id)); 87 | husband.setIssueDate(LocalDate.of(2017, 9, 15)); 88 | PassportOffice po1 = new PassportOffice(1L, "", ""); 89 | husband.setIssueDepartment(po1); 90 | husband.setStudentId("" + (100000 + id)); 91 | husband.setAddress(address); 92 | husband.setUnivesity(new University(2L, "")); 93 | husband.setStudentId("HH12345"); 94 | 95 | // Жена 96 | Adult wife = new Adult("Петрова", "Вероника", "Алекссевна", LocalDate.of(1998, 3, 12)); 97 | wife.setPassportSeria("" + (2000 + id)); 98 | wife.setPassportNumber("" + (200000 + id)); 99 | wife.setIssueDate(LocalDate.of(2018, 4, 5)); 100 | PassportOffice po2 = new PassportOffice(2L, "", ""); 101 | wife.setIssueDepartment(po2); 102 | wife.setStudentId("" + (200000 + id)); 103 | wife.setAddress(address); 104 | wife.setUnivesity(new University(1L, "")); 105 | wife.setStudentId("WW12345"); 106 | 107 | // Ребенок 108 | Child child1 = new Child("Петрова", "Ирина", "Викторовна", LocalDate.of(2018, 6, 29)); 109 | child1.setCertificateNumber("" + (300000 + id)); 110 | child1.setIssueDate(LocalDate.of(2018, 6, 11)); 111 | RegisterOffice ro2 = new RegisterOffice(2L, "", ""); 112 | child1.setIssueDepartment(ro2); 113 | child1.setAddress(address); 114 | // Ребенок 115 | Child child2 = new Child("Петров", "Евгений", "Викторович", LocalDate.of(2018, 6, 29)); 116 | child2.setCertificateNumber("" + (400000 + id)); 117 | child2.setIssueDate(LocalDate.of(2018, 7, 19)); 118 | RegisterOffice ro3 = new RegisterOffice(3L, "", ""); 119 | child2.setIssueDepartment(ro3); 120 | child2.setAddress(address); 121 | 122 | so.setHusband(husband); 123 | so.setWife(wife); 124 | so.addChild(child1); 125 | so.addChild(child2); 126 | 127 | return so; 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/StudentOrderValidator.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder; 2 | 3 | import edu.javacourse.studentorder.domain.children.AnswerChildren; 4 | import edu.javacourse.studentorder.domain.register.AnswerCityRegister; 5 | import edu.javacourse.studentorder.domain.student.AnswerStudent; 6 | import edu.javacourse.studentorder.domain.wedding.AnswerWedding; 7 | import edu.javacourse.studentorder.domain.StudentOrder; 8 | import edu.javacourse.studentorder.mail.MailSender; 9 | import edu.javacourse.studentorder.validator.ChildrenValidator; 10 | import edu.javacourse.studentorder.validator.CityRegisterValidator; 11 | import edu.javacourse.studentorder.validator.StudentValidator; 12 | import edu.javacourse.studentorder.validator.WeddingValidator; 13 | 14 | import java.util.LinkedList; 15 | import java.util.List; 16 | 17 | public class StudentOrderValidator 18 | { 19 | private CityRegisterValidator cityRegisterVal; 20 | private WeddingValidator weddingVal; 21 | private ChildrenValidator childrenVal; 22 | private StudentValidator studentVal; 23 | private MailSender mailSender; 24 | 25 | public StudentOrderValidator() { 26 | cityRegisterVal = new CityRegisterValidator(); 27 | weddingVal = new WeddingValidator(); 28 | childrenVal = new ChildrenValidator(); 29 | studentVal = new StudentValidator(); 30 | mailSender = new MailSender(); 31 | } 32 | 33 | public static void main(String[] args) { 34 | StudentOrderValidator sov = new StudentOrderValidator(); 35 | sov.checkAll(); 36 | } 37 | 38 | public void checkAll() { 39 | List soList = readStudentOrders(); 40 | 41 | for (StudentOrder so : soList) { 42 | checkOneOrder(so); 43 | } 44 | } 45 | 46 | public List readStudentOrders() { 47 | List soList = new LinkedList<>(); 48 | 49 | for (int c = 0; c < 5; c++) { 50 | StudentOrder so = SaveStudentOrder.buildStudentOrder(c); 51 | soList.add(so); 52 | } 53 | 54 | return soList; 55 | } 56 | 57 | public void checkOneOrder(StudentOrder so) { 58 | AnswerCityRegister cityAnswer = checkCityRegister(so); 59 | 60 | // AnswerWedding wedAnswer = checkWedding(so); 61 | // AnswerChildren childAnswer = checkChildren(so); 62 | // AnswerStudent studentAnswer = checkStudent(so); 63 | 64 | // sendMail(so); 65 | } 66 | 67 | public AnswerCityRegister checkCityRegister(StudentOrder so) { 68 | return cityRegisterVal.checkCityRegister(so); 69 | } 70 | 71 | public AnswerWedding checkWedding(StudentOrder so) { 72 | return weddingVal.checkWedding(so); 73 | } 74 | 75 | public AnswerChildren checkChildren(StudentOrder so) { 76 | return childrenVal.checkChildren(so); 77 | } 78 | 79 | public AnswerStudent checkStudent(StudentOrder so) { 80 | return studentVal.checkStudent(so); 81 | } 82 | 83 | public void sendMail(StudentOrder so) { 84 | mailSender.sendMail(so); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/config/Config.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.config; 2 | 3 | import java.io.IOException; 4 | import java.io.InputStream; 5 | import java.util.Properties; 6 | 7 | public class Config 8 | { 9 | public static final String DB_URL = "db.url"; 10 | public static final String DB_LOGIN = "db.login"; 11 | public static final String DB_PASSWORD = "db.password"; 12 | public static final String DB_LIMIT = "db.limit"; 13 | 14 | private static Properties properties = new Properties(); 15 | 16 | public synchronized static String getProperty(String name) { 17 | if (properties.isEmpty()) { 18 | try (InputStream is = Config.class.getClassLoader() 19 | .getResourceAsStream("dao.properties")) { 20 | 21 | properties.load(is); 22 | 23 | } catch (Exception ex) { 24 | ex.printStackTrace(); 25 | throw new RuntimeException(ex); 26 | } 27 | } 28 | return properties.getProperty(name); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/dao/DictionaryDao.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import edu.javacourse.studentorder.domain.CountryArea; 4 | import edu.javacourse.studentorder.domain.PassportOffice; 5 | import edu.javacourse.studentorder.domain.RegisterOffice; 6 | import edu.javacourse.studentorder.domain.Street; 7 | import edu.javacourse.studentorder.exception.DaoException; 8 | 9 | import java.util.List; 10 | 11 | public interface DictionaryDao 12 | { 13 | List findStreets(String pattern) throws DaoException; 14 | List findPassportOffices(String areaId) throws DaoException; 15 | List findRegisterOffices(String areaId) throws DaoException; 16 | List findAreas(String areaId) throws DaoException; 17 | } 18 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/dao/DictionaryDaoImpl.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import edu.javacourse.studentorder.config.Config; 4 | import edu.javacourse.studentorder.domain.CountryArea; 5 | import edu.javacourse.studentorder.domain.PassportOffice; 6 | import edu.javacourse.studentorder.domain.RegisterOffice; 7 | import edu.javacourse.studentorder.domain.Street; 8 | import edu.javacourse.studentorder.exception.DaoException; 9 | 10 | import java.sql.Connection; 11 | import java.sql.DriverManager; 12 | import java.sql.PreparedStatement; 13 | import java.sql.ResultSet; 14 | import java.sql.SQLException; 15 | import java.util.LinkedList; 16 | import java.util.List; 17 | 18 | public class DictionaryDaoImpl implements DictionaryDao 19 | { 20 | private static final String GET_STREET = "SELECT street_code, street_name " + 21 | "FROM jc_street WHERE UPPER(street_name) LIKE UPPER(?)"; 22 | 23 | private static final String GET_PASSPORT = "SELECT * " + 24 | "FROM jc_passport_office WHERE p_office_area_id = ?"; 25 | 26 | private static final String GET_REGISTER = "SELECT * " + 27 | "FROM jc_register_office WHERE r_office_area_id = ?"; 28 | 29 | private static final String GET_AREA = "SELECT * " + 30 | "FROM jc_country_struct WHERE area_id like ? and area_id <> ?"; 31 | 32 | 33 | // TODO refactoring - make one method 34 | private Connection getConnection() throws SQLException { 35 | Connection con = DriverManager.getConnection( 36 | Config.getProperty(Config.DB_URL), 37 | Config.getProperty(Config.DB_LOGIN), 38 | Config.getProperty(Config.DB_PASSWORD)); 39 | return con; 40 | } 41 | 42 | public List findStreets(String pattern) throws DaoException { 43 | List result = new LinkedList<>(); 44 | 45 | try (Connection con = getConnection(); 46 | PreparedStatement stmt = con.prepareStatement(GET_STREET)) { 47 | 48 | stmt.setString(1, "%" + pattern + "%"); 49 | ResultSet rs = stmt.executeQuery(); 50 | while (rs.next()) { 51 | Street str = new Street(rs.getLong("street_code"), 52 | rs.getString("street_name")); 53 | result.add(str); 54 | } 55 | } catch (SQLException ex) { 56 | throw new DaoException(ex); 57 | } 58 | 59 | return result; 60 | } 61 | 62 | @Override 63 | public List findPassportOffices(String areaId) throws DaoException { 64 | List result = new LinkedList<>(); 65 | 66 | try (Connection con = getConnection(); 67 | PreparedStatement stmt = con.prepareStatement(GET_PASSPORT)) { 68 | 69 | stmt.setString(1, areaId); 70 | ResultSet rs = stmt.executeQuery(); 71 | while (rs.next()) { 72 | PassportOffice str = new PassportOffice( 73 | rs.getLong("p_office_id"), 74 | rs.getString("p_office_area_id"), 75 | rs.getString("p_office_name")); 76 | result.add(str); 77 | } 78 | } catch (SQLException ex) { 79 | throw new DaoException(ex); 80 | } 81 | 82 | return result; 83 | } 84 | 85 | @Override 86 | public List findRegisterOffices(String areaId) throws DaoException { 87 | List result = new LinkedList<>(); 88 | 89 | try (Connection con = getConnection(); 90 | PreparedStatement stmt = con.prepareStatement(GET_REGISTER)) { 91 | 92 | stmt.setString(1, areaId); 93 | ResultSet rs = stmt.executeQuery(); 94 | while (rs.next()) { 95 | RegisterOffice str = new RegisterOffice( 96 | rs.getLong("r_office_id"), 97 | rs.getString("r_office_area_id"), 98 | rs.getString("r_office_name")); 99 | result.add(str); 100 | } 101 | } catch (SQLException ex) { 102 | throw new DaoException(ex); 103 | } 104 | 105 | return result; 106 | } 107 | 108 | @Override 109 | public List findAreas(String areaId) throws DaoException { 110 | List result = new LinkedList<>(); 111 | 112 | try (Connection con = getConnection(); 113 | PreparedStatement stmt = con.prepareStatement(GET_AREA)) { 114 | 115 | String param1 = buildParam(areaId); 116 | String param2 = areaId == null ? "" : areaId; 117 | 118 | stmt.setString(1, param1); 119 | stmt.setString(2, param2); 120 | ResultSet rs = stmt.executeQuery(); 121 | while (rs.next()) { 122 | CountryArea str = new CountryArea( 123 | rs.getString("area_id"), 124 | rs.getString("area_name")); 125 | result.add(str); 126 | } 127 | } catch (SQLException ex) { 128 | throw new DaoException(ex); 129 | } 130 | 131 | return result; 132 | } 133 | 134 | private String buildParam(String areaId) throws SQLException { 135 | if (areaId == null || areaId.trim().isEmpty()) { 136 | return "__0000000000"; 137 | } else if (areaId.endsWith("0000000000")) { 138 | return areaId.substring(0, 2) + "___0000000"; 139 | } else if (areaId.endsWith("0000000")) { 140 | return areaId.substring(0, 5) + "___0000"; 141 | } else if (areaId.endsWith("0000")) { 142 | return areaId.substring(0, 8) + "____"; 143 | } 144 | throw new SQLException("Invalid parameter 'areaId':" + areaId); 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/dao/StudentOrderDao.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import edu.javacourse.studentorder.domain.StudentOrder; 4 | import edu.javacourse.studentorder.exception.DaoException; 5 | 6 | import java.util.List; 7 | 8 | public interface StudentOrderDao 9 | { 10 | Long saveStudentOrder(StudentOrder so) throws DaoException; 11 | 12 | List getStudentOrders() throws DaoException; 13 | } 14 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/dao/StudentOrderDaoImpl.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.dao; 2 | 3 | import edu.javacourse.studentorder.config.Config; 4 | import edu.javacourse.studentorder.domain.Address; 5 | import edu.javacourse.studentorder.domain.Adult; 6 | import edu.javacourse.studentorder.domain.Child; 7 | import edu.javacourse.studentorder.domain.PassportOffice; 8 | import edu.javacourse.studentorder.domain.Person; 9 | import edu.javacourse.studentorder.domain.RegisterOffice; 10 | import edu.javacourse.studentorder.domain.Street; 11 | import edu.javacourse.studentorder.domain.StudentOrder; 12 | import edu.javacourse.studentorder.domain.StudentOrderStatus; 13 | import edu.javacourse.studentorder.domain.University; 14 | import edu.javacourse.studentorder.exception.DaoException; 15 | 16 | import java.sql.Connection; 17 | import java.sql.DriverManager; 18 | import java.sql.PreparedStatement; 19 | import java.sql.ResultSet; 20 | import java.sql.SQLException; 21 | import java.time.LocalDate; 22 | import java.time.LocalDateTime; 23 | import java.util.HashMap; 24 | import java.util.LinkedList; 25 | import java.util.List; 26 | import java.util.Map; 27 | import java.util.stream.Collectors; 28 | import java.util.stream.Stream; 29 | 30 | public class StudentOrderDaoImpl implements StudentOrderDao 31 | { 32 | private static final String INSERT_ORDER = 33 | "INSERT INTO jc_student_order(" + 34 | " student_order_status, student_order_date, h_sur_name, " + 35 | " h_given_name, h_patronymic, h_date_of_birth, h_passport_seria, " + 36 | " h_passport_number, h_passport_date, h_passport_office_id, h_post_index, " + 37 | " h_street_code, h_building, h_extension, h_apartment, h_university_id, h_student_number, " + 38 | " w_sur_name, w_given_name, w_patronymic, w_date_of_birth, w_passport_seria, " + 39 | " w_passport_number, w_passport_date, w_passport_office_id, w_post_index, " + 40 | " w_street_code, w_building, w_extension, w_apartment, w_university_id, w_student_number, " + 41 | " certificate_id, register_office_id, marriage_date)" + 42 | " VALUES (?, ?, ?, " + 43 | " ?, ?, ?, ?, " + 44 | " ?, ?, ?, ?, " + 45 | " ?, ?, ?, ?, ?, ?, " + 46 | " ?, ?, ?, ?, ?, " + 47 | " ?, ?, ?, ?, " + 48 | " ?, ?, ?, ?, ?, ?, " + 49 | " ?, ?, ?);"; 50 | 51 | private static final String INSERT_CHILD = 52 | "INSERT INTO jc_student_child(" + 53 | " student_order_id, c_sur_name, c_given_name, " + 54 | " c_patronymic, c_date_of_birth, c_certificate_number, c_certificate_date, " + 55 | " c_register_office_id, c_post_index, c_street_code, c_building, " + 56 | " c_extension, c_apartment)" + 57 | " VALUES (?, ?, ?, " + 58 | " ?, ?, ?, ?, " + 59 | " ?, ?, ?, ?, " + 60 | " ?, ?)"; 61 | 62 | private static final String SELECT_ORDERS = 63 | "SELECT so.*, ro.r_office_area_id, ro.r_office_name, " + 64 | "po_h.p_office_area_id as h_p_office_area_id, " + 65 | "po_h.p_office_name as h_p_office_name, " + 66 | "po_w.p_office_area_id as w_p_office_area_id, " + 67 | "po_w.p_office_name as w_p_office_name " + 68 | "FROM jc_student_order so " + 69 | "INNER JOIN jc_register_office ro ON ro.r_office_id = so.register_office_id " + 70 | "INNER JOIN jc_passport_office po_h ON po_h.p_office_id = so.h_passport_office_id " + 71 | "INNER JOIN jc_passport_office po_w ON po_w.p_office_id = so.w_passport_office_id " + 72 | "WHERE student_order_status = ? ORDER BY student_order_date LIMIT ?"; 73 | 74 | private static final String SELECT_CHILD = 75 | "SELECT soc.*, ro.r_office_area_id, ro.r_office_name " + 76 | "FROM jc_student_child soc " + 77 | "INNER JOIN jc_register_office ro ON ro.r_office_id = soc.c_register_office_id " + 78 | "WHERE soc.student_order_id IN "; 79 | 80 | private static final String SELECT_ORDERS_FULL = 81 | "SELECT so.*, ro.r_office_area_id, ro.r_office_name, " + 82 | "po_h.p_office_area_id as h_p_office_area_id, " + 83 | "po_h.p_office_name as h_p_office_name, " + 84 | "po_w.p_office_area_id as w_p_office_area_id, " + 85 | "po_w.p_office_name as w_p_office_name, " + 86 | "soc.*, ro_c.r_office_area_id, ro_c.r_office_name " + 87 | "FROM jc_student_order so " + 88 | "INNER JOIN jc_register_office ro ON ro.r_office_id = so.register_office_id " + 89 | "INNER JOIN jc_passport_office po_h ON po_h.p_office_id = so.h_passport_office_id " + 90 | "INNER JOIN jc_passport_office po_w ON po_w.p_office_id = so.w_passport_office_id " + 91 | "INNER JOIN jc_student_child soc ON soc.student_order_id = so.student_order_id " + 92 | "INNER JOIN jc_register_office ro_c ON ro_c.r_office_id = soc.c_register_office_id " + 93 | "WHERE student_order_status = ? ORDER BY so.student_order_id LIMIT ?"; 94 | 95 | 96 | // TODO refactoring - make one method 97 | private Connection getConnection() throws SQLException { 98 | Connection con = DriverManager.getConnection( 99 | Config.getProperty(Config.DB_URL), 100 | Config.getProperty(Config.DB_LOGIN), 101 | Config.getProperty(Config.DB_PASSWORD)); 102 | return con; 103 | } 104 | 105 | @Override 106 | public Long saveStudentOrder(StudentOrder so) throws DaoException { 107 | Long result = -1L; 108 | 109 | try (Connection con = getConnection(); 110 | PreparedStatement stmt = con.prepareStatement(INSERT_ORDER, new String[]{"student_order_id"})) { 111 | 112 | con.setAutoCommit(false); 113 | try { 114 | // Header 115 | stmt.setInt(1, StudentOrderStatus.START.ordinal()); 116 | stmt.setTimestamp(2, java.sql.Timestamp.valueOf(LocalDateTime.now())); 117 | 118 | // Husband and wife 119 | setParamsForAdult(stmt, 3, so.getHusband()); 120 | setParamsForAdult(stmt, 18, so.getWife()); 121 | 122 | // Marriage 123 | stmt.setString(33, so.getMarriageCertificateId()); 124 | stmt.setLong(34, so.getMarriageOffice().getOfficeId()); 125 | stmt.setDate(35, java.sql.Date.valueOf(so.getMarriageDate())); 126 | 127 | stmt.executeUpdate(); 128 | 129 | ResultSet gkRs = stmt.getGeneratedKeys(); 130 | if (gkRs.next()) { 131 | result = gkRs.getLong(1); 132 | } 133 | gkRs.close(); 134 | 135 | saveChildren(con, so, result); 136 | 137 | con.commit(); 138 | } catch (SQLException ex) { 139 | con.rollback(); 140 | throw ex; 141 | } 142 | 143 | } catch (SQLException ex) { 144 | throw new DaoException(ex); 145 | } 146 | 147 | return result; 148 | } 149 | 150 | private void saveChildren(Connection con, StudentOrder so, Long soId) throws SQLException { 151 | try (PreparedStatement stmt = con.prepareStatement(INSERT_CHILD)) { 152 | for (Child child : so.getChildren()) { 153 | stmt.setLong(1, soId); 154 | setParamsForChild(stmt, child); 155 | stmt.addBatch(); 156 | } 157 | stmt.executeBatch(); 158 | } 159 | } 160 | 161 | private void setParamsForAdult(PreparedStatement stmt, int start, Adult adult) throws SQLException { 162 | setParamsForPerson(stmt, start, adult); 163 | stmt.setString(start + 4, adult.getPassportSeria()); 164 | stmt.setString(start + 5, adult.getPassportNumber()); 165 | stmt.setDate(start + 6, java.sql.Date.valueOf(adult.getIssueDate())); 166 | stmt.setLong(start + 7, adult.getIssueDepartment().getOfficeId()); 167 | setParamsForAddress(stmt, start + 8, adult); 168 | stmt.setLong(start + 13, adult.getUnivesity().getUniversityId()); 169 | stmt.setString(start + 14, adult.getStudentId()); 170 | } 171 | 172 | private void setParamsForChild(PreparedStatement stmt, Child child) throws SQLException { 173 | setParamsForPerson(stmt, 2, child); 174 | stmt.setString(6, child.getCertificateNumber()); 175 | stmt.setDate(7, java.sql.Date.valueOf(child.getIssueDate())); 176 | stmt.setLong(8, child.getIssueDepartment().getOfficeId()); 177 | setParamsForAddress(stmt, 9, child); 178 | } 179 | 180 | private void setParamsForPerson(PreparedStatement stmt, int start, Person person) throws SQLException { 181 | stmt.setString(start, person.getSurName()); 182 | stmt.setString(start + 1, person.getGivenName()); 183 | stmt.setString(start + 2, person.getPatronymic()); 184 | stmt.setDate(start + 3, java.sql.Date.valueOf(person.getDateOfBirth())); 185 | } 186 | 187 | private void setParamsForAddress(PreparedStatement stmt, int start, Person person) throws SQLException { 188 | Address adult_address = person.getAddress(); 189 | stmt.setString(start, adult_address.getPostCode()); 190 | stmt.setLong(start + 1, adult_address.getStreet().getStreetCode()); 191 | stmt.setString(start + 2, adult_address.getBuilding()); 192 | stmt.setString(start + 3, adult_address.getExtension()); 193 | stmt.setString(start + 4, adult_address.getApartment()); 194 | } 195 | 196 | 197 | @Override 198 | public List getStudentOrders() throws DaoException { 199 | return getStudentOrdersOneSelect(); 200 | // return getStudentOrdersTwoSelect(); 201 | } 202 | 203 | private List getStudentOrdersOneSelect() throws DaoException { 204 | List result = new LinkedList<>(); 205 | 206 | try (Connection con = getConnection(); 207 | PreparedStatement stmt = con.prepareStatement(SELECT_ORDERS_FULL)) { 208 | 209 | Map maps = new HashMap<>(); 210 | 211 | stmt.setInt(1, StudentOrderStatus.START.ordinal()); 212 | int limit = Integer.parseInt(Config.getProperty(Config.DB_LIMIT)); 213 | stmt.setInt(2, limit); 214 | 215 | ResultSet rs = stmt.executeQuery(); 216 | int counter = 0; 217 | while(rs.next()) { 218 | Long soId = rs.getLong("student_order_id"); 219 | if (!maps.containsKey(soId)) { 220 | StudentOrder so = getFullStudentOrder(rs); 221 | 222 | result.add(so); 223 | maps.put(soId, so); 224 | } 225 | StudentOrder so = maps.get(soId); 226 | so.addChild(fillChild(rs)); 227 | counter++; 228 | } 229 | if (counter >= limit) { 230 | result.remove(result.size() - 1); 231 | } 232 | 233 | rs.close(); 234 | } catch(SQLException ex) { 235 | throw new DaoException(ex); 236 | } 237 | 238 | return result; 239 | } 240 | 241 | private List getStudentOrdersTwoSelect() throws DaoException { 242 | List result = new LinkedList<>(); 243 | 244 | try (Connection con = getConnection(); 245 | PreparedStatement stmt = con.prepareStatement(SELECT_ORDERS)) { 246 | 247 | stmt.setInt(1, StudentOrderStatus.START.ordinal()); 248 | stmt.setInt(2, Integer.parseInt(Config.getProperty(Config.DB_LIMIT))); 249 | ResultSet rs = stmt.executeQuery(); 250 | while(rs.next()) { 251 | StudentOrder so = getFullStudentOrder(rs); 252 | 253 | result.add(so); 254 | } 255 | findChildren(con, result); 256 | 257 | rs.close(); 258 | } catch(SQLException ex) { 259 | throw new DaoException(ex); 260 | } 261 | 262 | return result; 263 | } 264 | 265 | private StudentOrder getFullStudentOrder(ResultSet rs) throws SQLException { 266 | StudentOrder so = new StudentOrder(); 267 | 268 | fillStudentOrder(rs, so); 269 | fillMarriage(rs, so); 270 | 271 | so.setHusband(fillAdult(rs, "h_")); 272 | so.setWife(fillAdult(rs, "w_")); 273 | return so; 274 | } 275 | 276 | private void fillStudentOrder(ResultSet rs, StudentOrder so) throws SQLException { 277 | so.setStudentOrderId(rs.getLong("student_order_id")); 278 | so.setStudentOrderDate(rs.getTimestamp("student_order_date").toLocalDateTime()); 279 | so.setStudentOrderStatus(StudentOrderStatus.fromValue(rs.getInt("student_order_status"))); 280 | } 281 | 282 | private void fillMarriage(ResultSet rs, StudentOrder so) throws SQLException { 283 | so.setMarriageCertificateId(rs.getString("certificate_id")); 284 | so.setMarriageDate(rs.getDate("marriage_date").toLocalDate()); 285 | 286 | Long roId = rs.getLong("register_office_id"); 287 | String areaId = rs.getString("r_office_area_id"); 288 | String name = rs.getString("r_office_name"); 289 | RegisterOffice ro = new RegisterOffice(roId, areaId, name); 290 | so.setMarriageOffice(ro); 291 | } 292 | 293 | private Adult fillAdult(ResultSet rs, String pref) throws SQLException { 294 | Adult adult = new Adult(); 295 | adult.setSurName(rs.getString(pref + "sur_name")); 296 | adult.setGivenName(rs.getString(pref + "given_name")); 297 | adult.setPatronymic(rs.getString(pref + "patronymic")); 298 | adult.setDateOfBirth(rs.getDate(pref + "date_of_birth").toLocalDate()); 299 | adult.setPassportSeria(rs.getString(pref + "passport_seria")); 300 | adult.setPassportNumber(rs.getString(pref + "passport_number")); 301 | adult.setIssueDate(rs.getDate(pref + "passport_date").toLocalDate()); 302 | 303 | Long poId = rs.getLong(pref + "passport_office_id"); 304 | String poArea = rs.getString(pref + "p_office_area_id"); 305 | String poName = rs.getString(pref + "p_office_name"); 306 | PassportOffice po = new PassportOffice(poId, poArea, poName); 307 | adult.setIssueDepartment(po); 308 | Address adr = new Address(); 309 | Street st = new Street(rs.getLong(pref + "street_code"), ""); 310 | adr.setStreet(st); 311 | adr.setPostCode(rs.getString(pref + "post_index")); 312 | adr.setBuilding(rs.getString(pref + "building")); 313 | adr.setExtension(rs.getString(pref + "extension")); 314 | adr.setApartment(rs.getString(pref + "apartment")); 315 | adult.setAddress(adr); 316 | 317 | University uni = new University(rs.getLong(pref + "university_id"), ""); 318 | adult.setUnivesity(uni); 319 | adult.setStudentId(rs.getString(pref + "student_number")); 320 | 321 | return adult; 322 | } 323 | 324 | private void findChildren(Connection con, List result) throws SQLException { 325 | String cl = "(" + result.stream().map(so -> String.valueOf(so.getStudentOrderId())) 326 | .collect(Collectors.joining(",")) + ")"; 327 | 328 | Map maps = result.stream().collect(Collectors 329 | .toMap(so -> so.getStudentOrderId(), so -> so)); 330 | 331 | try (PreparedStatement stmt = con.prepareStatement(SELECT_CHILD + cl)) { 332 | ResultSet rs = stmt.executeQuery(); 333 | while(rs.next()) { 334 | Child ch = fillChild(rs); 335 | StudentOrder so = maps.get(rs.getLong("student_order_id")); 336 | so.addChild(ch); 337 | } 338 | } 339 | } 340 | 341 | private Child fillChild(ResultSet rs) throws SQLException { 342 | String surName = rs.getString("c_sur_name"); 343 | String givenName = rs.getString("c_given_name"); 344 | String patronymic = rs.getString("c_patronymic"); 345 | LocalDate dateOfBirth = rs.getDate("c_date_of_birth").toLocalDate(); 346 | 347 | Child child = new Child(surName,givenName, patronymic, dateOfBirth); 348 | 349 | child.setCertificateNumber(rs.getString("c_certificate_number")); 350 | child.setIssueDate(rs.getDate("c_certificate_date").toLocalDate()); 351 | 352 | Long roId = rs.getLong("c_register_office_id"); 353 | String roArea = rs.getString("r_office_area_id"); 354 | String roName = rs.getString("r_office_name"); 355 | RegisterOffice ro = new RegisterOffice(roId, roArea, roName); 356 | child.setIssueDepartment(ro); 357 | 358 | Address adr = new Address(); 359 | Street st = new Street(rs.getLong("c_street_code"), ""); 360 | adr.setStreet(st); 361 | adr.setPostCode(rs.getString("c_post_index")); 362 | adr.setBuilding(rs.getString("c_building")); 363 | adr.setExtension(rs.getString("c_extension")); 364 | adr.setApartment(rs.getString("c_apartment")); 365 | child.setAddress(adr); 366 | 367 | return child; 368 | } 369 | } 370 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/Address.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class Address 4 | { 5 | private String postCode; 6 | private Street street; 7 | private String building; 8 | private String extension; 9 | private String apartment; 10 | 11 | public Address() { 12 | } 13 | 14 | public Address(String postCode, Street street, String building, String extension, String apartment) { 15 | this.postCode = postCode; 16 | this.street = street; 17 | this.building = building; 18 | this.extension = extension; 19 | this.apartment = apartment; 20 | } 21 | 22 | public String getPostCode() { 23 | return postCode; 24 | } 25 | 26 | public void setPostCode(String postCode) { 27 | this.postCode = postCode; 28 | } 29 | 30 | public Street getStreet() { 31 | return street; 32 | } 33 | 34 | public void setStreet(Street street) { 35 | this.street = street; 36 | } 37 | 38 | public String getBuilding() { 39 | return building; 40 | } 41 | 42 | public void setBuilding(String building) { 43 | this.building = building; 44 | } 45 | 46 | public String getExtension() { 47 | return extension; 48 | } 49 | 50 | public void setExtension(String extension) { 51 | this.extension = extension; 52 | } 53 | 54 | public String getApartment() { 55 | return apartment; 56 | } 57 | 58 | public void setApartment(String apartment) { 59 | this.apartment = apartment; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/Adult.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | 4 | import java.time.LocalDate; 5 | 6 | public class Adult extends Person 7 | { 8 | private String passportSeria; 9 | private String passportNumber; 10 | private LocalDate issueDate; 11 | private PassportOffice issueDepartment; 12 | private University univesity; 13 | private String studentId; 14 | 15 | public Adult() { 16 | } 17 | 18 | public Adult(String surName, String givenName, String patronymic, LocalDate dateOfBirth) { 19 | super(surName, givenName, patronymic, dateOfBirth); 20 | } 21 | 22 | public String getPassportSeria() { 23 | return passportSeria; 24 | } 25 | 26 | public void setPassportSeria(String passportSeria) { 27 | this.passportSeria = passportSeria; 28 | } 29 | 30 | public String getPassportNumber() { 31 | return passportNumber; 32 | } 33 | 34 | public void setPassportNumber(String passportNumber) { 35 | this.passportNumber = passportNumber; 36 | } 37 | 38 | public LocalDate getIssueDate() { 39 | return issueDate; 40 | } 41 | 42 | public void setIssueDate(LocalDate issueDate) { 43 | this.issueDate = issueDate; 44 | } 45 | 46 | public PassportOffice getIssueDepartment() { 47 | return issueDepartment; 48 | } 49 | 50 | public void setIssueDepartment(PassportOffice issueDepartment) { 51 | this.issueDepartment = issueDepartment; 52 | } 53 | 54 | public University getUnivesity() { 55 | return univesity; 56 | } 57 | 58 | public void setUnivesity(University univesity) { 59 | this.univesity = univesity; 60 | } 61 | 62 | public String getStudentId() { 63 | return studentId; 64 | } 65 | 66 | public void setStudentId(String studentId) { 67 | this.studentId = studentId; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/Child.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | import java.time.LocalDate; 4 | 5 | public class Child extends Person 6 | { 7 | private String certificateNumber; 8 | private LocalDate issueDate; 9 | private RegisterOffice issueDepartment; 10 | 11 | public Child(String surName, String givenName, String patronymic, LocalDate dateOfBirth) { 12 | super(surName, givenName, patronymic, dateOfBirth); 13 | } 14 | 15 | public String getCertificateNumber() { 16 | return certificateNumber; 17 | } 18 | 19 | public void setCertificateNumber(String certificateNumber) { 20 | this.certificateNumber = certificateNumber; 21 | } 22 | 23 | public LocalDate getIssueDate() { 24 | return issueDate; 25 | } 26 | 27 | public void setIssueDate(LocalDate issueDate) { 28 | this.issueDate = issueDate; 29 | } 30 | 31 | public RegisterOffice getIssueDepartment() { 32 | return issueDepartment; 33 | } 34 | 35 | public void setIssueDepartment(RegisterOffice issueDepartment) { 36 | this.issueDepartment = issueDepartment; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/CountryArea.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class CountryArea 4 | { 5 | private String areaId; 6 | private String areaName; 7 | 8 | public CountryArea() { 9 | } 10 | 11 | public CountryArea(String areaId, String areaName) { 12 | this.areaId = areaId; 13 | this.areaName = areaName; 14 | } 15 | 16 | public String getAreaId() { 17 | return areaId; 18 | } 19 | 20 | public void setAreaId(String areaId) { 21 | this.areaId = areaId; 22 | } 23 | 24 | public String getAreaName() { 25 | return areaName; 26 | } 27 | 28 | public void setAreaName(String areaName) { 29 | this.areaName = areaName; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/PassportOffice.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class PassportOffice 4 | { 5 | private Long officeId; 6 | private String officeAreaId; 7 | private String officeName; 8 | 9 | public PassportOffice() { 10 | } 11 | 12 | public PassportOffice(Long officeId, String officeAreaId, String officeName) { 13 | this.officeId = officeId; 14 | this.officeAreaId = officeAreaId; 15 | this.officeName = officeName; 16 | } 17 | 18 | public Long getOfficeId() { 19 | return officeId; 20 | } 21 | 22 | public void setOfficeId(Long officeId) { 23 | this.officeId = officeId; 24 | } 25 | 26 | public String getOfficeAreaId() { 27 | return officeAreaId; 28 | } 29 | 30 | public void setOfficeAreaId(String officeAreaId) { 31 | this.officeAreaId = officeAreaId; 32 | } 33 | 34 | public String getOfficeName() { 35 | return officeName; 36 | } 37 | 38 | public void setOfficeName(String officeName) { 39 | this.officeName = officeName; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/Person.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | import java.time.LocalDate; 4 | 5 | public abstract class Person 6 | { 7 | private String surName; 8 | private String givenName; 9 | private String patronymic; 10 | private LocalDate dateOfBirth; 11 | private Address address; 12 | 13 | public Person() { 14 | } 15 | 16 | public Person(String surName, String givenName, String patronymic, LocalDate dateOfBirth) { 17 | this.surName = surName; 18 | this.givenName = givenName; 19 | this.patronymic = patronymic; 20 | this.dateOfBirth = dateOfBirth; 21 | } 22 | 23 | public String getSurName() { 24 | return surName; 25 | } 26 | 27 | public void setSurName(String surName) { 28 | this.surName = surName; 29 | } 30 | 31 | public String getGivenName() { 32 | return givenName; 33 | } 34 | 35 | public void setGivenName(String givenName) { 36 | this.givenName = givenName; 37 | } 38 | 39 | public String getPatronymic() { 40 | return patronymic; 41 | } 42 | 43 | public void setPatronymic(String patronymic) { 44 | this.patronymic = patronymic; 45 | } 46 | 47 | public LocalDate getDateOfBirth() { 48 | return dateOfBirth; 49 | } 50 | 51 | public void setDateOfBirth(LocalDate dateOfBirth) { 52 | this.dateOfBirth = dateOfBirth; 53 | } 54 | 55 | public Address getAddress() { 56 | return address; 57 | } 58 | 59 | public void setAddress(Address address) { 60 | this.address = address; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/RegisterOffice.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class RegisterOffice 4 | { 5 | private Long officeId; 6 | private String officeAreaId; 7 | private String officeName; 8 | 9 | public RegisterOffice() { 10 | } 11 | 12 | public RegisterOffice(Long officeId, String officeAreaId, String officeName) { 13 | this.officeId = officeId; 14 | this.officeAreaId = officeAreaId; 15 | this.officeName = officeName; 16 | } 17 | 18 | public Long getOfficeId() { 19 | return officeId; 20 | } 21 | 22 | public void setOfficeId(Long officeId) { 23 | this.officeId = officeId; 24 | } 25 | 26 | public String getOfficeAreaId() { 27 | return officeAreaId; 28 | } 29 | 30 | public void setOfficeAreaId(String officeAreaId) { 31 | this.officeAreaId = officeAreaId; 32 | } 33 | 34 | public String getOfficeName() { 35 | return officeName; 36 | } 37 | 38 | public void setOfficeName(String officeName) { 39 | this.officeName = officeName; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/Street.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class Street 4 | { 5 | private Long streetCode; 6 | private String streetName; 7 | 8 | public Street() { 9 | } 10 | 11 | public Street(Long streetCode, String streetName) { 12 | this.streetCode = streetCode; 13 | this.streetName = streetName; 14 | } 15 | 16 | public Long getStreetCode() { 17 | return streetCode; 18 | } 19 | 20 | public void setStreetCode(Long streetCode) { 21 | this.streetCode = streetCode; 22 | } 23 | 24 | public String getStreetName() { 25 | return streetName; 26 | } 27 | 28 | public void setStreetName(String streetName) { 29 | this.streetName = streetName; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/StudentOrder.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | import java.time.LocalDate; 4 | import java.time.LocalDateTime; 5 | import java.util.ArrayList; 6 | import java.util.LinkedList; 7 | import java.util.List; 8 | 9 | public class StudentOrder 10 | { 11 | private long studentOrderId; 12 | private StudentOrderStatus studentOrderStatus; 13 | private LocalDateTime studentOrderDate; 14 | private Adult husband; 15 | private Adult wife; 16 | private List children; 17 | private String marriageCertificateId; 18 | private RegisterOffice marriageOffice; 19 | private LocalDate marriageDate; 20 | 21 | public StudentOrderStatus getStudentOrderStatus() { 22 | return studentOrderStatus; 23 | } 24 | 25 | public void setStudentOrderStatus(StudentOrderStatus studentOrderStatus) { 26 | this.studentOrderStatus = studentOrderStatus; 27 | } 28 | 29 | public LocalDateTime getStudentOrderDate() { 30 | return studentOrderDate; 31 | } 32 | 33 | public void setStudentOrderDate(LocalDateTime studentOrderDate) { 34 | this.studentOrderDate = studentOrderDate; 35 | } 36 | 37 | public long getStudentOrderId() { 38 | return studentOrderId; 39 | } 40 | 41 | public void setStudentOrderId(long studentOrderId) { 42 | this.studentOrderId = studentOrderId; 43 | } 44 | 45 | public Adult getHusband() { 46 | return husband; 47 | } 48 | 49 | public void setHusband(Adult husband) { 50 | this.husband = husband; 51 | } 52 | 53 | public Adult getWife() { 54 | return wife; 55 | } 56 | 57 | public void setWife(Adult wife) { 58 | this.wife = wife; 59 | } 60 | 61 | public void addChild(Child child) { 62 | if (children == null) { 63 | children = new ArrayList<>(5); 64 | } 65 | children.add(child); 66 | } 67 | 68 | public List getChildren() { 69 | return children; 70 | } 71 | 72 | public String getMarriageCertificateId() { 73 | return marriageCertificateId; 74 | } 75 | 76 | public void setMarriageCertificateId(String marriageCertificateId) { 77 | this.marriageCertificateId = marriageCertificateId; 78 | } 79 | 80 | public RegisterOffice getMarriageOffice() { 81 | return marriageOffice; 82 | } 83 | 84 | public void setMarriageOffice(RegisterOffice marriageOffice) { 85 | this.marriageOffice = marriageOffice; 86 | } 87 | 88 | public LocalDate getMarriageDate() { 89 | return marriageDate; 90 | } 91 | 92 | public void setMarriageDate(LocalDate marriageDate) { 93 | this.marriageDate = marriageDate; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/StudentOrderStatus.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public enum StudentOrderStatus 4 | { 5 | START, CHECKED; 6 | 7 | public static StudentOrderStatus fromValue(int value) { 8 | for(StudentOrderStatus sos : StudentOrderStatus.values()) { 9 | if(sos.ordinal() == value) { 10 | return sos; 11 | } 12 | } 13 | throw new RuntimeException("Unknown value:" + value); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/University.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain; 2 | 3 | public class University 4 | { 5 | private Long universityId; 6 | private String universityName; 7 | 8 | public University() { 9 | } 10 | 11 | public University(Long universityId, String universityName) { 12 | this.universityId = universityId; 13 | this.universityName = universityName; 14 | } 15 | 16 | public Long getUniversityId() { 17 | return universityId; 18 | } 19 | 20 | public void setUniversityId(Long universityId) { 21 | this.universityId = universityId; 22 | } 23 | 24 | public String getUniversityName() { 25 | return universityName; 26 | } 27 | 28 | public void setUniversityName(String universityName) { 29 | this.universityName = universityName; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/children/AnswerChildren.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.children; 2 | 3 | public class AnswerChildren 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/register/AnswerCityRegister.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.register; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class AnswerCityRegister 7 | { 8 | private List items; 9 | 10 | public void addItem(AnswerCityRegisterItem item) { 11 | if (items == null) { 12 | items = new ArrayList<>(10); 13 | } 14 | items.add(item); 15 | } 16 | 17 | public List getItems() { 18 | return items; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/register/AnswerCityRegisterItem.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.register; 2 | 3 | import edu.javacourse.studentorder.domain.Person; 4 | 5 | public class AnswerCityRegisterItem 6 | { 7 | public enum CityStatus 8 | { 9 | YES, NO, ERROR; 10 | } 11 | 12 | public static class CityError 13 | { 14 | private String code; 15 | private String text; 16 | 17 | public CityError(String code, String text) { 18 | this.code = code; 19 | this.text = text; 20 | } 21 | 22 | public String getCode() { 23 | return code; 24 | } 25 | 26 | public String getText() { 27 | return text; 28 | } 29 | } 30 | 31 | private CityStatus status; 32 | private Person person; 33 | private CityError error; 34 | 35 | public AnswerCityRegisterItem(CityStatus status, Person person) { 36 | this.status = status; 37 | this.person = person; 38 | } 39 | 40 | public AnswerCityRegisterItem(CityStatus status, Person person, CityError error) { 41 | this.status = status; 42 | this.person = person; 43 | this.error = error; 44 | } 45 | 46 | public CityStatus getStatus() { 47 | return status; 48 | } 49 | 50 | public Person getPerson() { 51 | return person; 52 | } 53 | 54 | public CityError getError() { 55 | return error; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/register/CityRegisterResponse.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.register; 2 | 3 | public class CityRegisterResponse 4 | { 5 | private boolean existing; 6 | private Boolean temporal; 7 | 8 | public boolean isExisting() { 9 | return existing; 10 | } 11 | 12 | public void setExisting(boolean existing) { 13 | this.existing = existing; 14 | } 15 | 16 | public Boolean getTemporal() { 17 | return temporal; 18 | } 19 | 20 | public void setTemporal(Boolean temporal) { 21 | this.temporal = temporal; 22 | } 23 | 24 | @Override 25 | public String toString() { 26 | return "CityRegisterResponse{" + 27 | "existing=" + existing + 28 | ", temporal=" + temporal + 29 | '}'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/student/AnswerStudent.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.student; 2 | 3 | public class AnswerStudent 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/domain/wedding/AnswerWedding.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.domain.wedding; 2 | 3 | public class AnswerWedding 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/exception/CityRegisterException.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.exception; 2 | 3 | public class CityRegisterException extends Exception 4 | { 5 | private String code; 6 | 7 | public CityRegisterException(String code, String message) { 8 | super(message); 9 | this.code = code; 10 | } 11 | 12 | public CityRegisterException(String code, String message, Throwable cause) { 13 | super(message, cause); 14 | this.code = code; 15 | } 16 | 17 | public String getCode() { 18 | return code; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/exception/DaoException.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.exception; 2 | 3 | public class DaoException extends Exception 4 | { 5 | public DaoException() { 6 | } 7 | 8 | public DaoException(String message) { 9 | super(message); 10 | } 11 | 12 | public DaoException(Throwable cause) { 13 | super(cause); 14 | } 15 | 16 | public DaoException(String message, Throwable cause) { 17 | super(message, cause); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/exception/TransportException.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.exception; 2 | 3 | public class TransportException extends Exception 4 | { 5 | public TransportException() { 6 | } 7 | 8 | public TransportException(String message) { 9 | super(message); 10 | } 11 | 12 | public TransportException(String message, Throwable cause) { 13 | super(message, cause); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/mail/MailSender.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.mail; 2 | 3 | import edu.javacourse.studentorder.domain.StudentOrder; 4 | 5 | public class MailSender 6 | { 7 | public void sendMail(StudentOrder so) { 8 | System.out.println("Почта отправлена"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/validator/ChildrenValidator.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator; 2 | 3 | import edu.javacourse.studentorder.domain.children.AnswerChildren; 4 | import edu.javacourse.studentorder.domain.StudentOrder; 5 | 6 | public class ChildrenValidator 7 | { 8 | public AnswerChildren checkChildren(StudentOrder so) { 9 | System.out.println("Children Check is running"); 10 | return new AnswerChildren(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/validator/CityRegisterValidator.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator; 2 | 3 | import edu.javacourse.studentorder.domain.Child; 4 | import edu.javacourse.studentorder.domain.Person; 5 | import edu.javacourse.studentorder.domain.register.AnswerCityRegister; 6 | import edu.javacourse.studentorder.domain.register.AnswerCityRegisterItem; 7 | import edu.javacourse.studentorder.domain.register.CityRegisterResponse; 8 | import edu.javacourse.studentorder.domain.StudentOrder; 9 | import edu.javacourse.studentorder.exception.CityRegisterException; 10 | import edu.javacourse.studentorder.exception.TransportException; 11 | import edu.javacourse.studentorder.validator.register.CityRegisterChecker; 12 | import edu.javacourse.studentorder.validator.register.FakeCityRegisterChecker; 13 | 14 | import java.util.List; 15 | 16 | public class CityRegisterValidator 17 | { 18 | public static final String IN_CODE = "NO_GRN"; 19 | 20 | private CityRegisterChecker personChecker; 21 | 22 | public CityRegisterValidator() { 23 | personChecker = new FakeCityRegisterChecker(); 24 | } 25 | 26 | public AnswerCityRegister checkCityRegister(StudentOrder so) { 27 | AnswerCityRegister ans = new AnswerCityRegister(); 28 | 29 | ans.addItem(checkPerson(so.getHusband())); 30 | ans.addItem(checkPerson(so.getWife())); 31 | for (Child child : so.getChildren()) { 32 | ans.addItem(checkPerson(child)); 33 | } 34 | 35 | return ans; 36 | } 37 | 38 | private AnswerCityRegisterItem checkPerson(Person person) { 39 | AnswerCityRegisterItem.CityStatus status = null; 40 | AnswerCityRegisterItem.CityError error = null; 41 | 42 | try { 43 | CityRegisterResponse tmp = personChecker.checkPerson(person); 44 | status = tmp.isExisting() ? 45 | AnswerCityRegisterItem.CityStatus.YES : 46 | AnswerCityRegisterItem.CityStatus.NO; 47 | } catch (CityRegisterException ex) { 48 | ex.printStackTrace(System.out); 49 | status = AnswerCityRegisterItem.CityStatus.ERROR; 50 | error = new AnswerCityRegisterItem.CityError(ex.getCode(), ex.getMessage()); 51 | } catch (TransportException ex) { 52 | ex.printStackTrace(System.out); 53 | status = AnswerCityRegisterItem.CityStatus.ERROR; 54 | error = new AnswerCityRegisterItem.CityError(IN_CODE, ex.getMessage()); 55 | } catch (Exception ex) { 56 | ex.printStackTrace(System.out); 57 | status = AnswerCityRegisterItem.CityStatus.ERROR; 58 | error = new AnswerCityRegisterItem.CityError(IN_CODE, ex.getMessage()); 59 | } 60 | 61 | AnswerCityRegisterItem ans = 62 | new AnswerCityRegisterItem(status, person, error); 63 | 64 | return ans; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/validator/StudentValidator.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator; 2 | 3 | import edu.javacourse.studentorder.domain.student.AnswerStudent; 4 | import edu.javacourse.studentorder.domain.StudentOrder; 5 | 6 | public class StudentValidator 7 | { 8 | public AnswerStudent checkStudent(StudentOrder so) { 9 | System.out.println("Студенты проверяются"); 10 | return new AnswerStudent(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/validator/WeddingValidator.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator; 2 | 3 | import edu.javacourse.studentorder.domain.wedding.AnswerWedding; 4 | import edu.javacourse.studentorder.domain.StudentOrder; 5 | 6 | public class WeddingValidator 7 | { 8 | public AnswerWedding checkWedding(StudentOrder so) { 9 | System.out.println("Wedding запущен"); 10 | return new AnswerWedding(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/validator/register/CityRegisterChecker.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator.register; 2 | 3 | import edu.javacourse.studentorder.domain.register.CityRegisterResponse; 4 | import edu.javacourse.studentorder.domain.Person; 5 | import edu.javacourse.studentorder.exception.CityRegisterException; 6 | import edu.javacourse.studentorder.exception.TransportException; 7 | 8 | public interface CityRegisterChecker 9 | { 10 | CityRegisterResponse checkPerson(Person person) 11 | throws CityRegisterException, TransportException; 12 | } 13 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/validator/register/FakeCityRegisterChecker.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator.register; 2 | 3 | import edu.javacourse.studentorder.domain.Adult; 4 | import edu.javacourse.studentorder.domain.Child; 5 | import edu.javacourse.studentorder.domain.register.CityRegisterResponse; 6 | import edu.javacourse.studentorder.domain.Person; 7 | import edu.javacourse.studentorder.exception.CityRegisterException; 8 | import edu.javacourse.studentorder.exception.TransportException; 9 | 10 | public class FakeCityRegisterChecker implements CityRegisterChecker 11 | { 12 | private static final String GOOD_1 = "1000"; 13 | private static final String GOOD_2 = "2000"; 14 | private static final String BAD_1 = "1001"; 15 | private static final String BAD_2 = "2001"; 16 | private static final String ERROR_1 = "1002"; 17 | private static final String ERROR_2 = "2002"; 18 | private static final String ERROR_T_1 = "1003"; 19 | private static final String ERROR_T_2 = "2003"; 20 | 21 | public CityRegisterResponse checkPerson(Person person) 22 | throws CityRegisterException, TransportException { 23 | 24 | CityRegisterResponse res = new CityRegisterResponse(); 25 | 26 | if (person instanceof Adult) { 27 | Adult t = (Adult) person; 28 | String ps = t.getPassportSeria(); 29 | if (ps.equals(GOOD_1) || ps.equals(GOOD_2)) { 30 | res.setExisting(true); 31 | res.setTemporal(false); 32 | } 33 | if (ps.equals(BAD_1) || ps.equals(BAD_2)) { 34 | res.setExisting(false); 35 | } 36 | if (ps.equals(ERROR_1) || ps.equals(ERROR_2)) { 37 | CityRegisterException ex = 38 | new CityRegisterException("1", "GRN ERROR " + ps); 39 | throw ex; 40 | } 41 | if (ps.equals(ERROR_T_1) || ps.equals(ERROR_T_2)) { 42 | TransportException ex = 43 | new TransportException("Transport ERROR " + ps); 44 | throw ex; 45 | } 46 | } 47 | 48 | if (person instanceof Child) { 49 | res.setExisting(true); 50 | res.setTemporal(true); 51 | } 52 | 53 | System.out.println(res); 54 | 55 | return res; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /student-project/src/edu/javacourse/studentorder/validator/register/RealCityRegisterChecker.java: -------------------------------------------------------------------------------- 1 | package edu.javacourse.studentorder.validator.register; 2 | 3 | import edu.javacourse.studentorder.domain.register.CityRegisterResponse; 4 | import edu.javacourse.studentorder.domain.Person; 5 | import edu.javacourse.studentorder.exception.CityRegisterException; 6 | import edu.javacourse.studentorder.exception.TransportException; 7 | 8 | public class RealCityRegisterChecker implements CityRegisterChecker 9 | { 10 | public CityRegisterResponse checkPerson(Person person) 11 | throws CityRegisterException, TransportException { 12 | return null; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /student-project/student-project.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /student-project/student_data.sql: -------------------------------------------------------------------------------- 1 | INSERT INTO jc_street (street_code, street_name) VALUES 2 | (1, 'улица Садовая'), 3 | (2, 'Невский проспект'), 4 | (3, 'улица Стахановцев'), 5 | (4, 'улица Гороховая'), 6 | (5, 'проспект Ветеранов'); 7 | 8 | INSERT INTO jc_university (university_id, university_name) VALUES 9 | (1, 'Санкт-Петербургский Государственный Университет'), 10 | (2, 'Санкт-Петербургский Политехнический Университет'), 11 | (3, 'Санкт-Петербургский Морской Технический Университет'); 12 | 13 | 14 | 15 | INSERT INTO jc_country_struct (area_id, area_name) VALUES 16 | ('010000000000', 'Город'), 17 | ('010010000000', 'Город Район 1'), 18 | ('010020000000', 'Город Район 2'), 19 | ('010030000000', 'Город Район 3'), 20 | ('010040000000', 'Город Район 4'), 21 | 22 | ('020000000000', 'Край'), 23 | ('020010000000', 'Край Область 1'), 24 | ('020010010000', 'Край Область 1 Район 1'), 25 | ('020010010001', 'Край Область 1 Район 1 Поселение 1'), 26 | ('020010010002', 'Край Область 1 Район 1 Поселение 2'), 27 | ('020010020000', 'Край Область 1 Район 2'), 28 | ('020010020001', 'Край Область 1 Район 2 Поселение 1'), 29 | ('020010020002', 'Край Область 1 Район 2 Поселение 2'), 30 | ('020010020003', 'Край Область 1 Район 2 Поселение 3'), 31 | ('020020000000', 'Край Область 2'), 32 | ('020020010000', 'Край Область 2 Район 1'), 33 | ('020020010001', 'Край Область 2 Район 1 Поселение 1'), 34 | ('020020010002', 'Край Область 2 Район 1 Поселение 2'), 35 | ('020020010003', 'Край Область 2 Район 1 Поселение 2'), 36 | ('020020020000', 'Край Область 2 Район 2'), 37 | ('020020020001', 'Край Область 2 Район 2 Поселение 1'), 38 | ('020020020002', 'Край Область 2 Район 2 Поселение 2'); 39 | 40 | INSERT INTO jc_passport_office (p_office_id, p_office_area_id, p_office_name) 41 | VALUES 42 | (1, '010010000000', 'Паспортный стол района 1 города'), 43 | (2, '010020000000', 'Паспортный стол 1 района 2 города'), 44 | (3, '010020000000', 'Паспортный стол 2 района 2 города'), 45 | (4, '010010000000', 'Паспортный стол района 3 города'), 46 | (5, '020010010001', 'Паспортный стол Область 1 поселения 1'), 47 | (6, '020010020002', 'Паспортный стол Область 1 поселения 2'), 48 | (7, '020020010000', 'Паспортный стол Область 2 район 1'), 49 | (8, '020020020000', 'Паспортный стол Область 2 район 2'); 50 | 51 | INSERT INTO jc_register_office (r_office_id, r_office_area_id, r_office_name) VALUES 52 | (1, '010010000000', 'ЗАГС 1 района 1 города'), 53 | (2, '010010000000', 'ЗАГС 2 района 1 города'), 54 | (3, '010020000000', 'ЗАГС района 2 города'), 55 | (4, '020010010001', 'ЗАГС Область 1 поселения 1'), 56 | (5, '020010020002', 'ЗАГС Область 1 поселения 2'), 57 | (6, '020020010000', 'ЗАГС Область 2 район 1'), 58 | (7, '020020020000', 'ЗАГС Область 2 район 2'); 59 | 60 | -------------------------------------------------------------------------------- /student-project/student_project.sql: -------------------------------------------------------------------------------- 1 | DROP TABLE IF EXISTS jc_student_child; 2 | DROP TABLE IF EXISTS jc_student_order; 3 | DROP TABLE IF EXISTS jc_passport_office; 4 | DROP TABLE IF EXISTS jc_register_office; 5 | DROP TABLE IF EXISTS jc_country_struct; 6 | DROP TABLE IF EXISTS jc_university; 7 | DROP TABLE IF EXISTS jc_street; 8 | 9 | CREATE TABLE jc_street 10 | ( 11 | street_code integer not null, 12 | street_name varchar(300), 13 | PRIMARY KEY (street_code) 14 | ); 15 | 16 | CREATE TABLE jc_university 17 | ( 18 | university_id integer not null, 19 | university_name varchar(300), 20 | PRIMARY KEY (university_id) 21 | ); 22 | 23 | CREATE TABLE jc_country_struct 24 | ( 25 | area_id char(12) not null, 26 | area_name varchar(200), 27 | PRIMARY KEY (area_id) 28 | ); 29 | 30 | CREATE TABLE jc_passport_office 31 | ( 32 | p_office_id integer not null, 33 | p_office_area_id char(12) not null, 34 | p_office_name varchar(200), 35 | PRIMARY KEY (p_office_id), 36 | FOREIGN KEY (p_office_area_id) REFERENCES jc_country_struct(area_id) ON DELETE RESTRICT 37 | ); 38 | 39 | CREATE TABLE jc_register_office 40 | ( 41 | r_office_id integer not null, 42 | r_office_area_id char(12) not null, 43 | r_office_name varchar(200), 44 | PRIMARY KEY (r_office_id), 45 | FOREIGN KEY (r_office_area_id) REFERENCES jc_country_struct(area_id) ON DELETE RESTRICT 46 | ); 47 | 48 | 49 | CREATE TABLE jc_student_order 50 | ( 51 | student_order_id SERIAL, 52 | student_order_status int not null, 53 | student_order_date timestamp not null, 54 | h_sur_name varchar(100) not null, 55 | h_given_name varchar(100) not null, 56 | h_patronymic varchar(100) not null, 57 | h_date_of_birth date not null, 58 | h_passport_seria varchar(10) not null, 59 | h_passport_number varchar(10) not null, 60 | h_passport_date date not null, 61 | h_passport_office_id integer not null, 62 | h_post_index varchar(10), 63 | h_street_code integer not null, 64 | h_building varchar(10) not null, 65 | h_extension varchar(10), 66 | h_apartment varchar(10), 67 | h_university_id integer not null, 68 | h_student_number varchar(30) not null, 69 | w_sur_name varchar(100) not null, 70 | w_given_name varchar(100) not null, 71 | w_patronymic varchar(100) not null, 72 | w_date_of_birth date not null, 73 | w_passport_seria varchar(10) not null, 74 | w_passport_number varchar(10) not null, 75 | w_passport_date date not null, 76 | w_passport_office_id integer not null, 77 | w_post_index varchar(10), 78 | w_street_code integer not null, 79 | w_building varchar(10) not null, 80 | w_extension varchar(10), 81 | w_apartment varchar(10), 82 | w_university_id integer not null, 83 | w_student_number varchar(30) not null, 84 | certificate_id varchar(20) not null, 85 | register_office_id integer not null, 86 | marriage_date date not null, 87 | PRIMARY KEY (student_order_id), 88 | FOREIGN KEY (h_street_code) REFERENCES jc_street(street_code) ON DELETE RESTRICT, 89 | FOREIGN KEY (h_passport_office_id) REFERENCES jc_passport_office(p_office_id) ON DELETE RESTRICT, 90 | FOREIGN KEY (h_university_id) REFERENCES jc_university(university_id) ON DELETE RESTRICT, 91 | FOREIGN KEY (w_street_code) REFERENCES jc_street(street_code) ON DELETE RESTRICT, 92 | FOREIGN KEY (w_passport_office_id) REFERENCES jc_passport_office(p_office_id) ON DELETE RESTRICT, 93 | FOREIGN KEY (w_university_id) REFERENCES jc_university(university_id) ON DELETE RESTRICT, 94 | FOREIGN KEY (register_office_id) REFERENCES jc_register_office(r_office_id) ON DELETE RESTRICT 95 | ); 96 | 97 | CREATE TABLE jc_student_child 98 | ( 99 | student_child_id SERIAL, 100 | student_order_id integer not null, 101 | c_sur_name varchar(100) not null, 102 | c_given_name varchar(100) not null, 103 | c_patronymic varchar(100) not null, 104 | c_date_of_birth date not null, 105 | c_certificate_number varchar(10) not null, 106 | c_certificate_date date not null, 107 | c_register_office_id integer not null, 108 | c_post_index varchar(10), 109 | c_street_code integer not null, 110 | c_building varchar(10) not null, 111 | c_extension varchar(10), 112 | c_apartment varchar(10), 113 | PRIMARY KEY (student_child_id), 114 | FOREIGN KEY (student_order_id) REFERENCES jc_student_order(student_order_id) ON DELETE RESTRICT, 115 | FOREIGN KEY (c_street_code) REFERENCES jc_street(street_code) ON DELETE RESTRICT, 116 | FOREIGN KEY (c_register_office_id) REFERENCES jc_register_office(r_office_id) ON DELETE RESTRICT 117 | ); 118 | 119 | CREATE INDEX idx_student_order_status ON jc_student_order(student_order_status); 120 | 121 | CREATE INDEX idx_student_order_id ON jc_student_child(student_order_id); 122 | 123 | --------------------------------------------------------------------------------