Thiết kế ứng dụng trên taxi

Một phần của tài liệu HỆ THỐNG ĐIỀU PHỐI VÀ QUẢN LÝ TAXI ỨNG DỤNG NỀN TẢNG ANDROID (Trang 40 - 47)

3.3.3.1 Tổng quan ứng dụng trên taxi a) Sơ đồ Class tổng quát

Dưới đây là sơ đồ thiết kế lớp của ứng dụng viết cho taxi. Ứng dụng này được xây dựng trên nền tảng Android 1.6.

class Taxi_class diagram ConnectionLayer BusinessLogicLayer GUI Layer TabActivity TabManage r - myMainController: int - myUIhandler: Handler + onCreate(Bundle) : void + setupUI() : void Activity Me ssage Scre e n - messageListAdapter: CheckboxAdapter - myMainController: int - myUIHandler: Handler + composeMessage() : void + deleteMessage() : void + onCreate(Bundle) : void + sendEmergencyMessage() : void + sendNeedT axiMessage() : void + sendT rafficMessage() : void + viewMessage() : void

Activity

mapC hange StatusScre e n Handle r + handleMessage(Message) : void Activity MapScre e n - locationManager: LocationManager - map: MapView - myMainController: int - myUIHandler: Handler + changeGuestInfo() : void + changeT axiInfo() : void + onCreate(Bundle) : void + search() : void + sendEmergencyMessage() : void + showGuestInfo() : void + showMapOption() : void + showStatePanel() : void + updateMap() : void + updateT raffic(Geopoint) : void

Activity InfoScre e n - myMainController: int - myUIHandler: Handler + onCreate(Bundle) : void + sendEmergencyMessage() : void + updateT axiRoundInfo() : void

Activity Login - driverID: String - myMainController: int - password: String - taxiID: String

+ bindData(String, String, String) : void + login() : void MainC ontrolle r - comet: Comet - isAlive: boolean - myApp: MyApplication - myLocationListener: MyLocationListener - myPassenger: Passenger - mySecondPassenger: Passenger + NOT IFICAT ION_UPDAT E_GUEST : int {readOnly} + NOT IFICAT ION_UPDAT E_MAP: int {readOnly} + NOT IFICAT ION_UPDAT E_T AXI: int {readOnly} - passengerList: Array<Passenger> - taxi: T axi - trafficList: ArrayList

+ addT rafficPoint(GPS) : void + analysisNotificationFromServer(String) : void + catchAnonymousPassenger() : void + catchPassenger() : void + FinishServingPassenger() : void + initAll() : void + logIn(String, String) : void + logOut(String, String, String) : void + notifyUpateUIMessage(Handler, int) : void + receiveNewDispatch(String) : void - receiveNewMessage(String) : void - receiveNewMessage(String) : void + removeT rafficPoint(GPS) : void + sendMessage(String) : void + sendT axiInfo(String, int, Geolocation, float) : void + startComet() : void

+ startT hread() : void + stopT hread() : void

Taxi - driverID: String - driverInfo: String - gePosition: GeoPoint - location: String - messageList: Array<String> - myPassenger: Passenger - passengerList: ArrayList - sessionID: int - status: int - taxiID: String - taxiInfo: String - taxiRoundList: ArrayList - totalWorkT ime: int

+ gets() : Data + set() : void Passe nge r - destination: String - geoPosition: GeoPoint - isServing: boolean - mobile: String - name: String - position: String + gets() : void + sets() : void MyLocationListe ne r + onLocationChanged(Location) : void

Se rvice Re que stor

- NAME_SPACE: String - URL: String

+ askForNotification(String) : void + getDispatchData(String) : String + getMessageFromServer(String) : void + requestData(String, SoapSerializationEnvelope) : Object + sendAnynomousGuestCaught(String, GPS) : String + sendGuestCaught(String, GPS) : void + sendGuestFinishedServing(String, GPS, String, float, float) : void + sendGuestGone(String) : void

+ sendLogin(String, String, String) : String + sendLogout(String, String) : void + sendMessage(String, String) : void + sendT axiInfo(string, String, String, String) : void

Activity

Passe nge rScre e n

- myMainController: int - myUIHandler: int - passengerListAdapter: Adapter + choosePassenger(int) : void + onCreate() : void + showPassengerInfo(Int) : void LocationManage r Application - myMainController: MainController + showDialog(String) : void Se ndThre ad + run() : void C ome t + doInBackGround() : void + onPostExecute() : void + onPreExecute() : void

