Files
BE_IBL/application/controllers/etl/Top3kelainan.php
2026-04-15 15:23:57 +07:00

186 lines
7.7 KiB
PHP

<?php
class Top3kelainan extends MY_Controller
{
var $db;
public function __construct()
{
parent::__construct();
}
public function index()
{
echo "ETL MCU Top 3 Kelainan";
}
function reply($resp)
{
echo json_encode($resp);
}
function newTop3Kelainan($mgmMcuID)
{
// Mcu_KelainanID,
// Mcu_KelainanGroupID,
// Mcu_KelainanName,
// Mcu_KelainanGroupName,
$sql = "SELECT
COUNT(distinct Mgm_HeaderT_OrderHeaderID) AS xTotalPerItem,
if (Mcu_KelainanGroupID IN (2,3,16,22,17,18,19,20,28,29) , Mcu_KelainanGroupName, Mcu_KelainanName) as Mcu_KelainanGroupName
, if (Mcu_KelainanGroupID IN (2,3,16,22,17,18,19,20,28,29) , Mcu_KelainanGroupID, 0) as Mcu_KelainanGroupID
, if (Mcu_KelainanGroupID NOT IN (2,3,16,22,17,18,19,20,28,29) , Mcu_KelainanID,0) as Mcu_KelainanID
, Mgm_HeaderMgm_McuID
FROM
one_etl.mgm_header
JOIN one_etl.mgm_detail
ON Mgm_HeaderID = Mgm_DetailMgm_HeaderID
AND Mgm_HeaderIsActive = 'Y'
AND Mgm_DetailIsActive = 'Y'
JOIN one_etl.mcu_kelainangroup
ON Mgm_DetailMcu_KelainanGroupID = Mcu_KelainanGroupID
AND Mcu_KelainanGroupIsActive = 'Y'
join one_etl.mcu_kelainan on Mgm_DetailMcu_KelainanID = Mcu_KelainanID and Mcu_KelainanIsActive = 'Y'
WHERE
Mgm_HeaderMgm_McuID = {$mgmMcuID} and Mcu_KelainanName <> 'Normal' and Mcu_KelainanGroupID not in (1,5)
and Mcu_KelainanID not in (63,12)
GROUP BY
Mcu_KelainanID,
Mcu_KelainanGroupName
ORDER BY
xTotalPerItem DESC";
$qry = $this->db->query($sql, array());
if (!$qry) {
// $this->db->trans_rollback();
$this->sys_error_db("Error get raw top 3 kelainan");
exit;
}
$allKelainan = $qry->result_array();
$group = [2, 3, 16, 22, 17, 18, 19, 20, 28, 29];
$newKelainan = [];
$tmpGroupID = [];
for ($i = 0; $i < count($allKelainan); $i++) {
$data = $allKelainan[$i];
if (in_array(intval($data['Mcu_KelainanGroupID']), $group)) {
$groupID = $data['Mcu_KelainanGroupID'];
// Jika sudah ada di hasil, tambahkan xTotalPerItem
if (in_array($groupID, $tmpGroupID)) {
if (count($newKelainan) == 0) {
$newKelainan[] = $data;
}
for ($m = 0; $m < count($newKelainan); $m++) {
if ($groupID == $newKelainan[$m]['Mcu_KelainanGroupID']) {
$newKelainan[$m]['xTotalPerItem'] = (int)$data['xTotalPerItem'] + (int)$newKelainan[$m]['xTotalPerItem'];
}
}
} else {
// Jika belum ada, masukkan data awal
$newKelainan[] = [
"xTotalPerItem" => (int)$data['xTotalPerItem'],
"Mcu_KelainanGroupName" => $data['Mcu_KelainanGroupName'],
"Mcu_KelainanGroupID" => $groupID,
"Mcu_KelainanID" => $data['Mcu_KelainanID'],
"Mgm_HeaderMgm_McuID" => $data['Mgm_HeaderMgm_McuID']
];
$tmpGroupID[] = $groupID;
}
} else {
$newKelainan[] = $data;
}
}
usort($newKelainan, function ($a, $b) {
return $b['xTotalPerItem'] - $a['xTotalPerItem'];
});
// Mendapatkan 3 data teratas
$topThree = array_slice($newKelainan, 0, 3);
$result = array(
'allKelainan' => $allKelainan,
'newKelainan' => $newKelainan,
'top3Kelainan' => $topThree
);
$this->sys_ok($result);
}
function getTop3Kelainan($mgmMcuID)
{
$sql = "call sp_etl_top3_kelainan({$mgmMcuID});";
$qry = $this->db->query($sql, array());
$last_qry = $this->db->last_query();
if (!$qry) {
// $this->db->trans_rollback();
$error = array(
"message" => $this->db->error()["message"],
"sql" => $last_qry
);
$this->sys_error_db($error, $this->db);
exit;
}
$result = $qry->result_array();
$this->clean_mysqli_connection($this->db->conn_id);
$sql = "UPDATE one_etl.mcu_top3_kelainan
SET Mcu_Top3KelainanIsActive = 'N'
WHERE Mcu_Top3KelainanMgm_McuID = '{$mgmMcuID}'";
$qry = $this->db->query($sql, array());
$last_qry = $this->db->last_query();
if (!$qry) {
// $this->db->trans_rollback();
$this->sys_error_db("Error delete top 3 kelainan");
exit;
}
for ($i = 0; $i < count($result); $i++) {
// {
// "xTotalPerItem": "146",
// "Mcu_KelainanGroupName": "Gangguan Refraksi",
// "Mcu_KelainanGroupID": "3",
// "Mcu_KelainanID": "0",
// "Mgm_HeaderMgm_McuID": "23",
// "Percentage": "80.6600",
// "description": ""
// }
$sql = "SELECT Mcu_Top3KelainanID as id FROM
one_etl.mcu_top3_kelainan
WHERE Mcu_Top3KelainanMcu_KelainanGroupID = '{$result[$i]['Mcu_KelainanGroupID']}'
AND Mcu_Top3KelainanMcuKelainanID = '{$result[$i]['Mcu_KelainanID']}'
AND Mcu_Top3KelainanMgm_McuID = '{$result[$i]['Mgm_HeaderMgm_McuID']}'
AND Mcu_Top3KelainanIsActive = 'Y'";
$qry = $this->db->query($sql, array());
$last_qry = $this->db->last_query();
if (!$qry) {
// $this->db->trans_rollback();
$this->sys_error_db("Error cek top 3 kdelainan");
exit;
}
$cekID = $qry->result_array();
// if (count($cekID) > 0) {
// }
$sql = "INSERT INTO one_etl.mcu_top3_kelainan(
Mcu_Top3KelainanXTotalPerItem,
Mcu_Top3KelainanMcu_KelainangroupName,
Mcu_Top3KelainanMcu_KelainanGroupID,
Mcu_Top3KelainanMcuKelainanID,
Mcu_Top3KelainanMgm_McuID,
Mcu_Top3KelainanPercentage,
Mcu_Top3KelainanDescription)
VALUES(
'{$result[$i]['xTotalPerItem']}',
'{$result[$i]['Mcu_KelainanGroupName']}',
'{$result[$i]['Mcu_KelainanGroupID']}',
'{$result[$i]['Mcu_KelainanID']}',
'{$result[$i]['Mgm_HeaderMgm_McuID']}',
'{$result[$i]['Percentage']}',
'{$result[$i]['description']}'
);
";
$qry = $this->db->query($sql, array());
$last_qry = $this->db->last_query();
if (!$qry) {
// $this->db->trans_rollback();
$this->sys_error_db("Error insert top 3 kdelainan");
exit;
}
}
$this->sys_ok("Success");
}
}