From fba9c78a899a2d8a9b649b4c4cd0f6f58017c312 Mon Sep 17 00:00:00 2001 From: "MSI\\derek" Date: Wed, 28 May 2025 14:26:50 +0800 Subject: [PATCH] update po --- build.gradle | 8 ++++++-- .../purchaseOrder/entity/PurchaseOrderLine.kt | 6 +----- .../entity/projections/PurchaseOrderLineInfo.kt | 6 +++++- .../service/PurchaseOrderService.kt | 2 +- .../modules/qc/entity/QcResultRepository.kt | 3 ++- .../fpsms/modules/qc/service/QcResultService.kt | 7 +++---- .../stock/entity/projection/StockInLineInfo.kt | 5 +++-- .../modules/stock/service/StockInLineService.kt | 16 ++++++++++------ .../modules/stock/web/StockInLineController.kt | 2 +- .../modules/stock/web/model/QrCodeContent.kt | 6 ++++++ 10 files changed, 38 insertions(+), 23 deletions(-) create mode 100644 src/main/java/com/ffii/fpsms/modules/stock/web/model/QrCodeContent.kt diff --git a/build.gradle b/build.gradle index a6862d9..472eea9 100644 --- a/build.gradle +++ b/build.gradle @@ -3,6 +3,7 @@ plugins { id 'org.springframework.boot' version '3.1.1' id 'io.spring.dependency-management' version '1.1.0' id 'org.jetbrains.kotlin.jvm' + id 'org.jetbrains.kotlin.plugin.serialization' version '1.8.0' } group = 'com.ffii' @@ -30,6 +31,9 @@ dependencies { implementation 'org.liquibase:liquibase-core' implementation 'com.google.code.gson:gson:2.8.5' +// // https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui +// implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.8") + implementation group: 'org.springframework.cloud', name: 'spring-cloud-context', version: '4.2.1' implementation group: 'com.google.zxing', name: 'core', version: '3.5.2' @@ -61,9 +65,9 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-reflect" implementation("org.springframework.boot:spring-boot-starter-webflux") - + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.0") compileOnly group: 'jakarta.servlet', name: 'jakarta.servlet-api', version: '6.0.0' - + runtimeOnly 'com.mysql:mysql-connector-j' testImplementation 'org.springframework.boot:spring-boot-starter-test' diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLine.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLine.kt index a988a24..fd5cb20 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLine.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/PurchaseOrderLine.kt @@ -25,11 +25,6 @@ open class PurchaseOrderLine : BaseEntity() { @Column(name = "itemNo", nullable = false, length = 20) open var itemNo: String? = null -// @NotNull -// @ManyToOne(fetch = FetchType.LAZY, optional = false) -// @JoinColumn(name = "uomId", nullable = false) -// open var uom: UomConversion? = null - @NotNull @ManyToOne @JoinColumn(name = "purchaseOrderId", nullable = false) @@ -51,6 +46,7 @@ open class PurchaseOrderLine : BaseEntity() { @JoinColumn(name = "m18DataLogId", nullable = false) open var m18DataLog: M18DataLog? = null + @NotNull @ManyToOne @JoinColumn(name = "uomId", nullable = false) open var uom: UomConversion? = null diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderLineInfo.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderLineInfo.kt index 15d3ec7..0ae2f54 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderLineInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/entity/projections/PurchaseOrderLineInfo.kt @@ -1,5 +1,6 @@ package com.ffii.fpsms.modules.purchaseOrder.entity.projections +import com.ffii.fpsms.modules.master.entity.UomConversion import com.ffii.fpsms.modules.stock.entity.StockInLine import com.ffii.fpsms.modules.stock.entity.projection.StockInLineInfo import org.springframework.beans.factory.annotation.Value @@ -13,6 +14,8 @@ interface PurchaseOrderLineInfo { @get:Value("#{target.items?.name}") val itemName: String? val qty: BigDecimal + @get:Value("#{target.uom}") + val uom: UomConversion val price: BigDecimal val status: String } @@ -25,7 +28,8 @@ data class PoLineWithStockInLine ( val itemName: String?, val qty: BigDecimal, val processed: BigDecimal, - val uom: String? = null, + @get:Value("#{target.uom}") + val uom: UomConversion, val price: BigDecimal, val status: String, diff --git a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt index 9203e1b..bcb39f8 100644 --- a/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt +++ b/src/main/java/com/ffii/fpsms/modules/purchaseOrder/service/PurchaseOrderService.kt @@ -65,7 +65,7 @@ open class PurchaseOrderService( thisPol.item!!.name, thisPol.qty!!, inLine.filter{ it.status == StockInLineStatus.COMPLETE.status}.sumOf { it.acceptedQty }, - thisPol.uom!!.code, + thisPol.uom!!, thisPol.price!!, thisPol.status!!.toString(), inLine diff --git a/src/main/java/com/ffii/fpsms/modules/qc/entity/QcResultRepository.kt b/src/main/java/com/ffii/fpsms/modules/qc/entity/QcResultRepository.kt index 1784a10..d2ca04b 100644 --- a/src/main/java/com/ffii/fpsms/modules/qc/entity/QcResultRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/qc/entity/QcResultRepository.kt @@ -2,9 +2,10 @@ package com.ffii.fpsms.modules.qc.entity import com.ffii.core.support.AbstractRepository import com.ffii.fpsms.modules.qc.entity.projection.QcResultInfo +import com.ffii.fpsms.modules.stock.entity.StockInLine import org.springframework.stereotype.Repository @Repository interface QcResultRepository: AbstractRepository { - fun findAllQcResultInfoByStockInLineIdAndDeletedFalse(stockInLineId: Long): List + fun findQcResultInfoByStockInLineIdAndDeletedFalse(stockInLineId: Long): List } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/qc/service/QcResultService.kt b/src/main/java/com/ffii/fpsms/modules/qc/service/QcResultService.kt index f60b2d6..8861559 100644 --- a/src/main/java/com/ffii/fpsms/modules/qc/service/QcResultService.kt +++ b/src/main/java/com/ffii/fpsms/modules/qc/service/QcResultService.kt @@ -5,12 +5,10 @@ import com.ffii.core.support.JdbcDao import com.ffii.fpsms.modules.master.entity.ItemsRepository import com.ffii.fpsms.modules.master.entity.QcItemRepository 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 import com.ffii.fpsms.modules.stock.entity.StockOutLIneRepository import org.springframework.stereotype.Service @@ -26,6 +24,7 @@ open class QcResultService( private val stockInLineRepository: StockInLineRepository, private val stockOutLIneRepository: StockOutLIneRepository, ): AbstractBaseEntityService(jdbcDao, qcResultRepository) { + @Throws(IOException::class) @Transactional open fun createOrUpdate(request: SaveQcResultRequest): MessageResponse { @@ -55,7 +54,7 @@ open class QcResultService( ) } - fun getAllQcResultInfoByStockInLineId(stockInLineId: Long): List { - return qcResultRepository.findAllQcResultInfoByStockInLineIdAndDeletedFalse(stockInLineId) + open fun getAllQcResultInfoByStockInLineId(stockInLineId: Long): List { + return qcResultRepository.findQcResultInfoByStockInLineIdAndDeletedFalse(stockInLineId) } } \ No newline at end of file diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt index 5d9b6ea..9bd87bb 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/projection/StockInLineInfo.kt @@ -2,6 +2,7 @@ package com.ffii.fpsms.modules.stock.entity.projection import com.ffii.fpsms.modules.master.entity.Items import com.ffii.fpsms.modules.master.entity.ItemsRepository +import com.ffii.fpsms.modules.master.entity.UomConversion import org.springframework.beans.factory.annotation.Value import java.math.BigDecimal import java.time.LocalDate @@ -30,8 +31,8 @@ interface StockInLineInfo { var productLotNo: String? @get:Value("#{target.stockIn?.supplier?.name}") val supplier: String? - @get:Value("#{target.purchaseOrderLine?.uom?.code}") - val uom: String? + @get:Value("#{target.purchaseOrderLine?.uom}") + val uom: UomConversion @get:Value("#{target.stockIn?.purchaseOrder?.code}") val poCode: String @get:Value("#{target.item?.type}") 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 cf17d24..c05679a 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 @@ -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.JsonUtils import com.ffii.core.utils.QrCodeUtil import com.ffii.fpsms.modules.common.CodeGenerator import com.ffii.fpsms.modules.master.entity.ItemsRepository @@ -28,7 +29,12 @@ import com.ffii.core.utils.PdfUtils; import com.ffii.fpsms.modules.master.entity.WarehouseRepository import java.io.FileNotFoundException import java.time.format.DateTimeFormatter +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import kotlinx.serialization.encodeToString +@Serializable +data class QrContent(val itemId: Long, val stockInLineId: Long) @Service open class StockInLineService( @@ -167,7 +173,6 @@ open class StockInLineService( this.expiryDate = stockInLine.expiryDate ?: request.expiryDate this.inventoryLot = stockInLine.inventoryLot ?: savedInventoryLot this.lotNo = stockInLine.lotNo ?: savedInventoryLot?.lotNo - this.lotNo = savedInventoryLot?.lotNo } val savedStockInLine = saveAndFlush(stockInLine) val lineInfo = stockInLineRepository.findStockInLineInfoByIdAndDeletedFalse(savedStockInLine.id!!) @@ -258,19 +263,18 @@ open class StockInLineService( val poLabel = JasperCompileManager.compileReport(inputStream) val qrCodeInfo = stockInLineRepository.findStockInLineInfoByIdInAndDeletedFalse(request.stockInLineIds).toMutableList() val fields = mutableListOf>() + for (info in qrCodeInfo) { val field = mutableMapOf() - val qrCodeContent = ( - "itemId:${info.itemId}" + - ",stockInLineId:${info.id}" - ) + val qrContent = QrContent(info.itemId, info.id) + val qrCodeContent = (Json.encodeToString(qrContent)) // 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["uom"] = info.uom.code.toString() field["productionDate"] = info.productionDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" field["expiryDate"] = info.expiryDate?.format(DateTimeFormatter.ISO_LOCAL_DATE) ?: "" field["lotNo"] = info.lotNo!! 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 2d4980f..b911409 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 @@ -39,7 +39,7 @@ class StockInLineController( response.characterEncoding = "utf-8"; response.contentType = "application/pdf"; val out: OutputStream = response.outputStream - val pdf: Map = stockInLineService.exportStockInLineQrcode(request) + val pdf = stockInLineService.exportStockInLineQrcode(request) val jasperPrint = pdf["report"] as JasperPrint response.addHeader("filename", "${pdf["fileName"]}.pdf") out.write(JasperExportManager.exportReportToPdf(jasperPrint)); diff --git a/src/main/java/com/ffii/fpsms/modules/stock/web/model/QrCodeContent.kt b/src/main/java/com/ffii/fpsms/modules/stock/web/model/QrCodeContent.kt new file mode 100644 index 0000000..d986844 --- /dev/null +++ b/src/main/java/com/ffii/fpsms/modules/stock/web/model/QrCodeContent.kt @@ -0,0 +1,6 @@ +package com.ffii.fpsms.modules.stock.web.model + +import kotlinx.serialization.Serializable + +@Serializable +data class QrContent(val itemId: Long, val stockInLineId: Long)