ソースを参照

update po

create_edit_user
MSI\derek 3ヶ月前
コミット
ec6d52b0d0
15個のファイルの変更396行の追加34行の削除
  1. +32
    -0
      src/main/java/com/ffii/core/utils/PdfUtils.java
  2. +18
    -0
      src/main/java/com/ffii/core/utils/QrCodeUtil.kt
  3. +2
    -0
      src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt
  4. +1
    -1
      src/main/java/com/ffii/fpsms/modules/qc/entity/QcResult.kt
  5. +2
    -0
      src/main/java/com/ffii/fpsms/modules/qc/entity/QcResultRepository.kt
  6. +14
    -0
      src/main/java/com/ffii/fpsms/modules/qc/entity/projection/QcResultInfo.kt
  7. +4
    -0
      src/main/java/com/ffii/fpsms/modules/qc/service/QcResultService.kt
  8. +7
    -4
      src/main/java/com/ffii/fpsms/modules/qc/web/QcResultController.kt
  9. +2
    -0
      src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLineRepository.kt
  10. +27
    -0
      src/main/java/com/ffii/fpsms/modules/stock/entity/projection/QrCodeInfo.kt
  11. +61
    -25
      src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt
  12. +2
    -2
      src/main/java/com/ffii/fpsms/modules/stock/sql/StockSql.kt
  13. +23
    -2
      src/main/java/com/ffii/fpsms/modules/stock/web/StockInLineController.kt
  14. +5
    -0
      src/main/java/com/ffii/fpsms/modules/stock/web/model/ExportQrCodeRequest.kt
  15. +196
    -0
      src/main/resources/qrCodeLabel/poItemPDF.jrxml

+ 32
- 0
src/main/java/com/ffii/core/utils/PdfUtils.java ファイルの表示

@@ -0,0 +1,32 @@
package com.ffii.core.utils;

import org.springframework.util.ResourceUtils;
import java.io.File;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import java.util.Map;
import java.util.List;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class PdfUtils {

public static JasperReport loadJasperReport(String path) throws Exception {
File file = ResourceUtils.getFile(path);
JasperReport reportTemplate = JasperCompileManager.compileReport(file.getAbsolutePath());
return reportTemplate;
}

public static <T> JasperPrint fillReport(JasperReport report, List<T> loopList, Map<String, Object> params)
throws Exception {
JRDataSource dataSources = loopList.size() > 0 ? new JRBeanCollectionDataSource(loopList)
: new JREmptyDataSource();
JasperPrint jasperPrint = JasperFillManager.fillReport(report, params, dataSources);
return jasperPrint;
}

}

+ 18
- 0
src/main/java/com/ffii/core/utils/QrCodeUtil.kt ファイルの表示

@@ -0,0 +1,18 @@
package com.ffii.core.utils

import com.google.zxing.BarcodeFormat
import java.awt.image.BufferedImage
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

open class QrCodeUtil {
companion object {
fun generateQRCodeImage(barcodeText: String?): BufferedImage {
val barcodeWriter = QRCodeWriter()
val bitMatrix: BitMatrix = barcodeWriter.encode(barcodeText, BarcodeFormat.QR_CODE, 250, 250)
val img: BufferedImage = MatrixToImageWriter.toBufferedImage(bitMatrix)
return img
}
}
}

+ 2
- 0
src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt ファイルの表示

@@ -113,4 +113,6 @@ open class PurchaseOrderService(

return savedPurchaseOrder
}


}

+ 1
- 1
src/main/java/com/ffii/fpsms/modules/qc/entity/QcResult.kt ファイルの表示

@@ -10,7 +10,7 @@ import jakarta.validation.constraints.NotNull

