├── .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 |
--------------------------------------------------------------------------------