Báo cáo chuyển đổi warehouse-service

rsinoutward · rsinoutward/by-id · api

GET/api/page/rs-inoutward/by-id/{id}

Vòng
2
Cổng G1–G6
PENDING_SONAR
Bước
sonar-check
Nhánh đích
feat/thongpd/migrate-get-rs

Báo cáo sai lệch — rsinoutward/by-id — vòng 2

0. Kết luận nhanh

  • Điều kiện đạt: G1 ✅ G2 ✅ G3 ✅ G4 — G5 ✅ G6 ✅ → CHỜ KIỂM SONAR
  • Trạng thái: SẴN SÀNG CHO NGƯỜI XEM
  • Tầng rủi ro: C (chỉ đọc) → người đọc spec + báo cáo
  • Số quy tắc: 15 · PASS 9 · DEVIATION có chủ đích 4 (R-01, R-02, R-13, R-14) · DEVIATION KHÔNG chủ đích 0 · UNVERIFIED 2 (R-03/R-05/R-10 SQL thật; R-15 replica)
  • Coverage thấp nhất: F-01 99,7% dòng / 96,8% nhánh (vòng 1; vòng 2 xem verify/round-2/coverage.md)
  • Finding logic: CRITICAL 0 · MAJOR 1 đã sửa (F-logic-1 v1) · MAJOR UNSURE 1 (F-logic-2 v1) · MINOR 3
  • Nghi vấn bug code cũ (mục 3c): 3 (CAO 0) · Quyết định tự chốt cần xác nhận (mục 3d): 12
  • Chạy bằng: /mig-auto (spec do spec-reviewer kiểm 1 lần — tầng C) · Số vòng: 2 / lần sửa 1/3

1. Điều kiện đạt

Mã Mục tiêu Kết quả Bằng chứng
G1 mvnw verify ✅ verify/round-2/build.md (659 test)
G2 Test khớp test-plan ✅ verify/round-2/tc-map.md (39/39), oracle.md
G3 Coverage mỗi luồng ✅ verify/round-2/coverage.md
G4 Sonar CHỜ NGƯỜI sonar-ide.md
G5 0 CRITICAL/MAJOR CONFIRMED ✅ verify/round-2/review-logic.md (1 MINOR); vòng 1 verification.md
G6 Không lách cổng ✅ verify/round-2/gates.md (44 file, có trong impl-notes.md)

Không chặn nhưng cần người: Integration test CHƯA CHẠY · Golden master CHƯA CHẠY (GM-01)

2. Ma trận truy vết

Quy tắc Code mới Test Kết luận
R-01 RsInoutwardQueryController#getOneById TC-01, TC-02 DEVIATION có chủ đích (D-02)
R-02 RsInoutwardDetailQueryService TC-03, TC-04 DEVIATION có chủ đích (D-01)
R-03 RsInoutwardDetailRelationalRepository TC-05..07 UNVERIFIED (SQL thật)
R-04 RsInoutwardPaymentSourceRelationalAdapter TC-08..11 PASS
R-05 RsInoutwardDetailRelationalRepository TC-12, TC-13 UNVERIFIED (SQL thật)
R-06 service TC-14, TC-15 PASS
R-07 LegacyAmount TC-16 PASS
R-08 service + SerialValidationDataReader TC-17..19 PASS
R-09 BatchQueryService TC-20, TC-21 PASS (F-logic-2 UNSURE)
R-10 RsInoutwardBatchOnHandAssembler, BatchOnHandRelationalRepository TC-22..30 UNVERIFIED (bảng tạm, in () thật)
R-11 assembler TC-31..33 PASS
R-12 DTO + RsInoutwardDetailWebMapper TC-34..36 PASS; minDate UNVERIFIED (D-07)
R-13 adapter bọc lỗi TC-37 DEVIATION có chủ đích (D-03)
R-14 — TC-38 DEVIATION có chủ đích (D-12)
R-15 @Transactional(readOnly = true) TC-39 UNVERIFIED (D-11)

3. Người cần xem

# Vị trí Vì sao cần người xem
1 …/infrastructure/relational/inventory/adapter/BatchOnHandRelationalRepository.java Bảng tạm #tmp_wh_filter qua JDBC thô; luôn DROP kể cả khi INSERT lỗi (cũ để sót — F-logic-3 v1, MINOR); chỉ kiểm bằng mock
2 …/infrastructure/relational/batch/adapter/BatchRelationalRepository.java F-logic-2 (MAJOR, UNSURE): native IN với list có null
3 File dùng chung bị chạm: BatchQueryService, BatchRepository, InventoryQueryService (constructor đổi), CompanyConfigPort + adapter, RsInoutwardQueryController (unit get-all-transactions), WarehouseTransferServiceTest K-28: đã chạy lại test unit trước (431 test xanh)
4 Adapter inventory/batch/config dùng RsInoutwardErrorCode của context rsinoutward (F-logic-4 v1, MINOR) Phụ thuộc chéo context — cân nhắc mã lỗi chung

