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

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

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

Chiến lược: Sử dụng UNION ALL để quét dữ liệu từ 2 nguồn (Giao nội bộ & Giao qua đối tác/phiên).
  • 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'

STEP 2: Hủy kiện trong bảng kê giao hiện tại

  • Hành động: UPDATE
  • Bảng: express_transport_detail_bill_package
  • Giá trị (SET):
    • detail_bill_package_is_delete = 1
    • detail_bill_package_note = "Hủy do hàng lạc tuyến"
    • detail_bill_package_update_time = NOW()

STEP 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()

STEP 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 ở Step 3}
    • detail_bill_package_id = {bill_package_id}
    • detail_bill_package_arrival_time = NOW()
    • detail_bill_package_note = "Nhập kho lạc tuyến từ VP..."

STEP 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'