mô phỏng dirty-check (D-07), lotNo thô trong response (D-08)
3
F-logic-1 vòng 2 (MINOR)
cũ nạp lô 2 lần, mới 1 lần: lô bị xoá đồng thời + request không đổi gì → cũ 417, mới 200 (mục 3d #6)
4
G4
Chưa kiểm Sonar
3b. Phân tích luồng sau chuyển
Chi tiết: verify/round-2/flow-analysis.md (vòng 1: verify/round-1/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
Sửa lô (không id thì tạo)
KHỚP 8 / KHÁC 4 (có chủ đích: D-01, D-02, D-03 + D-11 create, D-05) / CHỈ CÓ Ở CŨ 2 (bước nạp lại lô của F-logic-1; kiểm gói D-09) / CHỈ CÓ Ở MỚI 0
lệch spec mục 6: không
BatchWriter.java:85-90 vừa thêm flush: UPDATE chạy ngay trong translate, và flush đẩy mọi entity đang managed. BatchDirtyCheck vẫn UNVERIFIED. Code mới chỉ đọc lô một lần (F-logic-1).
3c. Nghi vấn bug / sai ở code cũ (đã GIỮ nguyên khi chuyển)
B-01 /update không có id tạo lô mới
Mức nghi ngờ: THẤP — có thể do dùng chung hàm lưu.
Ở đâu: code cũ backend:web/rest/BatchesManagementResource.java:47-52 → code mới BatchController.update → BatchManagementService.save
Code cũ đang làm gì: API "sửa" không kèm id sẽ tạo lô mới với mã LH<n+1>.
Ví dụ cụ thể:POST /update {"comId":10,"lotNo":"A1",…} (không id), công ty có 5 lô → tạo LH6, trả "Tạo mới thành công!".
Vì sao nghi là sai: tên API là sửa.
Ảnh hưởng nếu đúng là bug: client quên gửi id sẽ tạo lô trùng nội dung.
Đã xử lý khi chuyển: GIỮ. Test khoá: TC-18 (BatchManagementServiceTest$Update#updateWithoutIdCreates, BatchControllerTest$Update#createdThroughUpdate).
Nếu muốn sửa:/update bắt buộc id (400) ở controller; đổi TC-18.
Liên quan: D-03, R-08
B-02 Kiểm trùng bằng số lô chưa làm sạch; dữ liệu đã trùng sẵn thì không sửa được
Mức nghi ngờ: TRUNG BÌNH
Ở đâu: code cũ backend:service/impl/BatchesManagementServiceImpl.java:206-217 → code mới BatchManagementService.save, BatchJpaRepository.findDuplicate
Code cũ đang làm gì: so trùng bằng số lô thô; nếu đã có 2 lô trùng hệt nhau thì câu kiểm trùng lỗi.
Ví dụ cụ thể: có lô 9 A1; sửa lô 5 thành " A1" cùng ngày → không báo trùng, lưu A1 → hai lô A1. Sau đó sửa lô 5 chỉ đổi cảnh báo 30 → 60 → lỗi hệ thống 500, không sửa được lô 5 nữa.
Vì sao nghi là sai: kiểm trùng bị lách bởi khoảng trắng và tự khoá chính dữ liệu trùng.
Ảnh hưởng nếu đúng là bug: lô trùng không sửa/không thêm được, phải xử lý tay trong DB.
Đã xử lý khi chuyển: GIỮ. Test khoá: TC-08 (BatchManagementServiceTest$Update#duplicatedRowsAlready).
Nếu muốn sửa: kiểm trùng bằng số lô đã làm sạch và bỏ qua chính lô đang sửa trong câu truy vấn; đổi TC-08.
Liên quan: D-04, R-04
B-03 Tab trong số lô làm tên tìm kiếm có dấu cách
Mức nghi ngờ: THẤP
Ở đâu: code cũ backend:util/Common.java:1315-1329 → BatchNormalizedName
Code cũ đang làm gì: tên chuẩn hoá tính trên số lô thô; tab thành dấu cách khi lưu.
Ví dụ cụ thể: sửa số lô "Lô<tab>B" → normalized_name="lh5|lo b" → tìm "lob" không ra.
Vì sao nghi là sai: tên chuẩn hoá lẽ ra không có dấu cách.
Ảnh hưởng nếu đúng là bug: hiếm.
Đã xử lý khi chuyển: GIỮ. Test khoá: TC-11 (BatchManagementServiceTest$Update#tabInLotNo).
Nếu muốn sửa: tính trên giá trị đã làm sạch; đổi TC-11.
Liên quan: D-06, R-05
B-04 Sửa lô trả số lô chưa làm sạch
Mức nghi ngờ: THẤP
Ở đâu: code cũ backend:service/impl/BatchesManagementServiceImpl.java:249-258 → BatchManagementService.update
Code cũ đang làm gì: response dựng trước khi lưu nên trả số lô đúng như gửi.
Ví dụ cụ thể: sửa " A 1 " → response " A 1 ", DB "A 1".
Vì sao nghi là sai: response khác dữ liệu đã lưu.
Ảnh hưởng nếu đúng là bug: hiển thị lệch tới khi tải lại.
Đã xử lý khi chuyển: GIỮ. Test khoá: TC-16, TC-17 (BatchControllerTest$Update#updated, BatchManagementServiceTest$Update#rawLotNoWhenDirty).
Nếu muốn sửa: trả giá trị đã làm sạch; đổi TC-16, TC-17.
Liên quan: D-08, R-07
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 (input → cũ / mới)
Người cần xác nhận gì
1
spec-review
Spec qua 1 lần review (tầng B, không CRITICAL); đã sửa theo MAJOR: R-04, D-04 (F-spec-1, dữ liệu trùng sẵn)
5 file (verify/round-2/changed-files.md): BatchController (thêm /update, gom save chung), BatchWriter (flush), 3 file test. BatchWriter, BatchRelationalRepositoryTest thuộc batch/create — đã chạy lại test, xanh.
9. Đề xuất bổ sung kinh nghiệm
Đề xuất
Đưa vào đâu
Adapter bọc lỗi DB (translate) phải flush() ở nhánh sửa entity managed, nếu không lỗi UPDATE chạy lúc commit ngoài khối bọc → sai mã lỗi; test bằng mock save không bắt được
lessons.md 1b
/create và /update dùng chung save: làm unit create đủ cả hai nhánh, unit update chỉ thêm endpoint + test nhánh sửa — tiết kiệm một lần implement
lessons.md Phần 2 (làm tắt)
Nguồn của trang này
Báo cáo sai lệchmigrations/batch/update/report.mdvòng 2 · sha256 b144f2d398b5
v1 dựng 2026-11-09 14:46 · base commit đích 661efe9b8c