You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/application/third_party/tpmanage/controllers/getbokun.php

490 lines
25 KiB
PHTML

<?php
defined('BASEPATH') or exit('No direct script access allowed');
class getbokun extends CI_Controller
{
5 years ago
//var $webUrl = "http://localhost:105"; //本地调用地址
var $webUrl = "https://ct.mycht.cn/"; //网前调用地址
public function __construct()
{
parent::__construct();
5 years ago
$this->permission->is_admin();
$this->load->library("Bokun_lib");
$this->load->model("tpBokun_model");
}
public function index()
{
//echo "bokun数据导入页面";
5 years ago
$this->load->view('bootstrap3/header');
$this->load->view('getindex');
5 years ago
$this->load->view('bootstrap3/footer');
}
/*
"activity":{
"readme":"这个json数据用来记录从bokun接口中获取的数据项",
"id": 75363, //产品activity的ID
"published": false, //不确定是否需要用这个来判断发布
"title": "Mini Group: 2-Day Beijing Boutique Tour: Forbidden City, Mutianyu Great Wall, Summer Palace and Temple of Heaven",
"description": "",
"excerpt": "",
"requiredCustomerFields": [
"firstName",
"lastName",
"email",
"phoneNumber",
"nationality",
"passportId"
], //这个主要是判断passportId在预订表单是否需要录入
"keyPhoto": {
"id": 343309,
"originalUrl": "https://bokun.s3.amazonaws.com/ddaf9b4b-72b0-4062-9978-7a060bda32d4.jpg",
"description": "Temple of Heaven",
"alternateText": "Temple of Heaven",
"height": null,
"width": null,
"flags": [],
"derived": [
{
"name": "large",
"url": "https://bokunprod.imgix.net/ddaf9b4b-72b0-4062-9978-7a060bda32d4.jpg?w=660&h=660",
"cleanUrl": "https://bokunprod.imgix.net/ddaf9b4b-72b0-4062-9978-7a060bda32d4.jpg?w=660&h=660"
},
{
"name": "preview",
"url": "https://bokunprod.imgix.net/ddaf9b4b-72b0-4062-9978-7a060bda32d4.jpg?w=300&h=300",
"cleanUrl": "https://bokunprod.imgix.net/ddaf9b4b-72b0-4062-9978-7a060bda32d4.jpg?w=300&h=300"
},
{
"name": "thumbnail",
"url": "https://bokunprod.imgix.net/ddaf9b4b-72b0-4062-9978-7a060bda32d4.jpg?w=80&h=80&fit=crop",
"cleanUrl": "https://bokunprod.imgix.net/ddaf9b4b-72b0-4062-9978-7a060bda32d4.jpg?w=80&h=80&fit=crop"
}
],
"fileName": "/ddaf9b4b-72b0-4062-9978-7a060bda32d4.jpg"
}, //产品主要图片
"photos": [
{
"id": 343297,
"originalUrl": "https://bokun.s3.amazonaws.com/8b40e352-6410-4e43-a150-21ad918188d3.jpg",
"description": "Bird view of Forbidden City from Jingshan Park",
"alternateText": "Bird view of Forbidden City from Jingshan Park",
"height": null,
"width": null,
"flags": [],
"derived": [
{
"name": "large",
"url": "https://bokunprod.imgix.net/8b40e352-6410-4e43-a150-21ad918188d3.jpg?w=660&h=660",
"cleanUrl": "https://bokunprod.imgix.net/8b40e352-6410-4e43-a150-21ad918188d3.jpg?w=660&h=660"
},
{
"name": "preview",
"url": "https://bokunprod.imgix.net/8b40e352-6410-4e43-a150-21ad918188d3.jpg?w=300&h=300",
"cleanUrl": "https://bokunprod.imgix.net/8b40e352-6410-4e43-a150-21ad918188d3.jpg?w=300&h=300"
},
{
"name": "thumbnail",
"url": "https://bokunprod.imgix.net/8b40e352-6410-4e43-a150-21ad918188d3.jpg?w=80&h=80&fit=crop",
"cleanUrl": "https://bokunprod.imgix.net/8b40e352-6410-4e43-a150-21ad918188d3.jpg?w=80&h=80&fit=crop"
}
],
"fileName": "/8b40e352-6410-4e43-a150-21ad918188d3.jpg"
}
], //产品其它图片
"included": "<ul><li></li></ul> ", //包含
"excluded": "<ul><li></li></ul> ",//不包含
"requirements": "<ul><li></li></ul> ", //需求
"attention": "<ul><li></li></ul> ", //景点条例与上面4个合并到
"country": "China",
"city": "Beijing",
"durationText": "2 days",
"agendaItems": [{
"title": "",
"excerpt": "",
"body": "",
"day": 1,
"keyPhoto":{}
"photos":[{}]
}
], //行程描述,合并后放信息平台的详细内容里面,其中行程图片和整个产品图片一样,放头部
}
}
*/
/**
* @description: 获取bokunapi的所有产品数据按城市,类别,产品一步步的循环录入
* @param string $city 城市名称
* @return:
*/
function getAll_Bokun($city = "")
{
//先进行对应城市的更新
// $this->checkAllCity();
//循环接口开始
$result = $this->bokun_lib->get_all_product_list();
//print_r($result);
$result = json_decode($result);
if (is_array($result) && count($result) > 0) {
//productlist是所有产品按城市分类然后child里面是类别分类
foreach ($result as $pItem) {
$cityName = str_replace("'", "", $pItem->title); //城市名称,用来判断信息平台是否有该城市
if (isset($cityName)) {
if ($city != "" && strtolower($city) != strtolower($cityName)) {
continue; //如果设置了指定抓取城市
} else {
$list_id = $pItem->id;
$pchild_Detail = $this->bokun_lib->get_product_list_detail($list_id);
$data_pchild_Detail = json_decode($pchild_Detail); //类别详细
foreach ($data_pchild_Detail->items as $pcdItem) { //循环类别
$activityData = $pcdItem->activity; //产品详细内容
$this->doActivity($activityData, $cityName);
}
}
}
}
echo ("抓取完成!\r\n");
} else {
echo "无接口数据!";
}
}
/**
* @description: 处理每个产品activity),分析及入库
* @param {type} $ActivityData: 产品的JSON数据
* @param string $CityName:因为activity里面的城市名称和总分类的名称可能不一样比如bagan,详细里面是old bagan。直接传递
* @param bool $OverWrive:是否覆盖已导入的产品
* @return:
* @Date Changed:
*/
function doActivity($ActivityData, $CityName = "", $OverWrive = false)
{
// print_r($ActivityData);
// die();
//解析后获取需要的参数
$activityId = $ActivityData->id; //产品的activityId可以获取对应的产品详细内容。
$PAGCode = "bk_" . $activityId;
//先判断是否是新产品
// $checkNewUrl = $this->webUrl . "/info.php/thirdparty/tpmanage/webgetbokun/checkActivityId/$activityId/";
// $checkNew = json_decode($this->tpBokun_model->getCrulData($checkNewUrl));
// if ($checkNew->return == "yes" && $OverWrive == false) {
// return;
// }
$checkNew = $this->tpBokun_model->checkExitHT($PAGCode);
if ($checkNew) {
return; //直接判断本地翰特,这样快很多
}
//提交网前接口
$checkCode = "cits"; //用来防止参数被破解
$PassParam["activityid"] = $activityId;
$PassParam["PAG_Code"] = $PAGCode;
$PassParam["CityName"] = $CityName;
$PassParam["checkCode"] = $checkCode;
$strPass = base64_encode(json_encode($PassParam));
5 years ago
$AddUrl = $this->webUrl . "/info.php/thirdparty/tpmanage/webgetbokun/addActivity/$strPass/";
$addInfo = json_decode($this->tpBokun_model->getCrulData($AddUrl));
//echo($addInfo);
if ($addInfo->status == "ok") {
5 years ago
//先判断是否是新产品
$checkNew = $this->tpBokun_model->checkExitHT($PAGCode);
if ($checkNew) {
continue;
}
//提交本地翰特保存
if ($CityName == "") {
$CityName = $ActivityData->googlePlace->city; //如果没有传递城市名称参数就获取activity数据中的
}
$PAG_CII_SN = $this->tpBokun_model->getCityIdByName($CityName);
if ($PAG_CII_SN != null) {
$this->tpBokun_model->PAG_CII_SN = $PAG_CII_SN->CII2_CII_SN;
}
$this->tpBokun_model->PAG_Code = $PAGCode;
$this->tpBokun_model->PAG_Title = $ActivityData->title;
$this->tpBokun_model->PAG_PPI_SN = $ActivityData->id;
$this->tpBokun_model->PAG2_Name = $ActivityData->title;
$this->tpBokun_model->PAG2_Title = $ActivityData->description;
$pagsn = $this->tpBokun_model->AddProductToHT();
}
echo ("产品:" . $PAGCode . "," . $pagsn . " 完成.");
}
/**
* @description: 提交到前端接口,执行更新所有城市的操作
* @param {type}
* @return:
* @Date Changed:
*/
function checkAllCity()
{
5 years ago
$url = "/info.php/thirdparty/tpmanage/webgetbokun/checkAllCity/";
$str = $this->tpBokun_model->getCrulData($url);
echo $str;
}
/**
* @description: 只更新翰特的产品信息
* @param {type}
* @return:
* @Date Changed:
*/
function onlyUpdateHT($city = "")
{
//循环接口开始
$result = $this->bokun_lib->get_all_product_list();
//print_r($result);
$result = json_decode($result);
if (is_array($result) && count($result) > 0) {
//productlist是所有产品按城市分类然后child里面是类别分类
foreach ($result as $pItem) {
$cityName = str_replace("'", "", $pItem->title); //城市名称,用来判断信息平台是否有该城市
if (isset($cityName)) {
if ($city != "" && strtolower($city) != strtolower($cityName)) {
continue; //如果设置了指定抓取城市
} else {
$list_id = $pItem->id;
$pchild_Detail = $this->bokun_lib->get_product_list_detail($list_id);
$data_pchild_Detail = json_decode($pchild_Detail); //类别详细
foreach ($data_pchild_Detail->items as $pcdItem) { //循环类别
$activityData = $pcdItem->activity; //产品详细内容
//提交本地翰特保存
if ($cityName == "") {
$cityName = $activityData->googlePlace->city; //如果没有传递城市名称参数就获取activity数据中的
}
$PAG_CII_SN = $this->tpBokun_model->getCityIdByName($cityName);
if ($PAG_CII_SN != null) {
$this->tpBokun_model->PAG_CII_SN = $PAG_CII_SN->CII2_CII_SN;
}
//解析后获取需要的参数
$activityId = $activityData->id; //产品的activityId可以获取对应的产品详细内容。
5 years ago
$PAGCode = "bk_" . $activityId;
//先判断是否是新产品
5 years ago
$checkNew = $this->tpBokun_model->checkExitHT($PAGCode);
if ($checkNew) {
//判断是否有价格,没有就导入
$pag_row = $this->tpBokun_model->getToursDetails($PAGCode);
if ($pag_row != null) {
$PAG_SN = $pag_row->PAG_SN;
if ($PAG_SN > 0) {
//有产品ID才能获取对应的价格
if ($this->tpBokun_model->checkPrice($PAG_SN) == false) {
//没价格开始导入
$this->doPrice($PAG_SN,$activityId);
}
}
}
//跳过不再保存主数据
continue;
}
$this->tpBokun_model->PAG_Code = $PAGCode;
$this->tpBokun_model->PAG_Title = $activityData->title;
$this->tpBokun_model->PAG_PPI_SN = $activityData->id;
$this->tpBokun_model->PAG2_Name = $activityData->title;
$this->tpBokun_model->PAG2_Title = $activityData->description;
$pagsn = $this->tpBokun_model->AddProductToHT();
echo ("添加:" . $PAGCode . "," . $pagsn . "\r\n");
//价格开始导入
$this->doPrice($pagsn,$activityId);
}
}
}
}
echo ("抓取完成 \r\n");
} else {
echo "无接口数据!";
}
}
/**
* @description: 导入价格列表
* @param {type}
* @return:
* @Date Changed:
*/
function doPrice($PAG_SN, $activityId)
{
if ($PAG_SN > 0) {
//价格接口数据
$result = $this->bokun_lib->get_activity_price($activityId);
$result = json_decode($result);
if (is_array($result->pricesByDateRange)) {
foreach ($result->pricesByDateRange as $PriceItem) {
//每个时间段的价格循环
//开始时间
if (isset($PriceItem->from)) {
$starDate = $PriceItem->from;
} else {
$starDate = date('Y-m-d');
}
//结束时间
if (isset($PriceItem->to)) {
$endDate = $PriceItem->to;
} else {
$endDate = date('Y-m-d', strtotime('+1 year',strtotime($starDate)));
}
if (isset($PriceItem->rates) && is_array($PriceItem->rates)) {
foreach ($PriceItem->rates as $PriceItem_rates) {
//rates层
if (isset($PriceItem_rates->passengers) && is_array($PriceItem_rates->passengers)) {
$arrAdultPrice = array(); //存放成人价格列表
$arrOhterPrice = array(); //存放儿童和婴儿价格列表
foreach ($PriceItem_rates->passengers as $PriceItem_rates_passengers) {
$AdultPriceClass = new stdClass;
$OtherPriceClass = new stdClass;
$ticketCategory = $PriceItem_rates_passengers->ticketCategory; //判断是大人,小孩
if ($ticketCategory == "ADULT" || $ticketCategory == "CHILD" || $ticketCategory == "INFANT") {
$priceType = $ticketCategory;
} else {
$priceType = "ADULT";
}
//passengers层
if (isset($PriceItem_rates_passengers->tieredPrices) && is_array($PriceItem_rates_passengers->tieredPrices)) {
//这个是有多个人等价格
foreach ($PriceItem_rates_passengers->tieredPrices as $tieredPricesItem) {
$AdultPriceClass = new stdClass;
$OtherPriceClass = new stdClass;
$minPassengersRequired = $tieredPricesItem->minPassengersRequired;
if (isset($tieredPricesItem->maxPassengersRequired)){
$maxPassengersRequired = $tieredPricesItem->maxPassengersRequired;
}else{
$maxPassengersRequired = $minPassengersRequired;
}
if (isset($tieredPricesItem->amount)){
$amount = $tieredPricesItem->amount;
}else{
$amount = 0;
}
if ($priceType == "ADULT") {
$AdultPriceClass->PersonStart = $maxPassengersRequired;
$AdultPriceClass->PersonStop = $maxPassengersRequired;
$AdultPriceClass->type = "ADULT";
$AdultPriceClass->price = $amount;
$arrAdultPrice[] = $AdultPriceClass;
} elseif ($priceType == "CHILD") {
$OtherPriceClass->PersonStart = $maxPassengersRequired;
$OtherPriceClass->PersonStop = $maxPassengersRequired;
$OtherPriceClass->type = "CHILD";
$OtherPriceClass->price = $amount;
$arrOhterPrice[] = $OtherPriceClass;
} elseif ($priceType == "INFANT") {
$OtherPriceClass->PersonStart = $maxPassengersRequired;
$OtherPriceClass->PersonStop = $maxPassengersRequired;
$OtherPriceClass->type = "INFANT";
$OtherPriceClass->price = $amount;
$arrOhterPrice[] = $OtherPriceClass;
}
}
} elseif (isset($PriceItem_rates_passengers->price)) {
//这个是无人等价格
if ($priceType == "ADULT") {
$AdultPriceClass->PersonStart = 1;
$AdultPriceClass->PersonStop = 100;
$AdultPriceClass->type = "ADULT";
$AdultPriceClass->price = $PriceItem_rates_passengers->price->amount;
$arrAdultPrice[] = $AdultPriceClass;
} elseif ($priceType == "CHILD") {
$OtherPriceClass->PersonStart = 1;
$OtherPriceClass->PersonStop = 100;
$OtherPriceClass->type = "CHILD";
$OtherPriceClass->price = $PriceItem_rates_passengers->price->amount;
$arrOhterPrice[] = $OtherPriceClass;
} elseif ($priceType == "INFANT") {
$OtherPriceClass->PersonStart = 1;
$OtherPriceClass->PersonStop = 100;
$OtherPriceClass->type = "INFANT";
$OtherPriceClass->price = $PriceItem_rates_passengers->price->amount;
$arrOhterPrice[] = $OtherPriceClass;
}
}
}
//分析生存的数组$arrAdultPrice与$arrOhterPrice ,构建可以入库的数据
$arrPackagePrice = array();
foreach ($arrAdultPrice as $aAPItem) {
$PackagePriceClass = new stdClass;
$PersonStart = $aAPItem->PersonStart;
$PersonStop = $aAPItem->PersonStop;
$AdultPrice = $aAPItem->price;
$ChildPrice = $AdultPrice;
$InfantPrice = 0;
foreach ($arrOhterPrice as $aOPItem) {
//循环查找对应的儿童及婴儿价
if ($aOPItem->PersonStart == $PersonStart && $aOPItem->PersonStop == $PersonStop) {
//人数限制范围相同时
if ($aOPItem->type == "CHILD") {
$ChildPrice = $aOPItem->price;
} elseif ($aOPItem->type == "INFANT") {
$InfantPrice = $aOPItem->price;
}
} elseif ($aOPItem->PersonStart == $PersonStart) {
//有时候限制范围不一样,只能去开始的人数来判断
if ($aOPItem->type == "CHILD") {
$ChildPrice = $aOPItem->price;
} elseif ($aOPItem->type == "INFANT") {
$InfantPrice = $aOPItem->price;
}
}
}
//组建人数限制成人价儿童价婴儿价的class
$PackagePriceClass->PKP_PersonStart = $PersonStart;
$PackagePriceClass->PKP_PersonStop = $PersonStop;
$PackagePriceClass->PKP_AdultPrice = $AdultPrice;
$PackagePriceClass->PKP_ChildPrice = $ChildPrice;
$PackagePriceClass->PKP_InfantPrice = $InfantPrice;
$arrPackagePrice[] = $PackagePriceClass;
}
//数据入库
if (count($arrPackagePrice) > 0) {
foreach ($arrPackagePrice as $aPPItem) {
//循环入库
$this->tpBokun_model->PKP_PAG_SN = $PAG_SN;
$this->tpBokun_model->PKP_AdultPrice = $aPPItem->PKP_AdultPrice;
$this->tpBokun_model->PKP_ChildPrice = $aPPItem->PKP_ChildPrice;
$this->tpBokun_model->PKP_InfantPrice = $aPPItem->PKP_InfantPrice;
$this->tpBokun_model->PKP_AdultNetPrice = $aPPItem->PKP_AdultPrice;
$this->tpBokun_model->PKP_ChildNetPrice = $aPPItem->PKP_ChildPrice;
$this->tpBokun_model->PKP_InfantNetPrice = $aPPItem->PKP_InfantPrice;
$this->tpBokun_model->PKP_PersonStart = $aPPItem->PKP_PersonStart;
$this->tpBokun_model->PKP_PersonStop = $aPPItem->PKP_PersonStop;
$this->tpBokun_model->PKP_ValidDate = $starDate;
$this->tpBokun_model->PKP_InvalidDate = $endDate;
$this->tpBokun_model->AddPriceToHT();
echo "添加价格:".$PAG_SN."(".$aPPItem->PKP_PersonStart." - ".$aPPItem->PKP_PersonStop.")". "\r\n";
}
}
}
}
}
}
}
}
}
}
/* End of file getbokun.php */