Browse Source

update

master
CANCERYS\kw093 2 months ago
parent
commit
b2087123da
4 changed files with 170 additions and 10 deletions
  1. +3
    -0
      src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrder.kt
  2. +145
    -10
      src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt
  3. +17
    -0
      src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt
  4. +5
    -0
      src/main/resources/db/changelog/changes/202510926_01_enson/01_altertable_enson.sql

+ 3
- 0
src/main/java/com/ffii/fpsms/modules/deliveryOrder/entity/DoPickOrder.kt View File

@@ -62,6 +62,9 @@ class DoPickOrder {
@Column(name = "deleted")
var deleted: Boolean = false

@Column(name = "hide", nullable = false)
var hide: Boolean = false
// Default constructor for Hibernate
constructor()


+ 145
- 10
src/main/java/com/ffii/fpsms/modules/pickOrder/service/PickOrderService.kt View File

@@ -80,7 +80,9 @@ open class PickOrderService(
private val doPickOrderService: DoPickOrderService,
private val routerRepository: RouterRepository,
private val doPickOrderRecordRepository: DoPickOrderRecordRepository,
private val doPickOrderRepository: DoPickOrderRepository
private val doPickOrderRepository: DoPickOrderRepository,
private val userRepository: UserRepository


) : AbstractBaseEntityService<PickOrder, Long, PickOrderRepository>(jdbcDao, pickOrderRepository) {
@@ -2765,15 +2767,18 @@ if (existingRecords.isNotEmpty()) {
println("❌ Pick order not found with ID: $pickOrderId")
return emptyList()
}
if (doPickOrderRepository.findByPickOrderId(pickOrderId).firstOrNull()?.hide == true) {
println("🔍 Pick order $pickOrderId is hidden, returning empty list")
return emptyList()
}
println("🔍 Found pick order: ${pickOrder.code}, type: ${pickOrder.type?.value}, status: ${pickOrder.status?.value}")
if (pickOrder.type?.value != "do") {
println("❌ Pick order is not of type 'do': ${pickOrder.type?.value}")
return emptyList()
}
if (pickOrder.status?.value !in listOf("assigned", "released", "picking")) {
val allowedstatuses= listOf("assigned", "released", "picking", "completed")
if (pickOrder.status?.value !in allowedstatuses) {
println("❌ Pick order status is not in allowed states: ${pickOrder.status?.value}")
return emptyList()
}
@@ -3164,19 +3169,21 @@ open fun getAllPickOrderLotsWithDetailsHierarchical(userId: Long): Map<String, A
println("❌ User not found: $userId")
return emptyMap()
}
val statusList = listOf(PickOrderStatus.PENDING, PickOrderStatus.RELEASED, PickOrderStatus.COMPLETED)
// Get all pick orders assigned to user with PENDING or RELEASED status that have doId
val allAssignedPickOrders = pickOrderRepository.findAllByAssignToAndStatusIn(
user,
listOf(PickOrderStatus.PENDING, PickOrderStatus.RELEASED
// , PickOrderStatus.COMPLETED
)
statusList
).filter { it.deliveryOrder != null } // Only pick orders with doId
println("🔍 DEBUG: Found ${allAssignedPickOrders.size} pick orders assigned to user $userId")
val visiblePickOrders = allAssignedPickOrders.filter { pickOrder ->
val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrder.id!!)
doPickOrders.none { it.hide } // 只显示 hide = false 的订单
}
// ✅ NEW LOGIC: Filter based on assignment and status
val filteredPickOrders = if (allAssignedPickOrders.isNotEmpty()) {
val filteredPickOrders = if (visiblePickOrders.isNotEmpty()) {
// Check if there are any RELEASED orders assigned to this user (active work)
val assignedReleasedOrders = allAssignedPickOrders.filter {
it.status == PickOrderStatus.RELEASED && it.assignTo?.id == userId
@@ -3666,4 +3673,132 @@ open fun confirmLotSubstitution(req: LotSubstitutionConfirmRequest): MessageResp
errorPosition = null
)
}
}
open fun updateDoPickOrderHideStatus(pickOrderId: Long, hide: Boolean): MessageResponse {
return try {
// ✅ 修复:根据 pickOrderId 查找 do_pick_order 记录
val doPickOrders = doPickOrderRepository.findByPickOrderId(pickOrderId)
if (doPickOrders.isEmpty()) {
MessageResponse(
id = null,
name = "Pick order not found",
code = "ERROR",
type = "pickorder",
message = "No do_pick_order found for pickOrderId $pickOrderId",
errorPosition = "pickOrderId"
)
} else {
// ✅ 更新所有相关的 do_pick_order 记录
doPickOrders.forEach { doPickOrder ->
doPickOrder.hide = hide
doPickOrderRepository.save(doPickOrder)
}
MessageResponse(
id = null,
name = "Hide status updated",
code = "SUCCESS",
type = "pickorder",
message = "Updated hide status for ${doPickOrders.size} do_pick_order records to $hide",
errorPosition = null
)
}
} catch (e: Exception) {
println("❌ Error in updateDoPickOrderHideStatus: ${e.message}")
e.printStackTrace()
MessageResponse(
id = null,
name = "Failed to update hide status",
code = "ERROR",
type = "pickorder",
message = "Failed to update hide status: ${e.message}",
errorPosition = null
)
}
}
open fun getCompletedDoPickOrders(
userId: Long,
pickOrderCode: String?,
shopName: String?,
deliveryNo: String?,
ticketNo: String?
): List<Map<String, Any?>> {
return try {
println("=== getCompletedDoPickOrders ===")
println("userId: $userId")
println("pickOrderCode: $pickOrderCode")
println("shopName: $shopName")
println("deliveryNo: $deliveryNo")
println("ticketNo: $ticketNo")
// ✅ 修复:使用正确的方法获取已完成的 pick orders
val user = userRepository.findById(userId).orElse(null)
if (user == null) {
println("User not found: $userId")
return emptyList()
}
// ✅ 修复:使用正确的方法获取已完成的 pick orders
val completedPickOrders = pickOrderRepository.findAllByAssignToIdAndStatusIn(
userId,
listOf(PickOrderStatus.COMPLETED)
)
println("Found ${completedPickOrders.size} completed pick orders for user $userId")
val result = mutableListOf<Map<String, Any?>>()
for (pickOrder in completedPickOrders) {
// 获取该 pick order 的 FG pick orders
val fgPickOrders = getFgPickOrdersByPickOrderId(pickOrder.id!!)
if (fgPickOrders.isNotEmpty()) {
val firstFgOrder = fgPickOrders[0] as Map<String, Any?> // ✅ 修复:转换为 Map
// ✅ 修复:使用正确的属性名进行搜索过滤,并处理空值
val matchesSearch = when {
pickOrderCode != null && !(pickOrder.code?.contains(pickOrderCode, ignoreCase = true) ?: false) -> false
shopName != null && !((firstFgOrder["shopName"] as? String)?.contains(shopName, ignoreCase = true) ?: false) -> false
deliveryNo != null && !((firstFgOrder["deliveryNo"] as? String)?.contains(deliveryNo, ignoreCase = true) ?: false) -> false
ticketNo != null && !((firstFgOrder["ticketNo"] as? String)?.contains(ticketNo, ignoreCase = true) ?: false) -> false
else -> true
}
if (matchesSearch) {
result.add(mapOf(
"id" to pickOrder.id,
"pickOrderId" to pickOrder.id,
"pickOrderCode" to pickOrder.code,
"pickOrderConsoCode" to pickOrder.consoCode,
"pickOrderStatus" to pickOrder.status.toString(),
"deliveryOrderId" to firstFgOrder["deliveryOrderId"],
"deliveryNo" to firstFgOrder["deliveryNo"],
"deliveryDate" to firstFgOrder["deliveryDate"],
"shopId" to firstFgOrder["shopId"],
"shopCode" to firstFgOrder["shopCode"],
"shopName" to firstFgOrder["shopName"],
"shopAddress" to firstFgOrder["shopAddress"],
"ticketNo" to firstFgOrder["ticketNo"],
"shopPoNo" to firstFgOrder["shopPoNo"],
"numberOfCartons" to firstFgOrder["numberOfCartons"],
"truckNo" to firstFgOrder["truckNo"],
"storeId" to firstFgOrder["storeId"],
"completedDate" to (pickOrder.completeDate?.toString() ?: pickOrder.modified?.toString()),
"fgPickOrders" to fgPickOrders
))
}
}
}
// 按完成时间倒序排列
result.sortByDescending { it["completedDate"] as String? }
println("Returning ${result.size} completed DO pick orders")
result
} catch (e: Exception) {
println("❌ Error in getCompletedDoPickOrders: ${e.message}")
e.printStackTrace()
emptyList()
}
}
}

