Tuesday, August 25, 2009


 


 


 


 


 


 

Yêu cầu hệ thống:

  • Flatform: Windows Server 2003
  • Programming language: PHP 5.x
  • Database: MySQL 5.x


 

  1. Báo cáo chi tiết thiết bị theo ngày

Ý nghĩa: Thống kê lộ trình của thiết bị (phương tiện vận tải) trong 1 khoảng thời gian nhiều ngày


 

Mẫu báo cáo:


 

Thiết bị: 52X-1234 Từ 14/05/2009 đến 22/05/2009 Xem

Ngày

Dừng

Di chuyển

Quãng đường

(km)

Số lần

dừng

Vượt

tốc độ

14/05/2009

17:19

6:41

247.2

8

0

15/05/2009

17:42

6:18

239.0

11

0

16/05/2009

20:21

3:39

135.6

5

0

      

17/05/2009

20:43

3:17

120.2

8

0

21/05/2009

24:00

0:00

0.0

0

0

Tổng

765:12

170:48

6,139.7

277

0

Giải thích:

  • Thiết bị: là combobox chọn danh sách thiết bị
  • Ngày: ngày tháng theo định dạng dd/MM/yyyy
  • Từ: xem từ ngày nào (chọn)
  • Đến: xem đến ngày nào (chọn)
  • Xem: click để xem báo cáo (chỉ có tác dụng khi đã chọn 1 Thiết bị)
  • Dừng: tổng thời gian thiết bị dừng (HH:mm)
  • Di chuyển: tổng thời gian thiết bị di chuyển (HH:mm)
  • Quãng đường: tổng quãng đường đã đi được
  • Số lần dừng: số lần dừng lại
  • Vượt tốc độ: số lần vượt quy định giới hạn tốc độ (ví dụ: > 120km/h)
  • Thống kê tổng cộng

Chi tiết:

  • Dữ liệu đầu vào:
    • Username
    • Mã thiết bị (deviceid)
    • Từ ngày, Đến ngày (trktime)
    • Các bảng: tbluser, tbldevice, tbldata_x (x = [1,100], datagroup), tblconfig
  • Dữ liệu đầu ra: nội dung báo cáo
  • Khi mới load trang:
    • Tạo danh sách chọn Thiết bị:
      • Giá trị hiển thị: tên thiết bị (devicename)
      • Giá trị tính toán, lưu trữ: mã thiết bị (deviceid)
      • Điều kiện lọc danh sách: username = username của người dùng đang sử dụng
      • Mặc sẽ hiển thị giá trị "-- Chọn thiết bị --"
    • Hiển thị hộp Từ ngày, Đến ngày:
      • Đến ngày: hiển thị ngày hiện tại
      • Từ ngày: hiển thị ngày cách 1 tuần (ví dụ: Đến ngày = 15/08/2009 => Từ ngày = 09/08/2009)
    • Hiển thị nội dung báo cáo theo mẫu sau:

Ngày

Dừng

Di chuyển

Quãng đường

(km)

Số lần

dừng

Vượt

tốc độ

Không có dữ liệu

Tổng

00:00

00:00

0

0

