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 scanbarcode 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 (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 4: Kiện `Mới tạo, Đã đến nơi` (kiện không có bảng kê đang vận chuyển/ đang giao).
          • ==> 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ả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`. 
      • =====> 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ê 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.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 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 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/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` để 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_type` = `'LAC_TUYEN'`
    * `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'`