116 lines
6.0 KiB
Java
116 lines
6.0 KiB
Java
package com.baiyue.warehouse.mapper;
|
|
|
|
import org.apache.ibatis.annotations.Mapper;
|
|
|
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|
import com.baiyue.warehouse.entity.WarehouseResourceLockEntity;
|
|
import org.apache.ibatis.annotations.Param;
|
|
import org.apache.ibatis.annotations.Select;
|
|
import org.apache.ibatis.annotations.Update;
|
|
|
|
@Mapper
|
|
public interface WarehouseResourceLockMapper extends BaseMapper<WarehouseResourceLockEntity> {
|
|
@Select("""
|
|
SELECT * FROM wh_resource_lock
|
|
WHERE customer_id = #{customerId} AND reservation_key = #{reservationKey}
|
|
LIMIT 1
|
|
""")
|
|
WarehouseResourceLockEntity findByReservationKey(@Param("customerId") long customerId,
|
|
@Param("reservationKey") String reservationKey);
|
|
|
|
@Select("SELECT * FROM wh_resource_lock WHERE customer_id=#{customerId} AND id=#{id} LIMIT 1 FOR UPDATE")
|
|
WarehouseResourceLockEntity lockById(@Param("customerId") long customerId, @Param("id") long id);
|
|
|
|
@Select("SELECT * FROM wh_resource_lock WHERE id=#{id} LIMIT 1 FOR UPDATE")
|
|
WarehouseResourceLockEntity lockAnyById(@Param("id") long id);
|
|
|
|
@Select("SELECT * FROM wh_resource_lock WHERE customer_id=#{customerId} AND pallet_id=#{palletId} " +
|
|
"AND status='ACTIVE' ORDER BY locked_at DESC LIMIT 1")
|
|
WarehouseResourceLockEntity findActiveByPallet(@Param("customerId") long customerId,
|
|
@Param("palletId") long palletId);
|
|
|
|
@Select("SELECT * FROM wh_resource_lock WHERE pallet_id=#{palletId} AND status='ACTIVE' " +
|
|
"ORDER BY locked_at DESC LIMIT 1")
|
|
WarehouseResourceLockEntity findAnyActiveByPallet(@Param("palletId") long palletId);
|
|
|
|
@Update("""
|
|
UPDATE wh_pallet
|
|
SET status = 'OCCUPIED', location_id = #{locationId}, updated_at = CURRENT_TIMESTAMP(3), version = version + 1
|
|
WHERE id = #{palletId} AND customer_id = #{customerId} AND warehouse_id = #{warehouseId}
|
|
AND status = 'IDLE' AND deleted = 0
|
|
""")
|
|
int occupyPallet(@Param("customerId") long customerId, @Param("warehouseId") long warehouseId,
|
|
@Param("palletId") long palletId, @Param("locationId") long locationId);
|
|
|
|
@Update("""
|
|
UPDATE wh_location
|
|
SET status = 'OCCUPIED', updated_at = CURRENT_TIMESTAMP(3), version = version + 1
|
|
WHERE id = #{locationId} AND customer_id = #{customerId} AND warehouse_id = #{warehouseId}
|
|
AND status IN ('ACTIVE','IDLE') AND deleted = 0
|
|
""")
|
|
int occupyLocation(@Param("customerId") long customerId, @Param("warehouseId") long warehouseId,
|
|
@Param("locationId") long locationId);
|
|
|
|
@Update("""
|
|
UPDATE wh_pallet
|
|
SET status = 'IDLE', updated_at = CURRENT_TIMESTAMP(3), version = version + 1
|
|
WHERE id = #{palletId} AND customer_id = #{customerId} AND warehouse_id = #{warehouseId}
|
|
AND location_id = #{locationId} AND status = 'OCCUPIED' AND deleted = 0
|
|
""")
|
|
int releasePallet(@Param("customerId") long customerId, @Param("warehouseId") long warehouseId,
|
|
@Param("palletId") long palletId, @Param("locationId") long locationId);
|
|
|
|
@Update("""
|
|
UPDATE wh_pallet
|
|
SET status = 'IDLE', updated_at = CURRENT_TIMESTAMP(3), version = version + 1
|
|
WHERE id = #{palletId} AND customer_id = #{customerId} AND warehouse_id = #{warehouseId}
|
|
AND location_id = #{locationId} AND status = 'OCCUPIED' AND deleted = 0
|
|
""")
|
|
int releasePalletAtVirtualLocation(@Param("customerId") long customerId,
|
|
@Param("warehouseId") long warehouseId,
|
|
@Param("palletId") long palletId,
|
|
@Param("locationId") long locationId);
|
|
|
|
@Update("""
|
|
UPDATE wh_location
|
|
SET status = 'IDLE', updated_at = CURRENT_TIMESTAMP(3), version = version + 1
|
|
WHERE id = #{locationId} AND customer_id = #{customerId} AND warehouse_id = #{warehouseId}
|
|
AND status = 'OCCUPIED' AND deleted = 0
|
|
""")
|
|
int releaseLocation(@Param("customerId") long customerId, @Param("warehouseId") long warehouseId,
|
|
@Param("locationId") long locationId);
|
|
|
|
@Update("""
|
|
UPDATE wh_pallet
|
|
SET status = 'SCRAPPED', location_id = NULL, updated_at = CURRENT_TIMESTAMP(3), version = version + 1
|
|
WHERE id = #{palletId} AND customer_id = #{customerId} AND warehouse_id = #{warehouseId}
|
|
AND location_id = #{locationId} AND status = 'OCCUPIED' AND deleted = 0
|
|
""")
|
|
int scrapPallet(@Param("customerId") long customerId, @Param("warehouseId") long warehouseId,
|
|
@Param("palletId") long palletId, @Param("locationId") long locationId);
|
|
|
|
@Update("""
|
|
UPDATE wh_pallet
|
|
SET status = 'SCRAPPED', updated_at = CURRENT_TIMESTAMP(3), version = version + 1
|
|
WHERE id = #{palletId} AND customer_id = #{customerId} AND warehouse_id = #{warehouseId}
|
|
AND location_id = #{locationId} AND status = 'OCCUPIED' AND deleted = 0
|
|
""")
|
|
int scrapPalletAtVirtualLocation(@Param("customerId") long customerId,
|
|
@Param("warehouseId") long warehouseId,
|
|
@Param("palletId") long palletId,
|
|
@Param("locationId") long locationId);
|
|
|
|
@Update("UPDATE wh_pallet SET status='SCRAPPED',updated_at=CURRENT_TIMESTAMP(3),version=version+1 " +
|
|
"WHERE customer_id=#{customerId} AND id=#{palletId} AND status='OCCUPIED' AND deleted=0")
|
|
int scrapPalletWithoutLock(@Param("customerId") long customerId, @Param("palletId") long palletId);
|
|
|
|
@Update("""
|
|
UPDATE wh_resource_lock
|
|
SET status = #{status},
|
|
released_at = CASE WHEN #{status} IN ('RELEASED','SCRAPPED') THEN CURRENT_TIMESTAMP(3) ELSE released_at END,
|
|
updated_at = CURRENT_TIMESTAMP(3)
|
|
WHERE id = #{id} AND status = 'ACTIVE'
|
|
""")
|
|
int closeLock(@Param("id") long id, @Param("status") String status);
|
|
}
|