3b. Phân tích luồng sau chuyển

Chi tiết: verify/round-1/flow-analysis.md, verify/round-2/flow-analysis.md

Luồng Tên Số bước KHỚP / KHÁC / CHỈ CÓ Ở CŨ / CHỈ CÓ Ở MỚI Lệch luồng đã duyệt (spec mục 6) Điểm dev cần chú ý
F-01 Kiểm công ty, đọc phiếu + nguồn tiền + dòng không đổi so với vòng 1 (KHỚP 6 / KHÁC 4 / CHỈ CÓ Ở CŨ 0 / CHỈ CÓ Ở MỚI 0) không Nhánh kho null khi không có dòng không chạy tới được (F-logic-1)
F-02 IMEI/serial không đổi so với vòng 1 (KHỚP 2 / KHÁC 2 / CHỈ CÓ Ở CŨ 0 / CHỈ CÓ Ở MỚI 0) không Thứ tự IMEI theo kết quả truy vấn $in của Mongo (D-09)
F-03 Lô và tồn theo lô KHỚP 8 / KHÁC 1 / CHỈ CÓ Ở CŨ 0 / CHỈ CÓ Ở MỚI 0 (KHÁC: lỗi tường minh khi ppu rỗng, có chủ đích theo D-04, D-03) không RsInoutwardBatchOnHandAssembler.java:75-79: không đổi thành bỏ qua truy vấn; RsInoutwardDetailQueryService.java:140-141: batchIds có null (F-logic-2 vòng 1 còn mở)

3c. Nghi vấn bug / sai ở code cũ (đã GIỮ nguyên khi chuyển)

B-01 Phiếu không còn dòng hiển thị → "Lỗi hệ thống"

  • Mức nghi ngờ: TRUNG BÌNH
  • Ở đâu: cũ easyposbackend1:…/service/impl/RsInoutWardManagementServiceImpl.java:705,720-724, easyposbase:…/repositories/BaseInventoryRepository.java:112-116 → mới RsInoutwardBatchOnHandAssembler.buildBatchOnHandMap
  • Code cũ đang làm gì: dòng chi tiết bị loại hết (SP/ĐVT công ty khác, kho đã xoá cứng) nhưng vẫn tra tồn với danh sách rỗng → câu SQL in () lỗi.
  • Ví dụ cụ thể: phiếu NK005 có 1 dòng ở kho đã xoá → mở chi tiết → cũ 417, mới 500 "Lỗi hệ thống". Lẽ ra: trả phiếu với detail: [].
  • Đã xử lý khi chuyển: GIỮ (mới ném lỗi tường minh). Test khoá: TC-15, TC-21, TC-29.
  • Nếu muốn sửa: bỏ bước tra tồn khi rỗng, đổi TC-15/21/29.
  • Liên quan: D-04, R-10

B-02 Kho của phiếu lấy theo dòng chi tiết cuối

  • Mức nghi ngờ: THẤP
  • Ở đâu: cũ RsInoutWardManagementServiceImpl.java:680-682 → mới RsInoutwardDetailQueryService
  • Ví dụ cụ thể: dòng 1 kho K1, dòng 2 kho K2 → phiếu hiện kho K2 (thứ tự dòng không cố định — D-08).
  • Đã xử lý khi chuyển: GIỮ. Test khoá: TC-14.
  • Liên quan: D-05, R-06

B-03 Danh sách tồn theo lô dùng chung giữa các dòng cùng SP + kho

  • Mức nghi ngờ: THẤP
  • Ở đâu: cũ RsInoutWardManagementServiceImpl.java:743-753 → mới RsInoutwardBatchOnHandAssembler.attachToLines
  • Ví dụ cụ thể: d1 (SP A, kho K1, lô L1, SL 5), d2 (SP A, kho K1, lô L1, SL 3) → cả hai dòng thấy L1.quantity = 3.000000.
  • Đã xử lý khi chuyển: GIỮ. Test khoá: TC-32, TC-33.
  • Liên quan: D-06, R-11

3d. Quyết định AI tự chốt và thay đổi tự động (cần người xác nhận)

