ÿØÿà JFIF ` ` ÿþ
Server : Apache System : Linux ruga7-004.fmcity.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 User : tkt_travelbus ( 1137) PHP Version : 7.0.0p1 Disable Function : mysql_pconnect Directory : /tkt_travelbus/www/LibClass/ |
Upload File : |
<? /****************************************************************************** * * 여행업무 공통 클래스 * ******************************************************************************/ class CommonTour{ // Class 멤버변수 public $cf; public $TO_CF; public $TO_MB; public $point_log_table = 'TB_POINT_LOG'; // 생성자 public function __construct($table_prefix) { global $cf , $TO_CF; global $TO_MB; $this->cf = $cf; $this->TO_CF = $TO_CF; $this->TO_MB = $TO_MB; if($table_prefix){ $this->point_log_table = $this->point_log_table."_".$table_prefix; } } // // 환율목록 // public function exchangeList($rdata=array()) { $table = "TB_EXCHANGE"; $data = array(); $sql_where = " 0=0 " . $rdata['sql_where']; $sql_order = " order_num "; if($rdata['sql_order']) $sql_order = $rdata['sql_order']; $sql = "select * "; $sql .= " ,case ext_round when 'R' then '반올림' when 'A' then '올림' when 'L' then '버림' end as ext_round2 "; $sql .= ",(select count(*) from good where good.exid={$table}.exid and good.exchange_fg='Y' ) as g_cnt "; $sql .= ",(select count(*) from TB_HOTEL where TB_HOTEL.exid={$table}.exid and TB_HOTEL.exchange_fg='Y' ) as h_cnt "; $sql .=" from ".$table; $sql .= " where " . $sql_where; $sql .= " order by " . $sql_order; $rs = db_query($sql); for ($i=0 ; $row=db_fetch_array($rs) ; $i++){ if($row['del_fg']=="N") $row['del_fg_opp'] = "Y"; else $row['del_fg_opp'] = "N"; // 사용 flag if ($row['del_fg'] == "N") { $row['del_fg_icon'] = $this->cf['icon']['start']; $row['del_fg_opp'] = "Y"; } else { $row['del_fg_icon'] = $this->cf['icon']['stop']; $row['del_fg_opp'] = "N"; } // 삭제가능 체크 $row['is_del'] = ($row['g_cnt']>0 or $row['h_cnt']>0) ? false:true; $data[] = $row; } return $data; } // // 환율적용 // // params @exid : 환율테이블 ID // params @money : 외국환 금액 // // 주의 : 로직변경시에 관리자 js(hotel/hotel_date_reg.html(hotel_date_view.html),good/good_date_reg.html(good_date_view.html)) // 프로시져(SP_EXCHANGE_MONEY)도 같이변경 해 줘야함 public function exchangeMoney($rdata="") { if (!$rdata or !$rdata['exid'] or !$rdata['money']) return $rdata['money']; $data = $this->exchangeList(array("sql_where"=>" and exid='".$rdata['exid']."' ")); $r = $data[0]; // 환율기준정보로 변환후 리턴 $ext_to_krw = (float)$r['ext_to_krw']; // 화폐교환 원(KRW) $ext_unit = (int)$r['ext_unit']; // 1000원단위,100원단위 $ext_round = $r['ext_round']; // 올림(A)반올림(R)버림(L) $ex_money=0; $h_money = round((int)$rdata['money'] * $ext_to_krw); switch($ext_round) { case "A":// 올림 $ex_money = ceil($h_money/$ext_unit)*$ext_unit; break; case "R":// 반올림 $ex_money = round($h_money/$ext_unit)*$ext_unit; break; case "L":// 버림 $ex_money = floor($h_money/$ext_unit)*$ext_unit; break; } return $ex_money; } //2019-10-18 원화를 각국 통화로 변환 public function exchangeMoney_Reverse($rdata="") { if (!$rdata or !$rdata['ext_eng'] or !$rdata['money']) return $rdata['money']; $data = $this->exchangeList(array("sql_where"=>" and ext_eng='".$rdata['ext_eng']."' ")); $r = $data[0]; // 환율기준정보로 변환후 리턴 $ext_to_krw = (float)$r['ext_to_krw']; // 화폐교환 원(KRW) $ext_unit = (int)$r['ext_unit']; // 1000원단위,100원단위 $ext_round = $r['ext_round']; // 올림(A)반올림(R)버림(L) if(!$ext_to_krw) $ext_to_krw = "1"; if(!$ext_unit) $ext_unit = "100"; if(!$ext_round) $ext_round = "R"; $ex_money=0; $h_money = round((int)$rdata['money'] / $ext_to_krw,2); switch($ext_round) { case "A":// 올림 $ex_money = ceil($h_money/$ext_unit)*$ext_unit; break; case "R":// 반올림 $ex_money = round($h_money/$ext_unit,2)*$ext_unit; break; case "L":// 버림 $ex_money = floor($h_money/$ext_unit)*$ext_unit; break; } return $ex_money; } /* * [son]예약정보에 저장된 환율정보로 각국 통화로 변환 * TB_RES_GOOD.curunit, hwan 데이터 기준 */ public function exchangeMoney_data($rdata,$money) { if(empty($rdata) || empty($money)) return $money; $data = $this->exchangeList(array("sql_where"=>" and ext_eng='".$rdata['curunit']."' ")); $r = $data[0]; // 환율기준정보로 변환후 리턴 $ext_to_krw = (float)$rdata['ext_to_krw']; // 화폐교환 원(KRW) //////////////저장된 정보 기준 $ext_unit = (int)$r['ext_unit']; // 1000원단위,100원단위 $ext_round = $r['ext_round']; // 올림(A)반올림(R)버림(L) if(!$ext_to_krw) $ext_to_krw = "1"; if(!$ext_unit) $ext_unit = "100"; if(!$ext_round) $ext_round = "R"; $ex_money=0; $h_money = round((int)$money / $ext_to_krw,2); switch($ext_round) { case "A":// 올림 $ex_money = ceil($h_money/$ext_unit)*$ext_unit; break; case "R":// 반올림 $ex_money = round($h_money/$ext_unit,2)*$ext_unit; break; case "L":// 버림 $ex_money = floor($h_money/$ext_unit)*$ext_unit; break; } return $ex_money; } // // 상점(shop) 포인트 설정정보 // public function shopPoint() { $sql = "select * from TB_POINT_SHOP limit 1"; $r = db_fetch($sql); return $r; } // // 적립금 입력(차감) // public function pointIns($rdata="") { global $cf; if (!$rdata or !$rdata['mode']) return false; $table = $this->point_log_table; // 설정정보 $set_point = $this->shopPoint(); if($set_point['use_yn']!="Y") return false; $set_point['point_join'] = $set_point["point_join_".$cf['lang']]; switch($rdata['mode']) { case "mb_join_point": // 회원 가입 적립금 if(!$rdata['mb_id']) return false; $data_mb = get_member($rdata['mb_id']); $pcont = _e("회원 가입 적립금"); // 적립가능확인 $data_ck = $this->pointList(array("sql_where"=>" and psp_case='1' and mb_id='{$data_mb[mb_id]}' ")); if(count($data_ck) > 0 or !$data_mb['mb_id']) return false; // 회원가입 중복 적립금지 & 회원정보없음 // 적립하기 $sql = "insert into {$table} set pp='".$set_point['point_join']."', mb_id='{$data_mb[mb_id]}', mb_nm='{$data_mb[mb_nm]}', "; $sql .= "pcont='{$pcont}', psp_case='1', ins_dt=now() "; db_query($sql); return true; break; case "mb_point_ins": // 관리자 수동 입력 적립금 if(!$rdata['mb_id']) return false; $data_mb = get_member($rdata['mb_id']); if( !$data_mb['mb_id'] ) return false; // 회원정보없음 // 내역 $pcont = "관리자수동입력(".$this->TO_MB['mb_nm'].")"; if($rdata['pcont']) $pcont = $rdata['pcont']; // 포인트 $pp = (int)$rdata['pp']; $mp = (int)$rdata['mp']; // 적립하기 $sql = "insert into {$table} set pp='{$pp}', mp='{$mp}', mb_id='{$data_mb[mb_id]}', mb_nm='{$data_mb[mb_nm]}', "; $sql .= "pcont='{$pcont}', psp_case='2', ins_dt=now(), admin_id='{$this->TO_MB[mb_id]}', admin_nm='{$this->TO_MB[mb_nm]}' "; db_query($sql); return true; break; case "tour_order_buy": // 구매에 따른 적립금 차감 , 적립 $good_mny = (int)$rdata['good_mny']; // 상품 구매가격 (적립금부분 차감) $good_point = (int)$rdata['good_point']; // 상품 구매 사용 적립금 $mb_id = $rdata['mb_id']; $res_no_all = $rdata['res_no_all']; // 예약번호s $good_point_arr = $rdata['good_point_arr']; $data_mb = get_member($rdata['mb_id']); // 회원정보 // 회원정보 체크 if(!$data_mb['mb_id']) return false; // 현재 적립금 확인 $mb_point = $this->pointTotal(array("sql_where"=>" and mb_id='".$mb_id."' ")); if($mb_point['cur_point'] < $good_point) return false; // <<<<적립금 차감>>>> $pcont = _e("예약결제사용");// 내역 $mp = $good_point;// 포인트 for($i=0 ; $i<count($good_point_arr) ; $i++) { $arr_t = explode("||",$good_point_arr[$i]); $res_no = $arr_t[0]; $mp = $arr_t[1]; // 사용되어진 포인트 $tab = substr($res_no,0,1); if($mp > 0 and $res_no) { switch($tab) { case "P": case "D": case "T": $data_good = res_good_master(" and res_no='{$res_no}' "); $row_good = $data_good[0]; $pcont = $row_good['ev_title']; $sql = "insert into {$table} set mp='{$mp}', mb_id='{$data_mb[mb_id]}', mb_nm='{$data_mb[mb_nm]}', "; $sql .= "pcont='{$pcont}', psp_case='3', res_no='{$res_no}', ins_dt=now() "; // 차감하기 db_query($sql); break; case "L": $HotelReserv = new HotelReserv(); $data_hotel = $HotelReserv->res_hotel_master(" and res_no='{$res_no}' "); $row_hotel = $data_hotel[0]; $pcont = $row_hotel['hnm'] . " " . $row_hotel['rnm']; $sql = "insert into {$table} set mp='{$mp}', mb_id='{$data_mb[mb_id]}', mb_nm='{$data_mb[mb_nm]}', "; $sql .= "pcont='{$pcont}', psp_case='3', res_no='{$res_no}', ins_dt=now() "; // 차감하기 db_query($sql); break; } } } // <<<<적립예정금 적립>>>> $pp = 0; if( is_array($good_point_arr) ){ $pcont = "예약결제적립";// 내역 $wdata = $this->pointWillSave($good_point_arr); } for($i=0 ; $i<count($wdata['all']) ; $i++) { $r = $wdata['all'][$i]; $res_no = $r[0]; $pp = $r[1]; if($pp>0 and $res_no) { // 바로적립 해주면 않되고, 출발일다음날(일실일다음날) 적용해 주기 위해 del_fg를 Y로 설정. $sql = "insert into {$table} set pp='{$pp}', mb_id='{$data_mb[mb_id]}', mb_nm='{$data_mb[mb_nm]}', "; $sql .= "pcont='{$pcont}', psp_case='4', res_no='{$res_no}',del_fg='W', ins_dt=now() "; // 차감하기 db_query($sql); } } return true; break; } } // // 포인트 목록 // public function pointList($rdata="") { if (!$rdata or !$rdata['sql_where']) return false; $table = $this->point_log_table; $data = array(); $sql_where = $rdata['sql_where']; if($rdata['sql_order']) $sql_order = " order by ". $rdata['sql_order']; else $sql_order = " order by pno desc "; if($rdata['sql_limit']) $sql_limit = " limit " . $rdata['sql_limit']; else $sql_limit = " limit 1000"; $sql = "select *, case psp_case when 1 then '회원가입' when 2 then '수동적립' when 3 then '구매적립' when 4 then '예약적립' else '기타' end as psp_case_str from {$table} where 0=0 {$sql_where} {$sql_order} {$sql_limit} "; $rs = db_query($sql); while($row = db_fetch_array($rs)) { $row['ins_dt2'] = substr($row['ins_dt'],0,10); $data[] = $row; } return $data; } // // 포인트 합계 // public function pointTotal($rdata="") { if (!$rdata or !$rdata['sql_where']) return false; $table = $this->point_log_table; if ($rdata['sql_where']) $sql_where = $rdata['sql_where']; $data = array(); $sql = "select sum(pp) as tot_pp,sum(mp) as tot_mp,sum(pp)-sum(mp) as cur_point "; $sql .= " from {$table} where del_fg='N' {$sql_where} "; $data = db_fetch($sql); return $data; } // // 금액 분할 // // params @money : 나눌금액 // params @price_arr : 상품별가격 배열 // return @array // public function moneyDivide($money=0,$price_arr=array()) { $money = (int)$money; $div = count($price_arr); if($money==0 or $div==0) return false; $data = array(); $dmoney = 0; // 나눌금액분할 누적금액 $dmoneylast = 0; // 나눌금액분할 누적금액의 마지막은 잔여 금액으로 딱 떨어짐 for($i=0 , $j=1 ; $i<$div ; $i++ , $j++) { if($dmoney >= $money) break; // 상품가격에 대해서 딱 떨어지는 array에 잔여 금액를 몰아 넣음 $t = $price_arr[$i] - $money; if($t>0) { $data[] = $money - $dmoney - $dpricelast; break; } else{ if($j<$div) { $t = round($money/$div); if($t < $price_arr[$i]) { $dmoney += $t; $data[] = $t; } else $data[] = 0; } // 마지막은 잔여 금액으로 딱 떨어짐 else { $t = $money - $dmoney; if($t < $price_arr[$i]) { $dmoneylast = $t; $data[] = $dmoneylast; } else $data[] = 0; } } } // 나눌금액과 나눈금액의 합계가 일치하지 않을 경우 에러 리턴 // 상품전체 금액보다 나눌금액의 계가 큰 경우 또는 로직 에러 if(array_sum($data)!=$money) return false; return $data; } // // 회원 적립금 사용 검증 // // params @mb_id : 회원ID // params @pay_total : 결제금액 // params @point : 사용할 적립금 // // 주의 : 로직변경시에 (모바일)사용자 js(mypage/tour_order.html)도 같이변경 해 줘야함 public function checkPointMember($rdata=array()) { global $cf; $set_point = $this->shopPoint(); if (!$rdata['mb_id'] or !$rdata['pay_total']) return false; $pay_total = (int)$rdata['pay_total']; $point = (int)$rdata['point']; $set_point['point_use_order_min'] = $set_point["point_use_order_min_".$cf['lang']]; $set_point['point_use_min'] = $set_point["point_use_min_".$cf['lang']]; $set_point['point_use_max_won'] = $set_point["point_use_max_won_".$cf['lang']]; $set_point['point_use_max_type'] = $set_point["point_use_max_type_".$cf['lang']]; $set_point['point_use_max_per'] = $set_point["point_use_max_per_".$cf['lang']]; $flag = true; $msg = ""; $rest_point = 0; $mb_point = $this->pointTotal(array("sql_where"=>" and mb_id='".$rdata['mb_id']."' ")); $cur_point = $mb_point['cur_point']; // 현재 적립금 if ($point==0) { return array("flag"=>true,"rest_point"=>0,"good_mny"=>$pay_total); } if ($point > $cur_point && flag==true) { $msg = $cur_point.' 이상 사용하실수 없습니다.'; $flag = false; } if ($pay_total < $point && $flag==true) { $msg = '결제금액을 초과하였습니다.'; $flag = false; } // 결제가능 최소 구매금액 체크 if ($set_point['point_use_order_min'] > $pay_total && flag==true) { $msg = '결제금액 '.number_format($set_point['point_use_order_min']).' 이상 부터 적립금 사용하실수 있습니다'; $flag = false; } if ($point < $set_point['point_use_min'] && $set_point['point_use_min']>0 && flag==true) { $msg = '적립금은 '.number_format($set_point['point_use_min']).'원 이상부터 사용가능합니다.'; $flag = false; } // 포인트중 xx원 이하만 사용가능 if ($set_point['point_use_max_won'] < $point && $set_point['point_use_max_type']=='1' && $set_point['point_use_max_won']>0 && $flag==true) { $msg = '적립금중 '.number_format($set_point['point_use_max_won']).'원 이하만 사용가능합니다.'; $flag = false; } // 결제금액의 xx%이하 결제 if($set_point['point_use_max_per']>0 && $set_point['point_use_max_type']=='2' && $flag==true) { $total_dpay = round($pay_total*($set_point['point_use_max_per']/100)); // 퍼센트 환산 if( $total_dpay < $point ) { $msg = '결제가능 최대 적립금은 '.number_format($total_dpay).'입니다.'; } } if ($flag == false) { return array("flag"=>false,"msg"=>$msg); } $rest_point = $cur_point - $point; // 잔여 적립금 $good_mny = $pay_total - $point; // 실 결제금 return array("flag"=>true,"rest_point"=>$rest_point,"good_mny"=>$good_mny); } // 예약별 적립예정금액 산출 // // params @good_point_arr : array("T17011916331B76||5500","P170119140270FE||6500") 예약번호||적립금액 // // return 적립예정금 합계 public function pointWillSave($good_point_arr="") { if (!$good_point_arr or !is_array($good_point_arr)) return 0; $tot_willpoint = 0; // 적립예정금 합계 $data = array(); $shop_point = $this->shopPoint(); foreach ($good_point_arr as $v) { $ar = explode("||",$v); $res_no = $ar[0]; $use_point = $ar[1]; $tab = substr($res_no,0,1); switch($tab) { case "P": case "D": case "T": $data_good = res_good_master(" and res_no='{$res_no}' "); $row_good = res_good_master_replace($data_good[0]); $point_yn = $row_good['date']['point_yn']; $point_buy1 = (int)$row_good['date']['point_buy1']; $point_buy2 = (int)$row_good['date']['point_buy2']; $pre_money = (int)$row_good['account']['pre_money']; $payprice = $pre_money - $use_point; // 결제금액 // 포인트를 사용하는 행사 if($point_yn=="Y" and $point_buy1>0 and $point_buy2>0) { // 적립금 사용시 추가 적립 체크 if($shop_point['point_use_give']=="Y") { $willpoint = round(($pre_money/$point_buy1)*$point_buy2); }else{ $willpoint = round(($payprice/$point_buy1)*$point_buy2); } }else{ $willpoint = 0; } $data['all'][] = array($res_no,$willpoint); $tot_willpoint += $willpoint; break; case "L": $HotelReserv = new HotelReserv(); $data_hotel = $HotelReserv->res_hotel_master(" and res_no='{$res_no}' "); $row_hotel = $HotelReserv->res_hotel_master_replace($data_hotel[0]); $point_yn = $row_hotel['point_yn']; $point_buy1 = (int)$row_hotel['point_buy1']; $point_buy2 = (int)$row_hotel['point_buy2']; $pre_money = (int)$row_hotel['account']['pre_money']; $payprice = $pre_money - $use_point; // 결제금액 // 포인트를 사용하는 행사 if($point_yn=="Y" and $point_buy1>0 and $point_buy2>0) { // 적립금 사용시 추가 적립 체크 if($shop_point['point_use_give']=="Y") { $willpoint = round(($pre_money/$point_buy1)*$point_buy2); }else{ $willpoint = round(($payprice/$point_buy1)*$point_buy2); } }else{ $willpoint = 0; } $data['all'][] = array($res_no,$willpoint); $tot_willpoint += $willpoint; break; } } $data['total'] = $tot_willpoint; return $data; } // // 카테고리기준 상품(호텔,여행...)목록 // // params @b_uid : 1차카테고리 // params @m_uid : 2차카테고리 // params @s_uid : 3차카테고리 // public function listGoodHotel($rdata=array()) { $data = array(); if(!$rdata or !$rdata['m_uid']) return $data; if ($rdata['m_uid'] and $rdata['s_uid']) { // 3차 카테고리 $data_sc = TO_get_sc("",$rdata['m_uid'],$rdata['s_uid'],"N"); $tab = $data_sc[0]['tab']; } else { // 2차 카테고리 $data_mc = TO_get_mc($rdata['b_uid'],$rdata['m_uid'],"N"); $tab = $data_mc[0]['tab']; } $sql_where = ""; if ($rdata['b_uid']) $sql_where .= " and b_uid='{$rdata['b_uid']}' "; if ($rdata['m_uid']) $sql_where .= " and m_uid='{$rdata['m_uid']}' "; if ($rdata['s_uid']) $sql_where .= " and s_uid='{$rdata['s_uid']}' "; switch ($tab) { case "L": $rs = db_query("select *, hseq as g_uid, hotel_nm as g_title from TB_HOTEL where 0=0 {$sql_where} and disp_yn='Y' order by order_num "); $data = db_fetch_all($rs); break; default: $rs = db_query("select * from good where 0=0 {$sql_where} and g_ok='Y' order by g_no "); $data = db_fetch_all($rs); } return $data; } } ?>