hdpos/src/main/java/com/example/services/ItemService.java

339 lines
16 KiB
Java

package com.example.services;
import com.example.services.item.Item;
import com.example.services.item.ItemOption;
import com.example.services.item.ItemPrice;
import com.example.services.item.ItemStock;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Path("/items")
public class ItemService {
private static final Logger logger = LoggerFactory.getLogger(DatabaseConnectDOTSOFT.class);
@GET
@Path("/{itemId}")
@Produces(MediaType.APPLICATION_JSON)
public Response getItemById(
@PathParam("itemId") String itemId,
@QueryParam("dbHost") String dbHost) {
if (itemId == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build();
} else if (itemId.length() < 6) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build();
}
if (dbHost == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
}
DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) {
String query = "SELECT * FROM dtv.ITM_ITEM WHERE ORGANIZATION_ID = 1 AND ITEM_ID LIKE ?";
logger.info(query);
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
// Concatenate % to parameter itemId
statement.setString(1, itemId + "%");
try (ResultSet resultSet = statement.executeQuery()) {
List<Item> itemList = new ArrayList<>();
while (resultSet.next()) {
Item item = mapResultSetToItem(resultSet);
itemList.add(item);
}
ObjectMapper objectMapper = new ObjectMapper();
String jsonResponse = objectMapper.writeValueAsString(itemList);
return Response.ok(jsonResponse).build();
}
}
} catch (SQLException e) {
e.printStackTrace();
String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
} catch (JsonProcessingException e) {
e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
}
}
@GET
@Path("/{itemId}/options")
@Produces(MediaType.APPLICATION_JSON)
public Response getItemOptionsById(
@PathParam("itemId") String itemId,
@QueryParam("dbHost") String dbHost) {
if (itemId == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build();
} else if (itemId.length() < 6) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build();
}
if (dbHost == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
}
DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) {
String query = "SELECT item_id,level_code,level_value,item_availability_code,tax_group_id,Vendor,season_code,create_date,create_user_id,update_date,update_user_id " +
"FROM dtv.ITM_ITEM_OPTIONS " +
"WHERE ORGANIZATION_ID = 1 AND ITEM_ID LIKE ?";
logger.info(query);
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
// Concatenate % to parameter itemId
statement.setString(1, itemId + "%");
try (ResultSet resultSet = statement.executeQuery()) {
List<ItemOption> itemOptionList = new ArrayList<>();
while (resultSet.next()) {
ItemOption itemOption = mapResultSetToItemOptionDetails(resultSet);
itemOptionList.add(itemOption);
}
ObjectMapper objectMapper = new ObjectMapper();
String jsonResponse = objectMapper.writeValueAsString(itemOptionList);
return Response.ok(jsonResponse).build();
}
}
} catch (SQLException e) {
e.printStackTrace();
String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
} catch (JsonProcessingException e) {
e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
}
}
@GET
@Path("/{itemId}/price")
@Produces(MediaType.APPLICATION_JSON)
public Response getItemPricesById(
@PathParam("itemId") String itemId,
@QueryParam("dbHost") String dbHost) {
if (itemId == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build();
} else if (itemId.length() < 6) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build();
}
if (dbHost == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
}
DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) {
String query = "SELECT item_id, level_code, level_value, itm_price_property_code, effective_date, expiration_date, price, price_qty, external_id, external_system, create_date, create_user_id, update_date, update_user_id " +
"FROM dtv.itm_item_prices " +
"WHERE organization_id = 1 AND item_id LIKE ?";
logger.info(query);
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
// Concatenate % to parameter itemId
statement.setString(1, itemId + "%");
try (ResultSet resultSet = statement.executeQuery()) {
List<ItemPrice> itemPriceList = new ArrayList<>();
while (resultSet.next()) {
ItemPrice itemPrice = mapResultSetToItemPriceDetails(resultSet);
itemPriceList.add(itemPrice);
}
ObjectMapper objectMapper = new ObjectMapper();
String jsonResponse = objectMapper.writeValueAsString(itemPriceList);
return Response.ok(jsonResponse).build();
}
}
} catch (SQLException e) {
e.printStackTrace();
String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
} catch (JsonProcessingException e) {
e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
}
}
@GET
@Path("/{itemId}/stock")
@Produces(MediaType.APPLICATION_JSON)
public Response getItemStocksById(
@PathParam("itemId") String itemId,
@QueryParam("dbHost") String dbHost) {
if (itemId == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"itemId parameter is required\"}").build();
} else if (itemId.length() < 6) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"Length of itemId must be greater than or equal to 6\"}").build();
}
if (dbHost == null) {
return Response.status(Response.Status.BAD_REQUEST).entity("{\"error\":\"dbHost parameter is required\"}").build();
}
DriverManager.setLoginTimeout(5); // Définir le timeout à 5 secondes
try (DatabaseConnectXSTORE databaseConnection = new DatabaseConnectXSTORE(dbHost, "dtv")) {
String query = "SELECT organization_id,rtl_loc_id,inv_location_id,bucket_id,item_id, unitcount,inventory_value,create_date, create_user_id,update_date , update_user_id " +
"FROM dtv.inv_stock_ledger_acct " +
"WHERE organization_id = 1 AND item_id LIKE ?";
logger.info(query);
try (PreparedStatement statement = databaseConnection.getConnection().prepareStatement(query)) {
// Concatenate % to parameter itemId
statement.setString(1, itemId + "%");
try (ResultSet resultSet = statement.executeQuery()) {
List<ItemStock> itemStockList = new ArrayList<>();
while (resultSet.next()) {
ItemStock itemStock = mapResultSetToItemStockDetails(resultSet);
itemStockList.add(itemStock);
}
ObjectMapper objectMapper = new ObjectMapper();
String jsonResponse = objectMapper.writeValueAsString(itemStockList);
return Response.ok(jsonResponse).build();
}
}
} catch (SQLException e) {
e.printStackTrace();
String errorResponse = "{\"error\":\"" + e.getMessage() + "\"}";
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(errorResponse).build();
} catch (JsonProcessingException e) {
e.printStackTrace(); // Gérer les exceptions correctement dans un environnement de production
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("{\"error\":\"Error processing JSON\"}").build();
}
}
private Item mapResultSetToItem(ResultSet resultSet) throws SQLException {
Item item = new Item();
item.setOrganizationId(resultSet.getLong("ORGANIZATION_ID"));
item.setItemId(resultSet.getString("ITEM_ID"));
item.setOrgCode(resultSet.getString("ORG_CODE"));
item.setOrgValue(resultSet.getString("ORG_VALUE"));
item.setName(resultSet.getString("NAME"));
item.setDescription(resultSet.getString("DESCRIPTION"));
item.setMerchLevel1(resultSet.getString("MERCH_LEVEL_1"));
item.setMerchLevel2(resultSet.getString("MERCH_LEVEL_2"));
item.setMerchLevel3(resultSet.getString("MERCH_LEVEL_3"));
item.setMerchLevel4(resultSet.getString("MERCH_LEVEL_4"));
item.setListPrice(resultSet.getInt("LIST_PRICE"));
item.setMeasureReqFlag(resultSet.getInt("MEASURE_REQ_FLAG"));
item.setItemLevelCode(resultSet.getString("ITEM_LVLCODE"));
item.setParentItemId(resultSet.getString("PARENT_ITEM_ID"));
item.setNotInventoriedFlag(resultSet.getInt("NOT_INVENTORIED_FLAG"));
item.setSerializedItemFlag(resultSet.getInt("SERIALIZED_ITEM_FLAG"));
item.setItemTypeCode(resultSet.getString("ITEM_TYPCODE"));
item.setDtvClassName(resultSet.getString("DTV_CLASS_NAME"));
item.setDimensionSystem(resultSet.getString("DIMENSION_SYSTEM"));
item.setDisallowMatrixDisplayFlag(resultSet.getInt("DISALLOW_MATRIX_DISPLAY_FLAG"));
item.setItemMatrixColor(resultSet.getString("ITEM_MATRIX_COLOR"));
item.setDimension1(resultSet.getString("DIMENSION1"));
item.setDimension2(resultSet.getString("DIMENSION2"));
item.setDimension3(resultSet.getString("DIMENSION3"));
item.setExternalSystem(resultSet.getString("EXTERNAL_SYSTEM"));
item.setCreateDate(resultSet.getDate("CREATE_DATE"));
item.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
item.setUpdateDate(resultSet.getDate("UPDATE_DATE"));
item.setUpdateUserId(resultSet.getString("UPDATE_USER_ID"));
return item;
}
private ItemOption mapResultSetToItemOptionDetails(ResultSet resultSet) throws SQLException {
ItemOption itemOption = new ItemOption();
itemOption.setItemId(resultSet.getString("ITEM_ID"));
itemOption.setLevelCode(resultSet.getString("LEVEL_CODE"));
itemOption.setLevelValue(resultSet.getString("LEVEL_VALUE"));
itemOption.setItemAvailabilityCode(resultSet.getString("ITEM_AVAILABILITY_CODE"));
itemOption.setTaxGroupId(resultSet.getString("TAX_GROUP_ID"));
itemOption.setVendor(resultSet.getString("VENDOR"));
itemOption.setSeasonCode(resultSet.getString("SEASON_CODE"));
itemOption.setCreateDate(resultSet.getDate("CREATE_DATE"));
itemOption.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
itemOption.setUpdateDate(resultSet.getDate("UPDATE_DATE"));
itemOption.setUpdateUserId(resultSet.getString("UPDATE_USER_ID"));
return itemOption;
}
private ItemPrice mapResultSetToItemPriceDetails(ResultSet resultSet) throws SQLException {
ItemPrice itemPrices = new ItemPrice();
itemPrices.setItemId(resultSet.getString("ITEM_ID"));
itemPrices.setLevelCode(resultSet.getString("LEVEL_CODE"));
itemPrices.setLevelValue(resultSet.getString("LEVEL_VALUE"));
itemPrices.setItmPricePropertyCode(resultSet.getString("ITM_PRICE_PROPERTY_CODE"));
itemPrices.setEffectiveDate(resultSet.getDate("EFFECTIVE_DATE"));
itemPrices.setExpirationDate(resultSet.getDate("EXPIRATION_DATE"));
itemPrices.setPrice(resultSet.getDouble("PRICE"));
itemPrices.setPriceQty(resultSet.getDouble("PRICE_QTY"));
itemPrices.setExternalId(resultSet.getString("EXTERNAL_ID"));
itemPrices.setExternalSystem(resultSet.getString("EXTERNAL_SYSTEM"));
itemPrices.setCreateDate(resultSet.getDate("CREATE_DATE"));
itemPrices.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
itemPrices.setUpdateDate(resultSet.getDate("UPDATE_DATE"));
itemPrices.setUpdateUserId(resultSet.getString("UPDATE_USER_ID"));
return itemPrices;
}
private ItemStock mapResultSetToItemStockDetails(ResultSet resultSet) throws SQLException {
ItemStock itemStock = new ItemStock();
itemStock.setOrganizationId(resultSet.getString("ORGANIZATION_ID"));
itemStock.setRtlLocId(resultSet.getString("RTL_LOC_ID"));
itemStock.setInvLocationId(resultSet.getString("INV_LOCATION_ID"));
itemStock.setBucketId(resultSet.getString("BUCKET_ID"));
itemStock.setItemId(resultSet.getString("ITEM_ID"));
itemStock.setUnitCount(resultSet.getInt("UNITCOUNT"));
itemStock.setInventoryValue(resultSet.getDouble("INVENTORY_VALUE"));
itemStock.setCreateDate(resultSet.getDate("CREATE_DATE"));
itemStock.setCreateUserId(resultSet.getString("CREATE_USER_ID"));
itemStock.setUpdateDate(resultSet.getDate("UPDATE_DATE"));
itemStock.setUpdateUserId(resultSet.getString("UPDATE_USER_ID"));
return itemStock;
}
}