浏览代码

update bom

production_process
MSI\derek 2 个月前
父节点
当前提交
19ade5b9b9
共有 23 个文件被更改,包括 86 次插入25 次删除
  1. +7
    -0
      src/main/java/com/ffii/fpsms/modules/master/entity/BomMaterial.kt
  2. +2
    -2
      src/main/java/com/ffii/fpsms/modules/master/entity/BomProcess.kt
  3. +61
    -21
      src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt
  4. +3
    -2
      src/main/java/com/ffii/fpsms/modules/master/web/models/SaveBomRequest.kt
  5. 二进制
      src/main/resources/bomImport/006 PP1080 咖喱汁 Pings BOM Template v3.xlsx
  6. 二进制
      src/main/resources/bomImport/016 PP1133 豬骨粥(1位份量)(1磅包) Pings BOM Template v3.xlsx
  7. 二进制
      src/main/resources/bomImport/017 PP1136 白粥 Pings BOM Template v3.xlsx
  8. 二进制
      src/main/resources/bomImport/024 PP - PP1175_鮮檸檬汁 Pings BOM Template v3.xlsx
  9. 二进制
      src/main/resources/bomImport/053 PP - PP2061 炒芝麻 Pings BOM Template.xlsx
  10. 二进制
      src/main/resources/bomImport/054 PP2063 咖哩牛腩(2磅包) Pings BOM Template v3.xlsx
  11. 二进制
      src/main/resources/bomImport/058 PP2088淨牛腩粒(2磅包) Pings BOM Template v3.xlsx
  12. 二进制
      src/main/resources/bomImport/200 PP - PP1193 蔥油(1磅) Pings BOM Template.xlsx
  13. 二进制
      src/main/resources/bomImport/201 PP - PP1188 咖喱膽 Pings BOM Template.xlsx
  14. 二进制
      src/main/resources/bomImport/202 PP - PP1096 白麵撈(1磅) Pings BOM Template.xlsx
  15. 二进制
      src/main/resources/bomImport/205 PP2257 咖哩汁箱料粉 Pings BOM Template v3.xlsx
  16. 二进制
      src/main/resources/bomImport/206 PP2258 豬骨粥箱料粉 Pings BOM Template v3.xlsx
  17. 二进制
      src/main/resources/bomImport/207 PP2259 白粥箱料粉 Pings BOM Template v3.xlsx
  18. 二进制
      src/main/resources/bomImport/208 PP2256 瑤柱碎 Pings BOM Template v3.xlsx
  19. 二进制
      src/main/resources/bomImport/40 PP1224 柚子蒜蓉汁 Pings BOM Template.xlsx
  20. 二进制
      src/main/resources/bomImport/801 PP1080 咖哩汁箱料粉 Pings BOM Template v3.xlsx
  21. +4
    -0
      src/main/resources/db/changelog/changes/20250612_01_derek/06_update_bom_process_duration_to_durationinMinute.sql
  22. +5
    -0
      src/main/resources/db/changelog/changes/20250612_01_derek/07_update_bom_material_add_salesUnit_id_code.sql
  23. +4
    -0
      src/main/resources/db/changelog/changes/20250612_01_derek/08_bug_fix_last_one.sql

+ 7
- 0
src/main/java/com/ffii/fpsms/modules/master/entity/BomMaterial.kt 查看文件