Hình 22: Sơ đồ class ứng dụng dành cho taxi b)Mô tả sơ đồ

Ứng dụng cho thiết bị Android được xây dựng theo kiến trúc 3-layers, các class trong ứng dụng được xếp vào từng layer riêng.

GUI layer

Đây là layer chứa các class được xây dựng thành các activity của ứng dụng, tức là chứa toàn bộ giao diện của ứng dụng. Các activity này được liên kết với nhau thành 4 tab thông qua bộ quản lý tab là TabManager, mỗi tab là một activity thực hiện một chức năng khác nhau.

 TabManager: Quản lý việc khởi tạo, chuyển đổi các tab của ứng dụng.

 MapScreen: Activity bản đồ, chứa toàn bộ các class dùng để hiển thị taxi, khách hàng, các điểm tắc đường, cũng như cung cấp toàn bộ các phương thức điều khiển bản đồ Google map

 LocationManager: Bộ quản lý địa điểm, lắng nghe những thay đổi về tọa độ GPS và báo cho hệ thống biết.

 Handler: Bộ xử lý các thay đổi giao diện.

 Application: Bộ quản lý các activity của ứng dụng, đây là class đại diện cho ứng dụng.

 PassengerScreen: Activity quản lý danh sách khách hàng cần đăng kí đi đón.  InfoScreen: Activity quản lý các thông tin về taxi, lái xe, cuốc khách.

 MessageScreen: Activity quản lý các thông tin về liên lạc giữa taxi và tổng đài.

BusinessLogic layer

Là khối quản lý và xử lý nghiệp vụ bên dưới hệ thống. Khối này có một class chính là MainController làm nhiệm vụ xử lý toàn bộ các thông tin đến từ các activity và trả kết quả về cho các activity, hoặc nhận các thông tin từ khối connection để xử lý. Ngoài ra còn các class khác để hỗ trợ cho việc lưu trữ và xử lý thông tin, đó là class Taxi để lưu thông tin về taxi, class Passenger để lưu thông tin khách hàng.

 SendThread: Thread chạy liên tục để gửi dữ liệu lên server. Gồm dữ liệu về vị trí xe, tốc độ, trạng thái xe.

 MyLocationListener: Đây là class chuyên dùng để lắng nghe các phản hồi từ LocationManager, mỗi khi có một sự thay đổi về vị trí GPS, locatioListener sẽ thông báo cho MainController để thực hiện xử lý.

Connection layer

Đây là khối làm nhiệm vụ liên kết trực tiếp với server để gửi và nhận các thông tin. Khối này có các class sau:

 ServiceRequestor: Là class được xây dựng với các phương thức sử dụng cho webservice, mỗi phương thức có nhiệm vụ chuẩn bị các thông tin cần thiết như : URL, variable, METHOD_NAME để gọi đúng service bên phía server.  Comet: Là class được xây dựng chuyên dùng cho việc nhận các notification từ server chuyển về. Nó hoạt động như một tác vụ không đồng bộ dựa trên nguyên lý Comet được trình bày ở trên. Mỗi khi có notification từ server trả về, class này mới thực hiện nhiệm vụ thông báo cho MainController biết.

3.3.3.2 Tab chức năng bản đồ

Theo sơ đồ thiết kế được trình bày trong mục sơ đồ class tổng quát, khối GUI có chứa class MapScreen, đây là một trong số 4 tab của ứng dụng, nó chứa các chức năng liên quan đến bản đồ. Chức năng của tab này sẽ như sau:

 Hiển thị bản đồ cùng những vị trí của khách hàng và vị trí của lái xe. Bản đồ có thể phóng to thu nhỏ, có thể dịch chuyển theo nhu cầu của người lái xe.  Hiển thị thông tin của khách hàng: Khách tên là gì, ở đâu, điện thoại...  Hiển thị thông tin lái xe: Đang làm gì, ở đâu.

 Các chức năng khác như bắt khách dọc đường, báo hiệu...

a) Bản đồ Google map

