Автор работы: Пользователь скрыл имя, 13 Января 2013 в 22:36, дипломная работа
Дипломный проект рассматривает вопросы автоматизации, направленные на решение основных проблем в бизнесе страховой компании, занимающейся добровольным медицинским страхованием.
Целью дипломного проекта является повышение эффективности бизнеса страховой компании за счет увеличения гибкости её информационной системы.
Введение 9
Цель дипломного проекта 17
Постановка задачи 17
1 Специальная часть 19
1.1 Обоснование выбора сервис-ориентированной архитектуры 19
1.2 Выбор инструментальных средств проектирования и разработки 32
1.2.1 Обоснование выбора средств моделирования бизнес процессов 32
1.2.2 Обоснование выбора CASE средств проектирования 37
1.2.3 Обоснование выбора СУБД 38
1.2.4 Набор программных средств, используемых в ходе дипломного проектирования 38
1.3 Используемые методы и стандарты 39
1.3.1 Разработка, управляемая моделями 39
1.3.2 Независимость от платформы 42
1.3.3 Программная платформа 43
1.3.4 Модель требований FURPS 44
1.4 Формирование требований к разрабатываемой системе 46
1.4.1 Проект требований 47
1.5 Моделирование бизнес-процессов 49
1.5.1 Моделирование бизнес процесса как есть 49
1.5.2 Анализ бизнес-процессов «как есть». 53
1.5.3 Результаты имитации 55
1.5.4 Моделирование бизнес-процессов «как должно быть» 58
1.5.5 Анализ модели «как должно быть». Сравнение результатов 59
1.6 Разработка UML-модели системы 61
1.6.1 Трансформация модели бизнес процессов в UML-модель 61
1.6.2 Модификация полученной в результате трансформации UML-модели 63
1.7 Разработка сервисной модели 69
1.7.1 Трансформация в сервисную модель 69
1.7.2 Идентификация сервисов 71
1.7.3 Моделирование сервисов 73
1.8 Разработка базы данных 77
1.8.1 Трансформация UML-модели в логическую модель данных 77
1.8.2 Получение окончательной логической модели данных 81
1.8.3 Разработка физической модели данных 82
1.8.4 Генерация базы данных на основе физической модели данных 84
1.9 Реализация сервисов 85
1.10 Выводы 87
2 Экономическая часть 89
2.1 Экономическая эффективность от внедрения сервисов, реализованных на базе сервис-ориентированной архитектуры. 89
2.1.1 Абсолютный показатель изменения годовой трудоемкости обработки информации в результате внедрения SOA-решения для процесса заключения договора страхования 90
2.1.2 Абсолютный показатель изменения годовых затрат на обработку информации в результате внедрения SOA-решения для процесса заключения договора страхования 91
2.1.3 Относительные показатели изменения годовой трудоемкости и годовых затрат на обработку информации в результате внедрения проекта 97
2.1.4 Расчетный коэффициент эффективности единовременных затрат на разработку и внедрение проекта 98
2.1.5 Срок окупаемости единовременных затрат на разработку и внедрение проекта 104
2.2 Выводы 104
3 Экологическая часть и безопасность жизнедеятельности 105
3.1 Требования к организации рабочего места пользователя (сотрудника страховой компании) 105
3.2 Вредные излучения при работе компьютера и способы их минимизации 113
3.3 Заболевания, развивающиеся при работе за компьютером, и их профилактика 116
3.4 Выводы 118
Заключение 120
Список использованной литературы 122
Приложение А. 126
Проект требований 126
Приложение Б. 129
Модель бизнес-процессов 129
Приложение В. 139
Трансформированная модель бизнес-процессов в UML-модель 139
Приложение Г. 155
Трансформированная сервисная модель 155
Приложение Д. 162
WSDL описания сервисов 162
Приложение Е. 178
Исходный Java-код сервисов 178
Приложение Ж. 191
Логическая модель данных, полученная путем трансформации UML-модели 191
Приложение И. 202
SQL скрипт для генерации схемы базы данных 202
<wsdl:binding name="PolicyWSSOAP" type="tns:PolicyWS">
<soap:binding style="document"
transport="http://schemas.
<wsdl:operation name="ADDPROGPOL">
<soap:operation soapAction="urn:example/
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CREATEPOLICY">
<soap:operation soapAction="urn:example/
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DELETEPOLICY">
<soap:operation soapAction="urn:example/
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GETALLPOLICYINFO">
<soap:operation soapAction="urn:example/
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="UPDATEPOLICY">
<soap:operation soapAction="urn:example/
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="PolicyWS">
<wsdl:port binding="tns:PolicyWSSOAP" name="PolicyWSSOAPHTTP">
<soap:address location="http://localhost:
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Исходный код для сервиса Diplom_DSClientWS.war:
/**
* Хранимая процедура JDBC CREATEPERSON
* @param persname
* @param surname
* @param midlname
* @param passpnom
* @param passpinf
* @param kodpodr
* @param gender
* @param birth
* @param persontype
* @param whichQuery
* @param telephone
* @param phone
* @param mainaddr
* @param factaddr
* @param email
* @param SQLSTATE_OUT
* @param SQLCODE_OUT
* @param SQLMESSAGE_OUT
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class CREATEPERSON_1 {
public static void CREATEPERSON_1(java.lang.
java.lang.String surname, java.lang.String midlname,
java.lang.String passpnom, java.lang.String passpinf,
java.lang.String kodpodr, java.lang.String gender,
java.sql.Date birth, java.lang.String persontype, int whichQuery,
java.lang.String telephone, java.lang.String phone,
java.lang.String mainaddr, java.lang.String factaddr,
java.lang.String email, java.lang.String[] SQLSTATE_OUT,
int[] SQLCODE_OUT, java.lang.String[] SQLMESSAGE_OUT,
ResultSet[] rs1) throws Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
try {
switch (whichQuery) {
case 0:
sql = "INSERT INTO DIPLM.PERSONS (PERSNAME, SURNAME, MIDLNAME, PASSPNOM, PASSPINF,"
+ " KODPODR, GENDER, BIRTH, PERSONTYPE)"
+ " VALUES ( ? , ? , ? , ? , ? ,"
+ " ? , ? , ? , ? )";
stmt = con.prepareStatement(sql);
stmt.setString(1, persname);
stmt.setString(2, surname);
stmt.setString(3, midlname);
stmt.setString(4, passpnom);
stmt.setString(5, passpinf);
stmt.setString(6, kodpodr);
stmt.setString(7, gender);
stmt.setDate(8, birth);
stmt.setString(9, persontype);
bFlag = stmt.execute();
break;
case 1:
sql = "INSERT INTO DIPLM.CONTACTS (PERS_ID, TELEPHONE, PHONE, MAINADDR, FACTADDR,"
+ " EMAIL)"
+ " VALUES ((SELECT MAX(PERSON_ID)"
+ " FROM DIPLM.PERSONS), ? , ? , ? , ? ,"
+ " ? )";
stmt = con.prepareStatement(sql);
stmt.setString(1, telephone);
stmt.setString(2, phone);
stmt.setString(3, mainaddr);
stmt.setString(4, factaddr);
stmt.setString(5, email);
bFlag = stmt.execute();
break;
default:
sql = "SELECT PROCSCHEMA, PROCNAME FROM SYSCAT.PROCEDURES";
stmt = con.prepareStatement(sql);
}
updateCount = stmt.executeUpdate();
// Задать возвращаемые параметры
SQLSTATE_OUT[0] = "00000"; // Правильная SQLSTATE
SQLCODE_OUT[0] = 0; // Правильная SQLCODE
SQLMESSAGE_OUT[0] = " "; // Правильная SQLMESSAGE
} catch (SQLException e) {
// Задать возвращаемые параметры
SQLSTATE_OUT[0] = e.getSQLState();
SQLCODE_OUT[0] = e.getErrorCode();
SQLMESSAGE_OUT[0] = e.getMessage();
if (stmt != null)
stmt.close();
}
}
}
/**
* Хранимая процедура JDBC DELETEPERSON
* @param whichQuery
* @param persid
* @param SQLSTATE_OUT
* @param SQLCODE_OUT
* @param SQLMESSAGE_OUT
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class DELETEPERSON {
public static void dELETEPERSON(int whichQuery, int persid,
java.lang.String[] SQLSTATE_OUT, int[] SQLCODE_OUT,
java.lang.String[] SQLMESSAGE_OUT, ResultSet[] rs1)
throws Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
try {
switch (whichQuery) {
case 0:
sql = "DELETE FROM DIPLOM.CONTACTS" + " WHERE PERS_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, persid);
bFlag = stmt.execute();
break;
case 1:
sql = "DELETE FROM DIPLOM.PERSONS" + " WHERE PERSON_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, persid);
bFlag = stmt.execute();
break;
default:
sql = "SELECT PROCSCHEMA, PROCNAME FROM SYSCAT.PROCEDURES";
stmt = con.prepareStatement(sql);
}
updateCount = stmt.executeUpdate();
// Задать возвращаемые параметры
SQLSTATE_OUT[0] = "00000"; // Правильная SQLSTATE
SQLCODE_OUT[0] = 0; // Правильная SQLCODE
SQLMESSAGE_OUT[0] = " "; // Правильная SQLMESSAGE
} catch (SQLException e) {
// Задать возвращаемые параметры
SQLSTATE_OUT[0] = e.getSQLState();
SQLCODE_OUT[0] = e.getErrorCode();
SQLMESSAGE_OUT[0] = e.getMessage();
if (stmt != null)
stmt.close();
}
}
}
/**
* Хранимая процедура JDBC FINDCLIENT
* @param surname
* @param passpsernom
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class FINDCLIENT_1 {
public static void FINDCLIENT_1(java.lang.String surname,
java.lang.String passpsernom, ResultSet[] rs1, ResultSet[] rs2)
throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
boolean bFlag;
String sql1, sql;
sql1 = "SELECT *" + " FROM DIPLOM.PERSONS" + " WHERE PASSPNOM = ?";
stmt = con.prepareStatement(sql1);
stmt.setString(1, passpsernom);
bFlag = stmt.execute();
rs1[0] = stmt.getResultSet();
sql = "SELECT PERSON_ID" + " FROM DIPLOM.PERSONS"
+ " WHERE SURNAME LIKE ?";
stmt = con.prepareStatement(sql);
stmt.setString(1, surname);
bFlag = stmt.execute();
rs2[0] = stmt.getResultSet();
}
}
/**
* Хранимая процедура JDBC GETCLIBYT
* @param CliType
* @param CLIID
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class GETCLIBYT_1 {
public static void GETCLIBYT_1(java.lang.String CliType, int[] CLIID,
ResultSet[] rs1) throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
boolean bFlag;
String sql;
sql = "SELECT *" + " FROM diplom.PERSONS" + " WHERE PERSONTYPE = ?";
stmt = con.prepareStatement(sql);
stmt.setString(1, CliType);
bFlag = stmt.execute();
rs1[0] = stmt.getResultSet();
// Задать возвращаемый параметр
CLIID[0] = CLIID[0];
}
}
/**
* Хранимая процедура JDBC GETPOLICYBYINSURED
* @param insurId
* @param VAR01
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class GETPOLICYBYINSURED {
public static void gETPOLICYBYINSURED(int insurId,
ResultSet[] rs1) throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
boolean bFlag;
String sql;
sql = "SELECT *" + " FROM DIPLOM.POLICY" + " WHERE INSURED_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, insurId);
bFlag = stmt.execute();
rs1[0] = stmt.getResultSet();
}
}
/**
* Хранимая процедура JDBC SHOWALLCLIENTINFOBYID
* @param id
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class SHOWALLCLIENTINFOBYID_1 {
public static void SHOWALLCLIENTINFOBYID_1(int id, ResultSet[] rs1)
throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
boolean bFlag;
String sql;
sql = "SELECT *"
+ " FROM DIPLOM.PERSONS, FROM DIPLOM.CONTACTS, FROM DIPLOM.POLICY"
+ " DIPLOM.WHERE PERSONS.PERSON_ID = ? AND DIPLOM.CONTACTS.PERS_ID = ? AND DIPLOM.POLICY.INSURED_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, id);
stmt.setInt(2, id);
stmt.setInt(3, id);
bFlag = stmt.execute();
rs1[0] = stmt.getResultSet();
}
}
/**
* Хранимая процедура JDBC UPDATEPERSONSINFO
* @param persname
* @param surname
* @param midlname
* @param passpnom
* @param passpinf
* @param kodpodr
* @param gender
* @param persontype
* @param birth
* @param telephone
* @param phone
* @param mainaddr
* @param factaddr
* @param email
* @param persId
* @param SQLSTATE_OUT
* @param SQLCODE_OUT
* @param SQLMESSAGE_OUT
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class UPDATEPERSONSINFO {
public static void uPDATEPERSONSINFO(java.lang.
java.lang.String surname, java.lang.String midlname,
java.lang.String passpnom, java.lang.String passpinf,
java.lang.String kodpodr, java.lang.String gender,
java.lang.String persontype, java.sql.Date birth,
java.lang.String telephone, java.lang.String phone,
java.lang.String mainaddr, java.lang.String factaddr,
java.lang.String email, int persId,
java.lang.String[] SQLSTATE_OUT, int[] SQLCODE_OUT,
java.lang.String[] SQLMESSAGE_OUT, ResultSet[] rs1, ResultSet[] rs2)
throws Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
try {
sql = "UPDATE DIPLOM.PERSONS"
+ " SET PERSNAME = ? , SURNAME = ? , MIDLNAME = ? ,"
+ " PASSPNOM = ? , PASSPINF = ? , KODPODR = ? ,"
+ " GENDER = ? , PERSONTYPE = ? , BIRTH = ? "
+ " WHERE PERSON_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setString(1, persname);
stmt.setString(2, surname);
stmt.setString(3, midlname);
stmt.setString(4, passpnom);
stmt.setString(5, passpinf);
stmt.setString(6, kodpodr);
stmt.setString(7, gender);
stmt.setString(8, persontype);
stmt.setDate(9, birth);
stmt.setInt(10, persId);
updateCount = stmt.executeUpdate();
sql = "UPDATE DIPLOM.CONTACTS"
+ " SET TELEPHONE = ? , PHONE = ? , MAINADDR = ? ,"
+ " FACTADDR = ? , EMAIL = ? "
+ " WHERE PERS_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setString(1, telephone);
stmt.setString(2, phone);
stmt.setString(3, mainaddr);
stmt.setString(4, factaddr);
stmt.setString(5, email);
stmt.setInt(6, persId);
updateCount = stmt.executeUpdate();
// Задать возвращаемые параметры
SQLSTATE_OUT[0] = "00000"; // Правильная SQLSTATE
SQLCODE_OUT[0] = 0; // Правильная SQLCODE
SQLMESSAGE_OUT[0] = " "; // Правильная SQLMESSAGE
} catch (SQLException e) {
// Задать возвращаемые параметры
SQLSTATE_OUT[0] = e.getSQLState();
SQLCODE_OUT[0] = e.getErrorCode();
SQLMESSAGE_OUT[0] = e.getMessage();
if (stmt != null)
stmt.close();
}
}
}
Исходный код для сервиса Diplom_DSClaimWS.war:
/**
* Хранимая процедура JDBC CREATECLAIM
* @param polid
* @param persid
* @param progid
* @param medid
* @param crtdate
* @param upddate
* @param claimcomment
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class CREATECLAIM {
public static void cREATECLAIM(int polid, int persid, int progid,
int medid, java.sql.Date crtdate, java.sql.Date upddate,
java.lang.String claimcomment, ResultSet[] rs1)
throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
sql = "INSERT INTO DIPLOM.CLAIMS (POL_ID, PERS_ID, PROG_ID, MED_ID, CREATEDATE,"
+ " UPDATEDATE, CLAIMCOMMENT, STATUS)"
+ " VALUES ( ? , ? , ? , ? , ? , ? ,"
+ " ? , 'введена')";
stmt = con.prepareStatement(sql);
stmt.setInt(1, polid);
stmt.setInt(2, persid);
stmt.setInt(3, progid);
stmt.setInt(4, medid);
stmt.setDate(5, crtdate);
stmt.setDate(6, upddate);
stmt.setString(7, claimcomment);
bFlag = stmt.execute();
}
}
/**
* Хранимая процедура JDBC DELETCLAIM
* @param claimid
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class DELETCLAIM {
public static void dELETCLAIM(int claimid, ResultSet[] rs1)
throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
sql = "DELETE FROM DIPLOM.CLAIMS" + " WHERE CLAIM_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, claimid);
bFlag = stmt.execute();
}
}
/**
* Хранимая процедура JDBC FINDCLAIMBYINSURED
* @param insurid
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class FINDCLAIMBYINSURED {
public static void fINDCLAIMBYINSURED(int insurid, ResultSet[] rs1)
throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
boolean bFlag;
String sql;
sql = "SELECT *" + " FROM DIPLOM.CLAIMS" + " WHERE PERS_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, insurid);
bFlag = stmt.execute();
rs1[0] = stmt.getResultSet();
}
}
/**
* Хранимая процедура JDBC GETCLAIM
* @param claimid
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class GETCLAIM {
public static void gETCLAIM(int claimid, ResultSet[] rs1)
throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
boolean bFlag;
String sql;
sql = "SELECT *" + " FROM DIPLOM.CLAIMS" + " WHERE CLAIM_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setInt(1, claimid);
bFlag = stmt.execute();
rs1[0] = stmt.getResultSet();
}
}
/**
* Хранимая процедура JDBC UPDCLAIM
* @param claimcomment
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class UPDCLAIM {
public static void uPDCLAIM(java.lang.String claimcomment, ResultSet[] rs1)
throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
sql = "UPDATE DIPLOM.CLAIMS" + " SET CLAIMCOMMENT = ?";
stmt = con.prepareStatement(sql);
stmt.setString(1, claimcomment);
bFlag = stmt.execute();
}
}
/**
* Хранимая процедура JDBC UPDCLAIMSTATUS
* @param status
* @param claimid
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class UPDCLAIMSTATUS {
public static void uPDCLAIMSTATUS(java.lang.
ResultSet[] rs1) throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
sql = "UPDATE DIPLOM.CLAIMS" + " SET STATUS = ? "
+ " WHERE CLAIM_ID = ?";
stmt = con.prepareStatement(sql);
stmt.setString(1, status);
stmt.setInt(2, claimid);
bFlag = stmt.execute();
}
}
Исходный код для сервиса Diplom_DSPolicyWS.war:
/**
* Хранимая процедура JDBC ADDPROGPOL
* @param progid
* @param polid
*/
package com.admin.admin;
import java.sql.*; // Классы JDBC
public class ADDPROGPOL_1 {
public static void ADDPROGPOL_1(int progid, int polid, ResultSet[] rs1)
throws SQLException, Exception {
// Получить соединение с базой данных
Connection con = DriverManager.getConnection("
PreparedStatement stmt = null;
int updateCount = 0;
boolean bFlag;
String sql;
sql = "INSERT INTO DIPLOM.PROGPOL (PROGRAM_ID, POLICY_ID)"
+ " VALUES ( ? , ? )";
stmt = con.prepareStatement(sql);
stmt.setInt(1, progid);
stmt.setInt(2, polid);
bFlag = stmt.execute();
}
}
/**
* Хранимая процедура JDBC CREATEPOLICY
* @param whichQuery
* @param polid
* @param progid
* @param datestart
* @param dateend
* @param summcost
* @param insur_id
* @param payer_id
*/
package com.admin.admin;