Файл: Разработка службы курьерской доставки в мобильном приложении.docx
Добавлен: 12.12.2023
Просмотров: 155
Скачиваний: 2
СОДЕРЖАНИЕ
Раздел 1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ
1.1 Общая характеристика организации
1.3 Анализ существующих решений
Раздел 2. РАЗРАБОТКА СЦЕНАРИЕВ ПОВЕДЕНИЯ ПРИЛОЖЕНИЙ НА ЭТАПАХ ВЫПОЛНЕНИЯ КУРЬЕРСКОГО ЗАКАЗА
2.1 Алгоритм формирования заказа и поиска курьера
2.2 Алгоритм выполнения курьерского заказа
Раздел 3. ПРОЕКТИРОВАНИЕ АРХИТЕКТУРЫ СЕРВЕРНОЙ ЧАСТИ СИСТЕМЫ И МОБИЛЬНЫХ ПРИЛОЖЕНИЙ
3.1 Архитектура серверной части системы
3.2 Выбор оптимальной базы данных для разрабатываемой системы
3.3 Архитектура мобильных приложений
3.4 Средства разработки мобильных приложений
Раздел 4. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СЕРВЕРНОЙ ЧАСТИ СИСТЕМЫ И МОБИЛЬНЫХ ПРИЛОЖЕНИЙ
4.1 Разработка структуры базы данных
4.2 API для работы с мобильными приложениями
4.3 Структура Android приложения
4.4 Проверка выполнения разработанных сценариев для реализованной системы
Приложение 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(Map
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();
Map
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(Map
}
}