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

Phân tích luồng sau chuyển — rsinoutward/by-id — vòng 2 (thu hẹp)

logic-reviewer viết dựa trên code đã implement (worktree C:/Projects/warehouse-service-wt/ws1), đối chiếu với code cũ. Viết tắt: backend: = easyposbackend1:src/main/java/vn/softdreams/easypos/, base: = easyposbase:src/main/java/sds/ep/baseservice/; code mới tính từ src/main/java/com/softdreams/easypos/warehouse/.

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: xem verify/round-1/flow-analysis.md

(Code main của F-01 không đổi. Chỉ test thêm dòng giả. Phiếu không có dòng giờ dừng ở F-03 bước 3, xem bên dưới.)

F-02 IMEI/serial — không đổi so với vòng 1: xem verify/round-1/flow-analysis.md

F-03 Lô và tồn theo lô

  • Điểm vào: cũ backend:service/impl/RsInoutWardManagementServiceImpl.java:705,713-755 → mới application/rsinoutward/RsInoutwardDetailQueryService.java:85-90
  • Quy tắc: R-09, R-10, R-11

Sơ đồ luồng mới (theo code thực tế)

sequenceDiagram
    participant S as RsInoutwardDetailQueryService
    participant B as BatchQueryService
    participant A as RsInoutwardBatchOnHandAssembler
    participant CP as CompanyConfigPort
    participant I as InventoryQueryService → BatchOnHandRelationalRepository
    S->>B: findLots → findLotsInCompany(comId, batchIds kể cả null) — không có dòng thì bỏ qua
    S->>A: buildBatchOnHandMap(comId, ppuIds)
    A->>CP: checkOverStock → findOverStockRawValue, parseInt (lỗi → EXCEPTION_ERROR)
    A->>I: findWarehouseOnHands(comId, ppuIds) — rỗng vẫn chạy; lỗi SQL → EXCEPTION_ERROR
    alt ppuIds rỗng
        A-->>S: SystemException EXCEPTION_ERROR (D-04)
    end
    A->>B: findLotsByIds(batchId khác null) — nhóm 1000, không lọc công ty
    A->>I: findBatchInitMinDates — N2 → #tmp_wh_filter → MIN(ri.date)
    A->>A: item theo khoá ppu-kho (onHand != null, lô có), sortItems
    S->>A: attachToLines(itemsByKey, rows) — quantity gán vào list dùng chung
    S->>S: LineLookups.lotOf ghi đè lotNo/expDate/mfgDate

Đối chiếu từng bước

# Luồng cũ Luồng mới Kết luận
1 createBatchMap backend:service/impl/BillManagementServiceImpl.java:11921-11930 (rỗng → bỏ qua; JPQL) findLots RsInoutwardDetailQueryService.java:135-145 (native IN) KHỚP khi rỗng; danh sách có null: F-logic-2 vòng 1 (UNSURE, report 3d)
2 over_stock parseInt không trim base:services/impl/BaseInventoryServiceImpl.java:1101-1105 checkOverStock RsInoutwardBatchOnHandAssembler.java:148-158 KHỚP
3 getWarehouseOnHand(comId, ppuIds) BaseInventoryServiceImpl.java:1107; rỗng → in () lỗi → 417 findWarehouseOnHands RsInoutwardBatchOnHandAssembler.java:75; rỗng → ném EXCEPTION_ERROR tường minh :76-79 (sau truy vấn) KHÁC có chủ đích (D-04 GIỮ, D-03 417→500). Sửa F-logic-1 vòng 1
4 createBatchMapOptimal nhóm 1000 :1112 loadLots :160-169 KHỚP
5 createBatchMinDateMap :1161-1177, khoá đảo hai lần → ppu-batch-warehouse loadMinDates :171-185, minDateKey(ppu, batch, warehouse) KHỚP (D-07)
6 Item khi onHand != null và batchesMap.containsKey, không loại tồn ≤ 0 :1115-1155 :89-97 KHỚP
7 sortBatchOnHand :1179-1200 sortItems :188-207 KHỚP
8 Map batchId-detailId → getQuantity(), list dùng chung RsInoutWardManagementServiceImpl.java:727-753 attachToLines :110-132, assignQuantities :134-145 KHỚP (D-06)
9 Lô tìm thấy ghi đè lotNo/expDate/mfgDate :735-741 LineLookups.lotOf RsInoutwardDetailQueryService.java:168-174 KHỚP

Dữ liệu và side effect

Bảng / topic / cache Cũ Mới Ghi chú
config đọc over_stock như cũ đọc cả khi không có dòng, như cũ
inventory LEFT JOIN batches_detail đọc, com_id, ppu_id IN; rỗng → lỗi đọc, rỗng vẫn chạy rồi ném lỗi D-04
batches com_id + id IN (dòng); id IN không lọc công ty (tồn) như cũ
business_type, rs_inoutward(_detail), #tmp_wh_filter đọc, bảng tạm như cũ; không chạy khi ppuIds rỗng F-logic-3 vòng 1 (nhánh lỗi)
Ghi không không

Transaction, khoá, idempotency, tenant

  • Ranh giới transaction: cũ readOnly + @ReadQuery → mới readOnly ở getOneById. Lỗi D-04 ném ra trong transaction chỉ đọc nên không có gì phải rollback.
  • Khoá / cập nhật nguyên tử: không có.
  • Idempotency, event: không có.
  • Lọc comId: inventory, config, business_type, rs_inoutward lọc theo công ty. Khi nạp tồn theo lô, batches không lọc công ty, giống code cũ.

Lệch so với luồng mới đã duyệt (spec mục 6)

Không.

Dev cần chú ý khi review

Vị trí Vì sao
RsInoutwardBatchOnHandAssembler.java:75-79 Vẫn chạy truy vấn tồn với danh sách rỗng rồi mới ném lỗi (D-04). Đừng đổi thành bỏ qua truy vấn hoặc trả rỗng: làm vậy là đổi hành vi giữ theo D-04
RsInoutwardDetailQueryService.java:113-115 Nhánh HeaderWarehouse.NONE không chạy tới được, vì hết dòng thì luôn lỗi ở assembler (F-logic-1 vòng 2, spec R-06)
RsInoutwardDetailQueryService.java:140-141 batchIds có null bind vào native IN. F-logic-2 vòng 1 (UNSURE) vẫn còn mở

Nguồn của trang này

  • Phân tích luồng migrations/rsinoutward/by-id/verify/round-2/flow-analysis.md vòng 2 · sha256 5339f7ed21b9

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