@@ -36,6 +36,13 @@ open class BomMaterial : BaseEntity<Long>() {
@Column(name = "uomName", length = 100) @Column(name = "uomName", length = 100)
open var uomName: String? = null open var uomName: String? = null


@ManyToOne
@JoinColumn(name = "salesUnitId")
open var salesUnit: UomConversion? = null

@Column(name = "salesUnitCode")
open var salesUnitCode: String? = null

@NotNull @NotNull
@ManyToOne(optional = false) @ManyToOne(optional = false)
@JoinColumn(name = "bomId", nullable = false) @JoinColumn(name = "bomId", nullable = false)


+ 2
- 2
src/main/java/com/ffii/fpsms/modules/master/entity/BomProcess.kt 查看文件

@@ -31,8 +31,8 @@ open class BomProcess : BaseEntity<Long>() {
open var seqNo: Long? = null open var seqNo: Long? = null


// in minute // in minute
@Column(name = "duration", nullable = false)
open var duration: Int? = null
@Column(name = "durationInMinute", nullable = false)
open var durationInMinute: Int? = null


@Column(name = "prepTimeInMinute", nullable = false) @Column(name = "prepTimeInMinute", nullable = false)
open var prepTimeInMinute: Int? = null open var prepTimeInMinute: Int? = null


+ 61
- 21
src/main/java/com/ffii/fpsms/modules/master/service/BomService.kt 查看文件

@@ -79,8 +79,8 @@ open class BomService(


//////// -------------------------------- for excel import ------------------------------- ///////// //////// -------------------------------- for excel import ------------------------------- /////////
private fun saveBomEntity(req: ImportBomRequest): Bom { private fun saveBomEntity(req: ImportBomRequest): Bom {
val item = if (req.itemId != null) itemsRepository.findById(req.itemId).orElseThrow() else null
val uom = if (req.uomId != null) uomConversionRepository.findById(req.uomId).orElseThrow() else null
val item = itemsRepository.findByCodeAndDeletedFalse(req.code) ?: itemsRepository.findByNameAndDeletedFalse(req.name)
val uom = if (req.uomId != null) uomConversionRepository.findById(req.uomId!!).orElseThrow() else null
val bom = Bom().apply { val bom = Bom().apply {
this.isDark = req.isDark this.isDark = req.isDark
this.isFloat = req.isFloat this.isFloat = req.isFloat
@@ -101,11 +101,15 @@ open class BomService(
} }


fun saveBomMaterial(req: ImportBomMatRequest): BomMaterial { fun saveBomMaterial(req: ImportBomMatRequest): BomMaterial {
// val uom = uomConversionRepository.findByCodeAndDeletedFalse()
val bomMaterial = BomMaterial().apply { val bomMaterial = BomMaterial().apply {
this.item = req.item this.item = req.item
this.itemName = req.item!!.name this.itemName = req.item!!.name
this.isConsumable = req.isConsumable this.isConsumable = req.isConsumable
this.qty = req.qty this.qty = req.qty
this.salesUnit = req.salesUnit
this.salesUnitCode = req.salesUnit?.code
this.uom = req.uom
this.uomName = req.uomName this.uomName = req.uomName
this.bom = req.bom this.bom = req.bom


@@ -118,7 +122,7 @@ open class BomService(
this.equipment = req.equipment this.equipment = req.equipment
this.description = req.description this.description = req.description
this.seqNo = req.seqNo this.seqNo = req.seqNo
this.duration = req.duration
this.durationInMinute = req.durationInMinute
this.prepTimeInMinute = req.prepTimeInMinute this.prepTimeInMinute = req.prepTimeInMinute
this.postProdTimeInMinute = req.postProdTimeInMinute this.postProdTimeInMinute = req.postProdTimeInMinute
this.bom = req.bom this.bom = req.bom
@@ -182,6 +186,12 @@ open class BomService(
this.uomName = tempCell.stringCellValue.trim() this.uomName = tempCell.stringCellValue.trim()
} }
} }
7 -> {
val salesUnit = uomConversionRepository.findByCodeAndDeletedFalse(tempCell.stringCellValue.trim())
bomMatRequest.apply {
this.salesUnit = salesUnit
}
}
10 -> { 10 -> {
val bomProcess = bomProcessRepository.findBySeqNoAndBomIdAndDeletedIsFalse( val bomProcess = bomProcessRepository.findBySeqNoAndBomIdAndDeletedIsFalse(
seqNo = tempCell.numericCellValue.toInt(), seqNo = tempCell.numericCellValue.toInt(),
@@ -219,9 +229,9 @@ open class BomService(
description = "", description = "",
) )
var startRowIndex = 0 var startRowIndex = 0
val endRowIndex = 15
val endRowIndex = 8
var startColumnIndex = 0 var startColumnIndex = 0
val endColumnIndex = 15
val endColumnIndex = 9
while (startRowIndex != endRowIndex || startColumnIndex != endColumnIndex) { while (startRowIndex != endRowIndex || startColumnIndex != endColumnIndex) {
val tempRow = sheet.getRow(startRowIndex) val tempRow = sheet.getRow(startRowIndex)
val tempCell = tempRow.getCell(startColumnIndex) val tempCell = tempRow.getCell(startColumnIndex)
@@ -270,14 +280,14 @@ open class BomService(
} }
val leftTargetValueRow = sheet.getRow(startRowIndex) val leftTargetValueRow = sheet.getRow(startRowIndex)
val leftTargetValueCell = leftTargetValueRow.getCell(startColumnIndex + 1) val leftTargetValueCell = leftTargetValueRow.getCell(startColumnIndex + 1)
when (tempCellVal) {
"顔色深淺" -> request.apply {
when {
tempCellVal.contains("深淺") -> request.apply {
isDark = calculateColourScore(leftTargetValueCell.stringCellValue.trim()) isDark = calculateColourScore(leftTargetValueCell.stringCellValue.trim())
} }
"浮沉" -> request.apply {
tempCellVal.contains("浮沉") -> request.apply {
isFloat = calculateFloatScore(leftTargetValueCell.stringCellValue.trim()) isFloat = calculateFloatScore(leftTargetValueCell.stringCellValue.trim())
} }
"濃淡程度" -> request.apply {
tempCellVal.contains("濃淡") -> request.apply {
isDense = if (leftTargetValueCell.cellType == CellType.NUMERIC) leftTargetValueCell.numericCellValue.toInt() else 0 isDense = if (leftTargetValueCell.cellType == CellType.NUMERIC) leftTargetValueCell.numericCellValue.toInt() else 0
} }
} }
@@ -399,25 +409,55 @@ open class BomService(
} }
} }
6 -> { //duration 6 -> { //duration
val durationString = tempCell.stringCellValue.trim()
bomProcessRequest.apply {
this.duration = extractDurationStringToMinutes(durationString)
when (tempCell.cellType) {
CellType.NUMERIC -> {
bomProcessRequest.apply {
this.durationInMinute = tempCell.numericCellValue.toInt()
}
}
CellType.STRING -> {
val durationString = tempCell.stringCellValue.trim()
bomProcessRequest.apply {
this.durationInMinute = extractDurationStringToMinutes(durationString)
}
}

else -> {}
} }

} }
10 -> { //prepTimeInMinute 10 -> { //prepTimeInMinute
if (tempCell.cellType != CellType.BLANK) {
val prepTimeInMinute = tempCell.stringCellValue.trim()
bomProcessRequest.apply {
this.prepTimeInMinute = extractDurationStringToMinutes(prepTimeInMinute)
when (tempCell.cellType) {
CellType.NUMERIC -> {
bomProcessRequest.apply {
this.prepTimeInMinute = tempCell.numericCellValue.toInt()
}
} }
CellType.STRING -> {
val prepTimeInMinuteString = tempCell.stringCellValue.trim()
bomProcessRequest.apply {
this.prepTimeInMinute = extractDurationStringToMinutes(prepTimeInMinuteString)
}
}

else -> {}
} }
} }
11 -> { //prepTimeInMinute
if (tempCell.cellType != CellType.BLANK) {
val prepTimeInMinute = tempCell.stringCellValue.trim()
bomProcessRequest.apply {
this.prepTimeInMinute = extractDurationStringToMinutes(prepTimeInMinute)
11 -> { //postProdTimeInMinute
when (tempCell.cellType) {
CellType.NUMERIC -> {
bomProcessRequest.apply {
this.postProdTimeInMinute = tempCell.numericCellValue.toInt()
}
}
CellType.STRING -> {
val postProdTimeInMinuteString = tempCell.stringCellValue.trim()
bomProcessRequest.apply {
this.postProdTimeInMinute = extractDurationStringToMinutes(postProdTimeInMinuteString)
}
} }

else -> {}
} }
} }
} }


+ 3
- 2
src/main/java/com/ffii/fpsms/modules/master/web/models/SaveBomRequest.kt 查看文件

@@ -44,7 +44,8 @@ data class ImportBomMatRequest (
var item: Items? = null, var item: Items? = null,
var isConsumable: Boolean? = false, var isConsumable: Boolean? = false,
var qty: BigDecimal? = null, var qty: BigDecimal? = null,
var uomId: Long? = null,
var uom: UomConversion? = null,
var salesUnit: UomConversion? = null,
var uomName: String? = null, var uomName: String? = null,
var bom: Bom? = null, var bom: Bom? = null,
) )
@@ -54,7 +55,7 @@ data class ImportBomProcessRequest(
var description: String? = null, var description: String? = null,
var equipment: Equipment? = null, var equipment: Equipment? = null,
var seqNo: Long? = null, var seqNo: Long? = null,
var duration: Int? = null,
var durationInMinute: Int? = null,
var prepTimeInMinute: Int? = 0, var prepTimeInMinute: Int? = 0,
var postProdTimeInMinute: Int? = 0, var postProdTimeInMinute: Int? = 0,
var bom: Bom? = null, var bom: Bom? = null,


二进制
src/main/resources/bomImport/006 PP1080 咖喱汁 Pings BOM Template v3.xlsx 查看文件


二进制
src/main/resources/bomImport/016 PP1133 豬骨粥(1位份量)(1磅包) Pings BOM Template v3.xlsx 查看文件


二进制
src/main/resources/bomImport/017 PP1136 白粥 Pings BOM Template v3.xlsx 查看文件


二进制
src/main/resources/bomImport/024 PP - PP1175_鮮檸檬汁 Pings BOM Template v3.xlsx 查看文件


二进制
src/main/resources/bomImport/053 PP - PP2061 炒芝麻 Pings BOM Template.xlsx 查看文件


二进制
src/main/resources/bomImport/054 PP2063 咖哩牛腩(2磅包) Pings BOM Template v3.xlsx 查看文件


二进制
src/main/resources/bomImport/058 PP2088淨牛腩粒(2磅包) Pings BOM Template v3.xlsx 查看文件


二进制
src/main/resources/bomImport/200 PP - PP1193 蔥油(1磅) Pings BOM Template.xlsx 查看文件


二进制
src/main/resources/bomImport/201 PP - PP1188 咖喱膽 Pings BOM Template.xlsx 查看文件


二进制
src/main/resources/bomImport/202 PP - PP1096 白麵撈(1磅) Pings BOM Template.xlsx 查看文件


二进制
src/main/resources/bomImport/205 PP2257 咖哩汁箱料粉 Pings BOM Template v3.xlsx 查看文件


二进制
src/main/resources/bomImport/206 PP2258 豬骨粥箱料粉 Pings BOM Template v3.xlsx 查看文件


二进制
src/main/resources/bomImport/207 PP2259 白粥箱料粉 Pings BOM Template v3.xlsx 查看文件


二进制
src/main/resources/bomImport/208 PP2256 瑤柱碎 Pings BOM Template v3.xlsx 查看文件


二进制
src/main/resources/bomImport/40 PP1224 柚子蒜蓉汁 Pings BOM Template.xlsx 查看文件


二进制
src/main/resources/bomImport/801 PP1080 咖哩汁箱料粉 Pings BOM Template v3.xlsx 查看文件


+ 4
- 0
src/main/resources/db/changelog/changes/20250612_01_derek/06_update_bom_process_duration_to_durationinMinute.sql 查看文件

@@ -0,0 +1,4 @@
-- liquibase formatted sql
-- changeset derek:update_bom_process_duration_to_durationInMinute
ALTER TABLE `bom_process`
CHANGE COLUMN `duration` `durationInMinute` INT(11) NULL DEFAULT 0;

+ 5
- 0
src/main/resources/db/changelog/changes/20250612_01_derek/07_update_bom_material_add_salesUnit_id_code.sql 查看文件

@@ -0,0 +1,5 @@
-- liquibase formatted sql
-- changeset derek:update_bom_material_add_salesUnit_id_code
ALTER TABLE `bom_material`
ADD COLUMN `salesUnitId` INT(11) AFTER `uomName`,
ADD COLUMN `salesUnitCode` INT(11) AFTER `salesUnitId`;

+ 4
- 0
src/main/resources/db/changelog/changes/20250612_01_derek/08_bug_fix_last_one.sql 查看文件

@@ -0,0 +1,4 @@
-- liquibase formatted sql
-- changeset derek:update_bom_material_add_salesUnit_id_code
ALTER TABLE `bom_material`
MODIFY COLUMN `salesUnitCode` VARCHAR(255) NULL;

正在加载...
取消
保存