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 b4e049c..0fe2094 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 @@ -1811,9 +1811,20 @@ open fun getBadItemOnlyList(): List { return pickExecutionIssueRepository.findBadItemOnlyList(IssueCategory.lot_issue) } -open fun getExpiryItemList(): List { +open fun getExpiryItemList( + expiryDate: LocalDate? = null, + itemCode: String? = null, + itemName: String? = null, +): List { val today = LocalDate.now() - val lotLines = inventoryLotLineRepository.findExpiredItems(today) + val normalizedItemCode = itemCode?.trim()?.takeIf { it.isNotEmpty() } + val normalizedItemName = itemName?.trim()?.takeIf { it.isNotEmpty() } + val lotLines = inventoryLotLineRepository.findExpiredItems( + today = today, + expiryDate = expiryDate, + itemCode = normalizedItemCode, + itemName = normalizedItemName, + ) return lotLines.map { lotLine -> val lot = lotLine.inventoryLot diff --git a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickExecutionIssueController.kt b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickExecutionIssueController.kt index 6c70395..3447764 100644 --- a/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickExecutionIssueController.kt +++ b/src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickExecutionIssueController.kt @@ -6,7 +6,9 @@ import com.ffii.fpsms.modules.pickOrder.entity.PickExecutionIssue import com.ffii.fpsms.modules.pickOrder.enums.PickExecutionIssueEnum import com.ffii.fpsms.modules.pickOrder.service.PickExecutionIssueService // 修复导入路径 import com.ffii.fpsms.modules.pickOrder.web.models.* +import org.springframework.format.annotation.DateTimeFormat import org.springframework.web.bind.annotation.* +import java.time.LocalDate @RestController @@ -65,8 +67,16 @@ class PickExecutionIssueController( } @GetMapping("/issues/expiryItem") -fun getExpiryItemIssues(): List { - return pickExecutionIssueService.getExpiryItemList() +fun getExpiryItemIssues( + @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) expiryDate: LocalDate?, + @RequestParam(required = false) itemCode: String?, + @RequestParam(required = false) itemName: String?, +): List { + return pickExecutionIssueService.getExpiryItemList( + expiryDate = expiryDate, + itemCode = itemCode, + itemName = itemName, + ) } @PostMapping("/submitMissItem") diff --git a/src/main/java/com/ffii/fpsms/modules/stock/entity/InventoryLotLineRepository.kt b/src/main/java/com/ffii/fpsms/modules/stock/entity/InventoryLotLineRepository.kt index 1f800a0..a326281 100644 --- a/src/main/java/com/ffii/fpsms/modules/stock/entity/InventoryLotLineRepository.kt +++ b/src/main/java/com/ffii/fpsms/modules/stock/entity/InventoryLotLineRepository.kt @@ -25,7 +25,7 @@ interface InventoryLotLineRepository : AbstractRepository): List @@ -172,15 +172,30 @@ interface InventoryLotLineRepository : AbstractRepository): Long + @EntityGraph( + type = EntityGraph.EntityGraphType.FETCH, + attributePaths = ["inventoryLot", "inventoryLot.item", "warehouse"] + ) @Query(""" SELECT ill FROM InventoryLotLine ill JOIN ill.inventoryLot il + JOIN il.item i WHERE il.expiryDate < :today - AND coalesce(ill.inQty, 0) <> coalesce(ill.outQty, 0) - AND ill.deleted = false + AND (:expiryDate IS NULL OR il.expiryDate = :expiryDate) + AND (:itemCode IS NULL OR LOWER(i.code) LIKE LOWER(CONCAT('%', :itemCode, '%'))) + AND (:itemName IS NULL OR LOWER(i.name) LIKE LOWER(CONCAT('%', :itemName, '%'))) + AND coalesce(ill.inQty, 0) <> coalesce(ill.outQty, 0) + AND ill.deleted = false + AND il.deleted = false + AND i.deleted = false ORDER BY il.expiryDate ASC """) - fun findExpiredItems(@Param("today") today: LocalDate): List + fun findExpiredItems( + @Param("today") today: LocalDate, + @Param("expiryDate") expiryDate: LocalDate?, + @Param("itemCode") itemCode: String?, + @Param("itemName") itemName: String?, + ): List /** * Same business key as transfer merge target lookup; restricted to [status] (e.g. AVAILABLE).