Преглед изворни кода

handle the laser printer that failed to print 1175 full name with (uom)

production
[email protected] пре 6 дана
родитељ
комит
a111a80bf6
4 измењених фајлова са 69 додато и 7 уклоњено
  1. +1
    -1
      src/main/java/com/ffii/fpsms/modules/jobOrder/service/PlasticBagPrinterService.kt
  2. +2
    -3
      src/main/java/com/ffii/fpsms/py/PyJobOrderListItem.kt
  3. +59
    -0
      src/main/java/com/ffii/fpsms/py/PyJobOrderListMapper.kt
  4. +7
    -3
      src/test/kotlin/com/ffii/fpsms/py/PyJobOrderListMapperTest.kt

+ 1
- 1
src/main/java/com/ffii/fpsms/modules/jobOrder/service/PlasticBagPrinterService.kt Прегледај датотеку

@@ -177,7 +177,7 @@ class PlasticBagPrinterService(
val ids = filtered.mapNotNull { it.id }
val printed = pyJobOrderPrintSubmitService.sumPrintedQtyByJobOrderIds(ids)
return filtered.map { jo ->
PyJobOrderListMapper.toListItem(jo, printed[jo.id!!], stockInLineRepository, itemUomService)
PyJobOrderListMapper.toLaserListItem(jo, printed[jo.id!!], stockInLineRepository, itemUomService)
}
}



+ 2
- 3
src/main/java/com/ffii/fpsms/py/PyJobOrderListItem.kt Прегледај датотеку

@@ -8,9 +8,8 @@ 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. "名稱(1包X2磅)";
* stock unit is not appended when a parenthetical segment already looks like packaging UOM
* (digits + unit tokens). Usage/grade notes in parentheses, e.g. "(菠菜用)" or "(P+4)", still get UOM appended.
* [itemName] is BOM/item display name plus stock UOM [udfudesc] in parentheses when appropriate;
* GET /py/laser-job-orders (/laserPrint) may omit that suffix for specific item codes (e.g. PP1175) due to laser name length.
*/
data class PyJobOrderListItem(
val id: Long,


+ 59
- 0
src/main/java/com/ffii/fpsms/py/PyJobOrderListMapper.kt Прегледај датотеку

@@ -52,6 +52,29 @@ object PyJobOrderListMapper {
return nameNorm.contains(norm)
}

/**
* Item codes where /laserPrint must not append stock UOM to [itemName] (laser field length limit).
* BOM base name only, e.g. PP1175 "鮮檸檬汁(P+4)" without "(1包X2磅)" suffix.
*/
private val LASER_OMIT_APPENDED_STOCK_UOM_ITEM_CODES = setOf("PP1175")

/**
* Display name for GET /py/laser-job-orders and /plastic/laser-job-orders (/laserPrint page).
* Same as [buildDisplayItemName] except listed item codes never get stock UOM appended.
*/
fun buildDisplayItemNameForLaser(
baseName: String?,
stockUnitDesc: String?,
itemCode: String?,
): String? {
val code = itemCode?.trim().orEmpty()
if (code in LASER_OMIT_APPENDED_STOCK_UOM_ITEM_CODES) {
val baseTrim = baseName?.trim().orEmpty()
return baseTrim.ifEmpty { null }
}
return buildDisplayItemName(baseName, stockUnitDesc)
}

fun toListItem(
jo: JobOrder,
printed: PrintedQtyByChannel?,
@@ -86,4 +109,40 @@ object PyJobOrderListMapper {
laserPrintedQty = p.laserPrintedQty,
)
}

/** /laserPrint list: may shorten [itemName] for laser length limits (see [buildDisplayItemNameForLaser]). */
fun toLaserListItem(
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
}
val itemName = buildDisplayItemNameForLaser(baseName, stockUnitDesc, itemCode)

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,
)
}
}

+ 7
- 3
src/test/kotlin/com/ffii/fpsms/py/PyJobOrderListMapperTest.kt Прегледај датотеку

@@ -64,10 +64,14 @@ class PyJobOrderListMapperTest {
}

@Test
fun buildDisplayItemName_appends_when_no_parens() {
fun buildDisplayItemNameForLaser_omits_appended_uom_for_PP1175() {
assertEquals(
"大冬菇($stockUom)",
PyJobOrderListMapper.buildDisplayItemName("大冬菇", stockUom),
"鮮檸檬汁(P+4)",
PyJobOrderListMapper.buildDisplayItemNameForLaser("鮮檸檬汁(P+4)", stockUom, "PP1175"),
)
assertEquals(
"咖哩汁(1包X2磅)",
PyJobOrderListMapper.buildDisplayItemNameForLaser("咖哩汁(1包X2磅)", stockUom, "PP1080"),
)
}
}

Loading…
Откажи
Сачувај