Đây là chức năng đầu tiên của tab bản đồ. Chức năng này được xây dựng gồm các mục như sau:

 Tích hợp bản đồ Google map, có đủ chức năng như kích cỡ, xê dịch...  Tích hợp địa điểm của lái xe. Địa điểm này thay đổi theo GPS của lái xe.  Tích hợp địa điểm của khách hàng, địa điểm này cố định.

 MainController: Chứa thành phần locationListener để lắng nghe các thông báo về vị trí của taxi, lưu lại vị trí đó trong đối tượng của class Taxi. Đồng thời thông báo cho mapView để cập nhật lại bản đồ.

 MapScreen: Có chứa 2 thành phần là mapView và mapOverlay. mapView là đối tượng của lớp MapView, chứa các phương thức điều khiển bản đồ. mapOverlay dùng để vẽ các đối tượng đồ họa lên bản đồ. Khi có thông tin cập nhật địa điểm từ MainController, mapView sẽ yêu cầu mapOverlay vẽ lại các thông tin đó.

Sơ đồ sequence chức năng cập nhật thông tin địa điểm:

Hình 23: Sơ đồ sequence chức năng cập nhật thông tin địa điểm Mô tả sơ đồ:

Theo sơ đồ trên ta thấy, để thực hiện việc hiển thị thông tin. Thì phải thực hiện các bước sau:

 Vòng lặp thứ nhất: Đây là vòng lặp của locationManager, mỗi khi có thông tin mới về GPS, vòng lặp được thực hiện:

o Bước 1: LocationManager nhận thông tin GPS từ bộ thu GPS, chuyển nó thành dạng thông tin phù hợp và thông báo cho locationListener.

o Bước 2: locationListener sẽ thông báo cho mainController các thông tin về địa điểm.

o Bước 3: Cập nhật vị trí taxi, nhắc nhở mapScreen tự cập nhật lại bản đồ của nó.

 Vòng lặp thứ 2 là của sendThread, vòng lặp này được lặp lại theo một chu kì thời gian xác định từ trước:

b) Hệ quản lý thông tin khách hàng Sơ đồ

Dưới đây là sơ đồ sequence chức năng quản lý khách hàng của ứng dụng dành cho taxi. Sơ đồ này cho thấy hai quá trình diễn ra chính liên quan đến việc quản lý thông tin khách hàng:

Hình 24: Sơ đồ sequence chức năng quản lý khách hàng Mô tả sơ đồ

 Chức năng thứ nhất: Xem thông tin khách hàng lưu trong đối tượng Passenger. Các thông tin này gồm có tên khách hàng, số điện thoại khách hàng, vị trí khách hàng, số người đi.

 Chức năng thứ hai: Quản lý trạng thái khách hàng. Có hai trường hợp:

o Khi lái xe đang đi đón khách, nếu đến nơi không có khách, hoặc đã đón được khách thì đều bấm một nút thông báo cho tổng đài biết. Khi đó thông tin về khách hàng hoặc bị xóa đi hoặc sẽ được chuyển sang trạng thái khách đang được phục vụ.

o Khi lái xe đang chở khách, nếu chở đến nơi, lái xe phải cập nhật thông tin về hóa đơn thanh toán cho khách đó, để cập nhật lên tổng đài. Trong cả hai chức năng trên, trạng thái taxi đều được cập nhật lại.

c) Hệ quản lý trạng thái xe

Tương tự như việc quản lý khách hàng, đây là sơ đồ sequence chức năng cập nhật trạng thái xe. Taxi có 5 trạng thái như sau:

 Trạng thái Free: Xe đang không có việc làm. 

 Trạng thái Move: Xe đang đi đón khách.

 Trạng thái Idle: Xe đang không nhận tín hiệu, lái xe bận...  Trạng thái Offline: Thiết bị đã log out.

3.3.3.3 Tab chức năng điều phối

Điều phối xe là một chức năng rất cần thiết trong hệ thống quản lý và điều phối taxi. Chức năng này được miêu tả như sau:

 Bước 1: Khách hàng gửi yêu cầu đi xe đến cho tổng đài. Tổng đài xác nhận.  Bước 2: Tổng đài tìm xe đi đón khách cho phù hợp, tiêu chí chọn có thể là xe

gần khách hàng nhất hoặc xe rảnh rỗi nhất. Sau đó, gửi thông tin khách hàng đến cho từng taxi phù hợp.

 Bước 3: Lái xe nhận thông tin khách hàng, bấm nút xin khách. Tổng đài sẽ chọn ra một lái xe duy nhất và xác nhận đó là xe đi đón khách.

Về mặt thiết kế, quá trình điều phối xe này có 2 bước.

 Bước 1: Phía server chọn tìm xe, tự động gửi thông tin thông báo có khách mới đến cho taxi. Bước này do server thực hiện.

 Bước 2: Phía taxi, taxi nhận thông báo từ server, sau đó nó xin thông tin khách hàng của server. Lái xe sau đó sẽ chọn khách và xin đi đón.

