IDEMPIERE-4895 Product Cost - Valid Combination Caching (#805)

This commit is contained in:
igorpojzl 2021-08-03 07:00:46 +02:00 committed by GitHub
parent 1fb4067c01
commit 2cee3ff007
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 86 additions and 65 deletions

View File

@ -23,6 +23,7 @@ import java.sql.SQLException;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import org.compiere.util.CCache;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
@ -53,6 +54,12 @@ public class ProductCost
m_trxName = trxName; m_trxName = trxName;
} // ProductCost } // ProductCost
/** Valid Combination Cache */
private static CCache<String, Integer> s_valid_comb_cache = new CCache<String, Integer>("ProductCost_ValidCombination", 40);
/** Default Valid Compbination Cache */
private static CCache<String, Integer> s_default_valid_comb_cache = new CCache<String, Integer>("ProductCost_DefaultValidCombination", 40);
/** The ID */ /** The ID */
private int m_M_Product_ID = 0; private int m_M_Product_ID = 0;
/** ASI */ /** ASI */
@ -182,37 +189,44 @@ public class ProductCost
if (m_M_Product_ID == 0) if (m_M_Product_ID == 0)
return getAccountDefault(AcctType, as); return getAccountDefault(AcctType, as);
String sql = "SELECT P_Revenue_Acct, P_Expense_Acct, P_Asset_Acct, P_Cogs_Acct, " // 1..4 String key = m_M_Product_ID + "_" + as.getC_AcctSchema_ID() + "_" + AcctType;
+ "P_PurchasePriceVariance_Acct, P_InvoicePriceVariance_Acct, " // 5..6 Integer validCombination_ID = s_valid_comb_cache.get(key);
+ "P_TradeDiscountRec_Acct, P_TradeDiscountGrant_Acct," // 7..8
+ "P_CostAdjustment_Acct, P_InventoryClearing_Acct," // 9..10 if(validCombination_ID == null || validCombination_ID == 0) {
+ "P_WIP_Acct,P_MethodChangeVariance_Acct,P_UsageVariance_Acct," // 11.12.13 String sql = "SELECT P_Revenue_Acct, P_Expense_Acct, P_Asset_Acct, P_Cogs_Acct, " // 1..4
+ "P_RateVariance_Acct,P_MixVariance_Acct,P_FloorStock_Acct," // 14.15.16 + "P_PurchasePriceVariance_Acct, P_InvoicePriceVariance_Acct, " // 5..6
+ "P_CostOfProduction_Acct,P_Labor_Acct,P_Burden_Acct,P_OutsideProcessing_Acct," // 17.18,19,20 + "P_TradeDiscountRec_Acct, P_TradeDiscountGrant_Acct," // 7..8
+ "P_Overhead_Acct,P_Scrap_Acct,P_AverageCostVariance_Acct," // 21,23 + "P_CostAdjustment_Acct, P_InventoryClearing_Acct," // 9..10
+ "P_LandedCostClearing_Acct " // 24 + "P_WIP_Acct,P_MethodChangeVariance_Acct,P_UsageVariance_Acct," // 11.12.13
+ "FROM M_Product_Acct " + "P_RateVariance_Acct,P_MixVariance_Acct,P_FloorStock_Acct," // 14.15.16
+ "WHERE M_Product_ID=? AND C_AcctSchema_ID=?"; + "P_CostOfProduction_Acct,P_Labor_Acct,P_Burden_Acct,P_OutsideProcessing_Acct," // 17.18,19,20
// + "P_Overhead_Acct,P_Scrap_Acct,P_AverageCostVariance_Acct," // 21,23
int validCombination_ID = 0; + "P_LandedCostClearing_Acct " // 24
PreparedStatement pstmt = null; + "FROM M_Product_Acct "
ResultSet rs = null; + "WHERE M_Product_ID=? AND C_AcctSchema_ID=?";
try //
{ validCombination_ID = 0;
pstmt = DB.prepareStatement(sql, null); PreparedStatement pstmt = null;
pstmt.setInt(1, m_M_Product_ID); ResultSet rs = null;
pstmt.setInt(2, as.getC_AcctSchema_ID()); try
rs = pstmt.executeQuery(); {
if (rs.next()) pstmt = DB.prepareStatement(sql, null);
validCombination_ID = rs.getInt(AcctType); pstmt.setInt(1, m_M_Product_ID);
} pstmt.setInt(2, as.getC_AcctSchema_ID());
catch (SQLException e) rs = pstmt.executeQuery();
{ if (rs.next())
log.log(Level.SEVERE, sql, e); validCombination_ID = rs.getInt(AcctType);
} }
finally { catch (SQLException e)
DB.close(rs, pstmt); {
rs = null; pstmt = null; log.log(Level.SEVERE, sql, e);
}
finally {
DB.close(rs, pstmt);
rs = null; pstmt = null;
}
if (validCombination_ID != 0)
s_valid_comb_cache.put(key, validCombination_ID);
} }
if (validCombination_ID == 0) if (validCombination_ID == 0)
return null; return null;
@ -231,38 +245,45 @@ public class ProductCost
if (AcctType < ACCTTYPE_P_Revenue || AcctType > ACCTTYPE_P_LandedCostClearing) if (AcctType < ACCTTYPE_P_Revenue || AcctType > ACCTTYPE_P_LandedCostClearing)
return null; return null;
String sql = "SELECT P_Revenue_Acct, P_Expense_Acct, P_Asset_Acct, P_Cogs_Acct, " String key = as.getC_AcctSchema_ID()+ "_" + AcctType;
+ "P_PurchasePriceVariance_Acct, P_InvoicePriceVariance_Acct, " Integer validCombination_ID = s_default_valid_comb_cache.get(key);
+ "P_TradeDiscountRec_Acct, P_TradeDiscountGrant_Acct, "
+ "P_CostAdjustment_Acct, P_InventoryClearing_Acct, " if(validCombination_ID == null || validCombination_ID == 0) {
+ "P_WIP_Acct,P_MethodChangeVariance_Acct,P_UsageVariance_Acct," // 11.12.13 String sql = "SELECT P_Revenue_Acct, P_Expense_Acct, P_Asset_Acct, P_Cogs_Acct, "
+ "P_RateVariance_Acct,P_MixVariance_Acct,P_FloorStock_Acct," // 14.15.16 + "P_PurchasePriceVariance_Acct, P_InvoicePriceVariance_Acct, "
+ "P_CostOfProduction_Acct,P_Labor_Acct,P_Burden_Acct,P_OutsideProcessing_Acct," // 17.18,19,20 + "P_TradeDiscountRec_Acct, P_TradeDiscountGrant_Acct, "
+ "P_Overhead_Acct,P_Scrap_Acct,P_AverageCostVariance_Acct," // 21,23 + "P_CostAdjustment_Acct, P_InventoryClearing_Acct, "
+ "P_LandedCostClearing_Acct " // 24 + "P_WIP_Acct,P_MethodChangeVariance_Acct,P_UsageVariance_Acct," // 11.12.13
+ "FROM M_Product_Category pc, M_Product_Category_Acct pca " + "P_RateVariance_Acct,P_MixVariance_Acct,P_FloorStock_Acct," // 14.15.16
+ "WHERE pc.M_Product_Category_ID=pca.M_Product_Category_ID" + "P_CostOfProduction_Acct,P_Labor_Acct,P_Burden_Acct,P_OutsideProcessing_Acct," // 17.18,19,20
+ " AND pca.C_AcctSchema_ID=? " + "P_Overhead_Acct,P_Scrap_Acct,P_AverageCostVariance_Acct," // 21,23
+ "ORDER BY pc.IsDefault DESC, pc.Created"; + "P_LandedCostClearing_Acct " // 24
// + "FROM M_Product_Category pc, M_Product_Category_Acct pca "
int validCombination_ID = 0; + "WHERE pc.M_Product_Category_ID=pca.M_Product_Category_ID"
PreparedStatement pstmt = null; + " AND pca.C_AcctSchema_ID=? "
ResultSet rs = null; + "ORDER BY pc.IsDefault DESC, pc.Created";
try //
{ validCombination_ID = 0;
pstmt = DB.prepareStatement(sql, null); PreparedStatement pstmt = null;
pstmt.setInt(1, as.getC_AcctSchema_ID()); ResultSet rs = null;
rs = pstmt.executeQuery(); try
if (rs.next()) {
validCombination_ID = rs.getInt(AcctType); pstmt = DB.prepareStatement(sql, null);
} pstmt.setInt(1, as.getC_AcctSchema_ID());
catch (SQLException e) rs = pstmt.executeQuery();
{ if (rs.next())
log.log(Level.SEVERE, sql, e); validCombination_ID = rs.getInt(AcctType);
} }
finally { catch (SQLException e)
DB.close(rs, pstmt); {
rs = null; pstmt = null; log.log(Level.SEVERE, sql, e);
}
finally {
DB.close(rs, pstmt);
rs = null; pstmt = null;
}
if (validCombination_ID != 0)
s_default_valid_comb_cache.put(key, validCombination_ID);
} }
if (validCombination_ID == 0) if (validCombination_ID == 0)
return null; return null;