Xử lý hàng lạc tuyến
-
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).
- 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)
-
Ý 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:
- 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
- ==> 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à
- => 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ươngkê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).
- ==> 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ớ
- => Trường hợp 4: Kiện
`Mới tạ,o,oĐã đến nơ(kiệni`ikhô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`...
- ==> 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ố
của bill, kiện.. Tạo bảng kê vận chuyển mới(noteđểBảngghikê lạc tuyến) -> lấy vănhậnphò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 -> Đáhànhtrạng thái bảng kê là `Đã đến nơi`trình..
.
- ==> Giữ nguyên trạng thái sự cố
- => Trường hợp 1: Kiện
=====>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).
- 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.
-
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:
{my_domain}/cod/bill-confirm/confirm/bill-package-confirm-arrivalFile PathMô tả View ComponentTemplateFile PathMô tảView Templatecod/bill-confirm/views/scripts/confirm/bill-package-confirm-arrival.phtmlGiao diện nhập kho Frontend JScod/bill-confirm/views/assets/confirm/bill-package-confirm-arrival.jsXử lý client-side scan và hiển thị UIBackend Controllercod/bill-confirm/controllers/ConfirmController.phpAction:ajaxScanBarcodeBillPackageConfirmArrivalAction.ajaxScanBarcodeBillPackageConfirmArrivalActionxửXử lý logic scan barcodeFlow 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 CASECASE 0: Kiện Không Tồn TạiMụcChi tiếtĐiều kiệnKhông tìm thấy trong `express_bill_package`Hành độngBáo lỗiResponseSTATUS: ERROR`, `message: "Kiện không tồn tại trên hệ thống"UIPhát âm thanh lỗi `/audio/no.mp3`, hiển thị toast errorCASE 1: Kiện Đang Ở Đúng VP Hiện TạiMụcChi tiếtĐiều kiệnbill_package_current_agency_id = VP đang loginHành độngCảnh báoResponseSTATUS: WARNING`, `message: "Kiện đã ở văn phòng hiện tại"UIPhát âm thanh cảnh báo, hiển thị toast warning với thông tin kiệnCASE 2: Kiện Đã Hoàn Tất GiaoMụcChi tiếtĐiều kiệnbill_package_status = 'COMPLETED'Hành độngBáo lỗiResponseSTATUS: ERROR`, `message: "Kiện đã hoàn tất giao, không thể nhập kho"UIPhát âm thanh lỗi `/audio/no.mp3`, hiển thị toast errorCASE 3: Kiện có trạng thái Đang Giao.MụcChi tiếtĐiều kiệnbill_package_status = 'CONFIRM_GO_DELIVERY'Hành độngXem bên dướiUIPhát âm thanh thành công `/audio/yes.mp3`, hiển thị toast susscec
--
LogicXử
tìmlý kiện có bảng kê đang giao hàngcủ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àngBảng:express_bill_assign_detailĐiều kiện:bill_assign_detail_statusIN ('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để quét dữ liệu từ 2 nguồn (Giao nội bộ & Giao qua đối tác/phiên).ALL`ALL*- 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=**{ID Kiện}**bill_assign_detail_statusIN (`'ASSIGNED',``'SHIPPER_CONFIRMED')`
* `bill_assign_detail_bill_package_id`* `bill_assign_detail_status`* - Join:
**`express_voucher_business_statement_detail`express_voucher_business_statement_detail- On:
*On:* `data_id`data_id=`bill_assign_detail_id`bill_assign_detail_idAND`type`type=`'DEFAULT'`
**** - On:
* *** **** - Bảng:
- 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=**{ID Kiện}**detail_bill_package_is_deleteIS NULL
* `detail_bill_package_bill_package_id`* `detail_bill_package_is_delete`* - Join:
**`express_transport_session`express_transport_session- On:
*On:* `session_id`session_id=`transport_session_id`transport_session_idAND`session_type`session_type=`'DELIVERY'`
*---### - On:
* *** **** - Bảng:
**
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=**1**
1detail_bill_package_note=`"Hủy do hàng lạc tuyến"`detail_bill_package_update_time=`NOW()`
* `detail_bill_package_is_delete`* `detail_bill_package_note`* `detail_bill_package_update_time`---###
****
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=**{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=`'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=`NOW()`
* `confirm_from_agency_id`* `confirm_to_agency_id`* `confirm_status`* `confirm_type`* `confirm_arrival_time`---###
****
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=**{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..."`
* `detail_transport_id`* `detail_bill_package_id`* `detail_bill_package_arrival_time`* `detail_bill_package_note`---###
****
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=**{VP đang nhập kho - VP Login}**bill_package_status=`'CONFIRM_ARRIVAL'`
* `current_agency_id`* `bill_package_status`
****Back to top
Component
- Schema
