Phân tích luồng sau chuyển — rsinoutward/get-all-transactions — vòng 2 (thu hẹp)
logic-reviewer viết dựa trên code đã implement, đối chiếu với code cũ.
Vòng 2: fix.diff chỉ sửa test (RsInoutwardTransactionQueryServiceTest — phần count R-08/R-14 thuộc F-01;
RsInoutwardTransactionRelationalRepositoryTest — câu tổng R-11 thuộc F-02). Code src/main không đổi; đã mở lại các dòng trích dẫn
bên dưới và xác nhận số dòng như vòng 1.
Đường dẫn mới tính từ C:/Projects/warehouse-service-wt/ws1/src/main/java/com/softdreams/easypos/warehouse/.
backend: = easyposbackend1:src/main/java/vn/softdreams/easypos/.
F-01 Kiểm đầu vào, dựng điều kiện, đếm + đọc trang
- Điểm vào: cũ
backend:web/rest/RsInoutWardManagementResource.java:66-93 → mới presentation/web/rsinoutward/RsInoutwardQueryController.java:47-72
- Quy tắc: R-01..R-09, R-14..R-17 (vòng này đối chiếu lại R-08, R-14)
Sơ đồ luồng mới (theo code thực tế)
sequenceDiagram
participant Ctl as RsInoutwardQueryController
participant S as RsInoutwardTransactionQueryService.getAllTransactions (readOnly tx)
participant R as RsInoutwardTransactionRelationalRepository.findPage
participant B as RsInoutwardTransactionSqlBuilder.pageSql
Ctl->>S: RsInoutwardTransactionQuery(offset, pageSize)
S->>S: checkCompany, checkFormat x2, reasonOf, findPpuIds, TransactionDateRange.of
S->>R: findPage(filter, offset, pageSize)
R->>B: pageSql (COUNT + SELECT, ORDER BY r.norm_date DESC, r.id DESC)
R->>R: COUNT(DISTINCT r.id); 0 → trang rỗng, total 0
R->>R: setFirstResult((int) offset), setMaxResults(size); total = PageImpl(rows, PageRequest(offset/size,size), total)
S->>S: count = (int) total
alt trang rỗng
S-->>Ctl: Result(reason, count, null, null, null, ZERO, null)
else có dòng
S->>S: F-02 (countAll = (long) count), F-03
S-->>Ctl: Result(reason, count, comId, fromDate, toDate, totals|ZERO, items)
end
Đối chiếu từng bước
| # |
Luồng cũ (repo:path:dòng) |
Luồng mới (path:dòng) |
Kết luận |
| 1-8 |
Bước 1-8 vòng 1 (bind, interceptor, token, ngày, reason, ppu, parse lần 2, dựng điều kiện) |
không đổi |
như verify/round-1/flow-analysis.md F-01 bước 1-8 |
| 9 |
COUNT(DISTINCT r.id); 0 → PageImpl rỗng — backend:repository/impl/RsInoutWardRepositoryImpl.java:230-238 |
infrastructure/relational/rsinoutward/adapter/RsInoutwardTransactionRelationalRepository.java:76-81 |
KHỚP |
| 10 |
setParamsWithPageable ép (int) offset, new PageImpl(list, pageable, total) — RsInoutWardRepositoryImpl.java:240-243 |
RsInoutwardTransactionRelationalRepository.java:82-94 |
KHỚP (offset 4294968000 → 704, tổng 4294968003; offset âm sau ép → 500 EXCEPTION_ERROR, cũ 417 — D-03) |
| 11 |
ORDER BY cố định — RsInoutWardRepositoryImpl.java:223 |
RsInoutwardTransactionSqlBuilder.java:53,125 |
KHỚP |
| 12 |
size = (int) totalElements; trang rỗng trả response mặc định; BaseResultDTO(..., size) — backend:service/impl/RsInoutWardManagementServiceImpl.java:485-488,558-564 |
application/rsinoutward/RsInoutwardTransactionQueryService.java:97-108,116-124 |
KHỚP (tổng 4294968003 → count 707) |
| 13-15 |
Bước 13-15 vòng 1 (scale mapper, vỏ response, replica) |
không đổi |
như vòng 1 (D-02, D-08) |
Dữ liệu và side effect
| Bảng / topic / cache |
Cũ (đọc/ghi, điều kiện) |
Mới (đọc/ghi, điều kiện) |
Ghi chú |
rs_inoutward (+ rs_inoutward_detail r2) |
đọc COUNT + SELECT trang |
như cũ |
không đổi so với vòng 1 |
Transaction, khoá, idempotency, tenant
- Không đổi so với vòng 1: một transaction readOnly ở service (
RsInoutwardTransactionQueryService.java:75), chỉ đọc, có com_id.
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 |
RsInoutwardTransactionRelationalRepository.java:85-94 |
Ép (int) offset và dựng lại PageRequest để PageImpl cho cùng tổng như cũ (K-09); test TC-36 khoá cả phần repository và phần count ở service. |
F-02 Bổ sung dòng và tổng (trang có dòng)
- Điểm vào: cũ
backend:service/impl/RsInoutWardManagementServiceImpl.java:488-543 → mới application/rsinoutward/RsInoutwardTransactionQueryService.java:109-124
- Quy tắc: R-10, R-11 (vòng này đối chiếu lại R-11)
Sơ đồ luồng mới (theo code thực tế)
sequenceDiagram
participant S as RsInoutwardTransactionQueryService
participant R as RsInoutwardTransactionRelationalRepository
participant B as RsInoutwardTransactionSqlBuilder.totalsSql
S->>S: loadLookups (business type, customer code2, đếm SP; countAll = (long) count)
S->>R: sumTotals(filter)
R->>B: TOTALS_HEAD + " AND " + quý/ngày + type/keyword/paymentStatus + " ) r "
B->>B: nếu cần chi tiết: JOIN r2 ON r2.rs_inoutward_id = r.id + ppu + r2.from_warehouse_id + " and r2.batch_id"
R-->>S: totals | null (không có dòng)
S->>S: totals == null → ZERO
Đối chiếu từng bước
| # |
Luồng cũ (repo:path:dòng) |
Luồng mới (path:dòng) |
Kết luận |
| 1-5 |
Bước 1-5 vòng 1 (business type, rids/cids/countAll, customer code2, đếm SP, gán) |
không đổi |
như verify/round-1/flow-analysis.md F-02 bước 1-5 |
| 6 |
Subquery lọc phiếu — backend:repository/impl/RsInoutWardRepositoryImpl.java:293-326 |
RsInoutwardTransactionSqlBuilder.java:66-79,134-141 |
KHỚP |
| 7 |
JOIN chi tiết không DISTINCT; ppu AND, kho AND r2.from_warehouse_id, lô and r2.batch_id (chữ thường) — RsInoutWardRepositoryImpl.java:328-340,258-261 |
RsInoutwardTransactionSqlBuilder.java:80-81,142-153,50,223-228 |
KHỚP (nhân theo dòng chi tiết — D-06) |
| 8 |
Không có dòng → null; null → giữ mặc định 0 — RsInoutWardRepositoryImpl.java:348, RsInoutWardManagementServiceImpl.java:539-543 |
RsInoutwardTransactionRelationalRepository.java:128-136, RsInoutwardTransactionQueryService.java:110,122 |
KHỚP |
Dữ liệu và side effect
| Bảng / topic / cache |
Cũ (đọc/ghi, điều kiện) |
Mới (đọc/ghi, điều kiện) |
Ghi chú |
rs_inoutward + rs_inoutward_detail |
đọc SUM tổng, com_id trong subquery |
như cũ |
khớp |
Transaction, khoá, idempotency, tenant
- Không đổi so với vòng 1: cùng transaction readOnly, chỉ đọc; câu tổng lọc
com_id trong subquery.
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 |
RsInoutwardTransactionSqlBuilder.java:134-155 |
Câu tổng JOIN chi tiết không DISTINCT, không norm_quarter — cố ý theo D-06; test TC-45 giờ so nguyên văn chữ hoa/thường. |
F-03 Liên thông dược (Mongo + Redis) — không đổi so với vòng 1: xem verify/round-1/flow-analysis.md