diff --git a/build.gradle b/build.gradle index 83d0f9e..fc4fd0d 100644 --- a/build.gradle +++ b/build.gradle @@ -32,10 +32,13 @@ dependencies { implementation group: 'org.springframework.cloud', name: 'spring-cloud-context', version: '4.2.1' - implementation("net.sf.jasperreports:jasperreports:7.0.0") { + implementation group: 'com.google.zxing', name: 'core', version: '3.5.2' + implementation group: 'com.google.zxing', name: 'javase', version: '3.5.2' + + implementation("net.sf.jasperreports:jasperreports:6.21.0") { exclude group: "com.fasterxml.jackson.dataformat", module: "jackson-dataformat-xml" } - implementation group: 'net.sf.jasperreports', name: 'jasperreports-fonts', version: '7.0.0' + implementation group: 'net.sf.jasperreports', name: 'jasperreports-fonts', version: '6.21.0' implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0' implementation group: 'org.apache.poi', name: 'poi', version: '5.2.3' diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/QrCodeInfo.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/QrCodeInfo.kt index 6b9680c..94f4dc3 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/QrCodeInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/QrCodeInfo.kt @@ -18,10 +18,12 @@ interface QrCodeInfo { // stockInLine @get:Value("#{target.item?.type}") val itemType: String val acceptedQty: BigDecimal + @get:Value("#{target.purchaseOrderLine?.uom?.code}") + val uom: String? val productionDate: LocalDateTime? val expiryDate: LocalDate? val lotNo: String? - @get:Value("#{target.stockIn?.purchaseOrder?.shop?.name}") + @get:Value("#{target.stockIn?.supplier?.name}") val supplier: String? var qrCode: BufferedImage? -} \ No newline at end of file +} diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt index 65797d1..06d63d3 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt @@ -25,6 +25,8 @@ import java.math.BigDecimal import java.time.LocalDate import java.time.LocalDateTime import com.ffii.core.utils.PdfUtils; +import java.io.FileNotFoundException +import java.time.format.DateTimeFormatter @Service @@ -241,26 +243,42 @@ open class StockInLineService( open fun exportStockInLineQrcode(request: ExportQrCodeRequest): Map { val QRCODE_PDF = "qrCodeLabel/poItemPDF.jrxml" val resource = ClassPathResource(QRCODE_PDF) + if (!resource.exists()) { + println("here") + throw FileNotFoundException("Report file not found: $QRCODE_PDF") + } val inputStream = resource.inputStream val poLabel = JasperCompileManager.compileReport(inputStream) - val stockInLineInfo = stockInLineRepository.findQrCodeInfoByIdInAndDeletedFalse(request.stockInLineIds).toMutableList() - for (lineInfo in stockInLineInfo) { + val qrCodeInfo = stockInLineRepository.findQrCodeInfoByIdInAndDeletedFalse(request.stockInLineIds).toMutableList() + println(qrCodeInfo) + val fields = mutableListOf>() + for (info in qrCodeInfo) { val field = mutableMapOf() val qrCodeContent = ( - "itemId:${lineInfo.itemId}" + - ",stockInLineId:${lineInfo.id}" + "itemId:${info.itemId}" + + ",stockInLineId:${info.id}" ) +// field["itemId"] = info.itemId + field["itemName"] = info.itemName + field["itemNo"] = info.itemNo + field["poCode"] = info.poCode + field["itemType"] = info.itemType + field["acceptedQty"] = info.acceptedQty.toString() + field["uom"] = info.uom!! + field["productionDate"] = info.productionDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" + field["expiryDate"] = info.expiryDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" + field["lotNo"] = info.lotNo!! + field["supplier"] = info.supplier!! val image = QrCodeUtil.generateQRCodeImage(qrCodeContent) - lineInfo.apply { - this.qrCode = image - } + field["qrCode"] = image + fields.add(field) } val params: MutableMap = mutableMapOf( - "poCode" to stockInLineInfo[0].poCode + "poCode" to qrCodeInfo[0].poCode ) return mapOf( - "report" to PdfUtils.fillReport(poLabel,stockInLineInfo, params), - "fileName" to stockInLineInfo[0].poCode + "report" to PdfUtils.fillReport(poLabel,fields, params), + "fileName" to qrCodeInfo[0].poCode ); } diff --git a/src/main/java/com/ffii/fpsms/modules/stock/web/StockInLineController.kt b/src/main/java/com/ffii/fpsms/modules/stock/web/StockInLineController.kt index 137b02c..1c68ec7 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/web/StockInLineController.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/web/StockInLineController.kt @@ -41,7 +41,9 @@ class StockInLineController( val out: OutputStream = response.outputStream val pdf: Map = stockInLineService.exportStockInLineQrcode(request) val jasperPrint = pdf["report"] as JasperPrint - response.setHeader("Content-Disposition", "attachment; filename=" + pdf["fileName"] + ".pdf"); + println(pdf["fileName"]) + response.addHeader("filename", "${pdf["fileName"]}.pdf") +// response.setHeader("Content-Disposition", "attachment; filename=" + pdf["fileName"] + ".pdf"); out.write(JasperExportManager.exportReportToPdf(jasperPrint)); } diff --git a/src/main/resources/fonts/STSONG.TTF b/src/main/resources/fonts/STSONG.TTF new file mode 100644 index 0000000..3870605 Binary files /dev/null and b/src/main/resources/fonts/STSONG.TTF differ diff --git a/src/main/resources/fonts/fonts.xml b/src/main/resources/fonts/fonts.xml new file mode 100644 index 0000000..8a909f9 --- /dev/null +++ b/src/main/resources/fonts/fonts.xml @@ -0,0 +1,28 @@ + + + + fonts/msjh_0.ttf + fonts/msjh_0.ttf + fonts/msjh_0.ttf + fonts/msjh_0.ttf + Identity-H + true + + '微軟正黑體', Arial, Helvetica, sans-serif + '微軟正黑體', Arial, Helvetica, sans-serif + + + + fonts/STSONG.TTF + fonts/STSONG.TTF + fonts/STSONG.TTF + fonts/STSONG.TTF + Identity-H + true + + '華文宋體', Arial, Helvetica, sans-serif + '華文宋體', Arial, Helvetica, sans-serif + + + + diff --git a/src/main/resources/fonts/msjh_0.ttf b/src/main/resources/fonts/msjh_0.ttf new file mode 100644 index 0000000..8997148 Binary files /dev/null and b/src/main/resources/fonts/msjh_0.ttf differ diff --git a/src/main/resources/jasperreports.properties b/src/main/resources/jasperreports.properties new file mode 100644 index 0000000..49477b0 --- /dev/null +++ b/src/main/resources/jasperreports.properties @@ -0,0 +1 @@ +net.sf.jasperreports.compiler.xml.parser.cache.schemas=false \ No newline at end of file diff --git a/src/main/resources/jasperreports_extension.properties b/src/main/resources/jasperreports_extension.properties new file mode 100644 index 0000000..fc9ef76 --- /dev/null +++ b/src/main/resources/jasperreports_extension.properties @@ -0,0 +1,2 @@ +net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory +net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts/fonts.xml \ No newline at end of file diff --git a/src/main/resources/qrCodeLabel/poItemPDF.jrxml b/src/main/resources/qrCodeLabel/poItemPDF.jrxml index e217e8d..6b7cf5c 100644 --- a/src/main/resources/qrCodeLabel/poItemPDF.jrxml +++ b/src/main/resources/qrCodeLabel/poItemPDF.jrxml @@ -3,27 +3,27 @@ - - - + + + - - + + - - - - + + + + - - - - - - + + + + + + @@ -61,7 +61,7 @@ - + @@ -78,7 +78,7 @@ - + @@ -95,7 +95,7 @@ - + @@ -121,7 +121,7 @@ - + @@ -138,7 +138,7 @@ - + @@ -155,25 +155,25 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -189,7 +189,7 @@ - +