diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt index 9d82ebe..ff67ece 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickExecutionIssueService.kt @@ -5,7 +5,7 @@ import com.ffii.fpsms.modules.master.web.models.MessageResponse import com.ffii.fpsms.modules.pickOrder.entity.PickExecutionIssue import com.ffii.fpsms.modules.pickOrder.entity.PickExecutionIssueRepository import com.ffii.fpsms.modules.stock.entity.StockOutLine -import com.ffii.fpsms.modules.pickOrder.entity.IssueCategory // ✅ 添加这行 +import com.ffii.fpsms.modules.pickOrder.entity.IssueCategory // ✅ 添加这行 import com.ffii.fpsms.modules.pickOrder.entity.HandleStatus import com.ffii.fpsms.modules.stock.entity.StockOutLIneRepository import com.ffii.fpsms.modules.stock.entity.InventoryLotLine @@ -20,14 +20,15 @@ import org.springframework.transaction.annotation.Propagation import java.math.BigDecimal import java.time.LocalDate import java.time.LocalDateTime - +import com.ffii.fpsms.modules.pickOrder.entity.PickOrderRepository @Service open class PickExecutionIssueService( private val pickExecutionIssueRepository: PickExecutionIssueRepository, private val stockOutLineRepository: StockOutLIneRepository, private val inventoryLotLineRepository: InventoryLotLineRepository, private val inventoryRepository: InventoryRepository, - private val suggestedPickLotService: SuggestedPickLotService + private val suggestedPickLotService: SuggestedPickLotService, + private val pickOrderRepository: PickOrderRepository ) { @Transactional(rollbackFor = [Exception::class]) @@ -49,18 +50,21 @@ open class PickExecutionIssueService( errorPosition = null ) } - + val pickOrder = pickOrderRepository.findById(request.pickOrderId).orElse(null) // 2. 创建 pick execution issue 记录 val pickExecutionIssue = PickExecutionIssue( - issueNo = generateIssueNo(), - issueCategory = IssueCategory.valueOf( - request.issueCategory ?: "lot_issue" - ), + id = null, // ✅ 添加 id pickOrderId = request.pickOrderId, pickOrderCode = request.pickOrderCode, pickOrderCreateDate = request.pickOrderCreateDate, pickExecutionDate = request.pickExecutionDate ?: LocalDate.now(), pickOrderLineId = request.pickOrderLineId, + issueNo = generateIssueNo(), + joPickOrderId = pickOrder?.jobOrder?.id, // ✅ 添加 + doPickOrderId = if (pickOrder?.type?.value == "do") pickOrder.id else null, // ✅ 添加 + issueCategory = IssueCategory.valueOf( + request.issueCategory ?: "lot_issue" + ), itemId = request.itemId, itemCode = request.itemCode, itemDescription = request.itemDescription, @@ -72,12 +76,16 @@ open class PickExecutionIssueService( missQty = request.missQty, badItemQty = request.badItemQty, issueRemark = request.issueRemark, - pickerName = request.pickerName, + pickerName = request.pickerName, // ✅ 确保从 request 中获取 + handleStatus = HandleStatus.pending, // ✅ 添加 + handleDate = null, // ✅ 添加 handledBy = request.handledBy, created = LocalDateTime.now(), createdBy = "system", + version = 0, // ✅ 添加 modified = LocalDateTime.now(), - modifiedBy = "system" + modifiedBy = "system", + deleted = false // ✅ 添加 ) val savedIssue = pickExecutionIssueRepository.save(pickExecutionIssue) diff --git a/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt b/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt index feb5383..16ba5d3 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/service/SuggestedPickLotService.kt @@ -114,8 +114,13 @@ open class SuggestedPickLotService( // ✅ FIX: Calculate remaining quantity needed (not the full required quantity) val stockOutLines = stockOutLIneRepository.findAllByPickOrderLineIdAndDeletedFalse(line.id!!) - val totalPickedQty = stockOutLines // Exclude rejected lines - .sumOf { it.qty ?: zero } + val totalPickedQty = stockOutLines + .filter { + it.status == "completed" || + it.status == "partially_completed" || + (it.status == "rejected" && (it.qty ?: zero) > zero) // ✅ 包含已 picked 的 rejected + } + .sumOf { it.qty ?: zero } val requiredQty = line.qty ?: zero val remainingQty = requiredQty.minus(totalPickedQty)