+ 17
- 0
src/main/java/com/ffii/fpsms/modules/pickOrder/web/PickOrderController.kt View File

@@ -287,4 +287,21 @@ fun getPickOrdersByStore(@PathVariable storeId: String): Map<String, Any?> {
fun confirmLotSubstitution(@RequestBody req: LotSubstitutionConfirmRequest): MessageResponse {
return pickOrderService.confirmLotSubstitution(req)
}
@PostMapping("/update-hide-status/{pickOrderId}")
fun updatePickOrderHideStatus(
@PathVariable pickOrderId: Long,
@RequestParam hide: Boolean
): MessageResponse {
return pickOrderService.updateDoPickOrderHideStatus(pickOrderId, hide)
}
@GetMapping("/completed-do-pick-orders/{userId}")
fun getCompletedDoPickOrders(
@PathVariable userId: Long,
@RequestParam(required = false) pickOrderCode: String?,
@RequestParam(required = false) shopName: String?,
@RequestParam(required = false) deliveryNo: String?,
@RequestParam(required = false) ticketNo: String?
): List<Map<String, Any?>> {
return pickOrderService.getCompletedDoPickOrders(userId, pickOrderCode, shopName, deliveryNo, ticketNo)
}
}

+ 5
- 0
src/main/resources/db/changelog/changes/202510926_01_enson/01_altertable_enson.sql View File

@@ -0,0 +1,5 @@
-- liquibase formatted sql
-- changeset enson:altertable_enson

ALTER TABLE `fpsmsdb`.`do_pick_order`
ADD COLUMN `hide` TINYINT NULL DEFAULT '0' AFTER `deleted`;

Loading…
Cancel
Save