2026-01-11 14:53:29 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace console\controllers;
|
|
|
|
|
|
|
|
|
|
use console\models\HanumanResultSikarinCheck;
|
|
|
|
|
use yii\console\Controller;
|
|
|
|
|
use Yii;
|
|
|
|
|
|
|
|
|
|
class LisSendTestController extends Controller
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Console action: รันกระบวนการส่งผลไปยัง external API
|
|
|
|
|
* เรียกจาก CLI: php /path/to/yii lis-api-send/create
|
|
|
|
|
*/
|
|
|
|
|
public function actionCreate()
|
|
|
|
|
{
|
|
|
|
|
error_log("=== Hanuman Result Sikarin START ===");
|
|
|
|
|
|
|
|
|
|
$query = HanumanResultSikarinCheck::find()
|
|
|
|
|
->where(['not', ['RiaHDocID' => null]])
|
|
|
|
|
->andWhere(['not', ['PatHN' => null]])
|
|
|
|
|
->andWhere(['<>', 'RiaHDocID', ''])
|
|
|
|
|
->andWhere(['<>', 'PatHN', ''])
|
|
|
|
|
->asArray()
|
|
|
|
|
->orderBy(['RiaHDocDate' => SORT_DESC])
|
|
|
|
|
->one();
|
|
|
|
|
|
|
|
|
|
if (!$query) {
|
|
|
|
|
error_log('No data found');
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$sendMapping = [];
|
|
|
|
|
|
|
|
|
|
// ---------- build grouped payloads ----------
|
|
|
|
|
$groupedByLabNo = [];
|
|
|
|
|
$groupedRows = []; // เก็บแถวต้นฉบับต่อ labNo เพื่อใช้บันทึก LisResult ทีหลัง
|
|
|
|
|
|
|
|
|
|
$query_lab = HanumanResultSikarinCheck::find()
|
|
|
|
|
->where(['not', ['RiaHDocID' => null]])
|
|
|
|
|
->andWhere(['not', ['PatHN' => null]])
|
|
|
|
|
->andWhere(['<>', 'RiaHDocID', ''])
|
|
|
|
|
->andWhere(['<>', 'PatHN', ''])
|
|
|
|
|
->andWhere(['LabNo' => $query['LabNo']])
|
|
|
|
|
->asArray()
|
|
|
|
|
->orderBy(['RiaHDocDate' => SORT_DESC])
|
|
|
|
|
->all();
|
|
|
|
|
|
|
|
|
|
/* ===== เพิ่มส่วนนี้: scan fallback แบบสั้น ===== */
|
|
|
|
|
$fallback = [
|
|
|
|
|
'report_name' => '',
|
|
|
|
|
'report_dt' => '',
|
|
|
|
|
'approve_name' => '',
|
|
|
|
|
'approve_dt' => '',
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
foreach ($query_lab as $r) {
|
|
|
|
|
|
|
|
|
|
if (empty($fallback['report_name']) && !empty($r['RiaLDUserNameEntry'])) {
|
|
|
|
|
$fallback['report_name'] = $r['RiaLDUserNameEntry'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (empty($fallback['report_dt']) && !empty($r['RiaLDUserDateEntry'])) {
|
|
|
|
|
$fallback['report_dt'] = $r['RiaLDUserDateEntry'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (empty($fallback['approve_name']) && !empty($r['RiaLDUserNameAppr'])) {
|
|
|
|
|
$fallback['approve_name'] = $r['RiaLDUserNameAppr'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (empty($fallback['approve_dt']) && !empty($r['RiaLDUserDateAppr'])) {
|
|
|
|
|
$fallback['approve_dt'] = $r['RiaLDUserDateAppr'];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
foreach ($query_lab as $rows) {
|
|
|
|
|
$labNo = $rows['LabNo'] ?? '';
|
|
|
|
|
|
|
|
|
|
// build test item
|
|
|
|
|
$testItem = [
|
|
|
|
|
'TestCode' => (string)($rows['TestCode'] ?? ''),
|
|
|
|
|
'TestName' => (string)($rows['TestName'] ?? ''),
|
|
|
|
|
'TestRemark' => $rows['TestRemark'] ?? '',
|
|
|
|
|
'InformCriticalByCode' => '',
|
|
|
|
|
'InformCriticalBy' => '',
|
|
|
|
|
'InformCriticalTo' => '',
|
|
|
|
|
'InformCriticalDateTime' => '',
|
|
|
|
|
'CriticalFlag' => '',
|
|
|
|
|
'ReportResultByCode' => '',
|
|
|
|
|
'ReportResultBy' =>
|
|
|
|
|
(string)($rows['RiaLDUserNameEntry'] ?: $fallback['report_name']),
|
|
|
|
|
'ReportResultDateTime' =>
|
|
|
|
|
$this->dateTimeFormat($rows['RiaLDUserDateEntry'] ?: $fallback['report_dt']),
|
|
|
|
|
'ApproveResultByCode' => '',
|
|
|
|
|
'ApproveResultBy' =>
|
|
|
|
|
(string)($rows['RiaLDUserNameAppr'] ?: $fallback['approve_name']),
|
|
|
|
|
'ApproveResultDateTime' =>
|
|
|
|
|
$this->dateTimeFormat($rows['RiaLDUserDateAppr'] ?: $fallback['approve_dt']),
|
|
|
|
|
//'Filedata' => $filesData,
|
|
|
|
|
'ResultList' => [[
|
|
|
|
|
'ResultCode' => (string)($rows['ResultCode'] ?? ''),
|
|
|
|
|
'ResultName' => (string)($rows['ResultName'] ?? ''),
|
|
|
|
|
'ResultValue' => (string)($rows['RiaLDRsltAnal'] ?? ''),
|
|
|
|
|
'ResultUnit' => (string)($rows['LabUnit'] ?? ''),
|
|
|
|
|
'ResultFlag' => '',
|
|
|
|
|
'ReferenceRange' => trim(($rows['LabNormal1'] ?? '') . ' ' . ($rows['LabNormal2'] ?? '')),
|
|
|
|
|
'ResultRemark' => '',
|
|
|
|
|
]],
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
if (!isset($groupedByLabNo[$labNo])) {
|
|
|
|
|
$groupedByLabNo[$labNo] = [
|
|
|
|
|
'LabNo' => $labNo,
|
|
|
|
|
'RequestRemark' => '',
|
|
|
|
|
'ResultStatus' => '',
|
|
|
|
|
'TestList' => [],
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$groupedByLabNo[$labNo]['TestList'][] = $testItem;
|
|
|
|
|
$groupedRows[$labNo][] = $rows; // เก็บแถวต้นฉบับต่อ lab
|
|
|
|
|
$sendMapping[$rows['RiaHDocID']] = $rows['RiaHDocID'];
|
|
|
|
|
} // end foreach build
|
|
|
|
|
|
|
|
|
|
error_log("=== Hanuman Result Sikarin END ===");
|
|
|
|
|
var_dump($groupedByLabNo);
|
|
|
|
|
die();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** helper: แปลง datetime เป็น dd/mm/YYYY H:i:s */
|
|
|
|
|
public function dateTimeFormat($value)
|
|
|
|
|
{
|
|
|
|
|
if (empty($value)) return '';
|
|
|
|
|
try {
|
|
|
|
|
$dt = new \DateTime($value);
|
|
|
|
|
return $dt->format('d/m/Y H:i:s');
|
|
|
|
|
} catch (\Throwable $e) {
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|