366 lines
9.6 KiB
Java
366 lines
9.6 KiB
Java
package com.rsscripting.rswarehouse.dao;
|
|
|
|
import com.rsscripting.rswarehouse.RSWarehouse;
|
|
import com.rsscripting.rswarehouse.database.DatabaseManager;
|
|
import com.rsscripting.rswarehouse.model.WarehouseItem;
|
|
import com.rsscripting.rswarehouse.utils.ItemStackUtils;
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
|
|
public class ItemDAO {
|
|
|
|
public static void addItem(
|
|
String discovererUuid,
|
|
String discovererName,
|
|
ItemStack item,
|
|
long quantity,
|
|
Integer inventoryId
|
|
) {
|
|
|
|
item = ItemStackUtils.normalizeSpecialItems(item);
|
|
|
|
String serializedItem =
|
|
ItemStackUtils.serialize(
|
|
item
|
|
);
|
|
|
|
if (serializedItem == null) {
|
|
return;
|
|
}
|
|
|
|
boolean enableUncategorized =
|
|
RSWarehouse.getInstance()
|
|
.getConfig()
|
|
.getBoolean(
|
|
"allow-uncategorized-item-creation",
|
|
true
|
|
);
|
|
|
|
if (
|
|
inventoryId == null
|
|
&& !enableUncategorized
|
|
) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (inventoryId != null) {
|
|
|
|
long previousQuantity =
|
|
InventoryQuantityDAO.getInventoryQuantity(
|
|
inventoryId
|
|
);
|
|
|
|
InventoryQuantityDAO.updateInventoryQuantity(
|
|
inventoryId,
|
|
quantity
|
|
);
|
|
|
|
if (previousQuantity == 0) {
|
|
|
|
DiscoveryDAO.assignDiscovererIfNull(
|
|
inventoryId,
|
|
discovererUuid,
|
|
discovererName
|
|
);
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
inventoryId =
|
|
InventoryCreationDAO.createInventoryItem(
|
|
item,
|
|
quantity,
|
|
discovererUuid,
|
|
discovererName
|
|
);
|
|
|
|
if (inventoryId == -1) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
WarehouseReferenceDAO.createWarehouseItemReference(
|
|
item,
|
|
inventoryId
|
|
);
|
|
|
|
}
|
|
|
|
public static WarehouseItem getItemById(
|
|
int itemId
|
|
) {
|
|
|
|
try (
|
|
|
|
Connection connection =
|
|
DatabaseManager.getConnection()
|
|
|
|
) {
|
|
|
|
PreparedStatement statement =
|
|
connection.prepareStatement(
|
|
"""
|
|
SELECT
|
|
wi.*,
|
|
inv.quantity,
|
|
inv.discoverer_uuid,
|
|
inv.discoverer_name,
|
|
inv.discovered_date
|
|
FROM warehouse_items wi
|
|
LEFT JOIN warehouse_inventory inv
|
|
ON wi.inventory_id = inv.id
|
|
WHERE wi.id = ?
|
|
"""
|
|
);
|
|
|
|
statement.setInt(
|
|
1,
|
|
itemId
|
|
);
|
|
|
|
ResultSet resultSet =
|
|
statement.executeQuery();
|
|
|
|
if (resultSet.next()) {
|
|
|
|
return new WarehouseItem(
|
|
|
|
resultSet.getInt("id"),
|
|
|
|
resultSet.getInt("category_id"),
|
|
resultSet.getString("serialized_item"),
|
|
|
|
resultSet.getString("default_lore"),
|
|
|
|
resultSet.getObject("inventory_id") == null
|
|
? null
|
|
: resultSet.getInt("inventory_id"),
|
|
|
|
resultSet.getObject("subcategory_id") == null
|
|
? null
|
|
: resultSet.getInt("subcategory_id"),
|
|
|
|
resultSet.getLong("quantity"),
|
|
|
|
resultSet.getString("discoverer_uuid"),
|
|
|
|
resultSet.getString("discoverer_name"),
|
|
|
|
resultSet.getString("discovered_date"),
|
|
|
|
resultSet.getObject("page") == null
|
|
? null
|
|
: resultSet.getInt("page"),
|
|
|
|
resultSet.getObject("slot") == null
|
|
? null
|
|
: resultSet.getInt("slot")
|
|
);
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
public static List<WarehouseItem> getItemsForCategory(
|
|
int categoryId
|
|
) {
|
|
|
|
List<WarehouseItem> items =
|
|
new ArrayList<>();
|
|
|
|
try (
|
|
|
|
Connection connection =
|
|
DatabaseManager.getConnection()
|
|
|
|
) {
|
|
|
|
PreparedStatement statement =
|
|
connection.prepareStatement(
|
|
"""
|
|
|
|
SELECT
|
|
wi.*,
|
|
inv.quantity,
|
|
inv.discoverer_uuid,
|
|
inv.discoverer_name,
|
|
inv.discovered_date
|
|
FROM warehouse_items wi
|
|
LEFT JOIN warehouse_inventory inv
|
|
ON wi.inventory_id = inv.id
|
|
WHERE wi.category_id = ?
|
|
ORDER BY wi.id
|
|
"""
|
|
);
|
|
|
|
statement.setInt(
|
|
1,
|
|
categoryId
|
|
);
|
|
|
|
ResultSet resultSet =
|
|
statement.executeQuery();
|
|
|
|
while (resultSet.next()) {
|
|
|
|
items.add(
|
|
new WarehouseItem(
|
|
|
|
resultSet.getInt("id"),
|
|
|
|
resultSet.getInt("category_id"),
|
|
|
|
resultSet.getString("serialized_item"),
|
|
|
|
resultSet.getString("default_lore"),
|
|
|
|
resultSet.getObject("inventory_id") == null
|
|
? null
|
|
: resultSet.getInt("inventory_id"),
|
|
|
|
resultSet.getObject("subcategory_id") == null
|
|
? null
|
|
: resultSet.getInt("subcategory_id"),
|
|
|
|
resultSet.getLong("quantity"),
|
|
|
|
resultSet.getString("discoverer_uuid"),
|
|
|
|
resultSet.getString("discoverer_name"),
|
|
|
|
resultSet.getString("discovered_date"),
|
|
|
|
resultSet.getObject("page") == null
|
|
? null
|
|
: resultSet.getInt("page"),
|
|
|
|
resultSet.getObject("slot") == null
|
|
? null
|
|
: resultSet.getInt("slot")
|
|
)
|
|
);
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return items;
|
|
|
|
}
|
|
|
|
public static void removeItem(
|
|
ItemStack item,
|
|
long quantity
|
|
) {
|
|
|
|
Integer inventoryId =
|
|
InventoryLookupDAO.findInventoryId(
|
|
item
|
|
);
|
|
|
|
if (inventoryId == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
InventoryQuantityDAO.removeInventoryQuantity(
|
|
inventoryId,
|
|
quantity
|
|
);
|
|
|
|
}
|
|
|
|
public static void addItem(
|
|
String discovererUuid,
|
|
String discovererName,
|
|
ItemStack item,
|
|
long quantity
|
|
) {
|
|
|
|
addItem(
|
|
discovererUuid,
|
|
discovererName,
|
|
item,
|
|
quantity,
|
|
InventoryLookupDAO.findInventoryId(
|
|
item
|
|
)
|
|
);
|
|
|
|
}
|
|
|
|
public static boolean categoryHasItems(
|
|
int categoryId
|
|
) {
|
|
|
|
try (
|
|
|
|
Connection connection =
|
|
DatabaseManager.getConnection();
|
|
|
|
PreparedStatement statement =
|
|
connection.prepareStatement(
|
|
"""
|
|
SELECT COUNT(*)
|
|
FROM warehouse_items
|
|
WHERE category_id = ?
|
|
"""
|
|
)
|
|
|
|
) {
|
|
|
|
statement.setInt(
|
|
1,
|
|
categoryId
|
|
);
|
|
|
|
ResultSet resultSet =
|
|
statement.executeQuery();
|
|
|
|
if (resultSet.next()) {
|
|
|
|
return resultSet.getInt(
|
|
1
|
|
) > 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception exception) {
|
|
|
|
exception.printStackTrace();
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|