# Nguồn AI đã làm gì Khác code cũ ở điểm nào Người cần xác nhận gì
1 F-logic-2 v1 (MAJOR, UNSURE) Không sửa Nếu Hibernate 6 + MSSQL lỗi khi bind null trong b.id IN (:batchIds): phiếu mọi dòng không có lô → mới 500, cũ 200 Chạy GM-01 với phiếu không có lô; nếu lỗi → lọc null trước khi truy vấn (kết quả không đổi)
2 auto-changes #1 Sửa test-plan TC-15: không dòng → lỗi EXCEPTION_ERROR Không khác cũ (cũ lỗi in ()) Xác nhận
3 spec qua 1 lần review (tầng C) Các mục sửa theo MAJOR: R-10 (minDate có giá trị, bảng tạm, over_stock), D-07, mục 5 — Đọc kỹ R-10, D-07
4 D-01 Chỉ giữ kiểm "token có công ty" manager không công ty → cũ RS_INOUT_WARD_ID_NOT_FOUND / mới COMPANY_NOT_EXISTS_CODE; token cũ sau đổi mật khẩu → cũ 500 / mới trả phiếu Đồng ý
5 D-02 Body theo starter id=abc → cũ 400 rỗng / mới 400 body starter Đồng ý
6 D-03 417 → 500 giữ mã lỗi hệ thống 417 / 500 Đồng ý
7 D-07 Giữ truy vấn ngày khởi tạo; minDate JSON ISO UTC Định dạng minDate chưa chạy thử Xác nhận định dạng + múi giờ JVM cũ
8 D-08 Giữ không ORDER BY — Xác nhận
9 D-09 Gom truy vấn IMEI một lần Thứ tự IMEI theo kết quả $in Đồng ý
10 D-10, D-11 Giờ tường GMT+7; đọc replica — Xác nhận múi giờ JVM cũ; ADR-0201 nói read-by-id → primary
11 D-12, D-13 Không kiểm gói; text theo locale starter công ty hết hạn → cũ 400 / mới 200; Accept-Language: en → text tiếng Anh Chốt chung với get-all-transactions
12 F-logic-3 v1 (MINOR) Bảng tạm luôn được xoá kể cả khi INSERT lỗi Chỉ khác nhánh lỗi Đồng ý (chưa có D-xx — sau bước C không sửa decisions)
13 F-logic-1 v2 (MINOR) Không sửa Spec R-06 "không dòng → kho null" không chạy tới được (R-10 lỗi trước) Sửa câu chữ spec R-06 khi duyệt

4. Finding đã xác nhận

  • F-logic-1 (vòng 1, MAJOR, parity) — list ppu rỗng dựa vào DB báo lỗi. Xác minh: CONFIRMED (verify/round-1/verification.md). Đã sửa ở fix 1 → ĐÃ HẾT ở vòng 2.
  • MINOR (không xác minh): F-logic-3, F-logic-4 (vòng 1), F-logic-1 (vòng 2) — xem mục 3, 3d.

5. Finding bị loại

Finding Lý do loại
— —

6. Xử lý của người

Vấn đề Cổng Chỉ thị
Kiểm Sonar (Analyze VCS Changed Files trong ws1) G4

7. So với vòng trước

Vấn đề Vòng trước Vòng này
F-logic-1 v1 (MAJOR) MỚI ĐÃ HẾT
F-logic-2 v1 (UNSURE) MỚI CÒN
F-logic-1 v2 (MINOR, spec R-06) — MỚI

8. Thay đổi trong repo đích

44 file (verify/round-2/changed-files.md), chỉ trong src/main, src/test; không sửa pom.xml. Gồm file mới của unit và sửa file dùng chung (mục 3 #3).

9. Đề xuất bổ sung kinh nghiệm

Đề xuất Đưa vào đâu
Khi thấy "khoá tra lệch" ở code cũ, kiểm thứ tự tham số constructor tại chỗ gọi — hai lần đảo có thể triệt tiêu (BaseBatchInitDateResult) lessons.md (1a)
Native query có IN (:list): Hibernate 6 xử lý list rỗng / phần tử null khác Hibernate 5 — đừng dựa vào DB để tái tạo lỗi in () cũ, ném tường minh; lọc null nếu kết quả không đổi lessons.md (1b, bổ sung K-04)
Test-plan không nên có case "giả định nhánh không lỗi" khi spec đã chốt nhánh đó lỗi (TC-15) lessons.md (1c)

Nguồn của trang này

  • Báo cáo sai lệch migrations/rsinoutward/by-id/report.md vòng 2 · sha256 576fea7823e0

v1 dựng 2026-11-09 14:46 · base commit đích 661efe9b8c