@Entity
@Table(name = "qc_result")
class QcResult: BaseEntity<Long>() {
open class QcResult: BaseEntity<Long>() {
@NotNull
@ManyToOne
@JoinColumn(name = "qcItemId")


+ 2
- 0
src/main/java/com/ffii/fpsms/modules/qc/entity/QcResultRepository.kt ファイルの表示

@@ -1,8 +1,10 @@
package com.ffii.fpsms.modules.qc.entity

import com.ffii.core.support.AbstractRepository
import com.ffii.fpsms.modules.qc.entity.projection.QcResultInfo
import org.springframework.stereotype.Repository

@Repository
interface QcResultRepository: AbstractRepository<QcResult, Long> {
fun findAllQcResultInfoByStockInLineIdAndDeletedFalse(stockInLineId: Long): List<QcResultInfo>
}

+ 14
- 0
src/main/java/com/ffii/fpsms/modules/qc/entity/projection/QcResultInfo.kt ファイルの表示

@@ -0,0 +1,14 @@
package com.ffii.fpsms.modules.qc.entity.projection

import org.springframework.beans.factory.annotation.Value

interface QcResultInfo {
val id: Long
@get:Value("#{target.qcItem.name}")
val name: String
@get:Value("#{target.qcItem.code}")
val code: String
@get:Value("#{target.stockInLine.id}")
val stockInLineId: Long
val failQty: Double
}

+ 4
- 0
src/main/java/com/ffii/fpsms/modules/qc/service/QcResultService.kt ファイルの表示

@@ -8,6 +8,7 @@ import com.ffii.fpsms.modules.master.web.models.MessageResponse
import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLineRepository
import com.ffii.fpsms.modules.qc.entity.QcResult
import com.ffii.fpsms.modules.qc.entity.QcResultRepository
import com.ffii.fpsms.modules.qc.entity.projection.QcResultInfo
import com.ffii.fpsms.modules.qc.web.model.SaveQcResultRequest
import com.ffii.fpsms.modules.stock.entity.StockInLine
import com.ffii.fpsms.modules.stock.entity.StockInLineRepository
@@ -54,4 +55,7 @@ open class QcResultService(
)
}

fun getAllQcResultInfoByStockInLineId(stockInLineId: Long): List<QcResultInfo> {
return qcResultRepository.findAllQcResultInfoByStockInLineIdAndDeletedFalse(stockInLineId)
}
}

+ 7
- 4
src/main/java/com/ffii/fpsms/modules/qc/web/QcResultController.kt ファイルの表示

@@ -2,13 +2,11 @@ package com.ffii.fpsms.modules.qc.web

import com.ffii.fpsms.modules.master.web.models.MessageResponse
import com.ffii.fpsms.modules.master.web.models.NewItemRequest
import com.ffii.fpsms.modules.qc.entity.projection.QcResultInfo
import com.ffii.fpsms.modules.qc.service.QcResultService
import com.ffii.fpsms.modules.qc.web.model.SaveQcResultRequest
import jakarta.validation.Valid
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/qcResult")
@@ -20,4 +18,9 @@ class QcResultController(
fun saveItem(@Valid @RequestBody request: SaveQcResultRequest): MessageResponse {
return qcResultService.createOrUpdate(request)
}

@GetMapping("/{stockInLineId}")
fun getAllQcResultInfoByStockInLineId(@PathVariable stockInLineId: Long): List<QcResultInfo> {
return qcResultService.getAllQcResultInfoByStockInLineId(stockInLineId)
}
}

+ 2
- 0
src/main/java/com/ffii/fpsms/modules/stock/entity/StockInLineRepository.kt ファイルの表示

@@ -1,6 +1,7 @@
package com.ffii.fpsms.modules.stock.entity

import com.ffii.core.support.AbstractRepository
import com.ffii.fpsms.modules.stock.entity.projection.QrCodeInfo
import com.ffii.fpsms.modules.stock.entity.projection.StockInLineInfo
import org.springframework.stereotype.Repository

