diff --git a/models/Cars_model.php b/models/Cars_model.php index f891684..f9cf63a 100644 --- a/models/Cars_model.php +++ b/models/Cars_model.php @@ -1411,20 +1411,216 @@ class Cars_model extends CI_Model } } + // =============================================== // mitac cmd // =============================================== + // 檢查指定時間是否介於停車時段區間 + function check_park_time($park_time, $target_time) + { + $pt_arr = $this->vars['mcache']->get('pt'); + $now_time = substr($target_time, 11); // 日期字串只取最後時間字串(13:25:32) + $week_no = date('w',strtotime($target_time)); // 取星期幾 + $park_time_array = explode(',', $park_time); // 用 , 格開 + foreach($park_time_array as $idx => $park_time_value) + { + foreach($pt_arr[$park_time_value]['timex'] as $idx => $pt_rows) + { + if ($week_no >= $pt_rows['w_start'] && + $week_no <= $pt_rows['w_end'] && + $now_time >= $pt_rows['time_start'] && + $now_time <= $pt_rows['time_end']) + { + return true; + } + } + } + return false; + } + + // 取得會員時段區間起點 + function gen_park_time_first($park_time, $target_time) + { + $pt_arr = $this->vars['mcache']->get('pt'); + $now_time = substr($target_time, 11); // 日期字串只取最後時間字串(13:25:32) + $week_no = date('w',strtotime($target_time)); // 取星期幾 + $park_time_array = explode(',', $park_time); // 用 , 格開 + $week_no_first = 0; + $time_end_first = ''; + foreach($park_time_array as $idx => $park_time_value) + { + foreach($pt_arr[$park_time_value]['timex'] as $idx => $pt_rows) + { + if ($week_no >= $pt_rows['w_start'] && + $week_no <= $pt_rows['w_end'] && + $now_time >= $pt_rows['time_start'] && + $now_time <= $pt_rows['time_end']) + { + $week_no_first = $pt_rows['w_start']; + $time_end_first = $pt_rows['time_start']; + trigger_error(__FUNCTION__ . "|$park_time, $target_time | $week_no_first, $time_end_first"); + break; + } + } + } + + $day_offset = $week_no - $week_no_first; + if($day_offset < 0) + { + trigger_error(__FUNCTION__ . '..error..offset..' . $day_offset); + $day_offset = 0; + } + + return date('Y-m-d', strtotime("-$day_offset day", strtotime($target_time))). " $time_end_first"; + } + + // 取得會員時段區間終點 + function gen_park_time_last($park_time, $target_time) + { + $pt_arr = $this->vars['mcache']->get('pt'); + $now_time = substr($target_time, 11); // 日期字串只取最後時間字串(13:25:32) + $week_no = date('w',strtotime($target_time)); // 取星期幾 + $park_time_array = explode(',', $park_time); // 用 , 格開 + $week_no_last = 0; + $time_end_last = ''; + foreach($park_time_array as $idx => $park_time_value) + { + foreach($pt_arr[$park_time_value]['timex'] as $idx => $pt_rows) + { + if ($week_no >= $pt_rows['w_start'] && + $week_no <= $pt_rows['w_end'] && + $now_time >= $pt_rows['time_start'] && + $now_time <= $pt_rows['time_end']) + { + $week_no_last = $pt_rows['w_end']; + $time_end_last = $pt_rows['time_end']; + trigger_error(__FUNCTION__ . "|$park_time, $target_time | $week_no_last, $time_end_last"); + break; + } + } + } + + $day_offset = $week_no_last - $week_no; + if($day_offset < 0) + { + trigger_error(__FUNCTION__ . '..error..offset..' . $day_offset); + $day_offset = 0; + } + + return date('Y-m-d', strtotime("+$day_offset day", strtotime($target_time))). " $time_end_last"; + } + + // 取得會員身份減免後的費用起算時間 + function check_member_state($lpr, $in_time, $out_time) + { + // 檢查月租身份修正 + $member_info = $this->get_member($lpr, false); + + if ($member_info['member_no'] == 0) + { + // 查無會員身份 + $member_state = 0; + $new_in_time = $in_time; + $new_out_time = $out_time; + } + else + { + $park_time = $member_info['park_time']; + $pt_arr = $this->vars['mcache']->get('pt'); + + if(empty($pt_arr) || empty($park_time)) + { + // ERROR: 無法驗証時段, 跳過時段限制判斷 + $member_state = 1; + $new_in_time = $in_time; + $new_out_time = $out_time; + } + else + { + $in_time_in_park_time = $this->check_park_time($park_time, $in_time); + $out_time_in_park_time = $this->check_park_time($park_time, $out_time); + trigger_error(__FUNCTION__ . "|$lpr, $in_time, $out_time|..check_park_time: {$in_time_in_park_time}, {$out_time_in_park_time}.."); + + if($in_time_in_park_time && $out_time_in_park_time) + { + // 進出時間都在會員區間內: 費用起算時間改為出場時間 + $member_state = 2; + $new_in_time = $out_time; + $new_out_time = $out_time; + } + else if($in_time_in_park_time) + { + // 入場時間在會員區間內: 費用起算時間改為, 會員時段區間終點 + $member_state = 3; + $new_in_time = $this->gen_park_time_last($park_time, $in_time); + $new_out_time = $out_time; + + if(strtotime($new_in_time) > strtotime($out_time)) + { + trigger_error(__FUNCTION__ . "|$lpr, $in_time, $out_time|new_in_time error >> out_time.."); + $new_in_time = $out_time; + } + + } + else if($out_time_in_park_time) + { + // 出場時間在會員區間內: 費用起算時間改為, 會員時段區間起點 + $member_state = 4; + $new_in_time = $in_time; + $new_out_time = $this->gen_park_time_first($park_time, $out_time); + + if(strtotime($in_time) > strtotime($new_out_time)) + { + trigger_error(__FUNCTION__ . "|$lpr, $in_time, $out_time|new_in_time error >> out_time.."); + $new_out_time = $out_time; + } + } + } + } + + $member_result = array('state' => $member_state, 'in_time' => $new_in_time, 'out_time' => $new_out_time); + trigger_error(__FUNCTION__ . "|$lpr, $in_time, $out_time|..". print_r($member_result, true)); + return $member_result; + } + // 要求 mitac 扣款 function call_mitac_pay($lpr, $ivsno, $rows_cario) { $function_name = 'parking_fee_altob'; $seqno = $rows_cario['cario_no']; - $lpr = $lpr; $in_time = $rows_cario['out_before_time']; $out_time = $this->now_str; $gate_id = 1; // 20171124 改為強制 1//$ivsno; + // 確認會員身份 + $member_result = $this->check_member_state($lpr, $in_time, $out_time); + switch($member_result['state']) + { + case 0: + trigger_error(__FUNCTION__ . '|非會員|'); + break; + case 1: + trigger_error(__FUNCTION__ . '|無法驗証時段|skip MITAC|'. print_r($member_result, true)); + return false; // 跳過 mitac + break; + case 2: + trigger_error(__FUNCTION__ . '|進出時間都在會員區間內|skip MITAC|'. print_r($member_result, true)); + return false; // 跳過 mitac + break; + case 3: + trigger_error(__FUNCTION__ . '|入場時間在會員區間內|'. print_r($member_result, true)); + $in_time = $member_result['in_time']; + break; + case 4: + trigger_error(__FUNCTION__ . '|出場時間在會員區間內|'. print_r($member_result, true)); + $out_time = $member_result['out_time']; + break; + default: + trigger_error(__FUNCTION__ . '|未定義|'. print_r($member_result, true)); + break; + } + // 通訊內容 $parms = array( 'seqno' => $seqno,