Initial import
This commit is contained in:
439
application/controllers/tools/qc/Qc-pe.php
Normal file
439
application/controllers/tools/qc/Qc-pe.php
Normal file
@@ -0,0 +1,439 @@
|
||||
<?php
|
||||
class Qc extends MY_Controller {
|
||||
function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->resp = array(
|
||||
"status" => "ERR",
|
||||
"message" => ""
|
||||
);
|
||||
}
|
||||
function now() {
|
||||
return date("Y-m-d H:i:s");
|
||||
}
|
||||
function reply() {
|
||||
echo json_encode($this->resp);
|
||||
exit;
|
||||
}
|
||||
function get_data($from,$to,$m_qcID) {
|
||||
$sql = "select
|
||||
Nat_QcControlName,
|
||||
Nat_QcControlLotNumber, Nat_QcControlExpired,
|
||||
Nat_QcLevelName, Nat_InstrumentName, Nat_TestName,
|
||||
M_QcResultDate, M_QcResultValue, ifnull(Nat_QcRuleCode,'') Marking,
|
||||
Nat_QcMean,Nat_QcSd,Nat_QcTea,
|
||||
M_QcIsStat, M_QcStatMean, M_QcStatSd
|
||||
from m_qc_result
|
||||
join m_qc
|
||||
on M_QcResultM_QcID = M_QcID
|
||||
and M_QcResultIsActive = 'Y'
|
||||
and M_QcID = ?
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?
|
||||
join nat_qc
|
||||
on M_QcNat_QcID = Nat_QcID
|
||||
join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID
|
||||
join nat_qc_level on Nat_QcControlNat_QcLevelID = Nat_QcLevelID
|
||||
join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID
|
||||
join nat_test on Nat_QcNat_TestID = Nat_TestID
|
||||
left join nat_qc_rule
|
||||
on M_QcResultNat_QcRuleID = Nat_QcRuleID
|
||||
";
|
||||
|
||||
$qry = $this->db->query($sql, array($m_qcID, $from, $to));
|
||||
//echo $this->db->last_query();
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
$rows = $qry->result_array();
|
||||
$result = array();
|
||||
foreach($rows as $idx => $r) {
|
||||
if($idx == 0) {
|
||||
$isStat = $r["M_QcIsStat"] == "Y";
|
||||
$result = array(
|
||||
"control" => $r["Nat_QcControlName"],
|
||||
"level" => $r["Nat_QcLevelName"],
|
||||
"lotNumber" => $r["Nat_QcControlLotNumber"],
|
||||
"instrument" => $r["Nat_InstrumentName"],
|
||||
"ed" => $r["Nat_QcControlExpired"],
|
||||
"test" => $r["Nat_TestName"],
|
||||
"mean" => $isStat ? $r["M_QcStatMean"] : $r["Nat_QcMean"],
|
||||
"sd" => $isStat ? $r["M_QcStatSd"] : $r["Nat_QcSd"],
|
||||
"tea" => $r["Nat_QcTea"],
|
||||
"value" => array(),
|
||||
"mark" => array(),
|
||||
"date" => array()
|
||||
);
|
||||
}
|
||||
$result["date"][] = $r["M_QcResultDate"];
|
||||
$result["value"][] = $r["M_QcResultValue"];
|
||||
$result["mark"][] = $r["Marking"];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
function data($from,$to,$p_ids) {
|
||||
$result = array();
|
||||
$ids = explode("-",$p_ids);
|
||||
foreach($ids as $id) {
|
||||
$result[] = $this->get_data($from,$to,$id);
|
||||
}
|
||||
$this->resp["status"] = "OK";
|
||||
$this->resp["data"] = $result;
|
||||
$this->reply();
|
||||
}
|
||||
|
||||
function calc_multi($from,$to,$ids) {
|
||||
$a_id = explode("-",$ids);
|
||||
$ids = implode(",",$a_id);
|
||||
$sql = "select
|
||||
M_QcResultID,
|
||||
M_QcResultDate,
|
||||
M_QcResultValue,
|
||||
if(M_QcIsStat = 'N', Nat_QcMean, M_QcStatMean ) Nat_QcMean,
|
||||
if(M_QcIsStat = 'N', Nat_QcSd, M_QcStatSd ) Nat_QcSd,
|
||||
Nat_QcTea
|
||||
from
|
||||
m_qc_result
|
||||
join m_qc
|
||||
on M_QcResultM_QcID = M_QcID
|
||||
and M_QcIsActive = 'Y'
|
||||
join nat_qc
|
||||
on M_QcNat_QcID = Nat_QcID
|
||||
and Nat_QcIsActive = 'Y'
|
||||
join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID
|
||||
where M_QcResultM_QcID in ($ids)
|
||||
and M_QcResultIsActive = 'Y'
|
||||
and M_QcResultDate >= $from
|
||||
and M_QcResultDate <= $to
|
||||
order by M_QcResultDate, Nat_QcControlNat_QcLevelID";
|
||||
$qry = $this->db->query($sql);
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
$rows = $qry->result_array();
|
||||
foreach($rows as $idx => $r) {
|
||||
$mean = $r["Nat_QcMean"];
|
||||
$sd = $r["Nat_QcSd"];
|
||||
$TEa = $r["Nat_QcTea"];
|
||||
$value = $r["M_QcResultValue"];
|
||||
$id = $r["M_QcResultID"];
|
||||
$ruleID = 0;
|
||||
if ($ruleID == 0 && $idx > 0 ) {
|
||||
if ($ruleID == 0 && $idx > 11) {
|
||||
$ruleID = $this->is_12x($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
if ($ruleID == 0 && $idx > 9) {
|
||||
$ruleID = $this->is_10x($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
if ($ruleID == 0 && $idx > 6) {
|
||||
$ruleID = $this->is_7t($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
if ($ruleID == 0 && $idx > 4) {
|
||||
$ruleID = $this->is_4_1s($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
|
||||
$xruleID = $this->is_1_2s($idx,$value,$mean,$sd,$rows);
|
||||
if ($xruleID > 0) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
$xruleID = $this->is_2_2s($idx,$value,$mean,$sd,$rows);
|
||||
if ($xruleID > 0) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
|
||||
if ($ruleID == 0 ) {
|
||||
$ruleID = $this->is_r_4s($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
|
||||
} else {
|
||||
$ruleID = $this->is_1_2s($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
$sql = "update m_qc_result
|
||||
set M_QcResultNat_QcRuleID = ?
|
||||
where M_QcResultID = ?
|
||||
and M_QcResultDate >= $from
|
||||
and M_QcResultDate <= $to";
|
||||
$qry = $this->db->query($sql,array($ruleID,$id));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
|
||||
}
|
||||
$this->resp["status"] = "OK";
|
||||
$this->reply();
|
||||
}
|
||||
|
||||
function calc($from= null,$to= null,$qcID= null) {
|
||||
$COUNT_THRESHOLD = 90;
|
||||
|
||||
|
||||
|
||||
$sql = "select count(*) count,
|
||||
avg(M_QcResultValue) mean,
|
||||
STDDEV_SAMP(M_QcResultValue) sd
|
||||
from
|
||||
m_qc_result
|
||||
where M_QcResultM_QcID = ?
|
||||
and M_QcResultIsActive = 'Y'
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?";
|
||||
$qry = $this->db->query($sql, array($qcID,$from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
$rows = $qry->result_array();
|
||||
$count_act = $rows[0]["count"];
|
||||
$sd_act = $rows[0]["sd"];
|
||||
$mean_act = $rows[0]["mean"];
|
||||
//Sementara TEa di abaikan
|
||||
if ($count_act > $COUNT_THRESHOLD) {
|
||||
$sql = "update
|
||||
m_qc
|
||||
set M_QcIsStat = 'Y',
|
||||
M_QcStatSd = ?, M_QcStatMean = ?
|
||||
where M_QcID = ?
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?";
|
||||
$this->db->query($sql, array($sd_act,$mean_act,$qcID,$from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
} else {
|
||||
$sql = "update
|
||||
m_qc
|
||||
set M_QcIsStat = 'N'
|
||||
where M_QcID = ?";
|
||||
$this->db->query($sql, array($qcID));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
}
|
||||
//reset M_QcResultNat_QcRuleID
|
||||
$sql = "update m_qc_result set M_QcResultNat_QcRuleID = 0
|
||||
where M_QcResultM_QcID = ?
|
||||
and M_QcResultIsActive = 'Y'
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?
|
||||
";
|
||||
$qry = $this->db->query($sql, array($qcID,$from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR Reset Nat_QcRuleID : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
$sql = "select
|
||||
M_QcResultID,
|
||||
M_QcResultDate,
|
||||
M_QcResultValue,
|
||||
Nat_QcMean,
|
||||
Nat_QcSd,
|
||||
Nat_QcTea
|
||||
from
|
||||
m_qc_result
|
||||
join m_qc
|
||||
on M_QcResultM_QcID = M_QcID
|
||||
and M_QcIsActive = 'Y'
|
||||
join nat_qc
|
||||
on M_QcNat_QcID = Nat_QcID
|
||||
and Nat_QcIsActive = 'Y'
|
||||
where M_QcResultM_QcID = ?
|
||||
and M_QcResultIsActive = 'Y'
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?
|
||||
order by M_QcResultDate";
|
||||
$qry = $this->db->query($sql, array($qcID,$from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
$rows = $qry->result_array();
|
||||
foreach($rows as $idx => $r) {
|
||||
$mean = $r["Nat_QcMean"];
|
||||
$sd = $r["Nat_QcSd"];
|
||||
$TEa = $r["Nat_QcTea"];
|
||||
if ($count_act > $COUNT_THRESHOLD) {
|
||||
$mean = $mean_act;
|
||||
$sd = $sd_act;
|
||||
}
|
||||
$value = $r["M_QcResultValue"];
|
||||
$id = $r["M_QcResultID"];
|
||||
$ruleID = 0;
|
||||
if ($ruleID == 0 && $idx > 0 ) {
|
||||
if ($ruleID == 0 && $idx > 11) {
|
||||
$ruleID = $this->is_12x($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
if ($ruleID == 0 && $idx > 9) {
|
||||
$ruleID = $this->is_10x($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
if ($ruleID == 0 && $idx > 6) {
|
||||
$ruleID = $this->is_7t($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
if ($ruleID == 0 && $idx > 4) {
|
||||
$ruleID = $this->is_4_1s($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
|
||||
$xruleID = $this->is_1_2s($idx,$value,$mean,$sd,$rows);
|
||||
if ($xruleID > 0) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
$xruleID = $this->is_2_2s($idx,$value,$mean,$sd,$rows);
|
||||
if ($xruleID > 0) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
|
||||
if ($ruleID == 0 ) {
|
||||
$ruleID = $this->is_r_4s($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
|
||||
} else {
|
||||
$ruleID = $this->is_1_2s($idx,$value,$mean,$sd,$rows);
|
||||
}
|
||||
$sql = "update m_qc_result
|
||||
set M_QcResultNat_QcRuleID = ?
|
||||
where M_QcResultID = ?
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?";
|
||||
$qry = $this->db->query($sql,array($ruleID,$id,$from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
|
||||
}
|
||||
$this->resp["status"] = "OK";
|
||||
$this->reply();
|
||||
|
||||
}
|
||||
|
||||
// 1 : 1 2s
|
||||
function is_1_2s($idx,$value,$mean,$sd,$rows) {
|
||||
//echo "$value | $mean | $sd \n";
|
||||
if ($value < $mean - 2 * $sd || $value > $mean + 2*$sd) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
// 7 : 2 2s
|
||||
function is_2_2s($idx,$value,$mean,$sd,$rows) {
|
||||
$prev_value = $rows[$idx-1]["M_QcResultValue"];
|
||||
$sd2 = $mean + 2 * $sd;
|
||||
$sd2p = $mean - 2 * $sd;
|
||||
if ( $value < $mean - 2 * $sd && $prev_value < $mean - 2*$sd) {
|
||||
return 7;
|
||||
}
|
||||
if ( $value > $mean + 2 * $sd && $prev_value > $mean + 2*$sd) {
|
||||
return 7;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
// 2 : R 4s
|
||||
function is_R_4s($idx,$value,$mean,$sd,$rows) {
|
||||
$prev_value = $rows[$idx-1]["M_QcResultValue"];
|
||||
|
||||
if ( $value < $mean - 2 * $sd && $prev_value > $mean + 2*$sd) {
|
||||
return 2;
|
||||
}
|
||||
if ( $value > $mean + 2 * $sd && $prev_value < $mean - 2*$sd) {
|
||||
return 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
// 3 : 4 1s
|
||||
function is_4_1s($idx,$value,$mean,$sd,$rows) {
|
||||
$value3 = $rows[$idx-1]["M_QcResultValue"];
|
||||
$value2 = $rows[$idx-2]["M_QcResultValue"];
|
||||
$value1 = $rows[$idx-3]["M_QcResultValue"];
|
||||
$val_1sd = $mean + $sd;
|
||||
$val_1sd_neg = $mean - $sd;
|
||||
// echo "$value1 | $value2 | $value3 | $value | $val_1sd | $val_1sd_neg \n";
|
||||
if ($value1 > $val_1sd && $value2 > $val_1sd && $value3 > $val_1sd && $value > $val_1sd ) {
|
||||
return 3;
|
||||
}
|
||||
if ($value1 < $val_1sd_neg && $value2 < $val_1sd_neg && $value3 < $val_1sd_neg && $value < $val_1sd_neg ) {
|
||||
return 3;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
// 6 : 7t
|
||||
function is_7t($idx,$value,$mean,$sd,$rows) {
|
||||
$value6 = $rows[$idx-1]["M_QcResultValue"];
|
||||
$value5 = $rows[$idx-2]["M_QcResultValue"];
|
||||
$value4 = $rows[$idx-3]["M_QcResultValue"];
|
||||
$value3 = $rows[$idx-4]["M_QcResultValue"];
|
||||
$value2 = $rows[$idx-5]["M_QcResultValue"];
|
||||
$value1 = $rows[$idx-6]["M_QcResultValue"];
|
||||
if ($value1 < $value2 && $value2 < $value3 && $value3 < $value4 && $value4 < $value5 &&
|
||||
$value5 < $value6 && $value6 < $value ) {
|
||||
return 6;
|
||||
}
|
||||
if ( $value1 > $value2 && $value2 > $value3 && $value3 > $value4 && $value4 > $value5 &&
|
||||
$value5 > $value6 && $value6 > $value ) {
|
||||
return 6;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
// 4 : 10x
|
||||
function is_10x($idx,$value,$mean,$sd,$rows) {
|
||||
$value9 = $rows[$idx-1]["M_QcResultValue"];
|
||||
$value8 = $rows[$idx-2]["M_QcResultValue"];
|
||||
$value7 = $rows[$idx-3]["M_QcResultValue"];
|
||||
$value6 = $rows[$idx-4]["M_QcResultValue"];
|
||||
$value5 = $rows[$idx-5]["M_QcResultValue"];
|
||||
$value4 = $rows[$idx-6]["M_QcResultValue"];
|
||||
$value3 = $rows[$idx-7]["M_QcResultValue"];
|
||||
$value2 = $rows[$idx-8]["M_QcResultValue"];
|
||||
$value1 = $rows[$idx-9]["M_QcResultValue"];
|
||||
$val_1sd = $mean + $sd;
|
||||
$val_1sd_neg = $mean - $sd;
|
||||
if ($value1 < $mean && $value2 < $mean && $value3 < $mean && $value4 < $mean && $value5 < $mean &&
|
||||
$value6 < $mean && $value7 < $mean && $value8 < $mean && $value9 < $mean && $value < $mean ) {
|
||||
return 4;
|
||||
}
|
||||
if ($value1 > $mean && $value2 > $mean && $value3 > $mean && $value4 > $mean && $value5 > $mean &&
|
||||
$value6 > $mean && $value7 > $mean && $value8 > $mean && $value9 > $mean && $value > $mean ) {
|
||||
return 4;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
// 5 : 12x
|
||||
function is_12x($idx,$value,$mean,$sd,$rows) {
|
||||
$value11= $rows[$idx-1]["M_QcResultValue"];
|
||||
$value10= $rows[$idx-2]["M_QcResultValue"];
|
||||
$value9 = $rows[$idx-3]["M_QcResultValue"];
|
||||
$value8 = $rows[$idx-4]["M_QcResultValue"];
|
||||
$value7 = $rows[$idx-5]["M_QcResultValue"];
|
||||
$value6 = $rows[$idx-6]["M_QcResultValue"];
|
||||
$value5 = $rows[$idx-7]["M_QcResultValue"];
|
||||
$value4 = $rows[$idx-8]["M_QcResultValue"];
|
||||
$value3 = $rows[$idx-9]["M_QcResultValue"];
|
||||
$value2 = $rows[$idx-10]["M_QcResultValue"];
|
||||
$value1 = $rows[$idx-11]["M_QcResultValue"];
|
||||
if ($value1 < $mean && $value2 < $mean && $value3 < $mean && $value4 < $mean && $value5 < $mean &&
|
||||
$value6 < $mean && $value7 < $mean && $value8 < $mean && $value9 < $mean && $value10 < $mean &&
|
||||
$value11 < $mean && $value < $mean ) {
|
||||
return 5;
|
||||
}
|
||||
if ($value1 > $mean && $value2 > $mean && $value3 > $mean && $value4 > $mean && $value5 > $mean &&
|
||||
$value6 > $mean && $value7 > $mean && $value8 > $mean && $value9 > $mean && $value10 > $mean &&
|
||||
$value11 > $mean && $value > $mean ) {
|
||||
return 5;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
927
application/controllers/tools/qc/Qc.php
Normal file
927
application/controllers/tools/qc/Qc.php
Normal file
@@ -0,0 +1,927 @@
|
||||
<?php
|
||||
class Qc extends MY_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->resp = array(
|
||||
"status" => "ERR",
|
||||
"message" => ""
|
||||
);
|
||||
$this->resultCode= array(
|
||||
0 , " --- ",
|
||||
1 ,"1 2s",
|
||||
8 ,"1 3s",
|
||||
4 ,"10x",
|
||||
5 ,"12x",
|
||||
7 ,"2 2s",
|
||||
10 ,"2 of 3 2s",
|
||||
11 ,"3 1s",
|
||||
3 ,"4 1s",
|
||||
12 ,"6x",
|
||||
6 ,"7t",
|
||||
9 ,"8x",
|
||||
2 ,"R 4s"
|
||||
);
|
||||
}
|
||||
public function now()
|
||||
{
|
||||
return date("Y-m-d H:i:s");
|
||||
}
|
||||
public function reply()
|
||||
{
|
||||
echo json_encode($this->resp);
|
||||
exit;
|
||||
}
|
||||
public function get_data($from, $to, $m_qcID)
|
||||
{
|
||||
$sql = "select
|
||||
Nat_QcControlName,
|
||||
Nat_QcControlLotNumber, Nat_QcControlExpired,
|
||||
Nat_QcLevelName, Nat_InstrumentName, Nat_TestName,
|
||||
M_QcResultDate, M_QcResultValue, ifnull(Nat_QcRuleCode,'') Marking,
|
||||
Nat_QcMean,Nat_QcSd,Nat_QcTea,
|
||||
M_QcIsStat, M_QcStatMean, M_QcStatSd
|
||||
from m_qc_result
|
||||
join m_qc
|
||||
on M_QcResultM_QcID = M_QcID
|
||||
and M_QcResultIsActive = 'Y'
|
||||
and M_QcID = ?
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?
|
||||
join nat_qc
|
||||
on M_QcNat_QcID = Nat_QcID
|
||||
join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID
|
||||
join nat_qc_level on Nat_QcControlNat_QcLevelID = Nat_QcLevelID
|
||||
join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID
|
||||
join nat_test on Nat_QcNat_TestID = Nat_TestID
|
||||
left join nat_qc_rule
|
||||
on M_QcResultNat_QcRuleID = Nat_QcRuleID
|
||||
order by M_QcResultDate
|
||||
";
|
||||
|
||||
$qry = $this->db->query($sql, array($m_qcID, $from, $to));
|
||||
//echo $this->db->last_query();
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
$rows = $qry->result_array();
|
||||
$result = array();
|
||||
foreach ($rows as $idx => $r) {
|
||||
if ($idx == 0) {
|
||||
$isStat = $r["M_QcIsStat"] == "Y";
|
||||
$result = array(
|
||||
"control" => $r["Nat_QcControlName"],
|
||||
"level" => $r["Nat_QcLevelName"],
|
||||
"lotNumber" => $r["Nat_QcControlLotNumber"],
|
||||
"instrument" => $r["Nat_InstrumentName"],
|
||||
"ed" => $r["Nat_QcControlExpired"],
|
||||
"test" => $r["Nat_TestName"],
|
||||
"mean" => $isStat ? $r["M_QcStatMean"] : $r["Nat_QcMean"],
|
||||
"sd" => $isStat ? $r["M_QcStatSd"] : $r["Nat_QcSd"],
|
||||
"tea" => $r["Nat_QcTea"],
|
||||
"value" => array(),
|
||||
"mark" => array(),
|
||||
"date" => array()
|
||||
);
|
||||
}
|
||||
$result["date"][] = $r["M_QcResultDate"];
|
||||
$result["value"][] = $r["M_QcResultValue"];
|
||||
$result["mark"][] = $r["Marking"];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
public function data($from, $to, $p_ids)
|
||||
{
|
||||
$result = array();
|
||||
$ids = explode("-", $p_ids);
|
||||
foreach ($ids as $id) {
|
||||
$result[] = $this->get_data($from, $to, $id);
|
||||
}
|
||||
$this->resp["status"] = "OK";
|
||||
$this->resp["data"] = $result;
|
||||
$this->reply();
|
||||
}
|
||||
|
||||
public function calc_multi($from, $to, $ids,
|
||||
$xruleID="",$is_debug = false)
|
||||
{
|
||||
$a_id = explode("-", $ids);
|
||||
$ids = implode(",", $a_id);
|
||||
$ruleIDs = explode("-",$xruleID);
|
||||
print_r($a_id);
|
||||
echo "<br/>";
|
||||
print_r($ids);
|
||||
echo "<br/>";
|
||||
echo "ruleIDs";
|
||||
print_r($ruleIDs);
|
||||
echo "<br/>";
|
||||
|
||||
$sql = "select
|
||||
M_QcResultID,
|
||||
M_QcResultDate,
|
||||
M_QcResultValue,
|
||||
if(M_QcIsStat = 'N', Nat_QcMean, M_QcStatMean ) Nat_QcMean,
|
||||
if(M_QcIsStat = 'N', Nat_QcSd, M_QcStatSd ) Nat_QcSd,
|
||||
Nat_QcTea
|
||||
from
|
||||
m_qc_result
|
||||
join m_qc
|
||||
on M_QcResultM_QcID = M_QcID
|
||||
and M_QcIsActive = 'Y'
|
||||
join nat_qc
|
||||
on M_QcNat_QcID = Nat_QcID
|
||||
and Nat_QcIsActive = 'Y'
|
||||
join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID
|
||||
where M_QcResultM_QcID in ($ids)
|
||||
and M_QcResultIsActive = 'Y'
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?
|
||||
order by M_QcResultDate, Nat_QcControlNat_QcLevelID";
|
||||
$qry = $this->db->query($sql, array($from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
// echo $this->db->last_query();
|
||||
echo "<br/>";
|
||||
|
||||
$rows = $qry->result_array();
|
||||
echo "<pre>";
|
||||
echo count($rows);
|
||||
echo "\n";
|
||||
foreach ($rows as $idx => $r) {
|
||||
$mean = $r["Nat_QcMean"];
|
||||
$sd = $r["Nat_QcSd"];
|
||||
$TEa = $r["Nat_QcTea"];
|
||||
$value = $r["M_QcResultValue"];
|
||||
$id = $r["M_QcResultID"];
|
||||
$date = $r["M_QcResultDate"];
|
||||
$ruleID = 0;
|
||||
|
||||
echo "loop check -> idx: $idx, resultID: $id , date: $date \n";
|
||||
if ($ruleID == 0 && $idx >= 0) {
|
||||
// r 1_3s
|
||||
if ($ruleID == 0) {
|
||||
if (in_array(8, $ruleIDs)) {
|
||||
$ruleID = $this->is_1_3s($idx, $value, $mean, $sd, $rows, $ruleIDs);
|
||||
echo "checking 1_3s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 2_2s
|
||||
if ($ruleID == 0 && $idx >= 1) {
|
||||
if (in_array(7, $ruleIDs)) {
|
||||
$xruleID = $this->is_2_2s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
|
||||
$cur_date = $rows[$idx]["M_QcResultDate"];
|
||||
$prev_date = $rows[$idx-1]["M_QcResultDate"];
|
||||
if (($xruleID > 0 && $ruleID <= 1) && ($cur_date == $prev_date)) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
echo "checking 2_2s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 4s
|
||||
if ($ruleID == 0 && $idx >= 1) {
|
||||
if (in_array(2, $ruleIDs)) {
|
||||
$xruleID = $this->is_r_4s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
|
||||
$cur_date = $rows[$idx]["M_QcResultDate"];
|
||||
$prev_date = $rows[$idx-1]["M_QcResultDate"];
|
||||
if (($xruleID > 0 && $ruleID <= 1) && ($cur_date == $prev_date)) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
echo "checking r_4s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 3_1s
|
||||
if ($ruleID == 0 && $idx >= 2) {
|
||||
if (in_array(11, $ruleIDs)) {
|
||||
$ruleID = $this->is_3_1s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 3_1s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 2 of 3_2s
|
||||
if ($ruleID == 0 && $idx >= 2 ) {
|
||||
if (in_array(10,$ruleIDs)) {
|
||||
$ruleID = $this->is_2_of_3_2s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 2_of_3_2s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 4_1s
|
||||
if ($ruleID == 0 && $idx >= 3) {
|
||||
if (in_array(3, $ruleIDs)) {
|
||||
$xruleID = $this->is_4_1s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
|
||||
$date = $rows[$idx]["M_QcResultDate"];
|
||||
$date1 = $rows[$idx-1]["M_QcResultDate"];
|
||||
$date2 = $rows[$idx-2]["M_QcResultDate"];
|
||||
$date3 = $rows[$idx-3]["M_QcResultDate"];
|
||||
if (($xruleID > 0 && $ruleID <= 0) && ($date == $date1) && ($date2 == $date3)) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
echo "checking 4_1s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
|
||||
// r 6x
|
||||
if ($ruleID == 0 && $idx >= 5) {
|
||||
if (in_array(12,$ruleIDs)) {
|
||||
$ruleID = $this->is_6x($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
|
||||
$dates = [];
|
||||
for ($i = 0; $i <= 5; $i++) {
|
||||
$dates[$i] = $rows[$idx-$i]["M_QcResultDate"];
|
||||
}
|
||||
|
||||
if (
|
||||
($xruleID > 0 && $ruleID <= 0) && ($dates[0] == $dates[1]) && ($dates[2] == $dates[3]) && ($dates[4] == $dates[5])
|
||||
) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
echo "checking 6x :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 7t
|
||||
if ($ruleID == 0 && $idx >= 6) {
|
||||
if (in_array(6,$ruleIDs)) {
|
||||
$ruleID = $this->is_7t($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 7t :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 8x
|
||||
if ($ruleID == 0 && $idx >= 7) {
|
||||
if (in_array(9,$ruleIDs)) {
|
||||
$xruleID = $this->is_8x($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
|
||||
$dates = [];
|
||||
for ($i = 0; $i <= 7; $i++) {
|
||||
$dates[$i] = $rows[$idx-$i]["M_QcResultDate"];
|
||||
}
|
||||
|
||||
if (
|
||||
($xruleID > 0 && $ruleID <= 0) && ($dates[0] == $dates[1]) && ($dates[2] == $dates[3]) &&
|
||||
($dates[4] == $dates[5]) && ($dates[6] == $dates[7])
|
||||
) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
echo "checking 8x :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 10x
|
||||
if ($ruleID == 0 && $idx >= 9) {
|
||||
if (in_array(4,$ruleIDs)) {
|
||||
$ruleID = $this->is_10x($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
|
||||
$dates = [];
|
||||
for ($i = 0; $i <= 9; $i++) {
|
||||
$dates[$i] = $rows[$idx-$i]["M_QcResultDate"];
|
||||
}
|
||||
|
||||
if (
|
||||
($xruleID > 0 && $ruleID <= 0) && ($dates[0] == $dates[1]) && ($dates[2] == $dates[3]) &&
|
||||
($dates[4] == $dates[5]) && ($dates[6] == $dates[7]) && ($dates[8] == $dates[9])
|
||||
) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
echo "checking 10x :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 12x
|
||||
if ($ruleID == 0 && $idx >= 11) {
|
||||
if (in_array(5,$ruleIDs)) {
|
||||
$ruleID = $this->is_12x($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
|
||||
$dates = [];
|
||||
for ($i = 0; $i <= 11; $i++) {
|
||||
$dates[$i] = $rows[$idx-$i]["M_QcResultDate"];
|
||||
}
|
||||
|
||||
if (
|
||||
($xruleID > 0 && $ruleID <= 0) && ($dates[0] == $dates[1]) && ($dates[2] == $dates[3]) &&
|
||||
($dates[4] == $dates[5]) && ($dates[6] == $dates[7]) && ($dates[8] == $dates[9]) && ($dates[10] == $dates[11])
|
||||
) {
|
||||
$ruleID = $xruleID;
|
||||
}
|
||||
echo "checking 12x :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 1_2s
|
||||
if ($ruleID == 0) {
|
||||
if (in_array(1, $ruleIDs)) {
|
||||
$ruleID = $this->is_1_2s($idx, $value, $mean, $sd, $rows, $ruleIDs);
|
||||
echo "checking 1_2s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$ruleID = $this->is_1_2s($idx, $value, $mean, $sd, $rows, $ruleIDs);
|
||||
}
|
||||
if ($is_debug) {
|
||||
echo "<pre>";
|
||||
echo "---------\n";
|
||||
echo "Idx : $idx, Value : $value, Mean : $mean, Sd : $sd => RuleID result : " . $this->resultCode[$ruleID] . "\n";
|
||||
echo "Rows Value : " ; print_r($rows);
|
||||
echo "\nrulesIDs : " ; print_r($tuleIDs);
|
||||
echo "\n\n";
|
||||
echo "</pre>";
|
||||
}
|
||||
$sql = "update m_qc_result
|
||||
set M_QcResultNat_QcRuleID = ?
|
||||
where M_QcResultID = ?
|
||||
";
|
||||
$qry = $this->db->query($sql, array($ruleID,$id));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
}
|
||||
$this->resp["status"] = "OK";
|
||||
$this->reply();
|
||||
}
|
||||
|
||||
public function calc($from= null, $to= null, $qcID= null,
|
||||
$xruleID="",$is_debug = false)
|
||||
{
|
||||
$COUNT_THRESHOLD = 90;
|
||||
|
||||
$ruleIDs = explode("-",$xruleID);
|
||||
|
||||
$sql = "select count(*) count,
|
||||
avg(M_QcResultValue) mean,
|
||||
STDDEV_SAMP(M_QcResultValue) sd
|
||||
from
|
||||
m_qc_result
|
||||
where M_QcResultM_QcID = ?
|
||||
and M_QcResultIsActive = 'Y'
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?";
|
||||
$qry = $this->db->query($sql, array($qcID,$from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
$rows = $qry->result_array();
|
||||
$count_act = $rows[0]["count"];
|
||||
$sd_act = $rows[0]["sd"];
|
||||
$mean_act = $rows[0]["mean"];
|
||||
//Sementara TEa di abaikan
|
||||
if ($count_act > $COUNT_THRESHOLD) {
|
||||
$sql = "update
|
||||
m_qc
|
||||
set M_QcIsStat = 'Y',
|
||||
M_QcStatSd = ?, M_QcStatMean = ?
|
||||
where M_QcID = ?
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?";
|
||||
$this->db->query($sql, array($sd_act,$mean_act,$qcID,$from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
} else {
|
||||
$sql = "update
|
||||
m_qc
|
||||
set M_QcIsStat = 'N'
|
||||
where M_QcID = ?";
|
||||
$this->db->query($sql, array($qcID));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
}
|
||||
//reset M_QcResultNat_QcRuleID
|
||||
$sql = "update m_qc_result set M_QcResultNat_QcRuleID = 0
|
||||
where M_QcResultM_QcID = ?
|
||||
and M_QcResultIsActive = 'Y'
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?
|
||||
";
|
||||
$qry = $this->db->query($sql, array($qcID,$from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR Reset Nat_QcRuleID : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
$sql = "select
|
||||
M_QcResultID,
|
||||
M_QcResultDate,
|
||||
M_QcResultValue,
|
||||
Nat_QcMean,
|
||||
Nat_QcSd,
|
||||
Nat_QcTea
|
||||
from
|
||||
m_qc_result
|
||||
join m_qc
|
||||
on M_QcResultM_QcID = M_QcID
|
||||
and M_QcIsActive = 'Y'
|
||||
join nat_qc
|
||||
on M_QcNat_QcID = Nat_QcID
|
||||
and Nat_QcIsActive = 'Y'
|
||||
where M_QcResultM_QcID = ?
|
||||
and M_QcResultIsActive = 'Y'
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?
|
||||
order by M_QcResultDate";
|
||||
$qry = $this->db->query($sql, array($qcID,$from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
$rows = $qry->result_array();
|
||||
foreach ($rows as $idx => $r) {
|
||||
$mean = $r["Nat_QcMean"];
|
||||
$sd = $r["Nat_QcSd"];
|
||||
$TEa = $r["Nat_QcTea"];
|
||||
if ($count_act > $COUNT_THRESHOLD) {
|
||||
$mean = $mean_act;
|
||||
$sd = $sd_act;
|
||||
}
|
||||
$value = $r["M_QcResultValue"];
|
||||
$id = $r["M_QcResultID"];
|
||||
$date = $r["M_QcResultDate"];
|
||||
$ruleID = 0;
|
||||
|
||||
echo "<pre>";
|
||||
echo "loop check -> idx: $idx, resultID: $id , date: $date \n";
|
||||
if ($ruleID == 0 && $idx >= 0) {
|
||||
// r 1_3s
|
||||
if ($ruleID == 0) {
|
||||
if (in_array(8, $ruleIDs)) {
|
||||
$ruleID = $this->is_1_3s($idx, $value, $mean, $sd, $rows, $ruleIDs);
|
||||
echo "checking 1_3s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 2_2s
|
||||
if ($ruleID == 0 && $idx >= 1) {
|
||||
if (in_array(7, $ruleIDs)) {
|
||||
$ruleID = $this->is_2_2s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 2_2s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 4s
|
||||
if ($ruleID == 0 && $idx >= 1) {
|
||||
if (in_array(2, $ruleIDs)) {
|
||||
$ruleID = $this->is_r_4s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking r_4s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 3_1s
|
||||
if ($ruleID == 0 && $idx >= 2) {
|
||||
if (in_array(11, $ruleIDs)) {
|
||||
$ruleID = $this->is_3_1s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 3_1s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 2 of 3_2s
|
||||
if ($ruleID == 0 && $idx >= 2 ) {
|
||||
if (in_array(10,$ruleIDs)) {
|
||||
$ruleID = $this->is_2_of_3_2s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 2_of_3_2s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 4_1s
|
||||
if ($ruleID == 0 && $idx >= 3) {
|
||||
if (in_array(3, $ruleIDs)) {
|
||||
$ruleID = $this->is_4_1s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 4_1s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 6x
|
||||
if ($ruleID == 0 && $idx >= 5) {
|
||||
if (in_array(12,$ruleIDs)) {
|
||||
$ruleID = $this->is_6x($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 6x :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 7t
|
||||
if ($ruleID == 0 && $idx >= 6) {
|
||||
if (in_array(6,$ruleIDs)) {
|
||||
$ruleID = $this->is_7t($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 7t :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 8x
|
||||
if ($ruleID == 0 && $idx >= 7) {
|
||||
if (in_array(9,$ruleIDs)) {
|
||||
$ruleID = $this->is_8x($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 8x :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 10x
|
||||
if ($ruleID == 0 && $idx >= 9) {
|
||||
if (in_array(4,$ruleIDs)) {
|
||||
$ruleID = $this->is_10x($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 10x :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 12x
|
||||
if ($ruleID == 0 && $idx >= 11) {
|
||||
if (in_array(5,$ruleIDs)) {
|
||||
$ruleID = $this->is_12x($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
echo "checking 12x :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
// r 1_2s
|
||||
if ($ruleID == 0) {
|
||||
if (in_array(1, $ruleIDs)) {
|
||||
$ruleID = $this->is_1_2s($idx, $value, $mean, $sd, $rows, $ruleIDs);
|
||||
echo "checking 1_2s :";
|
||||
echo $ruleID;
|
||||
echo "<br/>";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$ruleID = $this->is_1_2s($idx, $value, $mean, $sd, $rows,$ruleIDs);
|
||||
}
|
||||
if ($is_debug) {
|
||||
|
||||
echo "<pre>";
|
||||
echo "---------\n";
|
||||
echo "Idx : $idx, Value : $value, Mean : $mean, Sd : $sd => RuleID result " . $this->resultCode[$ruleID] . "\n";
|
||||
echo "Rows Value : " ; print_r($rows);
|
||||
echo "\nrulesIDs : " ; print_r($tuleIDs);
|
||||
echo "\n\n";
|
||||
echo "</pre>";
|
||||
}
|
||||
|
||||
$sql = "update m_qc_result
|
||||
set M_QcResultNat_QcRuleID = ?
|
||||
where M_QcResultID = ?
|
||||
and M_QcResultDate >= ?
|
||||
and M_QcResultDate <= ?";
|
||||
$qry = $this->db->query($sql, array($ruleID,$id,$from,$to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
}
|
||||
$this->resp["status"] = "OK";
|
||||
$this->reply();
|
||||
}
|
||||
|
||||
// rule
|
||||
// 1 : 1 2s
|
||||
public function is_1_2s($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
if(! in_array(1,$ruleIDs)) return 0;
|
||||
//echo "$value | $mean | $sd \n";
|
||||
if ($value < $mean - 2 * $sd || $value > $mean + 2*$sd) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// 8 : 1 3s
|
||||
public function is_1_3s($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
//echo "$value | $mean | $sd \n";
|
||||
if(! in_array(8,$ruleIDs)) return 0;
|
||||
if ($value < $mean - 3 * $sd || $value > $mean + 3*$sd) {
|
||||
return 8;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// 7 : 2 2s
|
||||
public function is_2_2s($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
if(! in_array(7,$ruleIDs)) return 0;
|
||||
$prev_value = $rows[$idx-1]["M_QcResultValue"];
|
||||
# edit -> add prev mean and sd (in case prev mean and sd has different value (multi level))
|
||||
$prev_mean = $rows[$idx-1]["Nat_QcMean"];
|
||||
$prev_sd = $rows[$idx-1]["Nat_QcSd"];
|
||||
|
||||
# edit => add limit 3SD
|
||||
if (($mean - 3 * $sd < $value && $value < $mean - 2 * $sd) && ($prev_mean - 3 * $prev_sd < $prev_value && $prev_value < $prev_mean - 2 * $prev_sd)) {
|
||||
return 7;
|
||||
}
|
||||
if (($mean + 3 * $sd > $value && $value > $mean + 2 * $sd) && ($prev_mean + 3 * $prev_sd > $prev_value && $prev_value > $prev_mean + 2 * $prev_sd)) {
|
||||
return 7;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
// 2 : R 4s
|
||||
public function is_R_4s($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
if(! in_array(2,$ruleIDs)) return 0;
|
||||
$prev_value = $rows[$idx-1]["M_QcResultValue"];
|
||||
# edit -> add prev mean and sd (in case prev mean and sd has different value (multi level))
|
||||
$prev_mean = $rows[$idx-1]["Nat_QcMean"];
|
||||
$prev_sd = $rows[$idx-1]["Nat_QcSd"];
|
||||
|
||||
# edit -> add limit 3SD
|
||||
if (($value > $mean - 3 * $sd && $value < $mean - 2 * $sd) && ($prev_value < $prev_mean + 3 * $prev_sd && $prev_value > $prev_mean + 2 * $prev_sd)) {
|
||||
return 2;
|
||||
}
|
||||
if (($value < $mean + 3 * $sd && $value > $mean + 2 * $sd) && ($prev_value > $prev_mean - 3 * $prev_sd && $prev_value < $prev_mean - 2 * $prev_sd)) {
|
||||
return 2;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
// 3 : 4 1s
|
||||
public function is_4_1s($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
$result = 0;
|
||||
$values = [];
|
||||
$means = [];
|
||||
$sds = [];
|
||||
|
||||
for ($i = 1; $i <= 3; $i++) {
|
||||
$values[$i] = $rows[$idx-$i]["M_QcResultValue"];
|
||||
$means[$i] = $rows[$idx-$i]["Nat_QcMean"];
|
||||
$sds[$i] = $rows[$idx-$i]["Nat_QcSd"];
|
||||
}
|
||||
|
||||
$upper = true;
|
||||
$lower = true;
|
||||
|
||||
for ($i = 1; $i <= 3; $i++) {
|
||||
$upper &= ($values[$i] < $means[$i] + 2*$sds[$i] && $values[$i] > $means[$i] + $sds[$i]);
|
||||
$lower &= ($values[$i] > $means[$i] - 2*$sds[$i] && $values[$i] < $means[$i] - $sds[$i]);
|
||||
}
|
||||
|
||||
$upper &= ($value < $mean + 2*$sd && $value > $mean + $sd);
|
||||
$lower &= ($value > $mean - 2*$sd && $value < $mean - $sd);
|
||||
|
||||
if ($upper || $lower) {
|
||||
$result = 3;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
// 6 : 7t
|
||||
public function is_7t($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
if(! in_array(6,$ruleIDs)) return 0;
|
||||
|
||||
$values = [];
|
||||
for ($i = 1; $i <= 6; $i++) {
|
||||
$values[$i] = $rows[$idx-$i]["M_QcResultValue"];
|
||||
}
|
||||
|
||||
$increasing = true;
|
||||
$decreasing = true;
|
||||
|
||||
for ($i = 1; $i < 6; $i++) {
|
||||
$increasing &= ($values[$i] < $values[$i+1]);
|
||||
$decreasing &= ($values[$i] > $values[$i+1]);
|
||||
}
|
||||
|
||||
$increasing &= ($values[6] < $value);
|
||||
$decreasing &= ($values[6] > $value);
|
||||
|
||||
if ($increasing || $decreasing) {
|
||||
return 6;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 9 : 8x
|
||||
public function is_8x($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
if(! in_array(9,$ruleIDs)) return 0;
|
||||
|
||||
$result = 0;
|
||||
$prev_values = [];
|
||||
$prev_means = [];
|
||||
$prev_sds = [];
|
||||
|
||||
for ($i=1; $i <= 7 ; $i++) {
|
||||
$prev_values[$i] = $rows[$idx-$i]["M_QcResultValue"];
|
||||
$prev_means[$i] = $rows[$idx-$i]["Nat_QcMean"];
|
||||
$prev_sds[$i] = $rows[$idx-$i]["Nat_QcSd"];
|
||||
}
|
||||
|
||||
$upper = true;
|
||||
$lower = true;
|
||||
|
||||
for ($i=1; $i <=7 ; $i++) {
|
||||
$upper &= ($prev_values[$i] < $prev_means[$i] + 3*$prev_sds[$i] && $prev_values[$i] > $prev_means[$i]);
|
||||
$lower &= ($prev_values[$i] > $prev_means[$i] - 3*$prev_sds[$i] && $prev_values[$i] < $prev_means[$i]);
|
||||
}
|
||||
|
||||
$upper &= ($value < $mean + 3*$sd && $value > $mean);
|
||||
$lower &= ($value > $mean - 3*$sd && $value < $mean);
|
||||
|
||||
if ($upper || $lower) {
|
||||
$result = 9;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
// 4 : 10x
|
||||
public function is_10x($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
if(! in_array(4,$ruleIDs)) return 0;
|
||||
|
||||
$result = 0;
|
||||
$prev_values = [];
|
||||
$prev_means = [];
|
||||
$prev_sds = [];
|
||||
|
||||
for ($i=1; $i <= 9 ; $i++) {
|
||||
$prev_values[$i] = $rows[$idx-$i]["M_QcResultValue"];
|
||||
$prev_means[$i] = $rows[$idx-$i]["Nat_QcMean"];
|
||||
$prev_sds[$i] = $rows[$idx-$i]["Nat_QcSd"];
|
||||
}
|
||||
|
||||
$upper = true;
|
||||
$lower = true;
|
||||
|
||||
for ($i=1; $i <=9 ; $i++) {
|
||||
$upper &= ($prev_values[$i] < $prev_means[$i] + 3*$prev_sds[$i] && $prev_values[$i] > $prev_means[$i]);
|
||||
$lower &= ($prev_values[$i] > $prev_means[$i] - 3*$prev_sds[$i] && $prev_values[$i] < $prev_means[$i]);
|
||||
}
|
||||
|
||||
$upper &= ($value < $mean + 3*$sd && $value > $mean);
|
||||
$lower &= ($value > $mean - 3*$sd && $value < $mean);
|
||||
|
||||
if ($upper || $lower) {
|
||||
$result = 4;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
// 5 : 12x
|
||||
public function is_12x($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
if(! in_array(5,$ruleIDs)) return 0;
|
||||
|
||||
$result = 0;
|
||||
$prev_values = [];
|
||||
$prev_means = [];
|
||||
$prev_sds = [];
|
||||
|
||||
for ($i=1; $i <= 11 ; $i++) {
|
||||
$prev_values[$i] = $rows[$idx-$i]["M_QcResultValue"];
|
||||
$prev_means[$i] = $rows[$idx-$i]["Nat_QcMean"];
|
||||
$prev_sds[$i] = $rows[$idx-$i]["Nat_QcSd"];
|
||||
}
|
||||
|
||||
$upper = true;
|
||||
$lower = true;
|
||||
|
||||
for ($i=1; $i <=11 ; $i++) {
|
||||
$upper &= ($prev_values[$i] < $prev_means[$i] + 3*$prev_sds[$i] && $prev_values[$i] > $prev_means[$i]);
|
||||
$lower &= ($prev_values[$i] > $prev_means[$i] - 3*$prev_sds[$i] && $prev_values[$i] < $prev_means[$i]);
|
||||
}
|
||||
|
||||
$upper &= ($value < $mean + 3*$sd && $value > $mean);
|
||||
$lower &= ($value > $mean - 3*$sd && $value < $mean);
|
||||
|
||||
if ($upper || $lower) {
|
||||
$result = 5;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
// 10 : 2 of 3-2s
|
||||
public function is_2_of_3_2s($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
if(! in_array(10,$ruleIDs)) return 0;
|
||||
$value2 = $rows[$idx-8]["M_QcResultValue"];
|
||||
$value1 = $rows[$idx-9]["M_QcResultValue"];
|
||||
$val_2sd = $mean + 2 * $sd;
|
||||
$val_2sd_neg = $mean - 2 * $sd;
|
||||
$tot_2s = 0 ;
|
||||
|
||||
if ($value > $val_2sd) $tot_2s++;
|
||||
if ($value1 > $val_2sd) $tot_2s++;
|
||||
if ($value1 > $val_2sd) $tot_2s++;
|
||||
if ($tot_2s >= 2 ) return 10;
|
||||
|
||||
$tot_2s = 0;
|
||||
if ($value < $val_2sd_neg ) $tot_2s++;
|
||||
if ($value1 < $val_2sd_neg ) $tot_2s++;
|
||||
if ($value2 < $val_2sd_neg ) $tot_2s++;
|
||||
if ($tot_2s >= 2 ) return 10;
|
||||
|
||||
return 0;
|
||||
}
|
||||
// 11 : 3 1s
|
||||
public function is_3_1s($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
if(! in_array(11,$ruleIDs)) return 0;
|
||||
|
||||
$result = 0;
|
||||
$values = [];
|
||||
$means = [];
|
||||
$sds = [];
|
||||
|
||||
for ($i = 1; $i <= 2; $i++) {
|
||||
$values[$i] = $rows[$idx-$i]["M_QcResultValue"];
|
||||
$means[$i] = $rows[$idx-$i]["Nat_QcMean"];
|
||||
$sds[$i] = $rows[$idx-$i]["Nat_QcSd"];
|
||||
}
|
||||
|
||||
$upper = true;
|
||||
$lower = true;
|
||||
|
||||
for ($i = 1; $i <= 2; $i++) {
|
||||
$upper &= ($values[$i] < $means[$i] + 2*$sds[$i] && $values[$i] > $means[$i] + $sds[$i]);
|
||||
$lower &= ($values[$i] > $means[$i] - 2*$sds[$i] && $values[$i] < $means[$i] - $sds[$i]);
|
||||
}
|
||||
|
||||
$upper &= ($value < $mean + 2*$sd && $value > $mean + $sd);
|
||||
$lower &= ($value > $mean - 2*$sd && $value < $mean - $sd);
|
||||
|
||||
if ($upper || $lower) {
|
||||
$result = 11;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
//12 : 6x
|
||||
public function is_6x($idx, $value, $mean, $sd, $rows, $ruleIDs)
|
||||
{
|
||||
if(! in_array(12,$ruleIDs)) return 0;
|
||||
|
||||
$result = 0;
|
||||
$prev_values = [];
|
||||
$prev_means = [];
|
||||
$prev_sds = [];
|
||||
|
||||
for ($i=1; $i <= 5 ; $i++) {
|
||||
$prev_values[$i] = $rows[$idx-$i]["M_QcResultValue"];
|
||||
$prev_means[$i] = $rows[$idx-$i]["Nat_QcMean"];
|
||||
$prev_sds[$i] = $rows[$idx-$i]["Nat_QcSd"];
|
||||
}
|
||||
|
||||
$upper = true;
|
||||
$lower = true;
|
||||
|
||||
for ($i=1; $i <=5 ; $i++) {
|
||||
$upper &= ($prev_values[$i] < $prev_means[$i] + 3*$prev_sds[$i] && $prev_values[$i] > $prev_means[$i]);
|
||||
$lower &= ($prev_values[$i] > $prev_means[$i] - 3*$prev_sds[$i] && $prev_values[$i] < $prev_means[$i]);
|
||||
}
|
||||
|
||||
$upper &= ($value < $mean + 3*$sd && $value > $mean);
|
||||
$lower &= ($value > $mean - 3*$sd && $value < $mean);
|
||||
|
||||
if ($upper || $lower) {
|
||||
$result = 12;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
88
application/controllers/tools/qc/Qualqc.php
Normal file
88
application/controllers/tools/qc/Qualqc.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
class Qualqc extends MY_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function now()
|
||||
{
|
||||
return date("Y-m-d H:i:s");
|
||||
}
|
||||
|
||||
public function reply()
|
||||
{
|
||||
echo json_encode($this->resp);
|
||||
exit;
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
echo "Kualitatif QC test";
|
||||
}
|
||||
|
||||
public function get_data($from, $to, $m_qcID)
|
||||
{
|
||||
$sql = "SELECT M_QcResultKualitatifID AS id,
|
||||
Nat_TestID,
|
||||
Nat_TestName,
|
||||
m_qc_resultkualitatif.*,
|
||||
M_QcResultKualitatifM_QcKualitatifID AS qid,
|
||||
DATE_FORMAT(M_QcResultKualitatifDate, '%d-%m-%Y') AS resultdate,
|
||||
Nat_QcKualitatifNormal,
|
||||
Nat_QcKualitatifValue,
|
||||
CONCAT(Nat_QcControlKualitatifName, ' |',Nat_QcLevelName, ' |', Nat_QcControlKualitatifLotNumber, ' |',DATE_FORMAT(Nat_QcControlKualitatifExpired,'%d-%m-%Y')) AS Nat_QcControlKualitatifName
|
||||
FROM
|
||||
nat_qc_controlkualitatif
|
||||
JOIN nat_qckualitatif ON Nat_QcKualitatifNat_QcControlKualitatifID = Nat_QcControlKualitatifID
|
||||
JOIN m_qckualitatif ON M_QcKualitatifNat_QcKualitatifID = Nat_QcKualitatifID AND M_QcKualitatifIsActive = 'Y'
|
||||
JOIN m_qc_resultkualitatif ON M_QcResultKualitatifM_QcKualitatifID = M_QcKualitatifID AND M_QcResultKualitatifIsActive = 'Y'
|
||||
JOIN nat_instrument ON Nat_InstrumentID = Nat_QcKualitatifNat_InstrumentID
|
||||
JOIN nat_test ON Nat_TestID = Nat_QcKualitatifNat_TestID
|
||||
JOIN nat_qc_level ON Nat_QcLevelID = Nat_QcControlKualitatifNat_QcLevelID
|
||||
WHERE
|
||||
M_QcResultKualitatifM_QcKualitatifID IN(?) AND
|
||||
M_QcResultKualitatifDate BETWEEN DATE_FORMAT(?, '%Y-%m-%d') AND DATE_FORMAT(?, '%Y-%m-%d')
|
||||
GROUP BY M_QcResultKualitatifID
|
||||
ORDER BY M_QcResultKualitatifDate ASC, M_QcResultKualitatifCreated ASC, Nat_TestName ASC;
|
||||
";
|
||||
|
||||
$qry = $this->db->query($sql, array($m_qcID, $from, $to));
|
||||
if (!$qry) {
|
||||
$this->resp["message"] = "{$this->now()} ERR : " . $this->db->error()["message"] . "\n"
|
||||
. "|" . $this->db->last_query() . "\n";
|
||||
$this->reply();
|
||||
}
|
||||
$rows = $qry->result_array();
|
||||
$result = array();
|
||||
|
||||
foreach ($rows as $idx => $r) {
|
||||
if ($idx == 0) {
|
||||
$result = array(
|
||||
"qid" => $r["qid"],
|
||||
"testName" => $r["Nat_TestName"],
|
||||
"control" => $r["Nat_QcControlKualitatifName"],
|
||||
"qcNormalValue" => $r["Nat_QcKualitatifNormal"],
|
||||
"qcValues" => $r["Nat_QcKualitatifValue"],
|
||||
"resultDates" => array(),
|
||||
"resultValues" => array()
|
||||
);
|
||||
}
|
||||
$result["resultDates"][] = $r["resultdate"];
|
||||
$result["resultValues"][] = $r["M_QcResultKualitatifValue"];
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function data($from, $to, $qualID) {
|
||||
$result = array();
|
||||
$result[] = $this->get_data($from, $to, $qualID);
|
||||
echo $id;
|
||||
$this->resp["status"] = "OK";
|
||||
$this->resp["data"] = $result;
|
||||
$this->reply();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user