Skip to main content

Xử lý hàng lạc tuyến

  1. Vấn đề

    • Trong quá trình vận chuyển, tài xế lấy nhầm kiện hàng. Ví dụ: hàng ở bưu cục A khai thác sang B nhưng tài xế lại chở đến bưc cục C (hàng lạc tuyến)
    • Hiện tại, khi hàng đến bưu cục/kho đích, hệ thống không cho phép nhập kho các kiện hàng này, gây khó khăn cho việc xử lý.
    • Bổ sung tính năng cho phép Tài xế/User tại Bưu cục/điểm đích được phép scan và nhập kho các kiện hàng lạc tuyến để tiếp tục quy trình xử lý (trả về hoặc chuyển tiếp).
  2. Ý tưởng và giải pháp

    • Tại Màn hình nhập kho hàng đến theo kiện, cho phép Tài xế scan mã bill/kiện bị lạc tuyến và xử lý nhập kho cho kiện bị lạc tuyến.
    • Flow ý tưởng:
      image.png
    • Khi scan barcode xảy ra các tình huống sau:
      • - Kiện không tồn tại trên hệ thống => Báo lỗi
      • - Kiện đang ở đúng Bưu cục/Văn phòng hiện tại nhập kho => Cảnh báo và không xử lý.
      • - Kiện không ở Bưu cục/Văn phòng hiện tại nhập kho:
        • => Trường hợp 1: Kiện Đã hoàn tất giao.
          • ==> Báo lỗi.
        • => Trường hợp 2: Kiện Đang giao.
          • ==> Hủy kiện trong bảng kê giao (note Hủy do hàng lạc tuyến). Tạo bảng kê vận chuyển mới (note Bảng kê lạc tuyến) -> lấy văn phòng xuất là văn phòng hiện tại của kiện, văn phòng đến là văn phòng hiện tại nhập kho -> Đánh trạng thái bảng kê là Đã đến nơi.
        • => Trường hợp 3: Kiện Đang vận chuyển.
          • ==> Hủy kiện trong bảng kê vận chuyển (note Hủy do hàng lạc tuyến). Tạo bảng kê vận chuyển mới... (xử lý tương tự TH2).
        • => Trường hợp 4: Kiện Mới tạo, Đã đến nơi (kiện tự do).
          • ==> Tạo bảng kê vận chuyển mới (note Bảng kê lạc tuyến)...
        • => Trường hợp 5: Kiện Đang bị Sự cố.
          • ==> Giữ nguyên trạng thái sự cố. Tạo bảng kê vận chuyển mới để ghi nhận hành trình...
      • Lưu ý: Khi tạo bảng kê vận chuyển mới cho các kiện lạc tuyến --> Nhóm (Gộp) các kiện lạc tuyến có cùng văn phòng hiện tại vào cùng 1 bảng kê.
  3. Giải pháp kỹ thuật

    • Schema
      • express_bill (thông tin đơn hàng)
      • express_bill_package (thông tin kiện hàng)
      • express_transport (Bảng kê vận chuyển)
      • express_transport_detail_bill_package (Chi tiết bảng kê vận chuyển)
      • express_transport_session (Bảng kê NCC giao hàng)
      • express_voucher_business_statement (Bảng kê nội bộ giao hàng)
      • express_voucher_business_statement_detail (Chi tiết bảng kê nội bộ giao hàng)
    • Màn hình xử lý: Nhập kho hàng đến theo kiện

      image.png

      Component File Path Mô tả
      View Template cod/bill-confirm/views/scripts/confirm/bill-package-confirm-arrival.phtml Giao diện nhập kho
      Frontend JS cod/bill-confirm/views/assets/confirm/bill-package-confirm-arrival.js Xử lý client-side scan và hiển thị UI
      Backend Controller cod/bill-confirm/controllers/ConfirmController.php Action: ajaxScanBarcodeBillPackageConfirmArrivalAction
      Xử lý logic scan barcode

 

FLOW SCAN BARCODE

image.png


Xử lý kiện có bảng kê đang giao hàng

