prolab-api/console/controllers/LisSendTestController.php

142 lines
5.3 KiB
PHP
Executable File

<?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 '';
}
}
}