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

      image.png

    • Khi scanbarcodescan 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`giao.
          • ==> Báo lỗi.
        • => Trường hợp 2: Kiện `Đang giao`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`i.
        • => Trường hợp 3: Kiện `Đang vận chuyển`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ớii... (notexử Bảlý tương tự 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`TH2).
        • => Trường hợp 4: Kiện `Mới tạo,o, Đã đến nơi`i (kiện khôngtự có bảng kê đang vận chuyển/ đang giao)do).
          • ==> 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 5: Kiện `Đang bị Sự cố`.
          • ==> Giữ nguyên trạng thái sự cố của bill, kiện.. Tạo bảng kê vận chuyển mới (noteđể Bảngghi kê lạc tuyến) -> lấy vănhậ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ì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(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ê vận chuyển (đánh dấu là bảng kê lạc tuyến)

        .
  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ý
      • Màn hình: Nhập kho hàng đến theo kiện {my_domain}/cod/bill-confirm/confirm/bill-package-confirm-arrival

        image.pngimage.png



          • Component File Path
            Mô tả
            View
            Component
            Template
            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.
            ajaxScanBarcodeBillPackageConfirmArrivalAction
            xửXử lý logic scan barcode


          • Flow Scan Barcode hiện tại:

            [User Scan Barcode]

                    ↓

            [Frontend: onScanBarcode()]

                    ↓

            [AJAX Request: POST_SCAN_BARCODE]

                    ↓

            [Backend: ajaxScanBarcodeBillPackageConfirmArrivalAction()]

                    ↓

            [Query: Tìm kiện trong bảng kê có VP đến = VP đang login]

                    ↓

            [Return: Danh sách kiện + thông tin bảng kê]

                    ↓

            [Frontend: Hiển thị kiện vào bảng nhập kho]

            Chỉnh sửa chức năng **scan barcode** để xử lý trường hợp **hàng lạc tuyến** Logic Hiện Tại (Controller):
          • - Tìm kiện trong bảng kê có `confirm_to_agency_id = VP của user đang đăng nhập`
            - Lọc chi tiết bảng kê chưa xác nhận hàng đến (`detail_bill_package_arrival_time IS NULL`)
            - Lọc kiện chưa huỷ, chưa xoá
            - Loại bảng kê: `AXIS` (Khai thác NCC), `INTERNAL` (Khái thác nội bộ).

             

            • Định nghĩa Hàng Lạc Tuyến.
              - Kiện **không có bảng kê vận chuyển** đến VP nhập kho, HOẶC 
              - Kiện đang thuộc bảng kê vận chuyển đến VP khác.
            • Xử Lý khi Scan Barcode + Nhập kho hàng đến.
            • ĐẶC TẢ CHI TIẾT TỪNG CASE
              CASE 0: Kiện Không Tồn Tại
              Mục
              Chi tiết
              Điều kiện
              Không tìm thấy trong `express_bill_package`
              Hành động
              Báo lỗi
              Response
              STATUS: ERROR`, `message: "Kiện không tồn tại trên hệ thống"
              UI
              Phát âm thanh lỗi `/audio/no.mp3`, hiển thị toast error
              CASE 1: Kiện Đang Ở Đúng VP Hiện Tại
              Mục
              Chi tiết
              Điều kiện
              bill_package_current_agency_id = VP đang login
              Hành động
              Cảnh báo
              Response
              STATUS: WARNING`, `message: "
              Kiện đã ở văn phòng hiện tại
              "
              UI
              Phát âm thanh cảnh báo, hiển thị toast warning với thông tin kiện
              CASE 2: Kiện Đã Hoàn Tất Giao
              Mục
              Chi tiết
              Điều kiện
              bill_package_status = 'COMPLETED'
              Hành động
              Báo lỗi
              Response
              STATUS: ERROR`, `message: "Kiện đã hoàn tất giao, không thể nhập kho"
              UI
              Phát âm thanh lỗi `/audio/no.mp3`, hiển thị toast error
              CASE 3: Kiện có trạng thái Đang Giao.
              Mục
              Chi tiết
              Điều kiện
              bill_package_status = 'CONFIRM_GO_DELIVERY'
              Hành động
              Xem bên dưới


              UI
              Phát âm thanh thành công `/audio/yes.mp3`, hiển thị toast susscec
          • --


            Logic

            Xử tìmlý kiện có 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/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_status IN ('ASSIGNED', 'SHIPPER_CONFIRMED')
            • Nguồn 2: Bảng kê phiên giao hàng (Session)
              • Bảng: express_transport_detail_bill_package
              • Điều kiện: session_type = 'DELIVERY'

             

            ###

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

            **
            Chiến lược:** Sử dụng `UNION ALL`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**
              ng
                * **
              • Bảng:** `express_bill_assign_detail`
                express_bill_assign_detail
              •   * **
              • Điều kiện:**
                  * `bill_assign_detail_bill_package_id`
                • bill_assign_detail_bill_package_id = **{ID Kiện}**
                •       * `bill_assign_detail_status`
                • bill_assign_detail_status IN (`'ASSIGNED'`, `'SHIPPER_CONFIRMED'`)
                *
              • **
              • Join:** `express_voucher_business_statement_detail`
                express_voucher_business_statement_detail
                  *
                • On: *On:* `data_id`data_id = `bill_assign_detail_id`bill_assign_detail_id AND `type`type = `'DEFAULT'`

                • *

                **
            • Nguồn 2: Bảng kê phiên giao hàng (Session)**
                * **
              • Bảng:** `express_transport_detail_bill_package`
                express_transport_detail_bill_package
              •   * **
              • Điều kiện:**
                  * `detail_bill_package_bill_package_id`
                • detail_bill_package_bill_package_id = **{ID Kiện}**
                •       * `detail_bill_package_is_delete`
                • detail_bill_package_is_delete IS NULL
                *
              • **
              • Join:** `express_transport_session`
                express_transport_session
                  *
                • On: *On:* `session_id`session_id = `transport_session_id`transport_session_id AND `session_type`session_type = `'DELIVERY'`

                • ---

                ###


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

            **
            • Hành động:** `UPDATE`
              *UPDATE
            • **
            • Bảng:** `express_transport_detail_bill_package`
              *express_transport_detail_bill_package
            • **
            • Giá trị (SET):**
                * `detail_bill_package_is_delete`
              • detail_bill_package_is_delete = **1**
                1
              •   * `detail_bill_package_note`
              • detail_bill_package_note = `"Hủy do hàng lạc tuyến"`
              •   * `detail_bill_package_update_time`
              • 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`
              *INSERT
            • **
            • Bảng:** `express_transport`
              *express_transport
            • **
            • Giá trị (VALUES):**
                * `confirm_from_agency_id`
              • confirm_from_agency_id = **{VP hiện tại của kiện}**
              •   * `confirm_to_agency_id`
              • confirm_to_agency_id = **{VP đang nhập kho - VP Login}**
              •   * `confirm_status`
              • confirm_status = `'CONFIRM_ARRIVAL'`
              •   * `confirm_type`
              • confirm_is_misrouted_cargo = `'LAC_TUYEN'`
                1 (cờ *nhận `confirm_note`biết bảng kê lạc tuyến)
              • confirm_note = `"Bảng kê lạc tuyến"`
              •   * `confirm_arrival_time`
              • confirm_arrival_time = `NOW()`

              • ---

              ###


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

            **
            • Hành động:** `INSERT`
              *INSERT
            • **
            • Bảng:** `express_transport_detail_bill_package`
              *express_transport_detail_bill_package
            • **
            • Giá trị (VALUES):**
                * `detail_transport_id`
              • detail_transport_id = **{ID bảng kê vừa tạo ở Step 3}**
              •   * `detail_bill_package_id`
              • detail_bill_package_id = **{bill_package_id}**
              •   * `detail_bill_package_arrival_time`
              • detail_bill_package_arrival_time = `NOW()`
              •   * `detail_bill_package_note`
              • 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`
              *UPDATE
            • **
            • Bảng:** `express_bill_package`
              *express_bill_package
            • **
            • Giá trị (SET):**
                * `current_agency_id`
              • current_agency_id = **{VP đang nhập kho - VP Login}**
              •   * `bill_package_status`
              • bill_package_status = `'CONFIRM_ARRIVAL'`