Browse Source

Merge remote-tracking branch 'origin/master'

master
CANCERYS\kw093 2 months ago
parent
commit
0eca618af9
3 changed files with 27 additions and 15 deletions
  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 View File

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


// Job Orders // Job Orders
interface JobOrderInfo { interface JobOrderInfo {
@@ -30,8 +31,7 @@ interface JobOrderInfo {
@get:Value("#{target.stockInLines?.size() > 0 ? target.stockInLines[0].escalationLog.^[status.value == 'pending']?.handler?.id : null}") @get:Value("#{target.stockInLines?.size() > 0 ? target.stockInLines[0].escalationLog.^[status.value == 'pending']?.handler?.id : null}")
val silHandlerId: Long?; 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}")
//// @get:Value("#{target.bom.item.itemUoms.^[salesUnit == true && deleted == false]?.uom.udfudesc}") //// @get:Value("#{target.bom.item.itemUoms.^[salesUnit == true && deleted == false]?.uom.udfudesc}")
// val uom: UomConversion; // val uom: UomConversion;


+ 21
- 13
src/main/java/com/ffii/fpsms/modules/jobOrder/service/JobOrderService.kt View File

@@ -29,7 +29,6 @@ import java.time.LocalDateTime
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
import kotlin.jvm.optionals.getOrNull 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.*
import com.ffii.fpsms.modules.jobOrder.web.model.ExportPickRecordRequest import com.ffii.fpsms.modules.jobOrder.web.model.ExportPickRecordRequest
import com.ffii.fpsms.modules.jobOrder.web.model.PrintPickRecordRequest import com.ffii.fpsms.modules.jobOrder.web.model.PrintPickRecordRequest
@@ -81,7 +80,16 @@ open class JobOrderService(
pageable = pageable pageable = pageable
) )


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


+ 4
- 0
src/main/java/com/ffii/fpsms/modules/jobOrder/web/model/SearchJobOrderInfoRequest.kt View File

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


import java.time.LocalDateTime

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

Loading…
Cancel
Save