Файл: Разработка службы курьерской доставки в мобильном приложении.docx

ВУЗ: Не указан

Категория: Реферат

Дисциплина: Не указана

Добавлен: 12.12.2023

Просмотров: 155

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

СОДЕРЖАНИЕ

ВВЕДЕНИЕ

Раздел 1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ

1.1 Общая характеристика организации

1.2 Концепция Службы

1.3 Анализ существующих решений

Раздел 2. РАЗРАБОТКА СЦЕНАРИЕВ ПОВЕДЕНИЯ ПРИЛОЖЕНИЙ НА ЭТАПАХ ВЫПОЛНЕНИЯ КУРЬЕРСКОГО ЗАКАЗА

2.1 Алгоритм формирования заказа и поиска курьера

2.2 Алгоритм выполнения курьерского заказа

Раздел 3. ПРОЕКТИРОВАНИЕ АРХИТЕКТУРЫ СЕРВЕРНОЙ ЧАСТИ СИСТЕМЫ И МОБИЛЬНЫХ ПРИЛОЖЕНИЙ

3.1 Архитектура серверной части системы

3.2 Выбор оптимальной базы данных для разрабатываемой системы

3.2.1 SQLite

3.2.2 MySQL

3.2.3 PostgreSQL

3.3 Архитектура мобильных приложений

3.4 Средства разработки мобильных приложений

Раздел 4. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СЕРВЕРНОЙ ЧАСТИ СИСТЕМЫ И МОБИЛЬНЫХ ПРИЛОЖЕНИЙ

4.1 Разработка структуры базы данных

4.2 API для работы с мобильными приложениями

4.3 Структура Android приложения

4.4 Проверка выполнения разработанных сценариев для реализованной системы

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Приложение 1.

Приложение 2.




Приложение 1.



Активности для подтверждения пользователем заказа.

public class ConfirmOrderActivityextends AppCompatActivityimplements

SmsReceiver.OnSmsCodeReceiverListener,

View.OnClickListener,

ConfirmOrderPresenter.OnConfirmOrderDirection{

private Context mContext;

private ConfirmOrderPresentermConfirmOrderPresenter;

private FieldPresentermFieldPresenter;

private SmsReceivermSmsReceiver;

private TextViewtv_title;

private ImageViewiv_btn_close;

private TextViewtv_info;

private TextInputLayouttil_cvc_code, til_sms_code;

private EditTextet_cvc_code, et_sms_code;

private TextInputLayout[] fieldParents;

private EditText[] fields;

private Button btn_confirm;

@Override

protected void onCreate(@NullableBundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_confirm_order);

try {

initTools();

initViews();

setParams();

} catch (Exception mE) {

mE.printStackTrace();

}

}

private void initTools()throws Exception{

mContext= ConfirmOrderActivity.this;

mConfirmOrderPresenter= new ConfirmOrderPresenter(mContext);

mFieldPresenter= new FieldPresenter(mContext);

mSmsReceiver= new SmsReceiver(ConfirmOrderActivity.this);

}

private void initViews()throws Exception{

tv_title= (TextView)findViewById(R.id.tv_title);

iv_btn_close= (ImageView)findViewById(R.id.iv_btn_close);

tv_info= (TextView)findViewById(R.id.tv_info);

til_cvc_code= (TextInputLayout)findViewById(R.id.til_cvc_code);

til_sms_code= (TextInputLayout)findViewById(R.id.til_sms_code);

et_cvc_code= (EditText)findViewById(R.id.et_cvc_code);

et_sms_code= (EditText)findViewById(R.id.et_sms_code);

btn_confirm= (Button)findViewById(R.id.btn_confirm);

fieldParents= new TextInputLayout[]{til_cvc_code, til_sms_code};

fields = new EditText[]{et_cvc_code, et_sms_code};

}

private void setParams()throws Exception{

mFieldPresenter.setParamsFieldCvc(et_cvc_code);


mFieldPresenter.setParamsFieldSms(et_sms_code);

iv_btn_close.setOnClickListener(this);

btn_confirm.setOnClickListener(this);

mConfirmOrderPresenter.setOnConfirmOrderDirection(this);

mConfirmOrderPresenter.getTitle();

mConfirmOrderPresenter.getScreenParamByPayMethod();

mSmsReceiver.setOnSmsCodeReceiverListener(this);

mSmsReceiver.startReceiveSms();

}

@Override

public void onReceivedTitle(String title) {

tv_title.setText(title);

}

@Override

public void onReceivedScreenParamByPayMethod(intpayMethodId, String phone, String payDescription) {

switch (payMethodId){

case CASH:

til_sms_code.setVisibility(View.VISIBLE);

tv_info.setText(getString(R.string.text_sms_confirm)

.concat(phone));

break;

case BANK_CARD:

til_cvc_code.setVisibility(View.VISIBLE);

tv_info.setText(getString(R.string.text_card_confirm)

.concat(payDescription));

break;

}

}

@Override

public void onReceivedRequestParamByPayMethod(Maphttp_params, intpay_method) {

new ConfirmOrderTask(mContext, http_params, pay_method).execute();

}

@Override

