load->database(); $this->now_str = date('Y-m-d H:i:s'); $this->default_valid_time = date('Y-m-d H:i:s', strtotime("{$this->now_str} + 2 days")); // 2016/12/15 新增有效期限 (預設為兩天) } public function init($vars) { $this->vars = $vars; } // 付款 public function login_verify($login_name, $login_pswd) { $rows = $this->db->select('count(*) as ok') ->from('staffs') ->where(array('login_name' => $login_name, 'pswd' => md5($login_pswd))) ->get() ->row_array(); return $rows['ok']; } // 讀出各初始值至web public function get_init_vars() { $st_info = $this->vars['mcache']->get('st_info'); // 路徑初始值 $str = "var APP_URL = '". APP_URL . "';\n". "var WEB_LIB = '" . WEB_LIB . "';\n". "var BOOTSTRAPS = '" . BOOTSTRAPS . "';\n". "var WEB_SERVICE = '" . WEB_SERVICE . "';\n". "var station_no ={$st_info['station_no']};\n". "var company_no = {$st_info['company_no']};\n". "var xvars = new Array();\n". "xvars['ck'] = 'NOLOGIN';\n"; // 讀出場站資訊 $str .= "var st = new Array();\n"; $str .= "st[" . STATION_NO . "]=\"" . STATION_NAME . "\";\n"; /* $results = $this->db->select('station_no, short_name') ->from('stations') ->order_by('station_no', 'asc') ->get() ->result_array(); $str .= "var st = new Array();\n"; foreach($results as $rows) { $str .= "st[{$rows['station_no']}]=\"{$rows['short_name']}\";\n"; } */ // 讀出時段表資訊 $str .= "var pt = new Array();\n"; // park_time foreach($this->vars['mcache']->get('pt') as $key => $rows) { $str .= "pt['{$key}']={'seqno':{$rows['seqno']},'remarks':'{$rows['remarks']}'};\n"; } /* // 讀取繳期名稱 $rows = $this->db->select('period_name') ->from('info') ->where('seqno', 1) ->get() ->row_array(); $str .= "var period_name=Array();\nperiod_name={$rows['period_name']};\n"; */ // 篩選會員身份及繳期資訊 $info = $this->vars['mcache']->get('info'); $str .= "var period_name=Array();\n"; foreach($info['period_name'] as $idx => $rows) { $str .= "period_name[{$idx}]=\"{$rows}\";\n"; } $str .= "var mem_attr = new Array();\n"; foreach($info['member_attr'] as $idx => $rows) { $str .= "mem_attr[{$idx}]=\"{$rows}\";\n"; } return $str; } /* // 停車時段資訊 public function park_time() { $data = array(); $idx = 0; // $results = $this->db->select('time_id, seqno, park_type, week_start, week_end, daytime_start, daytime_end, remarks') $results = $this->db->select('time_id, seqno, timex, remarks') ->from('park_time') ->order_by('seqno', 'asc') ->get() ->result_array(); foreach($results as $rows) { $data[$idx] = array ( 'time_id' => $rows['time_id'], 'seqno' => $rows['time_id'], 'remarks' => $rows['remarks'] ); ++$idx; } return $results; } // 停車時段資訊單筆刪除 public function park_time_delete($time_id) { $this->db->delete('park_time', array('time_id' => $time_id)); return true; } */ // 會員清單 public function member_query_all() { $sql = " SELECT MIN(CONCAT(member_tx.tx_no, member_tx.verify_state)) as tx_order, members.member_no, members.lpr, members.etag, members.member_name, members.mobile_no, members.start_date, members.end_date, members.fee_period, members.member_attr, members.suspended, members.contract_no, members.amt, member_tx.tx_no, member_tx.verify_state, member_tx.valid_time, member_tx.remarks FROM member_tx LEFT JOIN members ON member_tx.member_no = members.member_no WHERE members.member_no IS NOT NULL GROUP BY member_tx.member_no ORDER BY members.lpr ASC "; $results = $this->db->query($sql)->result_array(); return $results; } // 待審核清單 public function member_tx_check() { $sql = " SELECT members.lpr as current_lpr, member_tx.lpr, member_tx.tx_no, member_tx.station_no, member_tx.member_no, member_tx.fee_period, member_tx.fee_period_last, member_tx.amt1, member_tx.amt, member_tx.amt_last, member_tx.deposit, date_format(member_tx.start_date,'%Y-%m-%d') as start_date, date_format(member_tx.end_date,'%Y-%m-%d') as end_date, date_format(member_tx.start_date_last,'%Y-%m-%d') as start_date_last, date_format(member_tx.end_date_last,'%Y-%m-%d') as end_date_last, member_tx.member_company_no, member_tx.company_no, member_tx.acc_date, member_tx.invoice_no, member_tx.invoice_amt, member_tx.invoice_track, member_tx.invoice_time, member_tx.invoice_type, member_tx.verify_state, member_tx.valid_time, member_tx.remarks FROM member_tx LEFT JOIN members ON (member_tx.member_no = members.member_no AND members.station_no = member_tx.station_no) WHERE member_tx.verify_state != 1 ORDER BY member_tx.valid_time ASC "; $results = $this->db->query($sql)->result_array(); return $results; } // 會員查詢 public function member_query($station_no, $q_item, $q_str) { $where_station = $station_no == 0 ? '' : " station_no = {$station_no} and "; // 如為0, 則全部塲站讀取 switch($q_item) { case 'end_date': $items = "{$q_item} <="; $q_str .= ' 23:59:59'; break; case 'lpr': $items = "{$q_item} like "; $q_str = strtoupper($q_str).'%'; break; default: $items = "{$q_item} like "; $q_str .= '%'; break; } $sql = "select station_no, member_no, lpr, member_name, mobile_no, date_format(demonth_start_date,'%Y-%m-%d') as demonth_start_date, date_format(demonth_end_date,'%Y-%m-%d') as demonth_end_date, date_format(start_date,'%Y-%m-%d') as start_date, date_format(end_date,'%Y-%m-%d') as end_date, date_format(rent_start_date,'%Y-%m-%d') as rent_start_date, contract_no, coalesce(etag, '') as etag, fee_period1, fee_period, amt1, amt, if(member_company_no > 0, member_company_no, '') as member_company_no, if(company_no > 0, company_no, '') as company_no, coalesce(member_attr, 1) as member_attr, deposit, park_time, coalesce(member_id, '') as member_id, coalesce(tel_o, '') as tel_o, coalesce(tel_h, '') as tel_h, coalesce(addr, '') as addr, suspended from members where {$where_station} {$items} '{$q_str}'"; $results = $this->db->query($sql)->result_array(); return $results; } // 交易查詢 public function member_tx_query($station_no, $member_no) { $sql = "select tx_no, station_no, member_no, lpr, fee_period, fee_period_last, amt1, amt, amt_last, deposit, date_format(start_date,'%Y-%m-%d') as start_date, date_format(end_date,'%Y-%m-%d') as end_date, date_format(start_date_last,'%Y-%m-%d') as start_date_last, date_format(end_date_last,'%Y-%m-%d') as end_date_last, member_company_no, company_no, acc_date, invoice_no, invoice_amt, invoice_track, invoice_time, invoice_type, verify_state, valid_time, remarks from member_tx where station_no = {$station_no} and member_no = {$member_no} order by tx_no desc"; $results = $this->db->query($sql)->result_array(); return $results; } // 審核完成 public function member_tx_confirmed($parms) { $this->try_sync_batch($parms['station_no']); // 同步未同步記錄 $altob_admin_submit = $this->input->post('altob_admin_submit', true); // 取得 admin 參數 if($altob_admin_submit !== $this->gen_admin_ck($parms['station_no'])) { trigger_error(__FUNCTION__ . '..altob_admin_submit error..' . print_r($parms, true)); return 'admin_error'; // 中斷 } $data_tx = array('verify_state' => $parms['verify_state'], 'valid_time' => $parms['valid_time'], 'remarks' => $parms['remarks']); // [A.開始] $this->db->trans_start(); $this->db->update('member_tx', $data_tx, array('station_no' => $parms['station_no'], 'tx_no' => $parms['tx_no'])); // t1. 更新 member_tx.verify_state, member_tx.valid_time, member_tx.remarks // [B.建立同步檔] $sync_seqnos = $this->prepare_sync2hq('U', $parms['station_no'], 'member_tx', $parms['tx_no'], $data_tx); // t2. 準備同步檔 (member_tx) // [C.完成] $this->db->trans_complete(); if ($this->db->trans_status() === FALSE) { trigger_error(__FUNCTION__ . '|'.print_r($data_tx, true) . '..trans_error..'); return 'fail'; // 中斷 } $this->worker_tx('sync_batch', array('sync_seqnos' => $sync_seqnos)); return 'ok'; } // 刪除月租會員 public function member_delete($station_no, $member_no) { $this->try_sync_batch($station_no); // 同步未同步記錄 // [A.開始] $this->db->trans_start(); $this->db->delete('members', array('station_no' => $station_no, 'member_no' => $member_no, 'suspended' => 0)); // t1. 刪除 members $this->db->delete('member_car', array('station_no' => $station_no, 'member_no' => $member_no)); // t2. 刪除 member_car // [B.建立同步檔] $sync_seqnos = $this->prepare_sync2hq('D', $station_no, 'members', $member_no, array()); // t3. 準備同步檔 (members) // [C.完成] $this->db->trans_complete(); if ($this->db->trans_status() === FALSE) { trigger_error(__FUNCTION__ . ": {$station_no}, {$member_no}, trans_error.."); return 'trans_error'; } // 同步至總管理處 $this->worker_tx('sync_batch', array('sync_seqnos' => $sync_seqnos)); return 'ok'; } // 月租會員加入 public function member_add($data) { $data['lpr'] = preg_replace('/\s+/', '', $data['lpr']); // 移除空白 $check_member_no = $data['member_no']; $station_no = $data['station_no']; $tx_no = 0; $this->try_sync_batch($station_no); // 同步未同步記錄 // 會員車輛基本資料檔 $start_date = (empty($data['demonth_start_date']) ? $data['start_date'] : $data['demonth_start_date']); $data['rent_start_date'] = $data['start_date']; $data['rent_end_date'] = $data['end_date']; $data['start_date'] = "{$start_date} 00:00:00"; $data['end_date'] = "{$data['end_date']} 23:59:59"; $old_lpr = $data['old_lpr']; unset($data['old_lpr']); $data_car = array ( 'lpr' => $data['lpr'], 'lpr_correct' => $data['lpr'], 'etag' => $data['etag'], 'station_no' => $station_no, 'start_time' => $data['start_date'], 'end_time' => $data['end_date'] ); if ($check_member_no == 0) // 新增一筆會員資料 { unset($data['member_no']); $data['payed_date'] = substr($this->now_str, 0, 10); $data['login_id'] = $data['lpr']; $data['passwd'] = $data['lpr']; $action_code = 'A'; // [A.開始] $this->db->trans_start(); $this->db->insert('members', $data); // t1 新增 members $members_insert_id = $this->db->insert_id(); $data_car['member_no'] = $members_insert_id; // t2. 新增 member_car $this->db->insert('member_car', $data_car); $data['member_no'] = $members_insert_id; $data_bill = array( 'member_no' => $members_insert_id, // 會員編號 'station_no' => $station_no, // 場站編號 'lpr' => $data['lpr'], // 車牌號碼 'amt_accrued' => $data['amt_accrued'], // 應收租金 'amt_tot' => $data['amt_tot'], // 實收租金 'deposit' => $data['deposit'], // 押金 'amt' => $data['amt'], // 本期租金 'fee_period' => $data['fee_period'], // 本期繳期 'start_date' => $data['rent_start_date'], // 本期開始日 'end_date' => $data['rent_end_date'], // 本期結束日 'amt1' => $data['amt1'], // 首期租金 'amt_last' => $data['amt1'], // 上期租金 'fee_period_last' => $data['fee_period1'], // 上期繳期 'start_date_last' => $data['demonth_start_date'], // 上期開始日 'end_date_last' => $data['demonth_end_date'] // 上期結束日 ); $this->db->insert('member_bill', $data_bill); // t3 新增 member_bill $bill_no = $this->db->insert_id(); // 帳單序號 $data_tx = array( 'bill_no' => $bill_no, // 帳單序號 'member_no' => $members_insert_id, // 會員編號 'station_no' => $station_no, // 場站編號 'sync_no' => 0, // 預設同步編號 'lpr' => $data['lpr'], // 車牌號碼 'amt_accrued' => $data['amt_accrued'], // 應收租金 'amt_tot' => $data['amt_tot'], // 實收租金 'deposit' => $data['deposit'], // 押金 'amt' => $data['amt'], // 本期租金 // todo: 2016/12/23 只要超過季繳金額就拆開, 後續再由待開發票開立 'fee_period' => $data['fee_period'], // 本期繳期 'start_date' => $data['rent_start_date'], // 本期開始日 'end_date' => $data['rent_end_date'], // 本期結束日 'amt1' => $data['amt1'], // 首期租金 'amt_last' => $data['amt1'], // 上期租金 'fee_period_last' => $data['fee_period1'], // 上期繳期 'start_date_last' => $data['demonth_start_date'], // 上期開始日 'end_date_last' => $data['demonth_end_date'], // 上期結束日 'member_company_no' => $data['member_company_no'], // 買方統編 'company_no' => $data['company_no'], // 賣方統編 'acc_date' => $data['payed_date'], // 入帳日(暫定) 'valid_time' => $this->default_valid_time // 有效期限 ); $this->db->insert('member_tx', $data_tx); // t4 新增 member_tx $tx_no = $this->db->insert_id(); // 交易序號 $data_tx['tx_no'] = $tx_no; // [B.建立同步檔] $sync_seqnos = $this->prepare_sync2hq($action_code, $station_no, 'members', $members_insert_id, $data); // t5 準備同步檔 (members) $sync_seqnos .= ',' . $this->prepare_sync2hq($action_code, $station_no, 'member_bill', $bill_no, $data_bill); // t6 準備同步檔 (member_bill) $sync_seqnos .= ',' . $this->prepare_sync2hq($action_code, $station_no, 'member_tx', $tx_no, $data_tx); // t7 準備同步檔 (member_tx) // [C.完成] $this->db->trans_complete(); if ($this->db->trans_status() === FALSE) { trigger_error(__FUNCTION__ . '..trans_error..' . print_r($data, true)); return 'trans_error'; } // 同步至總管理處 $this->worker_tx('sync_batch', array('sync_seqnos' => $sync_seqnos)); } else { $altob_admin_submit = $this->input->post('altob_admin_submit', true); // 取得 admin 參數 if($altob_admin_submit == $this->gen_admin_ck($station_no)) { trigger_error("admin: " + $altob_admin_submit); //unset($data['contract_no']); // 合約號 //unset($data['park_time']); // 停車時段 unset($data['rent_start_date']); unset($data['rent_end_date']); unset($data['start_date']); unset($data['end_date']); unset($data['demonth_start_date']); unset($data['demonth_end_date']); unset($data['member_attr']); unset($data['deposit']); unset($data['amt_tot']); unset($data['amt_accrued']); unset($data['fee_period1']); unset($data['amt1']); //unset($data['fee_period']); // 例行繳期 //unset($data['amt']); // 例行租金 } else { // 一般情況下, 時段與費率都不能在這個流程修改 //unset($data['contract_no']); // 合約號 unset($data['park_time']); unset($data['rent_start_date']); unset($data['rent_end_date']); unset($data['start_date']); unset($data['end_date']); unset($data['demonth_start_date']); unset($data['demonth_end_date']); unset($data['member_attr']); unset($data['deposit']); unset($data['amt_tot']); unset($data['amt_accrued']); unset($data['fee_period1']); unset($data['amt1']); unset($data['fee_period']); unset($data['amt']); } $action_code = 'U'; // [A.開始] $this->db->trans_start(); $this->db->update('members', $data, array('station_no' => $station_no, 'member_no' => $check_member_no)); // t1. 更新 members // 沒有異動到車牌, 使用update, 否則重建一筆 if ($old_lpr == $data['lpr']) // t2. 更新 member_car { unset($data_car['lpr']); unset($data_car['lpr_correct']); $this->db->update('member_car', $data_car, array('station_no' => $station_no, 'member_no' => $check_member_no)); } else { $this->db->delete('member_car', array('station_no' => $station_no, 'member_no' => $check_member_no)); $data_car['member_no'] = $check_member_no; $this->db->insert('member_car', $data_car); } // [B.建立同步檔] $sync_seqnos = $this->prepare_sync2hq($action_code, $station_no, 'members', $check_member_no, $data); // t3. 準備同步檔 (members) // [C.完成] $this->db->trans_complete(); if ($this->db->trans_status() === FALSE) { trigger_error(__FUNCTION__ . '..trans_error..' . print_r($data, true)); return 'trans_error'; } // 同步至總管理處 $this->worker_tx('sync_batch', array('sync_seqnos' => $sync_seqnos)); } return array( 'station_no' => $station_no, 'company_no' => $data['company_no'], 'member_no' => $data['member_no'], 'start_date' => $start_date, 'msg' => 'ok', 'action_code' => $action_code, 'tx_no' => $tx_no); } // 查詢車牌是否重複 public function check_lpr($lpr) { $rows = $this->db->select('count(*) as counts') ->from('members') ->where(array('lpr' => $lpr)) ->get() ->row_array(); return $rows['counts']; } // 取得交易發票 public function get_tx_invoice_no($tx_no) { $rows = $this->db->select('invoice_no') ->from('member_tx') ->where(array('tx_no' => $tx_no)) ->get() ->row_array(); return $rows['invoice_no']; } // 更新月租發票記錄 public function set_tx_invoice_no($parms) { $data = array ( 'member_company_no' => $parms['member_company_no'], 'company_no' => $parms['company_no'], 'invoice_track' => $parms['invoice_track'], 'invoice_no' => $parms['invoice_no'], 'invoice_amt' => $parms['invoice_amt'], 'invoice_time' => $parms['invoice_time'] ); if(array_key_exists('invoice_type', $parms)) { $data['invoice_type'] = $parms['invoice_type']; // 發票種類 } // [A.開始] $this->db->trans_start(); $this->db->update('member_tx', $data, array('station_no' => $parms['station_no'], 'tx_no' => $parms['tx_no'])); // t1. 更新 member_tx // [B.建立同步檔] $sync_seqnos = $this->prepare_sync2hq('U', $parms['station_no'], 'member_tx', $parms['tx_no'], $data); // t2. 準備同步檔 // [C.完成] $this->db->trans_complete(); if ($this->db->trans_status() === FALSE) { trigger_error(__FUNCTION__ . '|'.print_r($data, true) . '..trans_error..'); return 'fail'; // 中斷 } // 同步至總管理處 $this->worker_tx('sync_batch', array('sync_seqnos' => $sync_seqnos)); return 'ok'; } // 首期月租付款交易 public function first_rents_payment($parms) { $this->try_sync_batch($parms['station_no']); // 同步未同步記錄 // 確認交易記錄 $rows = $this->db->select('count(*) as counts') ->from('member_tx') ->where(array('tx_no' => $parms['tx_no'], 'station_no' => $parms['station_no'], 'member_no' => $parms['member_no'], 'amt' => $parms['amt'], 'amt1' => $parms['amt1'])) ->get() ->row_array(); if(empty($rows) || $rows['counts'] != 1) { trigger_error(__FUNCTION__ . '..tx gg..' . print_r($parms, true)); return 'tx_error'; // 中斷 } // 印發票 $parms['invoice_amt'] = $parms['amt'] + $parms['amt1']; // 例行租金 + 首期租金 if(array_key_exists('invoice_track', $parms) && array_key_exists('invoice_no', $parms)) { $parms['invoice_time'] = date('Y-m-d H:i:s'); // 目前時間 } else { $invoice_result = $this->print_invoice($parms); if(!empty($invoice_result) && array_key_exists('einvoice_no', $invoice_result)) { $parms['invoice_track'] = $invoice_result['einvoice_track']; // 發票字軌 $parms['invoice_no'] = $invoice_result['einvoice_no']; // 發票號碼 $parms['invoice_time'] = date('Y-m-d H:i:s'); // 目前時間 } } if(empty($parms['invoice_no']) || empty($parms['invoice_track'])) { trigger_error(__FUNCTION__ . '..invoice gg..' . print_r($parms, true)); return 'invoice_fail'; // 中斷 } // 更新月租發票記錄 echo $this->set_tx_invoice_no($parms); } // 新增月租付款交易 public function rents_payment($parms) { $this->try_sync_batch($parms['station_no']); // 同步未同步記錄 //$parms['start_date'] = $parms['start_date_last']; // 印發票 $parms['invoice_amt'] = $parms['amt']; // 例行租金 if(array_key_exists('invoice_track', $parms) && array_key_exists('invoice_no', $parms)) { $parms['invoice_time'] = date('Y-m-d H:i:s'); // 目前時間 } else { $invoice_result = $this->print_invoice($parms); if(!empty($invoice_result) && array_key_exists('einvoice_no', $invoice_result)) { $parms['invoice_track'] = $invoice_result['einvoice_track']; // 發票字軌 $parms['invoice_no'] = $invoice_result['einvoice_no']; // 發票號碼 $parms['invoice_time'] = date('Y-m-d H:i:s'); // 目前時間 } if(empty($parms['invoice_no']) || empty($parms['invoice_track'])) { trigger_error(__FUNCTION__ . '..invoice gg..' . print_r($parms, true)); //return 'invoice_fail'; } } $parms['sync_no'] = 0; // 預設同步編號 $parms['fee_period_last'] = $parms['fee_period']; // 上期繳期 $parms['start_date'] = date('Y-m-d', strtotime("{$parms['end_date_last']} first day of next month")); // 本期開始日:上期結束日之次月首日 $parms['acc_date'] = date('Y-m-d'); // 入帳日(暫定) $parms['valid_time'] = $this->default_valid_time; // 有效期限 // [A.開始] $this->db->trans_start(); $this->db->insert('member_tx', $parms); // t1. 新增 member_tx $tx_no = $this->db->insert_id(); // 交易序號 $data = $parms; $data['tx_no'] = $tx_no; $data_member = array( 'fee_period' => $parms['fee_period'], 'payed_date' => substr($parms['invoice_time'], 0, 10), 'start_date' => "{$parms['start_date_last']} 00:00:00", // 開始日:由上期繼續延續下去 'end_date' => "{$parms['end_date']} 23:59:59" // 結束日 ); $this->db->update('members', $data_member, array('station_no' => $parms['station_no'], 'member_no' => $parms['member_no'])); // t2. 更新 members $this->db->update('member_car', // t5. 更新 member_car array('start_time' => "{$data_member['start_date']} 00:00:00", 'end_time' => "{$data_member['end_date']} 23:59:59"), array('station_no' => $parms['station_no'], 'member_no' => $parms['member_no'])); // [B.準備同步檔] $sync_seqnos = $this->prepare_sync2hq('A', $parms['station_no'], 'member_tx', $tx_no, $data); // t2. 準備同步檔 $sync_seqnos .= ',' . $this->prepare_sync2hq('U', $parms['station_no'], 'members', $parms['member_no'], $data_member); // t4. 準備同步檔 // [c.完成] $this->db->trans_complete(); if ($this->db->trans_status() === FALSE) { trigger_error(__FUNCTION__ . '|'.print_r($data, true) . '..trans_error..'); return 'fail'; // 中斷 } // 同步至總管理處 $this->worker_tx('sync_batch', array('sync_seqnos' => $sync_seqnos)); return 'ok'; } // 停權或啟動 public function suspended($parms) { $this->try_sync_batch($parms['station_no']); // 同步未同步記錄 $altob_admin_submit = $this->input->post('altob_admin_submit', true); // 取得 admin 參數 if($altob_admin_submit !== $this->gen_admin_ck($parms['station_no'])) { trigger_error(__FUNCTION__ . '..altob_admin_submit error..' . print_r($parms, true)); return 'admin_error'; // 中斷 } $data = array('suspended' => $parms['suspended']); // [A.開始] $this->db->trans_start(); $this->db->update('members', $data, array('station_no' => $parms['station_no'], 'member_no' => $parms['member_no'])); // t1. 更新 member.suspended // [B.準備同步檔] $sync_seqnos = $this->prepare_sync2hq('U', $parms['station_no'], 'members', $parms['member_no'], $data); // t2. 準備同步檔 // [C.完成] $this->db->trans_complete(); if ($this->db->trans_status() === FALSE) { trigger_error(__FUNCTION__ . '|'.print_r($data, true) . '..trans_error..'); return 'fail'; // 中斷 } // 同步至總管理處 $this->worker_tx('sync_batch', array('sync_seqnos' => $sync_seqnos)); return 'ok'; } // 同步未同步記錄 public function try_sync_batch($station_no, $limit=5) { $sql = "select st_sync_no from syncs where synced = 0 and erred = 0 and station_no = {$station_no} order by st_sync_no ASC limit {$limit}"; $results = $this->db->query($sql)->result_array(); if(empty($results)) return false; // do nothing $sync_seqnos = ''; foreach($results as $rows) { $sync_seqnos .= ',' . $rows['st_sync_no']; } $sync_seqnos = ltrim($sync_seqnos, ','); trigger_error(__FUNCTION__ . '|' . $sync_seqnos); // 同步至總管理處 $this->worker_tx('sync_batch', array('sync_seqnos' => $sync_seqnos)); } // 同步至總公司 function prepare_sync2hq($act, $station_no, $st_tname, $st_seqno, $data) { $data_syncs = array ( 'station_no' => $station_no, 'synced' => 0, // 尚未同步 'erred' => 0, 'act' => $act, // A:新增, U:修改, D:刪除 'hq_tname' => 'hq_'.$st_tname, 'st_tname' => $st_tname, // 場站資料表 'st_seqno' => $st_seqno, // 場站交易序號 'sync_data' => json_encode($data, JSON_UNESCAPED_UNICODE) ); $this->db->insert('syncs', $data_syncs); return $this->db->insert_id(); } // curl送收資料 function worker_tx($cmd, $data) { try { $ch = curl_init(); $curl_options = array ( CURLOPT_URL => "http://localhost:60133/?cmd={$cmd}", CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, // 返回值不顯示, 只做變數用 CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $data ); curl_setopt_array($ch, $curl_options); curl_exec($ch); curl_close($ch); } catch (Exception $e) { trigger_error("{$cmd} error: ".$e->getMessage()); } } // 管理員參數 function gen_admin_ck($station_no) { return md5(date("m \a\l\t\o\b d").$station_no.date("i \z\z\z H")); } // 印發票 public function print_invoice($parms) { $result = array(); try { // 印發票 $ch = curl_init(); $curl_options = array ( CURLOPT_URL => "http://localhost:60134/", CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_CONNECTTIMEOUT => 2, CURLOPT_TIMEOUT => 2, CURLOPT_POST => 1, CURLOPT_POSTFIELDS => array( 'cmd' => 'printInvoice', 'company_no' => $parms['company_no'], 'vCUS_COMP_CODE'=> $parms['member_company_no'], 'vAmount' => $parms['invoice_amt'], 'vPLU_MEMO' => 'parking:50:3', 'vTAIL_MESSAGE' => 'Rental' ) ); curl_setopt_array($ch, $curl_options); $ch_response = curl_exec($ch); trigger_error(__FUNCTION__ . '|' . print_r($ch_response, true)); curl_close($ch); $result = json_decode($ch_response, true); } catch (Exception $e) { trigger_error(__FUNCTION__ .$e->getMessage()); } //測試用 //$result['einvoice_track'] = 'AB'; // 發票字軌 //$result['einvoice_no'] = '12345678'; // 發票號碼 return $result; } }