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

251 lines
7.9 KiB
PHP

<?php
/*
create table danone(
danoneID int not null auto_increment primary key,
T_OrderHeaderID int,
M_BranchName varchar(100),
T_OrderHeaderLabNumber varchar(50),
T_OrderHeaderLabNumberExt varchar(50),
T_OrderHeaderDate varchar(50),
NAMA varchar(50),
shareID varchar(50),
M_PatientNIK varchar(50),
M_PatientIDNumber varchar(50),
JENISKELAMIN varchar(50),
M_PatientDOB varchar(50),
T_OrderHeaderM_PatientAge varchar(100),
M_PatientJabatan varchar(200),
M_PatientKedudukan varchar(200),
M_PatientPJ varchar(200),
M_PatientJob varchar(200),
M_PatientLocation varchar(300),
M_CompanyName varchar(300),
M_MouName varchar(300),
M_CompanyID int,
M_MouID int,
key(T_OrderHeaderID)
);
create table danone_detail(
danoneDetailID int not null auto_increment primary key,
danoneDetailDanoneID int,
T_OrderHeaderID int,
T_TestSasCode varchar(50),
T_TestName varchar(300),
Result text,
key(T_OrderHeaderID),
key(danoneDetailDanoneID)
);
create table danone_json(
danoneJsonID int not null auto_increment primary key,
danoneJsonDanoneID int,
T_OrderHeaderID int,
title varchar(300),
subtitle varchar(300),
label_flag_normal varchar(10),
flag_normal varchar(1),
show_all varchar(1),
type_form varchar(10),
T_TestName varchar(300),
So_ResultEntryFisikUmumType varchar(100),
name varchar(100),
table_name varchar(100),
segment_name varchar(100),
id_code varchar(100),
lang_id int,
label varchar(100),
is_normal varchar(1),
chx bool,
value varchar(300),
value_x varchar(300),
kesimpulan varchar(300),
is_inspected varchar(1),
key(danoneJsonDanoneID),
key(T_OrderHeaderID)
);
*/
class Danone extends MY_Controller
{
function __construct()
{
parent::__construct();
}
function index()
{
}
function mou($mouID,$start,$end) {
$start = "$start 00:00:01";
$end = "$end 23:59:59";
$sql = "select T_OrderHeaderID from t_orderheader where T_OrderHeaderM_MouID=? and T_OrderHeaderDate >= ?
and T_OrderHeaderDate <= ? and T_OrderHeaderIsActive = 'Y'";
$qry = $this->db->query($sql,[$mouID,$start,$end]);
if (!$qry) {
$this->log("Error Processing Mou ID : $mouID, start : $start , end : $end \n");
return;
}
$h_rows = $qry->result_array();
if (count($h_rows) == 0) {
echo "Tidak ada Order Mou $mouID dari tanggal $start s/d $end";
exit;
}
foreach($h_rows as $h) {
$orderHeaderID = $h["T_OrderHeaderID"];
$this->process($orderHeaderID);
}
}
function json($orderHeaderID, $danoneID)
{
$url = "http://localhost/one-api/v1/adhi/fisik/Fisik03/json/$orderHeaderID";
$data = file_get_contents($url);
$dataJson = json_decode($data, true);
$this->log("\tProcessing Json\n");
foreach ($dataJson as $r) {
$arr = [
"T_OrderHeaderID" => $orderHeaderID,
"danoneJsonDanoneID" => $danoneID,
"title" => $r["title"],
"subtitle" => $r["subtitle"],
"label_flag_normal" => $r["label_flag_normal"],
"flag_normal" => $r["flag_normal"],
"flag_normal" => $r["flag_normal"],
"show_all" => $r["show_all"],
"type_form" => $r["type_form"],
"T_TestName" => $r["T_TestName"],
"So_ResultEntryFisikUmumType" => $r["So_ResultEntryFisikUmumType"],
"name" => $r["name"],
"table_name" => $r["table_name"],
"segment_name" => $r["segment_name"],
"id_code" => $r["id_code"],
"lang_id" => $r["lang_id"],
"label" => $r["label"],
"is_normal" => $r["is_normal"],
"chx" => $r["chx"],
"value" => $r["value"],
"value_x" => $r["value_x"],
"kesimpulan" => $r["kesimpulan"],
"is_inspected" => $r["is_inspected"],
];
$qry = $this->db->insert("one_etl.danone_json", $arr);
if (!$qry) {
echo "Error insert one_etl.danone_json, " . $this->db->error()["message"];
$this->db->trans_rollback();
return;
}
}
}
function log($msg) {
echo Date("Y-m-d H:i:s") . " " . $msg . "\n";
}
function process($orderHeaderID)
{
//get from sp
$this->log("Processing T_OrderHeaderID : " . $orderHeaderID);
$sql = "call sp_rpt_r_mcu_resume(?,'')";
$qry = $this->db->query($sql, [$orderHeaderID]);
if (!$qry) {
$this->log("\tError Processing T_OrderHeaderID : $orderHeaderID, " . $this->db->error()["message"]);
return;
}
$this->clean_mysqli_connection($this->db->conn_id);
$rows = $qry->result_array();
$isFirst = true;
$this->db->trans_begin();
//cleaning
$this->log("Clearing existing snapshot for T_OrderHeaderID $orderHeaderID");
$sql = "delete from one_etl.danone where T_OrderHeaderID = ?";
$qry = $this->db->query($sql,[$orderHeaderID]);
if(!$qry) {
$this->db->trans_rollback();
$this->log("Error clean one_etl.danone " . $this->db->error()["message"]);
return;
}
$sql = "delete from one_etl.danone_detail where T_OrderHeaderID = ?";
$qry = $this->db->query($sql,[$orderHeaderID]);
if(!$qry) {
$this->db->trans_rollback();
$this->log("Error clean one_etl.danone_detail" . $this->db->error()["message"]);
return;
}
$sql = "delete from one_etl.danone_json where T_OrderHeaderID = ?";
$qry = $this->db->query($sql,[$orderHeaderID]);
if(!$qry) {
$this->db->trans_rollback();
$this->log("Error clean one_etl.danone_json" . $this->db->error()["message"]);
return;
}
$danoneID = 0;
$this->log("\tProcessing : one_etl.danone_detail ");
foreach ($rows as $r) {
if ($isFirst) {
$arr = [
"T_OrderHeaderID" => $r["T_OrderHeaderID"],
"M_BranchName" => $r["M_BranchName"],
"T_OrderHeaderLabNumber" => $r["T_OrderHeaderLabNumber"],
"T_OrderHeaderLabNumberExt" => $r["T_OrderHeaderLabNumberExt"],
"T_OrderHeaderDate" => $r["T_OrderHeaderDate"],
"NAMA" => $r["NAMA"],
"shareID" => $r["shareID"],
"M_PatientNIK" => $r["M_PatientNIK"],
"M_PatientIDNumber" => $r["M_PatientIDNumber"],
"JENISKELAMIN" => $r["JENISKELAMIN"],
"M_PatientDOB" => $r["M_PatientDOB"],
"T_OrderHeaderM_PatientAge" => $r["T_OrderHeaderM_PatientAge"],
"M_PatientJabatan" => $r["M_PatientJabatan"],
"M_PatientKedudukan" => $r["M_PatientKedudukan"],
"M_PatientPJ" => $r["M_PatientPJ"],
"M_PatientJob" => $r["M_PatientJob"],
"M_PatientLocation" => $r["M_PatientLocation"],
"M_CompanyName" => $r["M_CompanyName"],
"M_MouName" => $r["M_MouName"],
"M_CompanyID" => $r["M_CompanyID"],
"M_MouID" => $r["M_MouID"]
];
$qry = $this->db->insert("one_etl.danone", $arr);
if (!$qry) {
$this->log("Error insert one_etl.danone , " . $this->db->error()["message"]);
$this->db->trans_rollback();
return;
}
$danoneID = $this->db->insert_id();
$isFirst = false;
}
$arr = [
"danoneDetailDanoneID" => $danoneID,
"T_OrderHeaderID" => $r["T_OrderHeaderID"],
"T_TestSasCode" => $r["T_TestSasCode"],
"T_TestName" => $r["T_TestName"],
"Result" => $r["Mcu_ResumeDetailsResult"]
];
$qry = $this->db->insert("one_etl.danone_detail", $arr);
if (!$qry) {
$this->log("Error insert one_etl.danone_detail , " . $this->db->error()["message"]);
$this->db->trans_rollback();
return;
}
}
if ($danoneID > 0) {
$this->json($orderHeaderID, $danoneID);
}
$this->db->trans_commit();
//get from json
$this->log("Done Processing T_OrderHeaderID : " . $orderHeaderID);
$this->log("Wait 3 second");
sleep(3);
}
function demo()
{
$sql = "select count(distinct nik) total from stage_01";
$qry = $this->db->query($sql);
$total = 0;
if ($qry) {
$total = $qry->result_array()[0]["total"];
}
echo $total;
}
}