public void onClick(View v) {

intid = v.getId();

switch (id){

case R.id.iv_btn_close:

finish();

break;

case R.id.btn_confirm:

try {

booleanisFieldValid = mConfirmOrderPresenter.checkFieldValid(fieldParents, fields);

if(isFieldValid){

String pin = et_sms_code.getText().toString();

String cvc = et_cvc_code.getText().toString();

mConfirmOrderPresenter.getRequestParamByPayMethod(pin, cvc);

}

} catch (Exception mE) {

mE.printStackTrace();

}

break;

}

}

@Override

public void onSmsCodeReceived(String sms) {

et_sms_code.setText(sms);

et_sms_code.setSelection(et_sms_code.length());

}

@Override

protected void onPause() {

super.onPause();

try {

if(mSmsReceiver!=null)

mSmsReceiver.stopReceiveSms();

} catch (Exception mE) {

mE.printStackTrace();

}

}

@Override

protected void onResume() {

super.onResume();

}

}



Приложение 2.



На следующем листинге представлен Presenter для активности, описанной в предыдущем блоке (View):
public class ConfirmOrderPresenter {

private final static String TAG = ConfirmOrderPresenter.class.getSimpleName();

private Context mContext;

private OrderTempRepositorymOrderTempRepository;

private SettingRepositorymSettingRepository;

private FieldsValidationmValidation;

private StringProcessingmStringProcessing;

private OrderHistoryItemmOrderCurrent;

private OnConfirmOrderDirectionmOnConfirmOrderDirection;

private final static String TITLE = «Поддержка»;

public ConfirmOrderPresenter(Context context){

this.mContext= context;

try {

init();

} catch (Exception mE) {

mE.printStackTrace();

}

}

public void setOnConfirmOrderDirection(OnConfirmOrderDirection direction){

mOnConfirmOrderDirection= direction;

}

private void init() throws Exception{

mOrderCurrent= getCurrentOrder();

mOrderTempRepository= new OrderTempRepository(mContext);

mSettingRepository= new SettingRepository();

mValidation= new FieldsValidation(mContext);

mStringProcessing= new StringProcessing();

}

public void getTitle(){

if(mOnConfirmOrderDirection!=null)mOnConfirmOrderDirection.onReceivedTitle(TITLE);

}

public void getScreenParamByPayMethod(){

intpayMethod = getPayMethod();

String phone = mOrderTempRepository.getOrderDataByKey(KEY_PHONE);

String pay_id = mOrderTempRepository.getOrderDataByKey(KEY_PAY_METHOD);

String pay_description = mSettingRepository.getData(pay_id);

Log.e(TAG, phone);

if(mOnConfirmOrderDirection!=null)mOnConfirmOrderDirection.onReceivedScreenParamByPayMethod(payMethod, phone, pay_description);

}

public void getRequestParamByPayMethod(String pin, String cvc) throws Exception{

/*set pay method*/

intpayMethod = getPayMethod();

/*set request parameters by pay method*/

String token = mSettingRepository.getData(USER_TOKEN);

String idtOrder = mOrderCurrent.getIdtOrder();

MapconfirmParam = new HashMap();


switch (payMethod){

case CASH:

String phone = mStringProcessing.convertPhoneToString(mOrderTempRepository.getOrderDataByKey(KEY_PHONE));

confirmParam.put(«phone», phone);

confirmParam.put(«idt_order», idtOrder);

confirmParam.put(«pin», pin);

confirmParam.put(«token», token);

break;

case BANK_CARD:

String idtPayMethod = mOrderTempRepository.getOrderDataByKey(KEY_PAY_METHOD);

confirmParam.put(«token», token);

confirmParam.put(«idt_order», idtOrder);

confirmParam.put(«idt_pay_method», idtPayMethod);

confirmParam.put(«cvc», cvc);

break;

default:

break;

}

if(mOnConfirmOrderDirection!=null)mOnConfirmOrderDirection.onReceivedRequestParamByPayMethod(confirmParam, payMethod);

}

public booleancheckFieldValid(TextInputLayout[] fieldParents, EditText[] fields){

intpay_method = getPayMethod();

TextInputLayouttil_cvc_code = fieldParents[0];

TextInputLayouttil_sms_code = fieldParents[1];

EditTextet_cvc_code = fields[0];

EditTextet_sms_code = fields[1];

switch (pay_method){

case CASH:

return mValidation.isFieldEmpty(til_sms_code, et_sms_code);

case BANK_CARD:

return mValidation.isFieldEmpty(til_cvc_code, et_cvc_code) &&mValidation.isValidCvc(til_cvc_code, et_cvc_code);

default:

return false;

}

}

private OrderHistoryItemgetCurrentOrder() throws Exception{

intidt_order = new SettingRepository().getId(CURRENT_ORDER_ID);

return new RealmHelper<>(OrderHistoryItem.class).getById(idt_order);

}

private intgetPayMethod(){

intpayMethod = CASH;

if(mOrderTempRepository.isDataExist(KEY_PAY_METHOD)){

payMethod = BANK_CARD;

}

return payMethod;

}

public interface OnConfirmOrderDirection{

void onReceivedTitle(String title);

void onReceivedScreenParamByPayMethod(intpayMethodId, String phone, String payDescription);

void onReceivedRequestParamByPayMethod(Maphttp_params, intpay_method);

}

}