From f9fa85939172f8e9b13988d48ed0eb78761be4fd Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Mon, 14 Sep 2026 15:51:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/DropshipPalletizationMapper.java | 12 ++++++++++-- .../InboundCartonLabelPrintServiceTest.java | 4 ++-- print/AGENTS.md | 2 +- print/README.md | 2 +- .../pdf/dropship-pallet-a4-v2-preview.pdf | Bin 15467 -> 13163 bytes .../controller/InternalPdfControllerTest.java | 2 +- ...pshipPalletA4PdfServiceGenerationTest.java | 8 ++++---- 7 files changed, 19 insertions(+), 11 deletions(-) diff --git a/firstleg/src/main/java/com/baiyue/firstleg/mapper/DropshipPalletizationMapper.java b/firstleg/src/main/java/com/baiyue/firstleg/mapper/DropshipPalletizationMapper.java index b4bdb608a..c3674d0a7 100644 --- a/firstleg/src/main/java/com/baiyue/firstleg/mapper/DropshipPalletizationMapper.java +++ b/firstleg/src/main/java/com/baiyue/firstleg/mapper/DropshipPalletizationMapper.java @@ -206,7 +206,11 @@ public interface DropshipPalletizationMapper { @Select(""" SELECT c.tenant_id,c.inbound_id,o.inbound_code, - COALESCE(NULLIF(o.destination_name,''),NULLIF(o.destination_code,''),'—') destination_warehouse, + CASE REPLACE(UPPER(COALESCE(o.destination_code,'')),'.','') + WHEN 'NJDF' THEN '纽约 NJDF' + WHEN 'CADF' THEN '洛杉矶 CADF' + ELSE REPLACE(COALESCE(NULLIF(o.destination_name,''),NULLIF(o.destination_code,''),'—'),'.','') + END destination_warehouse, COUNT(DISTINCT c.id) carton_count, SUM(COALESCE(q.item_quantity,c.actual_sku_quantity,0)) item_quantity FROM fl_dropship_pallet_carton c @@ -217,7 +221,11 @@ public interface DropshipPalletizationMapper { GROUP BY c.tenant_id,c.inbound_id,o.inbound_code,o.destination_name,o.destination_code UNION ALL SELECT p.tenant_id,p.inbound_id,o.inbound_code, - COALESCE(NULLIF(o.destination_name,''),NULLIF(o.destination_code,''),'—') destination_warehouse, + CASE REPLACE(UPPER(COALESCE(o.destination_code,'')),'.','') + WHEN 'NJDF' THEN '纽约 NJDF' + WHEN 'CADF' THEN '洛杉矶 CADF' + ELSE REPLACE(COALESCE(NULLIF(o.destination_name,''),NULLIF(o.destination_code,''),'—'),'.','') + END destination_warehouse, 0 carton_count,0 item_quantity FROM fl_dropship_pallet p JOIN fl_inbound_order o ON o.id=p.inbound_id AND o.tenant_id=p.tenant_id diff --git a/firstleg/src/test/java/com/baiyue/firstleg/service/InboundCartonLabelPrintServiceTest.java b/firstleg/src/test/java/com/baiyue/firstleg/service/InboundCartonLabelPrintServiceTest.java index 39514f66b..af6b08ff9 100644 --- a/firstleg/src/test/java/com/baiyue/firstleg/service/InboundCartonLabelPrintServiceTest.java +++ b/firstleg/src/test/java/com/baiyue/firstleg/service/InboundCartonLabelPrintServiceTest.java @@ -65,7 +65,7 @@ class InboundCartonLabelPrintServiceTest { assertThat(request.getValue().pageSpec().heightMm()).isEqualByComparingTo("297"); assertThat(request.getValue().documents()).singleElement().satisfies(document -> { assertThat(document.palletNo()).isEqualTo("DP-260911-0001"); - assertThat(document.destinationWarehouse()).isEqualTo("纽约 N.JDF"); + assertThat(document.destinationWarehouse()).isEqualTo("纽约 NJDF"); assertThat(document.palletSequence()).isEqualTo(1); assertThat(document.totalPallets()).isEqualTo(2); assertThat(document.inboundRows()).singleElement().satisfies(row -> { @@ -248,7 +248,7 @@ class InboundCartonLabelPrintServiceTest { inbound.setTenantId(10001L); inbound.setInboundId(70001L); inbound.setInboundCode("PCHK2608040174"); - inbound.setDestinationWarehouse("纽约 N.JDF"); + inbound.setDestinationWarehouse("纽约 NJDF"); inbound.setCartonCount(palletId == 90001L ? 1 : 0); inbound.setItemQuantity(palletId == 90001L ? 19 : 0); when(palletization.printInboundRows(palletId)).thenReturn(List.of(inbound)); diff --git a/print/AGENTS.md b/print/AGENTS.md index 51489cc3f..f1589d6f3 100644 --- a/print/AGENTS.md +++ b/print/AGENTS.md @@ -4,7 +4,7 @@ - 本模块是无数据库的无状态 PDF 渲染服务;调用方传入完整 `labels[]` 或 `documents[]`,模块在内存中生成一次性多页 PDF 并同步返回。 - 不保存模板、任务、历史或文件,不连接数据库、File 服务或打印机,不反查或修正业务数据。 -- 当前支持 `INBOUND_MARK_V1`(`100mm x 100mm`)、`DROPSHIP_PALLET_A4_V2`、`SEA_FREIGHT_SHIPPING_INSTRUCTION_A4_V1` 和 `BILL_OF_LADING_CONFIRMATION_A4_V1`(后三者均为 `210mm x 297mm`);一件代发托盘模板每托固定一页,展示托盘 Code 128 一维码、目的仓、最多 10 行入仓码/客户昵称汇总和最多 34 行 SKU 汇总,不展示作业状态、重量或体积。新尺寸或布局必须使用新模板编码。 +- 当前支持 `INBOUND_MARK_V1`(`100mm x 100mm`)、`DROPSHIP_PALLET_A4_V2`、`SEA_FREIGHT_SHIPPING_INSTRUCTION_A4_V1` 和 `BILL_OF_LADING_CONFIRMATION_A4_V1`(后三者均为 `210mm x 297mm`);一件代发托盘模板采用黑白打印版,每托固定一页,展示托盘 Code 128 一维码、目的仓、最多 10 行入仓码/客户昵称汇总和最多 34 行 SKU 汇总,不展示作业状态、重量或体积。新尺寸或布局必须使用新模板编码。 ## 快速索引 diff --git a/print/README.md b/print/README.md index 974181371..bc2e22e8e 100644 --- a/print/README.md +++ b/print/README.md @@ -8,7 +8,7 @@ - 服务发现名:`print-service`。 - 内部地址:`POST /internal/print/v1/pdfs/inbound-marks`。 -- 一件代发 A4 托盘信息单:`POST /internal/print/v1/pdfs/dropship-pallet-a4-documents`;模板固定为 `DROPSHIP_PALLET_A4_V2`,每托一页 A4,包含托盘 Code 128 一维码、目的仓、托盘序号、最多 10 行入仓码/客户昵称汇总和最多 34 行 SKU 汇总,不展示作业状态、重量或体积。 +- 一件代发 A4 托盘信息单:`POST /internal/print/v1/pdfs/dropship-pallet-a4-documents`;模板固定为 `DROPSHIP_PALLET_A4_V2`,采用黑白打印版,每托一页 A4,包含托盘 Code 128 一维码、目的仓、托盘序号、最多 10 行入仓码/客户昵称汇总和最多 34 行 SKU 汇总,不展示作业状态、重量或体积。 - A4 海运单据内部地址:`POST /internal/print/v1/pdfs/freight-a4-documents`。 - 海外仓排车 BOL 内部地址:`POST /internal/print/v1/pdfs/dispatch-bol-documents`;模板固定为 `DISPATCH_BILL_OF_LADING_A4_V2`,每个 document 对应一张 A4、包含 1-26 行明细。调用方首张按 18 行、续页按 26 行稳定分页;同页连续相同柜号和托盘号由 Print 纵向合并显示。 - 本地直连:`http://127.0.0.1:9207`。 diff --git a/print/output/pdf/dropship-pallet-a4-v2-preview.pdf b/print/output/pdf/dropship-pallet-a4-v2-preview.pdf index 80d212ce219c0a30a8bfc80331ce732c5cd345de..26657aeb5d499388e5cf24d9613d17dca8117ee2 100644 GIT binary patch delta 12593 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%0D>@dNCAv>Z#LhD)C;k2Zw^neacuqb`PASy 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 delta 14935 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

IZwiv|yp2d|)zjd+e1Scp|8=ldM zZX>;|rBT+jb4MjHfqUX$B%tSuJXL3~;v(+s>gB~uBi57RPe218+>=qV0CPBNh?gZE z{9PnU7+b!%%-bPf_ove-#e4g}%OVVGmyf#vTCk(}H{+vaM5rizXPOjR&IFL{gFON! z(2LL#O2GbushmNt-l!kK5>h0?XvRdc;=u<>?)s~S5fWuKr3U>V@4YJ8Soen!q_=4v z*@CBSb{Tt;ete5%L>q=r+kt>pa6+{-g*>Ga30AjW(;vW~+;$azwtlPhi)Azq+mg}Tsi8<1mb$8HfCi%nkAzy< z>P58JX!7DH(~y~M6SCX{ZQovv ziK>Q9w-!=XlCMsL^e__QGEI6dwUn<{-pHW1;3!0aGy%tINh?e5@E!4>DGS;~k)~6d z=uD_182$;Dci|G%X#%)^3igNlZ`3+-p3`C_X2k;aKHi;9(v;Xq)ueRk@$>5 zqth;EsT?1wDLpv&g+mFY@Y~xjpzffRs{j{amD;uQ(mLpCpC2GLRq(e|sBzK;JE-lR zvIsO1Cf^2S=~~NbK&>C!$SqgLjO)z69R7KZ2;aq@Qs}m?co)zp5ekZtTPde7y9u z3%%k(uTlZ*!NA%BH(hbzF2(3Dm5Z3I)GT34OEQ||TFFP>B5yDs9BIIM)#T&D);0DZq&I33wZx4_9mWQ=Rphegh&Wx4>r* zju;G;ap&Q1t&XauPR}ef_8&OdkeHT^ou6S|q_b@1vDe zrE!4?S+Z)!COAN!DcCdQ?--{Mfl%Y$lY8}vs;)x!__B=noACW+{cv8bTy=zzAJ)QS zj4w_~8Nkxu9cC8wok^V1^#jF+{l^5Wf8pt(X-mnSP$RNC*F(ecDfHR-3{MHh~?=J@IwAIohlbhMxu$W@x_|3tYxPGQKI4e?_?)& zVn&IsbdLL>cxPX*sTAsF?V^!l{X#4J1xK)2Yd^rf!A->-Tfi z(GOy*IG(=xT|hgY;+sB(L`|N9Sn#+#@Ac#5?fTPR_GRWe#LNKg>ZpHf8a;*p=Yr+a z7>CNwQa0UBiYK)u^a){f+ks}mR6;dmdX-tOa8JrV*J;+U@^1+HmQCEcM zL$Mm37^)I#a)9Oo_2q+nu0{kvPsjcSUkOq+L+kc?B_3vFkomxx>Ca{&!9*dJK`Mq? z0MQNn5P>5Rf6L`bK#Vst%44CUb>3piT#Ftq$tBYwIr#>$7Vx$mi@0~L4|M*WX^`9J@1H!K*exQvaITo~Q@H(BaQIFfUcdF_vY4Ic%KLUc{mDA)L}6J3TKc z zf|n48fMsxuC=T-jTv%w(7)%T%@6^X1lSzF1TX&s{$~L3B;9SuuXks(Mu`l9_2700Y zpks_A24-JS)}(S~F~Gs@Ka&27{<*<|!l!|9N(Ii_W`$+LUA7fNL8!gq7?)sb4UXZv z*VCobB1UXL>N%k7gh+M|MU;UQ3e|3o#0>&AVps(3_g-LLDpUxF1IN}@{Y*tmf9~DF zQ-809B(iRZq*gsRm+RPQaNy=9KprHxRybL9#cl349TbpK2{b5Rw6Ztg;3wf#-Xwcs z$&ai2uCc$4+a}^43I1`67ym`1F&8cb&v9^w4HcyQQibFiLc=xV%P*7kukEDkwM_bC zo6qU((VoNI9n{|6@0K)Zfv3L9@;a)LHi!}4-tcwtlxS`1$#)aO`)>uFX+rOhdgt9N zICX|}Ps^9ZA3$q%QmEe@dC`xLwf%Dv~6&fdbQU zjY(A$8cEn%1G)$WF!RsxzF?Xlh5k!Qr*lv;74`(?wxQvx0E!kvq1vLeu zje5E9upC6q*cPc%9$t_A0Q_ffUSM1wP!>xvo{J#uAVxs|AdD+D|*u|tI#W-2Hxh2@SS;V-d zq_}vbBskgFC3qwy*jZS)rPw8S**G~kS*18Q*u+@4IeA#Q#W???sCh(%NCf`>n1J}7 zjie4XJ85a=h#9zHdy(ncal!DQ-`sIQ^J35u)T|&N;o1<}|1ZS-!{L88x09*uf6Vp| Y7dI~#3rjdwPF7ZKI7&)MWhuD-2YLM9l>h($ diff --git a/print/src/test/java/com/baiyue/print/controller/InternalPdfControllerTest.java b/print/src/test/java/com/baiyue/print/controller/InternalPdfControllerTest.java index c4c30dd46..7580e4193 100644 --- a/print/src/test/java/com/baiyue/print/controller/InternalPdfControllerTest.java +++ b/print/src/test/java/com/baiyue/print/controller/InternalPdfControllerTest.java @@ -273,7 +273,7 @@ class InternalPdfControllerTest { "downloadFileName": "DP-260911-0034-A4托盘信息单.pdf", "documents": [{ "palletNo": "DP-260911-0034", - "destinationWarehouse": "纽约 N.JDF", + "destinationWarehouse": "纽约 NJDF", "palletSequence": 1, "totalPallets": 3, "barcodeContent": "DP-260911-0034", diff --git a/print/src/test/java/com/baiyue/print/service/DropshipPalletA4PdfServiceGenerationTest.java b/print/src/test/java/com/baiyue/print/service/DropshipPalletA4PdfServiceGenerationTest.java index 2fc14607a..d6deed2ee 100644 --- a/print/src/test/java/com/baiyue/print/service/DropshipPalletA4PdfServiceGenerationTest.java +++ b/print/src/test/java/com/baiyue/print/service/DropshipPalletA4PdfServiceGenerationTest.java @@ -27,7 +27,7 @@ class DropshipPalletA4PdfServiceGenerationTest { @Test void generatesOneA4PageWithPalletBarcodeAndSkuDetails() throws Exception { DropshipPalletA4PdfDtos.Document document = new DropshipPalletA4PdfDtos.Document( - "DP-260911-0034", "纽约 N.JDF", 1, 3, "DP-260911-0034", + "DP-260911-0034", "纽约 NJDF", 1, 3, "DP-260911-0034", List.of(new DropshipPalletA4PdfDtos.InboundRow( "NYEXX2609110249", "小虫科技", 3, 90)), List.of( @@ -44,7 +44,7 @@ class DropshipPalletA4PdfServiceGenerationTest { assertThat(pdf.getPage(0).getMediaBox().getWidth()).isCloseTo(PdfUnits.mmToPt(210), org.assertj.core.data.Offset.offset(.002f)); assertThat(pdf.getPage(0).getMediaBox().getHeight()).isCloseTo(PdfUnits.mmToPt(297), org.assertj.core.data.Offset.offset(.002f)); assertThat(new PDFTextStripper().getText(pdf)) - .contains("DP-260911-0034", "N.JDF", "NYEXX2609110249", + .contains("DP-260911-0034", "NJDF", "NYEXX2609110249", "SKU-001", "SKU-002", "40", "50") .containsOnlyOnce("DP-260911-0034") .doesNotContain("状态", "待封托", "已封托", "重量", "体积"); @@ -64,7 +64,7 @@ class DropshipPalletA4PdfServiceGenerationTest { "SKU-" + String.format("%03d", index), 2, index * 5, "5-10")); } DropshipPalletA4PdfDtos.Document document = new DropshipPalletA4PdfDtos.Document( - "DP-260911-0034", "纽约 N.JDF", 1, 1, + "DP-260911-0034", "纽约 NJDF", 1, 1, "DP-260911-0034", inboundRows, rows); var generated = service.generate(new DropshipPalletA4PdfDtos.Request( DropshipPalletA4PdfDtos.TEMPLATE, @@ -85,7 +85,7 @@ class DropshipPalletA4PdfServiceGenerationTest { rows.add(new DropshipPalletA4PdfDtos.SkuRow("SKU-" + index, 1, 1, "1")); } DropshipPalletA4PdfDtos.Document document = new DropshipPalletA4PdfDtos.Document( - "DP-260911-0034", "纽约 N.JDF", 1, 1, "DP-260911-0034", + "DP-260911-0034", "纽约 NJDF", 1, 1, "DP-260911-0034", List.of(new DropshipPalletA4PdfDtos.InboundRow("INBOUND", "客户", 35, 35)), rows); assertThatThrownBy(() -> service.generate(new DropshipPalletA4PdfDtos.Request(