Initial import
This commit is contained in:
370
application/controllers/tools/result_westone/Receive_result.php
Normal file
370
application/controllers/tools/result_westone/Receive_result.php
Normal file
@@ -0,0 +1,370 @@
|
||||
<?php
|
||||
class Receive_result extends MY_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->db_onedev = $this->load->database("onedev", true);
|
||||
$this->db_log = $this->load->database("cpone_log", true);
|
||||
$this->load->helper(array('form', 'url'));
|
||||
|
||||
// Increase PHP limits for large data processing
|
||||
ini_set('memory_limit', '256M');
|
||||
ini_set('max_execution_time', '300');
|
||||
ini_set('max_input_time', '300');
|
||||
}
|
||||
|
||||
function getInput()
|
||||
{
|
||||
$data = file_get_contents("php://input");
|
||||
if ($data === '' || $data === false) {
|
||||
if (isset($this->input)) {
|
||||
$data = $this->input->raw_input_stream;
|
||||
}
|
||||
}
|
||||
// Log raw body for debugging
|
||||
$data_size = strlen((string)$data);
|
||||
error_log("RECEIVE RAW LEN=".$data_size." (".round($data_size/1024/1024, 2)."MB)");
|
||||
error_log("RECEIVE RAW HEAD=".substr((string)$data, 0, 1000));
|
||||
|
||||
// Check if data size exceeds reasonable limits
|
||||
$max_size = 100 * 1024 * 1024; // 100MB
|
||||
if ($data_size > $max_size) {
|
||||
error_log("WARNING: Received data size exceeds limit: ".round($data_size/1024/1024, 2)."MB");
|
||||
}
|
||||
|
||||
$this->sys_input = json_decode($data, true);
|
||||
if ($this->sys_input === null) {
|
||||
error_log("json_decode error: ".json_last_error_msg());
|
||||
}
|
||||
}
|
||||
|
||||
function index()
|
||||
{
|
||||
// Use parsed input from MY_Controller core
|
||||
$prm = $this->sys_input;
|
||||
if (!is_array($prm)) {
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Body JSON invalid"
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
// Log incoming keys for debugging
|
||||
error_log("RECEIVE TOP KEYS=".implode(',', array_keys($prm)));
|
||||
|
||||
// Accept three formats:
|
||||
// A) { md5: string, data: { order_id, lab_number, results } }
|
||||
// B) { md5: string, compressed: true, data: base64_compressed_string }
|
||||
// C) { order_id, lab_number, results } (fallback, no md5)
|
||||
$data = null;
|
||||
$md5 = null;
|
||||
|
||||
if (isset($prm["compressed"]) && $prm["compressed"] === true && isset($prm["data"]) && isset($prm["md5"])) {
|
||||
// Handle compressed data
|
||||
$compressed_data = base64_decode($prm["data"]);
|
||||
if ($compressed_data === false) {
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Failed to decode base64 compressed data"
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$decompressed_json = gzuncompress($compressed_data);
|
||||
if ($decompressed_json === false) {
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Failed to decompress data"
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$data = json_decode($decompressed_json, true);
|
||||
if ($data === null) {
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Failed to decode decompressed JSON: " . json_last_error_msg()
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$md5 = $prm["md5"];
|
||||
//$this->insert_error('Receive_result:compressed', '', json_encode($data), "Received compressed data");
|
||||
error_log("Received compressed data, decompressed size: " . strlen($decompressed_json) . " bytes");
|
||||
|
||||
} else if (isset($prm["data"]) && isset($prm["md5"])) {
|
||||
// Handle normal uncompressed data
|
||||
$data = $prm["data"];
|
||||
$md5 = $prm["md5"];
|
||||
} else if (isset($prm["order_id"]) && isset($prm["lab_number"]) && isset($prm["results"])) {
|
||||
// Handle direct format (fallback)
|
||||
$data = $prm;
|
||||
} else {
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Missing md5/data in payload"
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
$user_id = 555;
|
||||
|
||||
|
||||
$l_md5 = md5(json_encode($data, JSON_UNESCAPED_UNICODE | JSON_INVALID_UTF8_SUBSTITUTE));
|
||||
|
||||
if ($md5 !== null && $md5 != $l_md5) {
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "MD5 mismatch",
|
||||
"recv_md5" => $md5,
|
||||
"calc_md5" => $l_md5
|
||||
]);
|
||||
exit();
|
||||
}
|
||||
|
||||
$order_id = $data["order_id"];
|
||||
$lab_number = $data["lab_number"];
|
||||
$results = $data["results"];
|
||||
$critical_values = isset($data["critical_values"]) ? $data["critical_values"] : [];
|
||||
|
||||
|
||||
|
||||
if($lab_number == null)
|
||||
{
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Lab number tidak ditemukan",
|
||||
]);
|
||||
exit;
|
||||
}else{
|
||||
$sql = "INSERT INTO log_receive_result(
|
||||
Log_ReceiveResultT_OrderHeaderID,
|
||||
Log_ReceiveResultT_OrderHeaderLabNumber,
|
||||
Log_ReceiveResultData,
|
||||
Log_ReceiveResultCreated
|
||||
) VALUES (?, ?, ?, NOW())";
|
||||
$query = $this->db_log->query($sql, [$order_id, $lab_number, json_encode($results)]);
|
||||
if (!$query)
|
||||
{
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Gagal menyimpan log",
|
||||
"query" => $this->db_log->last_query()
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$log_id = $this->db_log->insert_id();
|
||||
}
|
||||
|
||||
$this->db_onedev->trans_begin();
|
||||
if(count($results) > 0)
|
||||
{
|
||||
$arr_result = [];
|
||||
foreach($results as $result)
|
||||
{
|
||||
$temp_r = $result;
|
||||
$temp_r['N_OrderDetailID'] = $result['T_OrderDetailT_OrderDetailOldID'];
|
||||
unset($temp_r['T_OrderDetailT_OrderDetailOldID']);
|
||||
$temp_r['L_OrderDetailID'] = $result['T_OrderDetailID'];
|
||||
unset($temp_r['T_OrderDetailID']);
|
||||
unset($temp_r['T_OrderDetailT_OrderPromiseID']);
|
||||
unset($temp_r['T_OrderDetailDetailDeleted']);
|
||||
unset($temp_r['T_OrderDetailDetailDeletedUserID']);
|
||||
unset($temp_r['T_OrderDetailNat_InstrumentID']);
|
||||
unset($temp_r['T_OrderDetailT_OrderDetailOrderID']);
|
||||
|
||||
$arr_result[] = $temp_r;
|
||||
}
|
||||
|
||||
foreach($arr_result as $result)
|
||||
{
|
||||
$sql = "SELECT * FROM result_t_orderdetail WHERE N_OrderDetailID = ?";
|
||||
$query = $this->db_onedev->query($sql, [$result['N_OrderDetailID']]);
|
||||
$check_exist = $query->result_array();
|
||||
if(count($check_exist) > 0)
|
||||
{
|
||||
$query = $this->db_onedev->where('N_OrderDetailID', $result['N_OrderDetailID'])->update('result_t_orderdetail', $result);
|
||||
if(!$query)
|
||||
{
|
||||
$this->db_onedev->trans_rollback();
|
||||
$this->insert_error('Receive_result:updatetemp', $this->db_onedev->last_query(), json_encode($result), "Gagal menyimpan data hasil pemeriksaan");
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Gagal update data hasil pemeriksaan",
|
||||
"query" => $this->db_onedev->last_query()
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
}else{
|
||||
$query = $this->db_onedev->insert('result_t_orderdetail', $result);
|
||||
if(!$query)
|
||||
{
|
||||
$this->db_onedev->trans_rollback();
|
||||
$this->insert_error('Receive_result:inserttemp', $this->db_onedev->last_query(), json_encode($result), "Gagal menyimpan data hasil pemeriksaan");
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Gagal menyimpan data hasil pemeriksaan",
|
||||
"query" => $this->db_onedev->last_query()
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$sql = "UPDATE t_orderdetail SET
|
||||
T_OrderDetailResult = ?,
|
||||
T_OrderDetailResultFlag = ?,
|
||||
T_OrderDetailNote = ?,
|
||||
T_OrderDetailNat_UnitID = ?,
|
||||
T_OrderDetailNat_UnitName = ?,
|
||||
T_OrderDetailVerification = ?,
|
||||
T_OrderDetailVerDate = ?,
|
||||
T_OrderDetailVerUserID = 555,
|
||||
T_OrderDetailLastUpdated = NOW(),
|
||||
T_OrderDetailNat_NormalValueID = ?,
|
||||
T_OrderDetailNormalValueNote = ?,
|
||||
T_OrderDetailNormalValueDescription = ?,
|
||||
T_OrderDetailMinValue = ?,
|
||||
T_OrderDetailMaxValue = ?,
|
||||
T_OrderDetailMinValueInclusive = ?,
|
||||
T_OrderDetailMaxValueInclusive = ?,
|
||||
T_OrderDetailNat_MethodeID = ?,
|
||||
T_OrderdetailNat_MethodeName = ?,
|
||||
T_OrderDetailFlagResult = ?
|
||||
WHERE T_OrderDetailID = ?";
|
||||
$query = $this->db_onedev->query($sql, [
|
||||
$result['T_OrderDetailResult'],
|
||||
$result['T_OrderDetailResultFlag'],
|
||||
$result['T_OrderDetailNote'],
|
||||
$result['T_OrderDetailNat_UnitID'],
|
||||
$result['T_OrderDetailNat_UnitName'],
|
||||
$result['T_OrderDetailVerification'],
|
||||
$result['T_OrderDetailVerDate'],
|
||||
$result['T_OrderDetailNat_NormalValueID'],
|
||||
$result['T_OrderDetailNormalValueNote'],
|
||||
$result['T_OrderDetailNormalValueDescription'],
|
||||
$result['T_OrderDetailMinValue'],
|
||||
$result['T_OrderDetailMaxValue'],
|
||||
$result['T_OrderDetailMinValueInclusive'],
|
||||
$result['T_OrderDetailMaxValueInclusive'],
|
||||
$result['T_OrderDetailNat_MethodeID'],
|
||||
$result['T_OrderdetailNat_MethodeName'],
|
||||
$result['T_OrderDetailFlagResult'],
|
||||
$result['N_OrderDetailID']
|
||||
]);
|
||||
if(!$query)
|
||||
{
|
||||
$this->db_onedev->trans_rollback();
|
||||
$this->insert_error('Receive_result:updateorderdetail', $this->db_onedev->last_query(), json_encode($result), "Gagal update data order detail");
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Gagal update data order detail - orderdetail".$result['T_OrderDetailT_TestName']." : ".$result['T_OrderDetailT_TestCode'],
|
||||
"query" => $this->db_onedev->last_query()
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
if($log_id > 0)
|
||||
{
|
||||
$sql = "UPDATE log_receive_result SET Log_ReceiveResultStatus = 'D', Log_ReceiveResultUpdated = NOW()
|
||||
WHERE Log_ReceiveResultID = ?";
|
||||
$query = $this->db_log->query($sql, [$log_id]);
|
||||
if(!$query)
|
||||
{
|
||||
$this->insert_error('Receive_result:updateorderdetail - log_receive_result ', $this->db_log->last_query(), json_encode($result), "Gagal update data order detail");
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Gagal update data order detail - log_receive_result",
|
||||
"query" => $this->db_log->last_query()
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
}else{
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Tidak ada data hasil pemeriksaan",
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
if(count($critical_values) > 0){
|
||||
foreach($critical_values as $critical_value){
|
||||
$sql = "INSERT INTO critical_value(
|
||||
CriticalValueT_OrderHeaderID,
|
||||
CriticalValueT_OrderDetailID,
|
||||
CriticalValueDescription,
|
||||
CriticalValueCreated,
|
||||
CriticalValueIsReported,
|
||||
CriticalValueReportedM_UserID,
|
||||
CriticalValueReportedDate,
|
||||
CriticalValueReportedTo,
|
||||
CriticalValueIsAdvised,
|
||||
CriticalValueAdvisedDate,
|
||||
CriticalValueAdvisedBy,
|
||||
CriticalValueAdvisedNote,
|
||||
CriticalValueAdvicedM_UserID,
|
||||
CriticalValueIsActive
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
||||
$query = $this->db_onedev->query($sql, [
|
||||
$critical_value['CriticalValueT_OrderHeaderID'],
|
||||
$critical_value['CriticalValueT_OrderDetailID'],
|
||||
$critical_value['CriticalValueDescription'],
|
||||
$critical_value['CriticalValueCreated'],
|
||||
$critical_value['CriticalValueIsReported'],
|
||||
$critical_value['CriticalValueReportedM_UserID'],
|
||||
$critical_value['CriticalValueReportedDate'],
|
||||
$critical_value['CriticalValueReportedTo'],
|
||||
$critical_value['CriticalValueIsAdvised'],
|
||||
$critical_value['CriticalValueAdvisedDate'],
|
||||
$critical_value['CriticalValueAdvisedBy'],
|
||||
$critical_value['CriticalValueAdvisedNote'],
|
||||
$critical_value['CriticalValueAdvicedM_UserID'],
|
||||
$critical_value['CriticalValueIsActive']
|
||||
]);
|
||||
if(!$query)
|
||||
{
|
||||
$this->db_onedev->trans_rollback();
|
||||
$this->insert_error('Receive_result:insertcriticalvalue - critical_value', $this->db_onedev->last_query(), json_encode($critical_value), "Gagal menyimpan data critical value");
|
||||
echo json_encode([
|
||||
"status" => "ERR",
|
||||
"message" => "Gagal menyimpan data critical value",
|
||||
"query" => $this->db_onedev->last_query()
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$this->db_onedev->trans_commit();
|
||||
|
||||
echo json_encode([
|
||||
"status" => "OK",
|
||||
"result" => [
|
||||
"lab_number" => $lab_number
|
||||
]
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
function insert_error($fn,$query,$data,$message)
|
||||
{
|
||||
$sql = "INSERT INTO log_error_upload(
|
||||
Log_ErrorUploadFn,
|
||||
Log_ErrorUploadQuery,
|
||||
Log_ErrorUploadData,
|
||||
Log_ErrorUploadMessage,
|
||||
Log_ErrorUploadCreated
|
||||
) VALUES (?,?,?,?,NOW())";
|
||||
$query = $this->db_log->query($sql, [$fn,$query,$data,$message]);
|
||||
if(!$query)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user