cyril.tsui vor 1 Monat
Ursprung
Commit
99d1858095
3 geänderte Dateien mit 23 neuen und 12 gelöschten Zeilen
  1. +11
    -5
      src/main/java/com/ffii/fpsms/modules/master/entity/ProductionScheduleRepository.kt
  2. +5
    -3
      src/main/java/com/ffii/fpsms/modules/master/entity/projections/ProdScheduleInfo.kt
  3. +7
    -4
      src/main/java/com/ffii/fpsms/modules/master/service/ProductionScheduleService.kt

+ 11
- 5
src/main/java/com/ffii/fpsms/modules/master/entity/ProductionScheduleRepository.kt Datei anzeigen

@@ -114,7 +114,7 @@ interface ProductionScheduleRepository : AbstractRepository<ProductionSchedule,
select
r2.pslId,
r2.bomOutputQty,
json_arrayagg(json_object('id', r2.id, 'code', r2.code, 'name', r2.name, 'type', r2.`type`, 'availableQty', r2.availableQty, 'demandQty', r2.demandQty)) as bomMaterials
json_arrayagg(json_object('id', r2.id, 'code', r2.code, 'name', r2.name, 'type', r2.`type`, 'availableQty', r2.availableQty, 'demandQty', r2.demandQty, 'uomName', r2.uomName)) as bomMaterials
from (
select
psl.id as pslId,
@@ -125,16 +125,19 @@ interface ProductionScheduleRepository : AbstractRepository<ProductionSchedule,
bmi.`type`,
coalesce(i.onHandQty, 0) - coalesce(i.onHoldQty, 0) - coalesce(i.unavailableQty, 0) as availableQty,
-- ceil(coalesce(bm.qty, 0) * pp.proportion) as demandQty
coalesce(bm.qty, 0) * pp.proportion as demandQty
coalesce(bm.qty, 0) * pp.proportion as demandQty,
uc.udfudesc as uomName
from production_schedule ps
left join production_schedule_line psl on psl.prodScheduleId = ps.id
left join prod_prop pp on pp.pslId = psl.id
left join bom b on b.itemId = psl.itemId
left join bom_material bm on bm.bomId = b.id
left join items bmi on bmi.id = bm.itemId
left join item_uom iu on iu.itemId = bmi.id and iu.salesUnit = true
left join uom_conversion uc on uc.id = iu.uomId
left join inventory i on i.itemId = bmi.id
where ps.id = :id and bmi.id is not null
group by ps.id, psl.id, bm.id, i.id, pp.proportion
group by ps.id, psl.id, bm.id, i.id, pp.proportion, uc.udfudesc
) r2
group by r2.pslId, r2.bomOutputQty
)
@@ -144,7 +147,7 @@ interface ProductionScheduleRepository : AbstractRepository<ProductionSchedule,
prod.totalFGType,
prod.totalEstProdCount,
json_arrayagg(
json_object('id', prod.pslId, 'bomMaterials', prod.bomMaterials, 'jobNo', prod.jobNo, 'code', prod.code, 'name', prod.name, 'type', prod.type, 'demandQty', prod.demandQty, 'bomOutputQty', prod.bomOutputQty, 'prodTimeInMinute', prod.prodTimeInMinute, 'priority', prod.priority, 'approved', prod.approved, 'proportion', prod.proportion)
json_object('id', prod.pslId, 'bomMaterials', prod.bomMaterials, 'jobNo', prod.jobNo, 'code', prod.code, 'name', prod.name, 'type', prod.type, 'demandQty', prod.demandQty, 'bomOutputQty', prod.bomOutputQty, 'uomName', prod.uomName, 'prodTimeInMinute', prod.prodTimeInMinute, 'priority', prod.priority, 'approved', prod.approved, 'proportion', prod.proportion)
) as prodScheduleLines
from (
select
@@ -156,6 +159,7 @@ interface ProductionScheduleRepository : AbstractRepository<ProductionSchedule,
psl.id as pslId,
pm.bomMaterials,
pm.bomOutputQty,
uc.udfudesc as uomName,
coalesce(jo.code, 'N/A') as jobNo,
psli.code,
psli.name,
@@ -167,13 +171,15 @@ interface ProductionScheduleRepository : AbstractRepository<ProductionSchedule,
from production_schedule ps
left join production_schedule_line psl on psl.prodScheduleId = ps.id
left join items psli on psli.id = psl.itemId
left join item_uom iu on iu.itemId = psli.id and iu.salesUnit = true
left join uom_conversion uc on uc.id = iu.uomId
left join job_order jo on jo.prodScheduleLineId = psl.id
left join prod_prop pp on pp.pslId = psl.id
left join prod_equip pe on pe.pslId = psl.id
left join prod_material pm on pm.pslId = psl.id
where psl.deleted is false and pe.prodTimeInMinute is not null and pm.bomMaterials is not null
and ps.id = :id
group by psl.id, jo.id, pp.proportion, pm.bomOutputQty
group by psl.id, jo.id, pp.proportion, pm.bomOutputQty, uc.udfudesc
) prod group by prod.id limit 1
"""
)


+ 5
- 3
src/main/java/com/ffii/fpsms/modules/master/entity/projections/ProdScheduleInfo.kt Datei anzeigen

@@ -44,7 +44,8 @@ data class DetailedProdScheduleLineInfo(
val prodTimeInMinute: List<DetailedProdScheduleLineProdTime>?,
val priority: BigDecimal?,
val approved: Boolean?,
val proportion: BigDecimal?
val proportion: BigDecimal?,
val uomName: String?,
)

data class DetailedProdScheduleLineBomMaterial (
@@ -53,7 +54,8 @@ data class DetailedProdScheduleLineBomMaterial (
val name: String?,
val type: String?,
val availableQty: BigDecimal?,
val demandQty: BigDecimal?
val demandQty: BigDecimal?,
val uomName: String?,
)

interface DetailedProdScheduleLineBomMaterialInterface {
@@ -62,7 +64,6 @@ interface DetailedProdScheduleLineBomMaterialInterface {
val name: String?
val type: String?
val availableQty: BigDecimal?
val demandQty: BigDecimal?
}

data class DetailedProdScheduleLineProdTime (
@@ -97,6 +98,7 @@ data class RoughProdScheduleLineInfoByFg(
val priority: Long?,
val bomMaterials: List<RoughProdScheduleLineBomMaterialInfoByFg>?,
val assignDate: Long?,
val uomName: String?,
)

data class RoughProdScheduleLineBomMaterialInfoByFg(


+ 7
- 4
src/main/java/com/ffii/fpsms/modules/master/service/ProductionScheduleService.kt Datei anzeigen

@@ -103,8 +103,8 @@ open class ProductionScheduleService(
// }

val proportion = BigDecimal(line.prodQty).divide(bm.bom?.outputQty ?: BigDecimal.ONE, 2, RoundingMode.HALF_UP)

val demandQty = bm.qty?.times(proportion) ?: zero
val saleUnit = bm.item?.id?.let { itemUomService.findSalesUnitByItemId(it) }

RoughProdScheduleLineBomMaterialInfoByFg(
id = bm.id,
@@ -115,10 +115,11 @@ open class ProductionScheduleService(
(it.onHandQty ?: zero) - (it.onHoldQty ?: zero) - (it.unavailableQty ?: zero)
},
demandQty = demandQty,
uomName = bm.uomName
uomName = saleUnit?.uom?.udfudesc
)
}

val saleUnit = line.item.id?.let { itemUomService.findSalesUnitByItemId(it) }
RoughProdScheduleLineInfoByFg(
id = line.id,
code = line.item.code,
@@ -133,6 +134,7 @@ open class ProductionScheduleService(
priority = line.itemPriority,
bomMaterials = bomMaterials,
assignDate = line.assignDate,
uomName = saleUnit?.uom?.udfudesc,
)
}.filter { !it.bomMaterials.isNullOrEmpty() }

@@ -167,6 +169,7 @@ open class ProductionScheduleService(
priority = if (infos.isNotEmpty()) infos[0].priority else null,
bomMaterials = sumBomMaterials,
assignDate = null,
uomName = if (infos.isNotEmpty()) infos[0].uomName else null
)
}

@@ -187,8 +190,8 @@ open class ProductionScheduleService(
// }

val proportion = BigDecimal(line.prodQty).divide(bm.bom?.outputQty ?: BigDecimal.ONE, 2, RoundingMode.HALF_UP)

val demandQty = bm.qty?.times(proportion) ?: zero
val saleUnit = bm.item?.id?.let { itemUomService.findSalesUnitByItemId(it) }

RoughProdScheduleLineInfoByBomByDate(
id = bm.item?.id,
@@ -200,7 +203,7 @@ open class ProductionScheduleService(
} ?: zero,
demandQty = demandQty,
assignDate = line.assignDate,
uomName = bm.uomName
uomName = saleUnit?.uom?.udfudesc
)
}
}


Laden…
Abbrechen
Speichern