소스 검색

Merge remote-tracking branch 'origin/master'

master
CANCERYS\kw093 2 달 전
부모
커밋
0eca618af9
3개의 변경된 파일27개의 추가작업 그리고 15개의 파일을 삭제
  1. +2
    -2
      src/main/java/com/ffii/fpsms/modules/jobOrder/entity/projections/JobOrderInfo.kt
  2. +21
    -13
      src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt
  3. +4
    -0
      src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/SearchJobOrderInfoRequest.kt

+ 2
- 2
src/main/java/com/ffii/fpsms/modules/jobOrder/entity/projections/JobOrderInfo.kt 파일 보기

@@ -3,6 +3,7 @@ package com.ffii.fpsms.modules.jobOrder.entity.projections
import com.ffii.fpsms.modules.master.entity.*
import org.springframework.beans.factory.annotation.Value
import java.math.BigDecimal
import java.time.LocalDateTime

// Job Orders
interface JobOrderInfo {
@@ -30,8 +31,7 @@ interface JobOrderInfo {
@get:Value("#{target.stockInLines?.size() > 0 ? target.stockInLines[0].escalationLog.^[status.value == 'pending']?.handler?.id : null}")
val silHandlerId: Long?;

@get:Value("#{target.planStart}")
val planStart: java.time.LocalDateTime?;
val planStart: LocalDateTime?;
// @get:Value("#{target.bom.item.itemUoms.^[salesUnit == true && deleted == false]?.uom}")
//// @get:Value("#{target.bom.item.itemUoms.^[salesUnit == true && deleted == false]?.uom.udfudesc}")
// val uom: UomConversion;


+ 21
- 13
src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt 파일 보기

@@ -29,7 +29,6 @@ import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import kotlin.jvm.optionals.getOrNull

import com.ffii.fpsms.modules.jobOrder.service.JoPickOrderService
import com.ffii.fpsms.modules.jobOrder.web.model.*
import com.ffii.fpsms.modules.jobOrder.web.model.ExportPickRecordRequest
import com.ffii.fpsms.modules.jobOrder.web.model.PrintPickRecordRequest
@@ -81,7 +80,16 @@ open class JobOrderService(
pageable = pageable
)

val planStartFrom = request.planStart
val planStartTo = request.planStartTo
val records = response.content
.filter {
// println("from ($planStartFrom):" +(planStartFrom == null || (it.planStart != null && (planStartFrom.isEqual(it.planStart) || planStartFrom.isBefore(it.planStart)))))
// println("to: ($planStartTo)" +(planStartTo == null || (it.planStart != null && (planStartTo.isEqual(it.planStart) || planStartTo.isAfter(it.planStart)))))
(planStartFrom == null || (it.planStart != null && (planStartFrom.isEqual(it.planStart) || planStartFrom.isBefore(it.planStart)))) &&
(planStartTo == null || (it.planStart != null && (planStartTo.isEqual(it.planStart) || planStartTo.isAfter(it.planStart))))
}

val total = response.totalElements
return RecordsRes<JobOrderInfo>(records, total.toInt());
}
@@ -103,10 +111,10 @@ open class JobOrderService(
shortUom = sqlResult.shortUom
)
}
open fun jobOrderDetailByCode(code: String): JobOrderDetail {
val sqlResult = jobOrderRepository.findJobOrderDetailByCode(code) ?: throw NoSuchElementException("Job Order not found: $code");
val type = object : TypeToken<List<JobOrderDetailPickLine>>() {}.type
val jsonResult = sqlResult.pickLines?.let { GsonUtils.stringToJson<List<JobOrderDetailPickLine>>(it, type) }
return JobOrderDetail(
@@ -121,7 +129,7 @@ open class JobOrderService(
shortUom = sqlResult.shortUom
)
}
open fun assignJobNo(): String {
val suffixFormat = "%03d"
val pattern = "yyyyMMdd"
@@ -230,37 +238,37 @@ open class JobOrderService(
val createdPickOrder = pickOrderService.create(po)
val consoCode = pickOrderService.assignConsoCode()
val pickOrderEntity = pickOrderRepository.findById(createdPickOrder.id!!).orElse(null)
if (pickOrderEntity != null) {
pickOrderEntity.consoCode = consoCode
pickOrderEntity.status = com.ffii.fpsms.modules.pickOrder.enums.PickOrderStatus.RELEASED
pickOrderRepository.saveAndFlush(pickOrderEntity)
// ✅ 添加 suggested pick lots 创建逻辑
val lines = pickOrderLineRepository.findAllByPickOrderId(pickOrderEntity.id!!)
if (lines.isNotEmpty()) {
val suggestions = suggestedPickLotService.suggestionForPickOrderLines(
SuggestedPickLotForPolRequest(pickOrderLines = lines)
)
val saveSuggestedPickLots = suggestedPickLotService.saveAll(suggestions.suggestedList)
// ✅ Hold inventory quantities
val inventoryLotLines = inventoryLotLineRepository.findAllByIdIn(
saveSuggestedPickLots.mapNotNull { it.suggestedLotLine?.id }
)
saveSuggestedPickLots.forEach { lot ->
if (lot.suggestedLotLine != null && lot.suggestedLotLine?.id != null && lot.suggestedLotLine!!.id!! > 0) {
val lineIndex = inventoryLotLines.indexOf(lot.suggestedLotLine)
if (lineIndex >= 0) {
inventoryLotLines[lineIndex].holdQty =
inventoryLotLines[lineIndex].holdQty =
(inventoryLotLines[lineIndex].holdQty ?: BigDecimal.ZERO).plus(lot.qty ?: BigDecimal.ZERO)
}
}
}
inventoryLotLineRepository.saveAll(inventoryLotLines)
// ✅ Create stock out record and pre-create stock out lines
val stockOut = StockOut().apply {
this.type = "job"
@@ -269,7 +277,7 @@ open class JobOrderService(
this.handler = SecurityUtils.getUser().getOrNull()?.id
}
val savedStockOut = stockOutRepository.saveAndFlush(stockOut)
// ✅ Pre-create stock out lines for suggested lots
saveSuggestedPickLots.forEach { lot ->
val polId = lot.pickOrderLine?.id
@@ -279,7 +287,7 @@ open class JobOrderService(
if (existingLines.isEmpty()) {
val pickOrderLine = pickOrderLineRepository.findById(polId).orElse(null)
val inventoryLotLine = inventoryLotLineRepository.findById(illId).orElse(null)
if (pickOrderLine != null && inventoryLotLine != null) {
val line = StockOutLine().apply {
this.stockOut = savedStockOut


+ 4
- 0
src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/SearchJobOrderInfoRequest.kt 파일 보기

@@ -1,8 +1,12 @@
package com.ffii.fpsms.modules.jobOrder.web.model

import java.time.LocalDateTime

data class SearchJobOrderInfoRequest(
val code: String?,
val itemName: String?,
val planStart: LocalDateTime?,
val planStartTo: LocalDateTime?,
val pageSize: Int?,
val pageNum: Int?,
)

불러오는 중...
취소
저장