1: Tìm bảng kê đang giao hàng của kiện

 Sử dụng UNION ALL để quét dữ liệu từ 2 nguồn (Giao nội bộ & Giao qua đối tác/Ncc).
  • Nguồn 1: Bảng kê nội bộ giao hàng
    • Bảng: express_bill_assign_detail
    • Điều kiện:
      • bill_assign_detail_bill_package_id = {ID Kiện}
      • bill_assign_detail_status IN ('ASSIGNED', 'SHIPPER_CONFIRMED')
    • Join: express_voucher_business_statement_detail
      • On: data_id = bill_assign_detail_id AND type = 'DEFAULT'
  • Nguồn 2: Bảng kê phiên giao hàng (Session)
    • Bảng: express_transport_detail_bill_package
    • Điều kiện:
      • detail_bill_package_bill_package_id = {ID Kiện}
      • detail_bill_package_is_delete IS NULL
    • Join: express_transport_session
      • On: session_id = transport_session_id AND session_type = 'DELIVERY'

2: Hủy kiện trong bảng kê đang giao

LOGIC HỦY GIAO HÀNG NỘI BỘ
  • Bước 1: Hủy điều phối shipper

  • Hành động: UPDATE
  • Bảng: express_bill_assign_detail
  • Giá trị (SET):
    • bill_assign_detail_status = 'DELETED'
    • bill_assign_detail_note = 'Hủy do lạc tuyến'
    • bill_assign_detail_cancel_time = NOW()
    • bill_assign_detail_cancel_account_id = tài khoản login
    • bill_assign_detail_is_delete_misrouted_cargo = 1
  • Bước 2: Hủy chi tiết bảng kê giao

  • Hành đồng: UPDATE
  • Bảng: express_voucher_business_statement_detail
  • Giá trị (SET):
    • voucher_business_statement_detail_status = 'FAILED'
    • voucher_business_statement_detail_note = 'Hủy do hàng lạc tuyến'
    • voucher_business_statement_detail_delete_account_id = tài khoản login
    • voucher_business_statement_detail_delete_time = NOW()
  • Bước 3: Kiểm tra & cập nhật bảng kê giao

  • Điều kiện: COUNT(express_voucher_business_statement_detail) == 0
  • Hành động: UPDATE
  • Bảng: express_voucher_business_statement
  • Giá trị (SET):
    • voucher_business_statement_delete_time = NOW()
    • voucher_business_statement_delete_account_id = tài khoản login
    • voucher_business_statement_delete_reason = 'Hủy do lạc tuyến'
LOGIC HỦY GIAO HÀNG NCC
  • Bước 1: Hủy chi tiết bảng kê 

  • Hành động: UPDATE
  • Bảng: express_transport_detail_bill_package
  • Giá trị (SET):
    • detail_bill_package_is_delete = 1
    • detail_bill_package_is_delete_misrouted_cargo = 1
  • Bước 2: Cập nhật kê NCC giao hàng

  • Hành động: UPDATE
  • Bảng: express_transport_session
  • Điều kiện: COUNT(express_transport_detail_bill_package) + detail_bill_package_transport_session_id is NULL == 0
  • Giá trị (SET):
    • session_is_delete_misrouted_cargo = 1
    • session_note = 'Hủy do lạc tuyến'

3: Tạo bảng kê vận chuyển mới (Lạc tuyến)

  • Hành động: INSERT
  • Bảng: express_transport
  • Giá trị (VALUES):
    • confirm_from_agency_id = {VP hiện tại của kiện}
    • confirm_to_agency_id = {VP đang nhập kho - VP Login}
    • confirm_status = 'CONFIRM_ARRIVAL'
    • confirm_is_misrouted_cargo = 1 (cờ nhận biết bảng kê lạc tuyến)
    • confirm_note = "Bảng kê lạc tuyến"
    • confirm_arrival_time = NOW()
    • các filed khác tự thêm vào khi code....

4: Thêm kiện vào bảng kê mới

  • Hành động: INSERT
  • Bảng: express_transport_detail_bill_package
  • Giá trị (VALUES):
    • detail_transport_id = {ID bảng kê vừa tạo ở mục 3}
    • detail_bill_package_transport_id = {bill_package_id}
    • detail_bill_package_arrival_time = NOW()
    • detail_bill_package_arrival_time_system = NOW()
    • detail_bill_package_arrival_note = 'Nhập kho lạc tuyến từ VP...'
    • detail_bill_package_arrival_account_id = tài khoản login

