You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

58 lines
1.9 KiB

  1. package com.ffii.fpsms.m18.service
  2. import com.ffii.fpsms.m18.entity.M18Cunit
  3. import com.ffii.fpsms.m18.entity.M18CunitRepository
  4. import com.ffii.fpsms.m18.model.M18UnitData
  5. import org.springframework.stereotype.Service
  6. import org.springframework.transaction.annotation.Transactional
  7. import java.math.BigDecimal
  8. /**
  9. * Persists M18 `cunit` lines from GET /root/api/read/unit.
  10. * DB [M18Cunit.ratioN] ← JSON `ratioD`, DB [M18Cunit.ratioD] ← JSON `ratioN`.
  11. */
  12. @Service
  13. open class M18CunitService(
  14. private val m18CunitRepository: M18CunitRepository,
  15. ) {
  16. data class UnitRatios(
  17. val ratioN: BigDecimal?,
  18. val ratioD: BigDecimal?,
  19. )
  20. @Transactional
  21. open fun replaceForUnit(m18Id: Long, data: M18UnitData) {
  22. m18CunitRepository.deleteByM18Id(m18Id)
  23. data.cunit.orEmpty().forEach { c ->
  24. val row = M18Cunit().apply {
  25. this.m18Id = m18Id
  26. m18CunitLineId = c.id
  27. ratioN = c.ratioD
  28. ratioD = c.ratioN
  29. hId = c.hId
  30. unitId = c.unitId
  31. iRev = c.iRev
  32. itemNo = c.itemNo?.trim()?.ifBlank { null }
  33. }
  34. m18CunitRepository.save(row)
  35. }
  36. }
  37. open fun countActiveRows(): Long {
  38. return m18CunitRepository.countByDeletedFalse()
  39. }
  40. /**
  41. * Resolve unit conversion ratio by M18 unit id from m18_cunit.
  42. * Prefer exact row m18Id+unitId; fallback to first row under m18Id.
  43. */
  44. open fun resolveRatiosByM18UnitId(unitM18Id: Long): UnitRatios? {
  45. val exact = m18CunitRepository.findFirstByM18IdAndUnitIdAndDeletedFalse(unitM18Id, unitM18Id)
  46. if (exact != null) {
  47. return UnitRatios(ratioN = exact.ratioN, ratioD = exact.ratioD)
  48. }
  49. val fallback = m18CunitRepository.findFirstByM18IdAndDeletedFalseOrderByIdAsc(unitM18Id)
  50. return fallback?.let { UnitRatios(ratioN = it.ratioN, ratioD = it.ratioD) }
  51. }
  52. }