vluk@2fi-solutions.com.hk 1 час назад
Родитель
Сommit
a1bcc83594
4 измененных файлов: 100 добавлений и 52 удалений
  1. +4
    -25
      src/main/java/com/ffii/fpsms/modules/jobOrder/service/PlasticBagPrinterService.kt
  2. +3
    -27
      src/main/java/com/ffii/fpsms/py/PyController.kt
  3. +1
    -0
      src/main/java/com/ffii/fpsms/py/PyJobOrderListItem.kt
  4. +92
    -0
      src/main/java/com/ffii/fpsms/py/PyJobOrderListMapper.kt

+ 4
- 25
src/main/java/com/ffii/fpsms/modules/jobOrder/service/PlasticBagPrinterService.kt Просмотреть файл

@@ -12,10 +12,12 @@ import com.ffii.fpsms.modules.jobOrder.web.model.PrintRequest
import com.ffii.fpsms.modules.jobOrder.web.model.LaserRequest
import com.ffii.fpsms.modules.jobOrder.web.model.NgpclPushResponse
import com.ffii.fpsms.modules.jobOrder.web.model.OnPackQrJobOrderRequest
import com.ffii.fpsms.modules.master.service.ItemUomService
import com.ffii.fpsms.modules.settings.service.SettingsService
import com.ffii.fpsms.modules.stock.entity.StockInLineRepository
import com.ffii.fpsms.py.PrintedQtyByChannel
import com.ffii.fpsms.py.PyJobOrderListItem
import com.ffii.fpsms.py.PyJobOrderListMapper
import com.ffii.fpsms.py.PyJobOrderPrintSubmitService
import org.springframework.core.env.Environment
import org.springframework.stereotype.Service
@@ -70,6 +72,7 @@ class PlasticBagPrinterService(
val jobOrderRepository: JobOrderRepository,
private val jdbcDao: JdbcDao,
private val stockInLineRepository: StockInLineRepository,
private val itemUomService: ItemUomService,
private val settingsService: SettingsService,
private val pyJobOrderPrintSubmitService: PyJobOrderPrintSubmitService,
private val environment: Environment,
@@ -171,7 +174,7 @@ class PlasticBagPrinterService(
val ids = filtered.mapNotNull { it.id }
val printed = pyJobOrderPrintSubmitService.sumPrintedQtyByJobOrderIds(ids)
return filtered.map { jo ->
toPyJobOrderListItem(jo, printed[jo.id!!])
PyJobOrderListMapper.toListItem(jo, printed[jo.id!!], stockInLineRepository, itemUomService)
}
}

@@ -183,30 +186,6 @@ class PlasticBagPrinterService(
.toSet()
}

private fun toPyJobOrderListItem(jo: JobOrder, printed: PrintedQtyByChannel?): PyJobOrderListItem {
val itemCode = jo.bom?.item?.code ?: jo.bom?.code
val itemName = jo.bom?.name ?: jo.bom?.item?.name
val itemId = jo.bom?.item?.id
val stockInLine = jo.id?.let { stockInLineRepository.findFirstByJobOrder_IdAndDeletedFalse(it) }
val stockInLineId = stockInLine?.id
val lotNo = stockInLine?.lotNo
val p = printed ?: PrintedQtyByChannel()
return PyJobOrderListItem(
id = jo.id!!,
code = jo.code,
planStart = jo.planStart,
itemCode = itemCode,
itemName = itemName,
reqQty = jo.reqQty,
stockInLineId = stockInLineId,
itemId = itemId,
lotNo = lotNo,
bagPrintedQty = p.bagPrintedQty,
labelPrintedQty = p.labelPrintedQty,
laserPrintedQty = p.laserPrintedQty,
)
}

/**
* Bag2.py [send_job_to_laser] / [send_job_to_laser_with_retry]: UTF-8 TCP payload and optional ack read.
*/


+ 3
- 27
src/main/java/com/ffii/fpsms/py/PyController.kt Просмотреть файл

@@ -1,8 +1,8 @@
package com.ffii.fpsms.py

import com.ffii.fpsms.modules.jobOrder.entity.JobOrder
import com.ffii.fpsms.modules.jobOrder.entity.JobOrderRepository
import com.ffii.fpsms.modules.jobOrder.service.PlasticBagPrinterService
import com.ffii.fpsms.modules.master.service.ItemUomService
import com.ffii.fpsms.modules.stock.entity.StockInLineRepository
import org.springframework.format.annotation.DateTimeFormat
import org.springframework.http.ResponseEntity
@@ -15,7 +15,6 @@ import org.springframework.web.bind.annotation.RestController
import org.springframework.web.server.ResponseStatusException
import org.springframework.http.HttpStatus
import java.time.LocalDate
import java.time.LocalDateTime

/**
* Public API for Python clients. No login required.
@@ -26,6 +25,7 @@ import java.time.LocalDateTime
open class PyController(
private val jobOrderRepository: JobOrderRepository,
private val stockInLineRepository: StockInLineRepository,
private val itemUomService: ItemUomService,
private val plasticBagPrinterService: PlasticBagPrinterService,
private val pyJobOrderPrintSubmitService: PyJobOrderPrintSubmitService,
) {
@@ -54,7 +54,7 @@ open class PyController(
val ids = orders.mapNotNull { it.id }
val printed = pyJobOrderPrintSubmitService.sumPrintedQtyByJobOrderIds(ids)
val list = orders.map { jo ->
toListItem(jo, printed[jo.id!!])
PyJobOrderListMapper.toListItem(jo, printed[jo.id!!], stockInLineRepository, itemUomService)
}
return ResponseEntity.ok(list)
}
@@ -90,28 +90,4 @@ open class PyController(
val date = planStart ?: LocalDate.now()
return ResponseEntity.ok(plasticBagPrinterService.listLaserPrintJobOrders(date))
}

private fun toListItem(jo: JobOrder, printed: PrintedQtyByChannel?): PyJobOrderListItem {
val itemCode = jo.bom?.item?.code ?: jo.bom?.code
val itemName = jo.bom?.name ?: jo.bom?.item?.name
val itemId = jo.bom?.item?.id
val stockInLine = jo.id?.let { stockInLineRepository.findFirstByJobOrder_IdAndDeletedFalse(it) }
val stockInLineId = stockInLine?.id
val lotNo = stockInLine?.lotNo
val p = printed ?: PrintedQtyByChannel()
return PyJobOrderListItem(
id = jo.id!!,
code = jo.code,
planStart = jo.planStart,
itemCode = itemCode,
itemName = itemName,
reqQty = jo.reqQty,
stockInLineId = stockInLineId,
itemId = itemId,
lotNo = lotNo,
bagPrintedQty = p.bagPrintedQty,
labelPrintedQty = p.labelPrintedQty,
laserPrintedQty = p.laserPrintedQty,
)
}
}

+ 1
- 0
src/main/java/com/ffii/fpsms/py/PyJobOrderListItem.kt Просмотреть файл

@@ -8,6 +8,7 @@ import java.time.LocalDateTime
* No login required.
* stockInLineId and itemId are for QR code: {"itemId": xxx, "stockInLineId": xxx}
* lotNo replaces job order no. on the label display.
* [itemName] is BOM/item display name plus stock UOM [udfudesc] in parentheses, e.g. "名稱(單位)".
*/
data class PyJobOrderListItem(
val id: Long,


+ 92
- 0
src/main/java/com/ffii/fpsms/py/PyJobOrderListMapper.kt Просмотреть файл

@@ -0,0 +1,92 @@
package com.ffii.fpsms.py



import com.ffii.fpsms.modules.jobOrder.entity.JobOrder

import com.ffii.fpsms.modules.master.service.ItemUomService

import com.ffii.fpsms.modules.stock.entity.StockInLineRepository



object PyJobOrderListMapper {

fun toListItem(

jo: JobOrder,

printed: PrintedQtyByChannel?,

stockInLineRepository: StockInLineRepository,

itemUomService: ItemUomService,

): PyJobOrderListItem {

val itemCode = jo.bom?.item?.code ?: jo.bom?.code

val baseName = jo.bom?.name ?: jo.bom?.item?.name

val itemId = jo.bom?.item?.id

val stockUnitDesc = itemId?.let { id ->

itemUomService.findStockUnitByItemId(id)?.uom?.udfudesc

}?.trim().orEmpty()

val baseTrim = baseName?.trim().orEmpty()

val itemName = when {

stockUnitDesc.isEmpty() && baseTrim.isEmpty() -> null

stockUnitDesc.isEmpty() -> baseTrim

baseTrim.isEmpty() -> "($stockUnitDesc)"

else -> "$baseTrim($stockUnitDesc)"

}

val stockInLine = jo.id?.let { stockInLineRepository.findFirstByJobOrder_IdAndDeletedFalse(it) }

val stockInLineId = stockInLine?.id

val lotNo = stockInLine?.lotNo

val p = printed ?: PrintedQtyByChannel()

return PyJobOrderListItem(

id = jo.id!!,

code = jo.code,

planStart = jo.planStart,

itemCode = itemCode,

itemName = itemName,

reqQty = jo.reqQty,

stockInLineId = stockInLineId,

itemId = itemId,

lotNo = lotNo,

bagPrintedQty = p.bagPrintedQty,

labelPrintedQty = p.labelPrintedQty,

laserPrintedQty = p.laserPrintedQty,

)

}

}


Загрузка…
Отмена
Сохранить