@@ -10,4 +11,5 @@ interface StockInLineRepository : AbstractRepository<StockInLine, Long> {
fun findAllStockInLineInfoByStockInIdAndDeletedFalse(stockInId: Long): List<StockInLineInfo>
fun findStockInLineInfoByIdAndDeletedFalse(id: Long): StockInLineInfo
fun findStockInLineInfoByIdInAndDeletedFalse(id: List<Long>): List<StockInLineInfo>
fun findQrCodeInfoByIdInAndDeletedFalse(id: List<Long>): List<QrCodeInfo>
}

+ 27
- 0
src/main/java/com/ffii/fpsms/modules/stock/entity/projection/QrCodeInfo.kt ファイルの表示

@@ -0,0 +1,27 @@
package com.ffii.fpsms.modules.stock.entity.projection

import org.springframework.beans.factory.annotation.Value
import java.awt.image.BufferedImage
import java.math.BigDecimal
import java.time.LocalDate
import java.time.LocalDateTime

interface QrCodeInfo { // stockInLine
val id: Long // stockInLineId
@get:Value("#{target.item?.id}")
val itemId: Long
@get:Value("#{target.item?.name}")
val itemName: String
val itemNo: String
@get:Value("#{target.stockIn?.purchaseOrder.code}")
val poCode: String
@get:Value("#{target.item?.type}")
val itemType: String
val acceptedQty: BigDecimal
val productionDate: LocalDateTime?
val expiryDate: LocalDate?
val lotNo: String?
@get:Value("#{target.stockIn?.purchaseOrder?.shop?.name}")
val supplier: String?
var qrCode: BufferedImage?
}

+ 61
- 25
src/main/java/com/ffii/fpsms/modules/stock/service/StockInLineService.kt ファイルの表示

@@ -2,6 +2,7 @@ package com.ffii.fpsms.modules.stock.service

import com.ffii.core.support.AbstractBaseEntityService
import com.ffii.core.support.JdbcDao
import com.ffii.core.utils.QrCodeUtil
import com.ffii.fpsms.modules.common.CodeGenerator
import com.ffii.fpsms.modules.master.entity.ItemsRepository
import com.ffii.fpsms.modules.master.entity.QcItemRepository
@@ -10,17 +11,21 @@ import com.ffii.fpsms.modules.purchaseOrder.entity.PurchaseOrderLineRepository
import com.ffii.fpsms.modules.qc.entity.QcResult
import com.ffii.fpsms.modules.qc.entity.QcResultRepository
import com.ffii.fpsms.modules.stock.entity.*
import com.ffii.fpsms.modules.stock.sql.StockSql.SQL.INVENTORY_COUNT
import com.ffii.fpsms.modules.stock.web.model.ExportQrCodeRequest
import com.ffii.fpsms.modules.stock.web.model.SaveStockInLineRequest
import com.ffii.fpsms.modules.stock.web.model.SaveStockInRequest
import com.ffii.fpsms.modules.stock.web.model.StockInLineStatus
import com.ffii.fpsms.modules.stock.sql.StockSql.SQL.INVENTORY_COUNT
import com.ffii.fpsms.modules.stock.web.model.SaveInventoryRequest
import net.sf.jasperreports.engine.JasperCompileManager
import org.springframework.core.io.ClassPathResource
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.io.IOException
import java.math.BigDecimal
import java.time.LocalDate
import java.time.LocalDateTime
import com.ffii.core.utils.PdfUtils;


@Service
open class StockInLineService(
@@ -83,7 +88,8 @@ open class StockInLineService(
expiryDate = request.expiryDate// frontend form input
lotNo = newLotNo
}
return inventoryLotRepository.saveAndFlush(inventoryLot)
val savedInventoryLot = inventoryLotRepository.saveAndFlush(inventoryLot)
return savedInventoryLot
}