Mô tả sơ đồ:

 Bước 1: Server gửi notification cho ServiceRequestor, rồi tại Comet, notification này được phân tích và trả kết quả về trong hàm doInBackGround().

 Bước 2: Comet kết thúc một đợt gọi notification bằng cách thực hiện hàm onPostExecute(), sau đó, yêu cầu MainController phân tích thông điệp vừa nhận được.

 Bước 3: MainController căn cứ vào thông điệp vừa nhận được để xem xét xem đó có phải là tin nhắn điều phối không, nếu đúng, nó sẽ tự cập nhật thêm vị khách mới vào danh sách các khách cần đi đón, bằng cách gọi hàm updatePassengerList().

 Sau bước này, comet tiếp tục được thực hiện nhờ MainController tạo mới đối tượng comet.

 Bước 4: Lái xe xin khách, thông tin về yêu cầu xin đi đón khách sẽ được đưa lên cho server. Tại server này, tổng đài sẽ chọn ra xe xin khách sớm nhất và gửi trả kết quả cho lái xe.

 Bước 5: Nếu lái xe được chấp nhận, MainController sẽ tự cập nhật thông tin của khách hàng cần đi đón.

3.3.3.4 Tab chức năng thông tin

Đây là chức năng hiển thị các thông tin của lái xe, của xe và của khách hàng lên màn hình. Mục đích của chức năng này là để giúp đỡ cho lái xe trong việc quan sát các thông tin về khách hàng trong ngày, giảm thiểu việc ghi chép ra giấy, đồng thời quan sát số lượng cuốc khách để lên kế hoạch đi bắt khách thêm hay không.

Các thông tin sau đây sẽ được ghi vào, có 3 mục cần hiển thị thông tin như sau:  Thông tin về lái xe: Họ và tên, mã số quản lý, mã bằng lái xe, thông tin khác.  Thông tin về xe: Mã xe, biển số xe, loại xe, đặc điểm xe, tình trạng xe, thông

tin khác.

 Thông tin cuốc khách: Tổng số cuốc khách, thông tin từng cuốc ( thời gian bắt đầu, thời gian kết thúc, điểm bắt khách, điểm trả khách, số tiền, số km)

3.3.3.5 Tab chức năng liên lạc

Đây là chức năng giúp cho lái xe và tổng đài liên lạc được với nhau. Hệ thống được xây dựng với 2 nhóm liên lạc chính.

a) Nhóm chức năng liên lạc cơ bản

Nhóm này gồm các chức năng :

 Lái xe đọc các thông báo từ tổng đài, gồm có các thông báo được viết bằng ngôn ngữ tiếng Việt. Hoặc đọc các tin nhắn thông thường của tổng đài.

b) Nhóm chức năng liên lạc cảnh báo

Nhóm này cung cấp các nút bấm nhanh để lái xe có thể thông báo kịp thời các tình huống cho tổng đài, hoặc nhận kịp thời các thông tin từ tổng đài gửi về. Trong đó gồm có:

 Thông tin về tắc đường: Lái xe được hỗ trợ nút bấm để thông báo điểm tắc đường cho toàn bộ các xe trong hệ thống và cho tổng đài. Các điểm tắc đường này sẽ được đánh dấu đỏ trên bản đồ. Theo chiều ngược lại, tổng đài có thể đặt và xóa các điểm tắc đường này đi, cả 2 đều được đồng bộ nhau.  Thông tin SOS: Lái xe gặp chuyện bất ngờ và phải xin hỗ trợ, đây là chức

năng thông báo trực tiếp địa điểm GPS của lái xe gặp nạn cho tổng đài.  Thông tin về khách hàng vẫy xe: Khi lái xe đang đi chở khách, nếu lái xe gặp

một khách hàng đang vẫy bên đường, họ có thể bấm nút thông báo cho tổng đài để tổng đài điều thêm xe đến đón.

3.3.3.6 Các sơ đồ thiết kế khác

Các sơ đồ thiết kế khác được lưu trong mục phụ lục 3 gồm có:  Sơ đồ sequence chức năng đăng nhập hệ thống

Một phần của tài liệu HỆ THỐNG ĐIỀU PHỐI VÀ QUẢN LÝ TAXI ỨNG DỤNG NỀN TẢNG ANDROID (Trang 40 - 47)

Tải bản đầy đủ (PDF)

(80 trang)