5: Cập nhật trạng thái kiện

  • Hành động: UPDATE
  • Bảng: express_bill_package
  • Giá trị (SET):
    • current_agency_id = {VP đang nhập kho - VP Login}
    • bill_package_status = 'CONFIRM_ARRIVAL'

Xử lý kiện có bảng kê đang giao hàng

1. Tìm bảng kê đang vận chuyển

Query để tìm kiếm trong bảng express_transport
  • Nguồn: Bảng kê khai thác nội bộ/Ncc
    • Bảng express_transport_detail_bill_package
    • Điều kiện:
      • detail_bill_package_bill_package_id = {ID Kiện}
      • detail_bill_package_is_delete IS NULL
    • Join: express_transport
      • On: confirm_go_bill_id = detail_bill_package_transport_id AND confirm_status'CONFIRM_GO'

2. Hủy kiện trong bảng kê đang vận chuyển

Loigc hủy kiện trong bảng kê vận chuyển nội bộ
  • Bước 1: Hủy chi tiết bảng kê

  • Hành độngUPDATE
  • Bảng: express_transport_detail_bill_package
  • Giá trị (SET):
    • detail_bill_package_is_delete = 1
    • detail_bill_package_is_delete_misrouted_cargo = 1
  • Bước 2: Cập nhật bảng kê vận chuyển

  • Hành động: UPDATE
  • Bảng: express_transport
  • Điều kiện: COUNT(express_transport_detail_bill_package) == 0 AND detail_bill_package_is_delete is NULL
  • Giá trị (SET):
    • confirm_status = 'TROUBLE'
Loigc hủy kiện trong bảng kê vận khai thác
  • Bước 1: Hủy chi tiết bảng kê

  • Hành độngUPDATE
  • Bảng: express_transport_detail_bill_package
  • Giá trị (SET):
    • detail_bill_package_is_delete = 1
    • detail_bill_package_is_delete_misrouted_cargo = 1
  • Bước 2: Cập nhật bảng kê NCC vận chuyển

  • Hành động: UPDATE
  • Bảng: express_transport_session
  • Điều kiện: COUNT(express_transport_detail_bill_package) == 0 AND detail_bill_package_is_delete is NULL
  • Giá trị (SET):
    • session_is_delete_misrouted_cargo = 1
    • session_note = 'Hủy do lạc tuyến'

4: Thêm kiện vào bảng kê mới

  • Hành động: INSERT
  • Bảng: express_transport_detail_bill_package
  • Giá trị (VALUES):
    • detail_transport_id = {ID bảng kê vừa tạo ở mục 3}
    • detail_bill_package_transport_id = {bill_package_id}
    • detail_bill_package_arrival_time = NOW()
    • detail_bill_package_arrival_time_system = NOW()
    • detail_bill_package_arrival_note = 'Nhập kho lạc tuyến từ VP...'
    • detail_bill_package_arrival_account_id = tài khoản login

5: Cập nhật trạng thái kiện

  • Hành động: UPDATE
  • Bảng: express_bill_package
  • Giá trị (SET):
    • bill_package_current_agency_id= {VP đang nhập kho - VP Login}
    • bill_package_status = 'CONFIRM_ARRIVAL'

LƯU Ý ĐẶC BIỆT CHO KIỆN CÓ TRẠNG THÁI SỰ CỐ (bill_package_status = TROUBLE)
GIỮ NGUYÊN TRẠNG THÁI SỰ CỐ CỦA BILL VÀ KIỆN.

LƯU Ý KHI TẠO BẢNG KÊ VẬN CHUYỂN MỚI.
LUÔN NHÓM CÁC KIỆN CÓ CÙNG VĂN PHÒNG HIỆN TẠI VÀO CÙNG 1 BẢNG KÊ VẬN CHUYỂN.
bill_package_current_agency_id - VP hiện tại