@Throws(IOException::class)
@@ -127,18 +133,19 @@ open class StockInLineService(
if (request.acceptedQty.compareTo(stockInLine.acceptedQty) == 0) {
var savedInventoryLot: InventoryLot? = null
saveQcResultWhenStockIn(request, stockInLine)
if (request.status == StockInLineStatus.RECEIVED.status) {
if (request.expiryDate == null) {
return MessageResponse(
id = null,
code = null,
name = null,
type = "Found Null",
message = "missing expiry",
errorPosition = "expiryDate",
)
}
if (request.status == StockInLineStatus.COMPLETE.status) {
// if (request.expiryDate == null) {
// return MessageResponse(
// id = null,
// code = null,
// name = null,
// type = "Found Null",
// message = "missing expiry",
// errorPosition = "expiryDate",
// )
// }
savedInventoryLot = saveInventoryLotWhenStockIn(request = request, stockInLine = stockInLine)
println(savedInventoryLot)
}
stockInLine.apply {
// user = null
@@ -188,18 +195,19 @@ open class StockInLineService(
}
saveQcResultWhenStockIn(request, stockInLine)
var savedInventoryLot: InventoryLot? = null
if (request.status == StockInLineStatus.RECEIVED.status) {
if (request.expiryDate == null) {
return MessageResponse(
id = null,
code = null,
name = null,
type = "Found Null",
message = "missing expiry",
errorPosition = "expiryDate",
)
}
if (request.status == StockInLineStatus.COMPLETE.status) {
// if (request.expiryDate == null) {
// return MessageResponse(
// id = null,
// code = null,
// name = null,
// type = "Found Null",
// message = "missing expiry",
// errorPosition = "expiryDate",
// )
// }
savedInventoryLot = saveInventoryLotWhenStockIn(request = request, stockInLine = stockInLine)
println(savedInventoryLot)
}
stockInLine.apply {
receiptDate = request.receiptDate?.atStartOfDay()
@@ -228,4 +236,32 @@ open class StockInLineService(
}
}

@Throws(IOException::class)
@Transactional
open fun exportStockInLineQrcode(request: ExportQrCodeRequest): Map<String, Any> {
val QRCODE_PDF = "qrCodeLabel/poItemPDF.jrxml"
val resource = ClassPathResource(QRCODE_PDF)
val inputStream = resource.inputStream
val poLabel = JasperCompileManager.compileReport(inputStream)
val stockInLineInfo = stockInLineRepository.findQrCodeInfoByIdInAndDeletedFalse(request.stockInLineIds).toMutableList()
for (lineInfo in stockInLineInfo) {
val field = mutableMapOf<String, Any>()
val qrCodeContent = (
"itemId:${lineInfo.itemId}" +
",stockInLineId:${lineInfo.id}"
)
val image = QrCodeUtil.generateQRCodeImage(qrCodeContent)
lineInfo.apply {
this.qrCode = image
}
}
val params: MutableMap<String, Any> = mutableMapOf(
"poCode" to stockInLineInfo[0].poCode
)
return mapOf(
"report" to PdfUtils.fillReport(poLabel,stockInLineInfo, params),
"fileName" to stockInLineInfo[0].poCode
);
}

}

+ 2
- 2
src/main/java/com/ffii/fpsms/modules/stock/sql/StockSql.kt ファイルの表示

@@ -5,8 +5,8 @@ open class StockSql {
val INVENTORY_COUNT = StringBuilder("select"
+ " count(id) "
+ " from inventory_lot i "
+ " where i.stockInDate <= :from "
+ " and i.stockInDate < :to "
+ " where i.stockInDate > :from "
+ " and i.stockInDate <= :to "
+ " and i.itemId = :itemId"
)
}

+ 23
- 2
src/main/java/com/ffii/fpsms/modules/stock/web/StockInLineController.kt ファイルの表示

@@ -1,15 +1,22 @@
package com.ffii.fpsms.modules.stock.web

import com.ffii.fpsms.modules.master.web.models.MessageResponse
import com.ffii.fpsms.modules.master.web.models.NewItemRequest
import com.ffii.fpsms.modules.stock.service.StockInLineService
import com.ffii.fpsms.modules.stock.web.model.ExportQrCodeRequest
import com.ffii.fpsms.modules.stock.web.model.SaveStockInLineRequest
import jakarta.servlet.http.HttpServletResponse
import jakarta.validation.Valid
import org.springframework.web.bind.annotation.GetMapping
import net.sf.jasperreports.engine.JasperExportManager
import net.sf.jasperreports.engine.JasperPrint
import org.springframework.context.NoSuchMessageException
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import java.io.OutputStream
import java.io.UnsupportedEncodingException
import java.text.ParseException


@RestController
@RequestMapping("/stockInLine")
@@ -25,4 +32,18 @@ class StockInLineController(
fun update(@Valid @RequestBody newItem: SaveStockInLineRequest): MessageResponse {
return stockInLineService.update(newItem)
}

@PostMapping("/print-label")
@Throws(UnsupportedEncodingException::class, NoSuchMessageException::class, ParseException::class, Exception::class)
fun printLabel(@Valid @RequestBody request: ExportQrCodeRequest, response: HttpServletResponse) {
response.characterEncoding = "utf-8";
response.contentType = "application/pdf";
val out: OutputStream = response.outputStream
val pdf: Map<String, Any> = stockInLineService.exportStockInLineQrcode(request)
val jasperPrint = pdf["report"] as JasperPrint
response.setHeader("Content-Disposition", "attachment; filename=" + pdf["fileName"] + ".pdf");
out.write(JasperExportManager.exportReportToPdf(jasperPrint));
}


}

+ 5
- 0
src/main/java/com/ffii/fpsms/modules/stock/web/model/ExportQrCodeRequest.kt ファイルの表示

@@ -0,0 +1,5 @@
package com.ffii.fpsms.modules.stock.web.model

data class ExportQrCodeRequest (
val stockInLineIds: List<Long>
)

+ 196
- 0
src/main/resources/qrCodeLabel/poItemPDF.jrxml ファイルの表示

@@ -0,0 +1,196 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="poItemPDF" printOrder="Horizontal" pageWidth="425" pageHeight="283" orientation="Landscape" columnWidth="421" leftMargin="2" rightMargin="2" topMargin="2" bottomMargin="2" uuid="6cb85eb9-3573-42f3-a293-099db250aec0">
<property name="com.jaspersoft.studio.unit." value="pixel"/>
<parameter name="lotNo" class="java.lang.String"/>
<parameter name="materialName" class="java.lang.String"/>
<parameter name="materialCode" class="java.lang.String"/>
<parameter name="purchaseCode" class="java.lang.String"/>
<parameter name="qrCode" class="java.awt.Image"/>
<parameter name="materialQty" class="java.math.BigDecimal"/>
<parameter name="materialUom" class="java.lang.String"/>
<queryString>
<![CDATA[]]>
</queryString>
<field name="lotNo" class="java.lang.String"/>
<field name="materialName" class="java.lang.String"/>
<field name="materialCode" class="java.lang.String"/>
<field name="materialQty" class="java.lang.String"/>
<field name="materialUom" class="java.lang.String"/>
<field name="qrCode" class="java.awt.Image"/>
<field name="purchaseCode" class="java.lang.String"/>
<field name="supplierName" class="java.lang.String"/>
<field name="materialWeight" class="java.lang.String"/>
<field name="weightUnit" class="java.lang.String"/>
<field name="mfrDate" class="java.lang.String"/>
<field name="shelfLifeDate" class="java.lang.String"/>
<background>
<band splitType="Stretch"/>
</background>
<detail>
<band height="279" splitType="Stretch">
<textField>
<reportElement x="80" y="21" width="150" height="16" uuid="402f35fc-b11a-4bf1-982d-e12c622f38ea">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement>
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{lotNo}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="21" width="80" height="16" uuid="f5f145f1-123f-4fe5-90fa-8550b3d2eb63"/>
<textElement textAlignment="Left">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[批次編號:]]></text>
</staticText>
<staticText>
<reportElement x="0" y="49" width="80" height="16" uuid="c2041205-51f8-45bb-a1d1-e3de37eebed7"/>
<textElement textAlignment="Left">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[供應商:]]></text>
</staticText>
<textField>
<reportElement x="80" y="49" width="150" height="16" uuid="ab82ca39-8840-4471-b7c0-cdeec9cb5693">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement>
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{supplierName}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="104" width="80" height="16" uuid="96d46fb1-939d-4f3e-b8f0-172b69b85e9f"/>
<textElement textAlignment="Left">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[物料編號:]]></text>
</staticText>
<textField>
<reportElement x="80" y="104" width="150" height="16" uuid="1f289946-b945-4f79-8515-212368b8be3b">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement>
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{materialCode}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="160" width="80" height="16" uuid="53a2d7cf-bd50-4264-abee-346823cd49dd"/>
<textElement textAlignment="Left">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[數量:]]></text>
</staticText>
<textField>
<reportElement x="80" y="160" width="150" height="16" uuid="629d9af8-c73f-4614-ba9d-a582e2ed4a29">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement>
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{materialQty} + " " + $F{materialUom}]]></textFieldExpression>
</textField>
<image>
<reportElement x="230" y="45" width="190" height="190" uuid="5dd35c73-973b-4f0d-9cad-13305a29a9fd">
<property name="com.jaspersoft.studio.unit.width" value="px"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<imageExpression><![CDATA[$F{qrCode}]]></imageExpression>
</image>
<staticText>
<reportElement x="0" y="216" width="80" height="16" uuid="c62ac00a-c495-462c-93bc-97bdd3cdb395">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textElement textAlignment="Left">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[生產日期:]]></text>
</staticText>
<textField>
<reportElement x="80" y="216" width="150" height="16" uuid="74a5cfba-046d-42f4-92d7-113729514a6f">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement>
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{mfrDate}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="77" width="80" height="16" uuid="1b1efafd-049a-432e-93c4-9662273011f7"/>
<textElement textAlignment="Left">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[採購訂單編號:]]></text>
</staticText>
<textField>
<reportElement x="80" y="77" width="150" height="16" uuid="b805e20a-9a36-45c8-8255-23b6cc58f47c">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement>
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$P{purchaseCode}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="132" width="80" height="16" uuid="5c3f9b03-222c-4c94-ab58-6bc86d44c5ce"/>
<textElement textAlignment="Left">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[物料名稱:]]></text>
</staticText>
<textField>
<reportElement x="80" y="132" width="150" height="16" uuid="e04b094d-2d16-4060-b6d9-2e6033a673ab">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement>
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{materialName}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="188" width="80" height="16" uuid="8b4d694b-90eb-4be4-b407-38d3dae15096"/>
<textElement textAlignment="Left">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[總淨重量:]]></text>
</staticText>
<textField>
<reportElement x="80" y="188" width="150" height="16" uuid="d6a75fb1-ade3-4216-b7e2-d596e65091ef">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement>
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{materialWeight} + " " + $F{weightUnit}]]></textFieldExpression>
</textField>
<staticText>
<reportElement x="0" y="244" width="80" height="16" uuid="32edcad1-23c1-4d41-8c9a-352d9e6ef377"/>
<textElement textAlignment="Left">
<font fontName="微軟正黑體" size="12"/>
</textElement>
<text><![CDATA[到期日:]]></text>
</staticText>
<textField>
<reportElement x="80" y="244" width="150" height="16" uuid="97e4a9bb-fc84-4074-b523-ddf9eb9ed2d2">
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<property name="com.jaspersoft.studio.unit.width" value="px"/>
</reportElement>
<textElement>
<font fontName="微軟正黑體" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{shelfLifeDate}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>

読み込み中…
キャンセル
保存