增加价格标签功能测试

hotfix/paypal-note
Jimmy Liow 2 years ago
parent 7981fc21d3
commit 8ad3faee4f

@ -25,6 +25,8 @@ class Information extends CI_Controller
$this->load->model('recommends_and_tips_model'); $this->load->model('recommends_and_tips_model');
$this->load->model('trippest_model'); //trippest产品 $this->load->model('trippest_model'); //trippest产品
$this->load->model('Feedback_model'); $this->load->model('Feedback_model');
$this->load->model('Price_model');
$this->load->model('PrimeLinePrice_model');
$this->load->library('Amplib'); //加载AMP处理类 $this->load->library('Amplib'); //加载AMP处理类
$this->load->library('html_optimize_lib'); //加载HTML优化类 $this->load->library('html_optimize_lib'); //加载HTML优化类
@ -992,6 +994,162 @@ class Information extends CI_Controller
var_dump($feedback_newest_content); var_dump($feedback_newest_content);
} }
public function test_price()
{
$price_rule = '#ah-8,st,2#';//'#'.$meta_product_code.',st,2#';
$tag_price = $this->replace_price_tag($price_rule);
var_dump($tag_price);
}
/*!
* 页面中有价格标签,查出价格并替换内容
* @author LYT <lyt@hainatravel.com>
* @date 2017-07-14
* @param string $price_content 包含价格标签的内容
* @return string 可读的价格字符串
*/
public function replace_price_tag($price_content)
{
$price_item_array = $this->price_pregmatch($price_content);
if ( ! empty($price_item_array)) {
foreach ($price_item_array as $price_item) {
$price_date = !empty($price_item->price_date) ? $price_item->price_date : date('Y-m-d', time() + 86400 * 7); //当前时间7天后的价格
$price_number = '';
//优先读取新的价格体系
$price = $this->PrimeLinePrice_model->search($price_item->cli_no, 1, $price_item->cli_grade, $price_item->person_size, $price_date);
if (!empty($price)) {
switch (strtoupper($price_item->price_people)) {
case 'A':
$price_number = $price->PLP_AdultUnitPrice;
break;
case 'C':
$price_number = $price->PLP_ChildUnitPrice;
break;
case 'B':
$price_number = $price->PLP_BabyUnitPrice;
break;
case 'R':
$price_number = $price->PLP_RoomDiffPrice;
break;
case 'AR':
$price_number = $price->PLP_AdultUnitPrice + $price->PLP_RoomDiffPrice; //成人加单间房差
break;
default :
$price_number = $price->PLP_AdultUnitPrice;
}
} else {
$price = $this->Price_model->search($price_item->cli_no, 1, $price_item->cli_grade, false, $price_date);
if (!empty($price)) {
switch (strtoupper($price_item->price_people)) {
case 'A':
switch ($price_item->person_size) {
case '1':
$price_number = $price->CLP_OneAdultPriceRMB;
break;
case '2'://25
$price_number = $price->CLP_TwoToFiveAdultPriceRMB;
break;
case '6'://69
$price_number = $price->CLP_SixToNineAdultPriceRMB;
break;
case '10':
$price_number = $price->CLP_OverTenAdultPriceRMB;
break;
default:
$price_number = $price->CLP_TwoToFiveAdultPriceRMB;
}
break;
case 'C':
$price_number = 0;
break;
case 'B':
$price_number = 0;
break;
case 'R':
switch ($price_item->person_size) {
case '1':
$price_number = $price->CLP_OneRoomDiffPriceRMB;
break;
case '2'://25
$price_number = $price->CLP_TwoToFiveRoomDiffPriceRMB;
break;
case '6'://69
$price_number = $price->CLP_SixToNineRoomDiffPriceRMB;
break;
case '10':
$price_number = $price->CLP_OverTenRoomDiffPriceRMB;
break;
default:
$price_number = $price->CLP_TwoToFiveRoomDiffPriceRMB;
}
break;
case 'AR'://成人加单间房差
$price_number = 0;
break;
default :
$price_number = 0;
}
}
}
$site_money = $this->CI->currency->GetSiteMoney($price_number);
$site_money = $this->CI->currency->calc_show_price($site_money);
//把金额格式化为带有逗号(,)方便阅读,如 12,345
$price_number = is_numeric($price_number) ? number_format($site_money) : $price_number;
if (!empty($price_number)) {
$price_content = str_replace($price_item->placeholder, $price_number, $price_content);
}
}
}
return $price_content;
}
//使用正则匹配出价格标签,返回一个价格数组
private function price_pregmatch($content) {
$price_array = array();
$temp_array = array();
$result = false;
//#ah-1,lx,2,2016-01-23,A#
//线路代号,等级(st标准、lx豪华、ec经济),人等,时间,人型(A成人、C小孩、B婴儿、R单间房差、AR成人+房差)
preg_match_all('^#[a-zA-Z0-9,-]+#^', $content, $temp_array);
foreach ($temp_array[0] as $item) {
$placeholder = $item;
$item = str_replace('#', '', $item);
$price_array = explode(',', $item);
$cli_no = !empty($price_array[0]) ? $price_array[0] : false; //线路代号
if (empty($cli_no)) {
continue; //没有设置线路代号则进入下一条
}
$cli_grade = !empty($price_array[1]) ? $price_array[1] : false; //标准7001、豪华7002、经济7003
switch (strtoupper($cli_grade)) {
case 'ST':
$cli_grade = '7001';
break;
case 'LX':
$cli_grade = '7002';
break;
case 'EC':
$cli_grade = '7003';
break;
default :$cli_grade = '7001';
}
$person_size = (!empty($price_array[2]) && is_numeric($price_array[2])) ? $price_array[2] : 2; //人等1,2-5,6-9,10默认2人等
//为了兼容以前的人等方式,把算数人等转换为单数 25=>2
switch ($person_size) {
case '25':
$person_size = '2';
break;
case '69':
$person_size = '6';
break;
}
$price_date = !empty($price_array[3]) ? $price_array[3] : false; //价格时间
$price_people = !empty($price_array[4]) ? $price_array[4] : 'A'; //A成人、C小孩、B婴儿、R单间房差
$result[] = (object) array('placeholder' => $placeholder, 'cli_no' => $cli_no, 'cli_grade' => $cli_grade, 'person_size' => $person_size, 'price_date' => $price_date, 'price_people' => $price_people);
}
return $result;
}
public function make_www_cache_gh($device, $information, $recommand_information) public function make_www_cache_gh($device, $information, $recommand_information)
{ {
$data = array(); $data = array();

@ -0,0 +1,77 @@
<?php
class Price_model extends CI_Model {
var $topnum = false; //返回记录数
var $cli_no = false; //线路代号
var $person_size = false; //人等
var $cli_grade = false; //(标准7001、豪华7002、经济7003
var $clp_pricetype = false; //价格类型 1旺季2淡季
var $price_date = false; //查询价格日期区间
var $orderby = false;
function __construct() {
parent::__construct();
$this->HT = $this->load->database('HT', TRUE);
}
public function init() {
$this->topnum = false;
$this->cli_no = false;
$this->person_size = false;
$this->cli_grade = false;
$this->clp_pricetype = false;
$this->price_date = false;
$this->orderby = ' ORDER BY cli.CLI_Grade ASC, clp.CLP_PriceStartDate ASC,clp.CLP_PriceType DESC ';
}
public function search($cli_no, $topnum = false, $cli_grade = false, $clp_pricetype = false, $price_date = false) {
$this->init();
$this->topnum = empty($topnum) ? false : $topnum;
$this->cli_no = ' AND cli.CLI_NO = ' . $this->HT->escape($cli_no);
$this->cli_grade = empty($cli_grade) ? false : ' AND cli.CLI_Grade = ' . $this->HT->escape($cli_grade);
$this->clp_pricetype = empty($clp_pricetype) ? false : ' AND clp.CLP_PriceType = ' . $this->HT->escape($clp_pricetype);
$this->price_date = empty($price_date) ? false : " AND '$price_date 00:00:00' BETWEEN clp.CLP_PriceStartDate AND clp.CLP_PriceEndDate ";
return $this->get_list();
}
public function get_list() {
$this->topnum ? $sql = "SELECT TOP " . $this->topnum : $sql = "SELECT ";
$sql .= "
cli.CLI_SN
,cli.CLI_NO
,clp.CLP_SN
,clp.CLP_OneAdultPriceRMB
,clp.CLP_TwoToFiveAdultPriceRMB
,clp.CLP_SixToNineAdultPriceRMB
,clp.CLP_OverTenAdultPriceRMB
,clp.CLP_PriceType
,cli.CLI_Grade
,clp.CLP_PriceStartDate
,clp.CLP_PriceEndDate
FROM CustomerLinePrice clp
INNER JOIN CustomerLineInfo cli
ON cli.CLI_SN = clp.CLP_CLI_SN
WHERE 1 = 1
AND cli.CLI_State IN (1005003 ,1005004)
";
$this->cli_no ? $sql.=$this->cli_no : false;
$this->cli_grade ? $sql.=$this->cli_grade : false;
$this->clp_pricetype ? $sql.=$this->clp_pricetype : false;
$this->price_date ? $sql.=$this->price_date : false;
$this->orderby ? $sql.=$this->orderby : false;
$query = $this->HT->query($sql);
//print_r($this->HT->queries);
if ($this->topnum === 1) {
if ($query->num_rows() > 0) {
$row = $query->row();
return $row;
} else {
return FALSE;
}
} else {
return $query->result();
}
}
}

@ -0,0 +1,107 @@
<?php
class PrimeLinePrice_model extends CI_Model {
var $topnum = false; //返回记录数
var $cli_no = false; //线路代号
var $person_size = false; //人等
var $cli_grade = 7001; //(标准7001、豪华7002、经济7003
var $price_date = false; //查询价格日期区间
var $orderby = false;
function __construct() {
parent::__construct();
$this->HT = $this->load->database('HT', TRUE);
}
public function init() {
$this->topnum = false;
$this->cli_no = false;
$this->person_size = false;
$this->cli_grade = false;
$this->price_date = false;
$this->orderby = ' ORDER BY plp.PLP_Level ASC,plp.PLP_IsWeekPrice DESC,plp.PLP_AdultUnitPrice DESC ';
}
public function search($cli_no, $topnum = false, $cli_grade = false, $person_size = false, $price_date = false) {
$this->init();
$this->cli_no = $cli_no;
$this->topnum = empty($topnum) ? false : $topnum;
$this->cli_grade = empty($cli_grade) ? false : $this->cli_grade = ' AND cli.CLI_Grade = ' . $this->HT->escape($cli_grade);
$this->person_size = empty($person_size) ? false : $this->person_size = " AND $person_size BETWEEN plp.PLP_PersonGradeDown AND plp.PLP_PersonGradeUp ";
if (!empty($price_date)) {
$this->price_date = " AND '$price_date 00:00:00' BETWEEN plp.PLP_StartDate AND plp.PLP_EndDate ";
$week_day = (int) date('w', strtotime($price_date)); //获取当前时间的星期号,用于判断周末价
$this->price_date .="
AND (
(plp.PLP_IsWeekPrice=1 AND plp.PLP_WeekDefine LIKE '%$week_day%')
OR (plp.PLP_IsWeekPrice=0)
)
";
}
return $this->get_list();
}
public function get_list() {
$this->topnum ? $sql = "SELECT TOP " . $this->topnum : $sql = "SELECT ";
$sql .= "
cli.CLI_SN
,cli.CLI_NO
,cli.CLI_Grade
,plp.PLP_SN
,plp.PLP_CLI_SN
,plp.PLP_Season
,plp.PLP_Area
,plp.PLP_StartDate
,plp.PLP_EndDate
,plp.PLP_PersonGradeDown
,plp.PLP_PersonGradeUp
,plp.PLP_AdultUnitCost
,plp.PLP_AdultUnitPrice
,plp.PLP_RoomDiffPrice
,plp.PLP_ChildRate
,plp.PLP_BabyRate
,plp.PLP_ChildUnitPrice
,plp.PLP_BabyUnitPrice
,plp.PLP_Level
,plp.PLP_IsWeekPrice
,plp.PLP_WeekDefine
,plp.PLP_PriceDate
,plp.PLP_PersonNum
,plp.PLP_VEI_SN
,plp.PLP_Year
,plp.PLP_VPPI_SN
,plp.PLP_VPPD_SN
,plp.PLP_Creator
,plp.PLP_CreateDate
,plp.PLP_LastEditor
,plp.PLP_LastEditDate
FROM PrimeLinePrice plp
INNER JOIN CustomerLineInfo cli
ON cli.CLI_SN = plp.PLP_CLI_SN
WHERE 1 = 1
AND cli.CLI_DEI_SN=?
AND plp.PLP_Year IS NOT NULL
AND cli.CLI_NO = ?
AND cli.CLI_State IN (1005003 ,1005004)
";
$this->person_size ? $sql.=$this->person_size : false;
$this->price_date ? $sql.=$this->price_date : false;
$this->cli_grade ? $sql.=$this->cli_grade : false;
$this->orderby ? $sql.=$this->orderby : false;
$query = $this->HT->query($sql,array(CONST_SITE_DEPARTMENT,$this->cli_no));
if ($this->topnum === 1) {
if ($query->num_rows() > 0) {
$row = $query->row();
return $row;
} else {
return FALSE;
}
} else {
return $query->result();
}
}
}
Loading…
Cancel
Save