fix the simulation tables used

main
MrWaradana 2 weeks ago
parent 37a67c2fd2
commit 835224a854

@ -144,22 +144,32 @@ def main():
try:
conn.autocommit = False
except Exception:
# Kalau driver tidak punya autocommit, abaikan
pass
cur = conn.cursor()
# Check for simulation ID
simulation_id = os.environ.get("PLANT_SIMULATION_ID")
is_simulation = bool(simulation_id)
table_master = "lcc_ms_master_simulations" if is_simulation else "lcc_ms_master"
table_tr_data = "lcc_plant_tr_data_simulations" if is_simulation else "lcc_plant_tr_data"
def get_filter_where():
return f"WHERE simulation_id = '{simulation_id}'" if is_simulation else ""
def get_filter_and():
return f"AND simulation_id = '{simulation_id}'" if is_simulation else ""
# ### LOCKING: kunci tabel lcc_plant_tr_data
# Mode SHARE ROW EXCLUSIVE:
# - Menghalangi INSERT/UPDATE/DELETE di tabel ini
# - Menghalangi lock SHARE ROW EXCLUSIVE lain → script ngantri satu per satu
cur.execute("LOCK TABLE lcc_plant_tr_data IN SHARE ROW EXCLUSIVE MODE")
cur.execute(f"LOCK TABLE {table_tr_data} IN SHARE ROW EXCLUSIVE MODE")
# 0 Mendapatkan master parameter dari tabel lcc_ms_master
cur.execute("""
# 0 Mendapatkan master parameter dari tabel master
cur.execute(f"""
SELECT name,
value_num AS value
FROM lcc_ms_master
FROM {table_master}
{get_filter_where()}
""")
param_rows = cur.fetchall()
param_map = {name: val for (name, val) in param_rows}
@ -171,18 +181,18 @@ def main():
# 0-1 Generate New data Projection (is_actual=0) if not exist
# Hapus data projection lama (is_actual = 0)
cur.execute("""
cur.execute(f"""
DELETE
FROM lcc_plant_tr_data
WHERE is_actual = 0
FROM {table_tr_data}
WHERE is_actual = 0 {get_filter_and()}
""")
# Hitung kebutuhan jumlah baris projection baru agar total (actual + projection)
# sama dengan parameter umur_teknis
cur.execute("""
cur.execute(f"""
SELECT COALESCE(COUNT(*), 0)
FROM lcc_plant_tr_data
WHERE is_actual = 1
FROM {table_tr_data}
WHERE is_actual = 1 {get_filter_and()}
""")
count_actual = cur.fetchone()[0] if cur.rowcount != -1 else 0
@ -190,10 +200,10 @@ def main():
proj_needed = max(0, umur_teknis - int(count_actual))
# Ambil seq dan tahun terakhir sebagai titik awal penomoran berikutnya
cur.execute("SELECT COALESCE(MAX(seq), 0) FROM lcc_plant_tr_data")
cur.execute(f"SELECT COALESCE(MAX(seq), 0) FROM {table_tr_data} {get_filter_where()}")
last_seq = int(cur.fetchone()[0])
cur.execute("SELECT COALESCE(MAX(tahun), 0) FROM lcc_plant_tr_data")
cur.execute(f"SELECT COALESCE(MAX(tahun), 0) FROM {table_tr_data} {get_filter_where()}")
last_year = int(cur.fetchone()[0])
# Jika belum ada tahun sama sekali, gunakan tahun_cod-1 sebagai dasar
@ -213,17 +223,24 @@ def main():
next_seq += 1
next_year += 1
insert_sql = (
"INSERT INTO lcc_plant_tr_data (id, seq, tahun, is_actual, created_at, created_by) "
"VALUES (%s, %s, %s, 0, CURRENT_TIMESTAMP, 'SYS')"
)
if is_simulation:
insert_sql = (
f"INSERT INTO {table_tr_data} (id, seq, tahun, is_actual, created_at, created_by, simulation_id) "
f"VALUES (%s, %s, %s, 0, CURRENT_TIMESTAMP, 'SYS', '{simulation_id}')"
)
else:
insert_sql = (
f"INSERT INTO {table_tr_data} (id, seq, tahun, is_actual, created_at, created_by) "
"VALUES (%s, %s, %s, 0, CURRENT_TIMESTAMP, 'SYS')"
)
cur.executemany(insert_sql, values)
# 1. Ambil data awal
select_sql = """
select_sql = f"""
SELECT *
FROM lcc_plant_tr_data
ORDER BY seq \
FROM {table_tr_data}
{get_filter_where()}
ORDER BY seq
"""
cur.execute(select_sql)
@ -268,8 +285,8 @@ def main():
print(f"Jumlah baris yang akan di-update: {len(rows)}")
# 2. Siapkan data untuk bulk UPDATE
update_sql = """
UPDATE lcc_plant_tr_data
update_sql = f"""
UPDATE {table_tr_data}
SET net_capacity_factor = %s,
eaf = %s,
production_bruto = %s,
@ -337,7 +354,7 @@ def main():
chart_capex_acquisition_cost = %s,
chart_capex_annualized = %s,
cost_disposal_cost = %s
WHERE seq = %s \
WHERE seq = %s {get_filter_and()}
"""
# Ambil parameter dari tabel (fungsi get_param sudah kamu buat sebelumnya)
@ -724,10 +741,10 @@ def main():
ROA_TO_L = sum(calc2_earning_after_tax_array_sampai_sekarang) / sum(
total_residual_value_array_sampai_sekarang) * 100 # dalam %
update_kpi_sql = """
UPDATE lcc_ms_master
update_kpi_sql = f"""
UPDATE {table_master}
SET value_num = %s
WHERE name = %s \
WHERE name = %s {get_filter_and()}
"""
kpi_params_raw = [

Loading…
Cancel
Save