0

  • Khi click Xem để xem báo cáo:
    • Chỉ cho xem báo cáo khi: đã chọn thiết bị (Giá trị khác "-- Chọn thiết bị --", chọn ngày hợp lệ
    • Yêu cầu xử lý:
      • Đọc dữ liệu bảng tbluser để lấy thông tin x (datagroup = [1, 100])
        • Nếu x hợp lệ (1-100): x = "_x", ví dụ: "_12"
        • Nếu x không hợp lệ: x = "" (chuỗi rỗng)
      • Đọc dữ liệu tính toán từ bảng tbldata theo các điều kiện sau:
        • Username = username của người dùng đang sử dụng
        • Mã thiết bị (deviceid) = Mã thiết bị chọn
        • Ngày (trktime) trong khoảng Từ ngày, Đến ngày
      • Xử lý dữ liệu đọc được từ bảng tbldata:
        • Dữ liệu đọc được thường là ~1000 record (ở đây gọi 1 record là điểm) / ngày, sắp xếp tăng dần theo ngày (trktime)
        • Xử lý của từng ngày:
          • Tính tổng thời gian dừng:
            • Cách xác định điểm cho là dừng: dựa vào field devstatus = 1
            • Thời gian dừng xác định bằng field stoptime (phút)
            • Tổng thời gian dừng sẽ bằng giá trị của field stoptime cuối cùng trong 1 dãy những điểm dừng liên tiếp (hoặc bằng giá trị của điểm dừng đó nếu chỉ có 1 điểm duy nhất). Ví dụ:

Trktime

Stoptime

2009-08-15 00:00:00

1

2009-08-15 00:01:00

2

2009-08-15 00:05:00

6

  • Thời gian dừng = 6 (phút)
  • Tổng thời gian dừng = ∑[Thời gian dừng] - [Thời gian dừng (stoptime) của điểm đầu tiên]
  • Tính tổng thời gian chạy (tương tự tổng thời gian dừng, thay các thông tin devstatus = 1 => devstatus = 0, stoptime = movetime)
  • Tính tổng quãng đường:
    • Dựa vào field distance (km)
    • Chỉ cộng quãng đường của những điểm di chuyển (devstatus = 0) và những điểm mới dừng (có devstatus = 1 và điểm trước đó (cũ hơn) có devstatus = 0)
    • Tổng quãng đường = ∑[distance]
  • Tính số lần dừng:
    • 1 lần dừng được xác định bằng điểm có devstatus = 1 và điểm trước đó (cũ hơn) có devstatus = 0
    • Ví dụ:

Trktime

Devstatus

2009-08-15 00:00:00

0

2009-08-15 00:01:00

0

2009-08-15 00:05:00

1

2009-08-15 00:06:00

1

2009-08-15 00:07:00

0

2009-08-15 00:08:00

0

2009-08-15 00:09:00

1

  • Số lần dừng = 2
  • Tính số lần vượt tốc độ:
    • Lấy thông tin vận tốc tối đa của 1 thiết bị trong bảng tblconfig, điều kiện lọc là username và deviceid. Vận tốc tối đa dựa là giá trị field maxspeed, mặc định, nếu không có thông số này thì lấy giá trị 100 (km/h)
    • 1 lần vượt tốc độ được xác định bằng điểm có vận tốc (speed) > maxspeed và điểm trước đó có vận tốc (speed) <= maxspeed
    • Ví dụ (maxspeed = 60):

Trktime

speed

2009-08-15 00:00:00

15

2009-08-15 00:01:00

30

2009-08-15 00:05:00

60

2009-08-15 00:06:00

62

2009-08-15 00:07:00

65

2009-08-15 00:08:00

55

2009-08-15 00:09:00

50

  • Số lần vượt tốc độ = 1


 

  1. Báo cáo tổng hợp địa điểm

Ý nghĩa:

  • Địa điểm là gì? Địa điểm là 1 vùng (hình vuông hoặc hình tròn) do người dùng vẽ trên bản đồ để dánh dấu vị trí cũng như quản lý phương tiện vận tải. Ở đây (trong database), địa điểm được xác định bằng field mapid (mapid > 0 tức là có địa điểm)
  • Báo cáo tổng hợp địa điểm giúp người dùng theo dõi ở mỗi địa điểm lưu lượng phương tiện vào ra


 

Mẫu báo cáo:


 

Từ 13/06/2009 đến 14/06/2009 Xem


 

Kho số 1

Thiết bị

Vào (lần)

Ra (lần)

Ở lại (HH:mm)

Xe 1

2

3

12:06

Xe 2

3

2

24:00


 

Kho số 2

Thiết bị

Vào (lần)

Ra (lần)

Ở lại (HH:mm)

Xe 3

12

6

22:06

Xe 2

2

4

10:00


 

Giải thích:

  • Mỗi địa điểm sẽ hiển thị thành 1 bảng thông tin như trên
  • Từ: xem từ ngày nào (chọn)
  • Đến: xem đến ngày nào (chọn)
  • Kho số 1, Kho số 2, …: tên địa điểm mà người dùng đã tạo
  • Vào: số lần thiết bị đi vào địa điểm đó
  • Ra: số lần thiết bị đi ra địa điểm đó
  • Ở lại: tổng thời gian thiết bị ở lại (di chuyển hoặc dừng) trong khu vực địa điểm đó


 

Chi tiết:

  • Dữ liệu đầu vào:
    • Từ ngày, Đến ngày
    • Username
    • Các bảng: tblmaps, tbldata_x(x = [1, 100]), tbldevice, tbluser
  • Dữ liệu đầu ra: nội dung báo cáo
  • Mặc định khi mới load trang, sẽ hiển thị thông tin trong ngày như sau:
    • Từ: ngày hiện tại
    • Đến: ngày hiện tại:
    • Nội dung báo cáo: hiển thị nội dung báo cáo của ngày hiện tại (chi tiết mô tả bên dưới)
  • Yêu cầu xử lý báo cáo:
    • Đọc dữ liệu bảng tblmaps để lấy danh sách các địa điểm mà người dùng đã tạo. Điều kiện lọc: username = username của người dùng đang sử dụng
    • Xử lý ở mỗi địa điểm:
      • Lấy danh sách phương tiện có dữ liệu (có deviceid) tồn tại trong bảng tbldata theo điều kiện Ngày (trktime) trong khoảng Từ ngày, Đến ngày
      • Mỗi phương tiện sẽ lấy dữ liệu từ bảng tbldata_x (x lấy field datagroup từ bảng tbluser tương ứng với mã thiết bị deviceid) để xử lý tính toán địa điểm. Chi tiết như sau:
        • Tính số lần thiết bị đi vào:

          Điều kiện nhận biết thiết bị đi vào địa điểm:

          • Có mapid = mapid của địa điểm đang xét
          • Có mapid trước đó khác mapid đang xét

          Mỗi điểm như vậy tính là 1 lần đi vào địa điểm

        • Tính số lần thiết bị đi ra:

          Điều kiện nhận biết thiết bị đi ra khỏi địa điểm

          • Có mapid khác mapid của địa điểm đang xét
          • Có mapid trước đó là mapid của địa điểm đang xét

          Mỗi điểm như vậy tính là 1 lần đi ra khỏi địa điểm

        • Tính tổng thời gian thiết bị hoạt động trong khu vực địa điểm:
          • Tính tổng thời gian từ lúc bắt đầu vào địa điểm cho đến trước khi ra khỏi địa điểm
          • Điều kiện:
            • Mapid = mapid đang xét

      Lưu ý: trong tất cả các trường hợp đều không xét những điểm có devstatus = 2 (tức là thiết bị bị mất tín hiệu)


 

  1. Báo cáo chi tiết địa điểm – xe:

Ý nghĩa:

  • Cho biết tại 1 địa điểm đó, 1 xe đã ra vào những lúc nào
  • Từ báo cáo Tổng hợp địa điểm trên, click vào tên xe ở mỗi địa điểm để xem báo cáo chi tiết này


 

Mẫu báo cáo:


 

Báo cáo chi tiết địa điểm theo xe Xe 01

Tại Kho số 1 từ 16/06/2009 đến 17/06/2009


 

Ngày

Giờ

Hoạt động

16/06/2009

13:00

Vào

16/06/2009

16:30

Ra

16/06/2009

19:00

Vào

17/06/2009

07:12

Ra


 

Giải thích:


 

Chi tiết:

  • Dữ liệu đầu vào:
    • Phương tiện
    • Từ ngày đến ngày
    • Địa điểm
    • Các bảng: tblmaps, tbldata_x (x=[1, 100]), tbldevice, tbluser (để lấy x)
  • Dữ liệu đầu ra: nội dung báo cáo
  • Yêu cầu xử lý:
    • Đọc dữ liệu từ bảng tbldata theo các điều kiện đầu vào
    • Kiểm tra và hiển thị các dòng như sau:
      • Phương tiện đi vào địa điểm là 1 dòng
      • Phương tiện ra khỏi địa điểm là 1 dòng
      • Điều kiện xác định phương tiện vào hoặc ra địa điểm giống như báo cáo số 3 – Báo cáo tổng hợp địa điểm


 

  1. Báo cáo điểm dừng:

Ý nghĩa:

Báo cáo điểm dừng giúp người quản lý kiểm tra những thời điểm và địa điểm dừng của phương tiện trong 1 khoảng thời gian chọn trước


 

Mẫu báo cáo:


 

Báo cáo điểm dừng


 

Thiết bị 122t Từ 15/06/2009 đến 22/06/2009 Xem

Lúc

Địa điểm

Thời gian

15/06/2009 14:32

Nhà kho số 6

00:10

20/06/2009 08:22

Nhà kho số 4

00:15

20/06/2009 10:34

Nhà kho số 8

25:00


 

Giải thích:

  • Thiết bị: combobox chọn danh sách thiết bị
  • Từ, đến: chọn ngày xem báo cáo từ ngày nào đến ngày nào
  • Xem: button, click để xem báo cáo
  • Lúc: thời điểm phương tiện bắt đầu dừng (định dạng dd/MM/yyyy HH:mm)
  • Địa điểm: là nơi xe đừng
  • Thời gian: tổng thời gian xe đã dừng tại địa điểm đó


 


 

Chi tiết:

  • Dữ liệu đầu vào:
    • Thiết bị
    • Thời gian
    • Các bảng: tbldevice (danh sách thiết bị), tblmaps (địa điểm), tbldata_x (x=[1, 100]), tbluser (để lấy thông số x – field datagroup)
  • Dữ liệu đầu ra: nội dung báo cáo
  • Mặc định khi mới load trang sẽ hiển thị các thông tin sau:
    • Thiết bị: Tạo danh sách thiết bị dựa vào bảng tbldevice (điều kiện lọc: field username), hiển thị giá trị "--Chọn thiết bị--" tức chưa chọn thiết bị nào
    • Từ, đến: ngày hiện tại
    • Nội dung báo cáo: không có dữ liệu

Lúc

Địa điểm

Thời gian

Không có dữ liệu


 

  • Xử lý khi chọn thiết bị, thời gian, sau đó click nút Xem:
    • Đọc dữ liệu từ bảng tbldata_x theo điều kiện đầu vào đã chọn, dữ liệu sắp xếp tăng dần theo thời gian (trktime)
    • Nếu không có dữ liệu thì hiển thị như lúc mới load trang lần đầu
    • Nếu có dữ liệu thì bắt đầu xử lý tính toán:
      • Xác định thời điểm phương tiện dừng dựa vào field devstatus = 1 khi gặp lần đầu
      • Xác định địa điểm phương tiện dừng dựa vào field mapid:
        • Nếu mapid > 0:
          • Lấy tên địa điểm tương ứng trong bảng tblmaps nếu tồn tại mapid này
          • Lấy địa điểm là giá trị của field address tương ứng trong bảng tbldata_x
        • Nếu mapid = 0: Lấy địa điểm là giá trị của field address tương ứng trong bảng tbldata_x
        • Tính tổng thời gian phương tiện dừng:
          • Dựa vào field stoptime tương ứng với vị trí cuối cùng có devstatus = 1
          • Định dạng HH:mm (tổng giờ:phút)
        • Ví dụ: Ta có bảng dữ liệu như sau:
          • Bảng tbldata_x

Trktime

Devstatus

Stoptime

Mapid

Address

2009-08-15 00:00:00

0

0

0

Cộng Hòa

2009-08-15 00:01:00

0

0

0

Cộng Hòa

2009-08-15 00:05:00

1

1

3

Cộng Hòa

2009-08-15 00:06:00

1

2

3

Cộng Hòa

2009-08-15 00:07:00

0

0

0

Cộng Hòa

2009-08-15 00:08:00

0

0

0

Cộng Hòa

2009-08-15 00:09:00

1

1

0

Cộng Hòa

  • Bảng tblmaps

Mapid

mapname

1

Nhà kho số 1

3

Nhà kho số 2


 

Thì ta sẽ có 2 record là điểm dừng:

  • 15/08/2009 00:05, dừng 2 phút, tại Nhà kho số 2

15/08/2009 00:09, dừng 1 phút, tại Cộng Hòa