|
- <?php
- /**
- * Function Description:驴妈妈对应的接口
- * Function Name: ApiForLvmama
- * @return ${TYPE_HINT}
- * ${THROWS_DOC}
- *
- * @author 娄梦宁
- */
-
- namespace console\controllers;
-
- use backend\modules\api\models\LvmamaPushInfo;
- use backend\modules\api\models\OperaProduct;
- use backend\modules\api\models\OperaProductRun;
- use backend\modules\api\models\OrderRefundLvmama;
- use backend\modules\api\models\OutsideTicket;
- use backend\modules\api\util\Util;
- use common\models\Utils;
- use yii\base\Exception;
- use yii\web\Controller;
- use Yii;
-
-
- class LvmamaController extends Controller
- {
- public $enableCsrfValidation = false;
-
- public function actionIndex()
- {
- print_r('HELLO');
- }
-
- /**
- * Function Description:批量产品/商品信息接口
- * Function Name: actionGetProdList
- *
- *
- * @author 娄梦宁
- */
- public function actionGetProdList()
- {
- set_time_limit(0);
- $util = new Util();
- $opera_prod = new OperaProduct();
- $outside_ticket = new OutsideTicket();
- //请求参数构建
- $time = time();
- $appKey = $util->getAppKey();
- $timestamp = $time;
- $sign = $util::SingForLvmama($time);
- $currentPage = 1;
- $url = $util->getBaseUrl() . '/ticketProd/productInfoListByPage' . "?appKey=" . $appKey . "&messageFormat=json×tamp=" . $timestamp . "&sign=" . $sign . "¤tPage=" . $currentPage;
- $result = Utils::httpRequest($url);
- $prod_list = json_decode($result, true);
- //查出opera_prod表中所有的主code(即驴妈妈的productId)
- $code_arr = $opera_prod->getCodeArr();
- $code_arr_son = $opera_prod->getCodeArrSon();
- for ($currentPage = 1; $currentPage <= $prod_list['totalPage']; $currentPage++) {
- if ($currentPage == 1) {//分页的循环
- $tmp_arr = $prod_list;
- } else {
- $url = $util->getBaseUrl() . '/ticketProd/productInfoListByPage' . "?appKey=" . $appKey . "&messageFormat=json×tamp=" . $timestamp . "&sign=" . $sign . "¤tPage=" . $currentPage;
- $result = Utils::httpRequest($url);
- $tmp_arr = json_decode($result, true);
- }
- foreach ($tmp_arr['productList'] as $val) {
- if (array_key_exists($val['productId'], $code_arr)) {//产品已经存在
- //if ($val['productStatus'] == true) {//当前产品在驴妈妈上架
- $tmp_prod_name = $util::doCdada($val['productName']);
- $remark = '';
- if (isset($val['bookingInfo'])) {
- foreach ($val['bookingInfo'] as $book) {
- $remark .= $util::doCdada($book);
- }
- }
- $remark .= $util::doCdada($val['goodsList'][0]['importentPoint']);
- $is_refund = $val['goodsList'][0]['rules'][0]['isChange'];
- $refund_limit_day = 1;
- $refund_limit_time = '23:00';
- if ($is_refund == 1 && isset($val['goodsList'][0]['rules'][0]['aheadTime'])) {//可以退款就同步退款规则
- $limit_day_time = $util::countRefundTime($val['goodsList'][0]['rules'][0]['aheadTime']);
- $refund_limit_day = $limit_day_time['day'];
- $refund_limit_time = $limit_day_time['time'];
- }
- $tmp_prod_code = $val['productId'];
- // if (array_key_exists($val['productId'], $code_arr)) {//产品已经存在
- $upt_main = $opera_prod->uptLvmamaProdDetail($tmp_prod_code, $tmp_prod_name, $remark, $refund_limit_day, $refund_limit_time, $is_refund);
- $parent_id = $code_arr[$val['productId']]['prod_id'];
- // } else {
- // $upt_main = $opera_prod->istLvmamaProdMain($tmp_prod_code, $tmp_prod_name, $remark, $refund_limit_day, $refund_limit_time, $is_refund);
- // $parent_id = $upt_main['prod_id'];
- // }
- if ($upt_main['code'] != 0) {
- file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $upt_main['msg'] . $val['prod_code'] . " 批量定时更新产品出错" . PHP_EOL, FILE_APPEND);
- continue;
- }
- foreach ($val['goodsList'] as $goods) {//循环添加子产品
- if ($goods['status'] == true) {
- $prod_name_son = $util::doCdada($goods['goodsName']);
- $prod_code_son = $goods['goodsId'];
- if (array_key_exists($prod_code_son, $code_arr_son)) {//商品已经存在
- $son_prod = $opera_prod->uptLvmamaProdSon($prod_code_son, $prod_name_son, $remark, $refund_limit_day, $refund_limit_time, $is_refund, $parent_id);
- } else {
- $son_prod = $opera_prod->insLvmamaProdSon($parent_id, $prod_name_son, $prod_code_son, $refund_limit_day, $refund_limit_time, $is_refund);
- }
- if ($son_prod['code'] != 0) {
- file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $son_prod['msg'] . $prod_code_son . " 批量定时添加子门票产品出错" . PHP_EOL, FILE_APPEND);
- continue;
- }
- } else {//商品下架
- $outside_ticket->cancelGoods($val['productId'], $goods['goodsId']);
- }
- }
- // } else {//产品下架
- // $opera_prod->cancelProductByCode($val['productId']);
- // }
- }
- }
- }
- }
-
- /**
- * Function Description:批量价格、库存信息
- * Function Name: actionGetProdPriceList
- *
- *
- * @author 娄梦宁
- */
- public function actionGetProdPriceList()
- {
- set_time_limit(0);
- $util = new Util();
- $opera_prod = new OperaProduct();
- $outside_ticket = new OutsideTicket();
- //请求参数构建
- $time = time();
- $appKey = $util->getAppKey();
- $timestamp = $time;
- $sign = $util::SingForLvmama($time);
- $currentPage = 1;
- $beginDate = date('Y-m-d');
- $endDate = date('Y-m-d', strtotime('+ 30 day'));
- $url = $util->getBaseUrl() . '/ticketProd/productPriceListByPage' . "?appKey=" . $appKey . "&messageFormat=json×tamp=" . $timestamp . "&sign=" . $sign .
- "¤tPage=" . $currentPage . "&beginDate=" . $beginDate . "&endDate=" . $endDate;
- $prod_list = Utils::httpRequest($url);
- //查出opera_prod表中所有的code(即驴妈妈的productId)
- $code_arr = $opera_prod->getCodeArr();
- //循环所有页数,每次结果插入outside_ticket
- $prod_list = json_decode($prod_list, true);
- for ($currentPage = 1; $currentPage <= $prod_list['totalPage']; $currentPage++) {
- if ($currentPage == 1) {
- $tmp_arr = $prod_list;
- } else {
- $url = $util->getBaseUrl() . '/ticketProd/productPriceListByPage' . "?appKey=" . $appKey . "&messageFormat=json×tamp=" . $timestamp . "&sign=" . $sign .
- "¤tPage=" . $currentPage . "&beginDate=" . $beginDate . "&endDate=" . $endDate;
- $tmp_arr = Utils::httpRequest($url);
- $tmp_arr = json_decode($tmp_arr, true);
- }
- foreach ($tmp_arr['priceList'] as $val) {
- //////////////////这层逻辑先不管
- // if (array_key_exists($val['productId'], $code_arr)) {//如果产品在opera_prod表中,即在售
- // }
- // else {//加一层逻辑,获取到的产品都加到opera_prod表中,(前提是驴妈妈接口反馈都是有效数据)
- // //添加主产品
- // $prod_id = $val['productId'];
- // $prod_info = $this->GetProdById($prod_id);
- // try {
- // $prod_name = $util::doCdada($prod_info['productList'][0]['productName']);
- // //$remark = $util::doCdada($prod_info['productList'][0]['introdution']);暂不需要简介
- // $remark = '';
- // foreach ($prod_info['productList'][0]['bookinginfo'] as $book) {
- // $remark .= $util::doCdada($book);
- // }
- // } catch (Exception $e) {
- // file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $prod_id . " 添加产品获取详情出错" . PHP_EOL, FILE_APPEND);
- // continue;
- // }
- // $main_prod_id = $opera_prod->istLvmamaProdMain($prod_id, $prod_name, $remark);
- // if ($main_prod_id['code'] != 0) {
- // file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $main_prod_id['msg'] . $prod_id . " 添加主门票产品出错" . PHP_EOL, FILE_APPEND);
- // continue;
- // }
- // foreach ($val['goodsList']['goods'] as $goods) {//循环添加子产品
- // $parent_id_son = $main_prod_id['prod_id'];
- // $prod_name_son = $util::doCdada($goods['goodsName']);
- // $prod_code_son = $goods['goodsId'];
- // $son_prod = $opera_prod->insLvmamaProdSon($parent_id_son, $prod_name_son, $prod_code_son);
- // if ($son_prod['code'] != 0) {
- // file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $son_prod['msg'] . $prod_code_son . " 添加子门票产品出错" . PHP_EOL, FILE_APPEND);
- // continue;
- // }
- // }
- // $code_arr = $opera_prod->getCodeArr();
- // }
- if ($val['productStatus'] == true) {//产品上线中
- foreach ($val['goodsList']['goods'] as $v) {//循环prod下的商品,
- if ($v['goodsOnLine'] == true) {//商品上线中
- if (!empty($v['prices'])) {
- foreach ($v['prices']['price'] as $value) {//循环不同的价格日历
- $tmp_prod_code = $val['productId'];
- $tmp_prod_name = $code_arr[$tmp_prod_code]['prod_name'];
- $tmp_ticket_code = $v['goodsId'];
- $tmp_ticket_date = $value['date'];
- $tmp_ticket_name = $util::doCdada($v['goodsName']);
- $tmp_ticket_num = $value['stock'] == -1 ? 9999 : $value['stock'];
- $tmp_ticket_price = $value['b2bPrice'];
- $tmp_agent_price = $value['sellPrice'];
- $tmp_cs_prod_id = $code_arr[$tmp_prod_code]['prod_id'];
- $tmp_insert = $outside_ticket->InsertData($tmp_prod_code, $tmp_prod_name, $tmp_ticket_code, $tmp_ticket_date, $tmp_ticket_name,
- $tmp_ticket_num, $tmp_ticket_price, $tmp_agent_price, $tmp_cs_prod_id);
- if (!$tmp_insert) {
- file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $tmp_prod_code . $tmp_prod_name . $tmp_ticket_date
- . "批量接口插入更新失败" . PHP_EOL, FILE_APPEND);
- }
- }
- }
- } else {//商品已下线
- $outside_ticket->cancelGoods($val['productId'], $v['goodsId']);
- }
- }
- } else {//产品已下线
- $opera_prod->cancelProductByCode($val['productId']);
- }
- }
- }
- }
-
-
- /**
- * Function Description:通过id获取产品信息
- * Function Name: actionGetProdById
- *
- *
- * @author 娄梦宁
- */
- public function GetProdById($productIds)
- {
- $util = new Util();
- //请求参数构建
- $time = time();
- $appKey = $util->getAppKey();
- $timestamp = $time;
- $sign = $util::SingForLvmama($time);
- $url = $util->getBaseUrl() . '/ticketProd/productInfoList' . "?appKey=" . $appKey . "&messageFormat=json×tamp=" . $timestamp . "&sign=" . $sign . "&productIds=" . $productIds;
- $result = Utils::httpRequest($url);
- return json_decode($result, true);
- }
-
- /**
- * Function Description:定时任务通过id同步产品信息
- * Function Name: actionGetProdById
- *
- *
- * @author 娄梦宁
- */
- public function actionUptProdById()
- {
- set_time_limit(0);
- $opera_prod = new OperaProduct();
- $util = new Util();
- //获取驴妈妈渠道下所有产品id
- $prod_arr = $opera_prod->getIdForLvmama();
- foreach ($prod_arr as $val) {//循环处理各产品
- // if ($val['productStatus'] == true) {//产品在驴妈妈上架
- $prod_info = $this->GetProdById($val['prod_code']);
- try {
- $prod_name = $util::doCdada($prod_info['productList'][0]['productName']);
- $remark = '';
- foreach ($prod_info['productList'][0]['bookingInfo'] as $book) {
- $remark .= $util::doCdada($book);
- }
- } catch (Exception $e) {
- file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $val['prod_code'] . " 定时更新产品id获取详情出错" . PHP_EOL, FILE_APPEND);
- continue;
- }
- $main_prod_id = $opera_prod->uptLvmamaProdMain($val['prod_code'], $prod_name, $remark);
- $goodsArr=explode(',',$prod_info['productList'][0]['goodsIds']);
- foreach($goodsArr as $goodsId){
- $this->UptGoodById($goodsId,$val['prod_code']);
- }
- if ($main_prod_id['code'] != 0) {
- file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $main_prod_id['msg'] . $val['prod_code'] . " 定时更新产品id出错" . PHP_EOL, FILE_APPEND);
- continue;
- }
- // } else {//产品在驴妈妈下架
- // $opera_prod->cancelProductByCode($val['productId']);
- // }
- }
- $this->UptOperaRun();
- }
-
- /**
- * Function Description:通过id获取商品信息
- * Function Name: actionGetGoodById
- *
- *
- * @author 娄梦宁
- */
- public function GetGoodById($goodsIds)
- {
- $util = new Util();
- //请求参数构建
- $time = time();
- $appKey = $util->getAppKey();
- $timestamp = $time;
- $sign = $util::SingForLvmama($time);
- $url = $util->getBaseUrl() . '/ticketProd/goodInfoList' . "?appKey=" . $appKey . "&messageFormat=json×tamp=" . $timestamp . "&sign=" . $sign . "&goodsIds=" . $goodsIds;
- $result = Utils::httpRequest($url);
- return json_decode($result, true);
- }
-
- /**
- * Function Description:定时任务通过id同步商品信息
- * Function Name: actionGetProdById
- *
- *
- * @author 娄梦宁
- */
- public function UptGoodById($goodsId,$prod_id)
- {
- $opera_prod = new OperaProduct();
- $outside_ticket = new OutsideTicket();
- $util = new Util();
- //获取驴妈妈渠道下所有子产品code
- $prod_info = $this->GetGoodById($goodsId);
- $code_arr_son = $opera_prod->getCodeArrSon();
- if(array_key_exists($goodsId, $code_arr_son)){
- if ($prod_info['goodsList'][0]['status'] == true) {//商品在驴妈妈上架则更新信息
- try {
- $prod_name = $util::doCdada($prod_info['goodsList'][0]['goodsName']);
- $remark = $util::doCdada($prod_info['goodsList'][0]['importentPoint']);
- $is_refund = $prod_info['goodsList'][0]['rules'][0]['isChange'];
- $refund_limit_day = 1;
- $refund_limit_time = '23:00';
- if ($is_refund == 1 && isset($prod_info['goodsList'][0]['rules'][0]['aheadTime'])) {//可以退款就同步退款规则
- $limit_day_time = $util::countRefundTime($prod_info['goodsList'][0]['rules'][0]['aheadTime']);
- $refund_limit_day = $limit_day_time['day'];
- $refund_limit_time = $limit_day_time['time'];
- }
- } catch (Exception $e) {
- file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $goodsId . " 定时更新产品id获取详情出错" . PHP_EOL, FILE_APPEND);
- }
- $main_prod_id = $opera_prod->uptLvmamaProdSon($goodsId, $prod_name, $remark, $refund_limit_day, $refund_limit_time, $is_refund);
- if ($main_prod_id['code'] != 0) {
- file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $main_prod_id['msg'] . $goodsId . " 定时更新产品id出错" . PHP_EOL, FILE_APPEND);
- }
- //同步两天后价格日历信息
- $this->GetGoodPriceList($goodsId);
- } else {//商品在驴妈妈下架
- $outside_ticket->cancelGoods($prod_id, $goodsId);
- }
- }
- }
-
- /**
- * Function Description:按 ID 获取价格库存接口
- * Function Name: actionGetGoodPriceList
- *
- *
- * @author 娄梦宁
- */
- public function GetGoodPriceList($goodsIds)
- {
- $util = new Util();
- $outside_ticket = new OutsideTicket();
- $opera_prod = new OperaProduct();
- //请求参数构建
- $time = time();
- $appKey = $util->getAppKey();
- $timestamp = $time;
- $beginDate = date('Y-m-d');
- $endDate = date('Y-m-d', strtotime('+ 30 day'));
- $sign = $util::SingForLvmama($time);
- $url = $util->getBaseUrl() . '/ticketProd/goodPriceList' . "?appKey=" . $appKey . "&messageFormat=json×tamp=" . $timestamp . "&sign=" . $sign . "&goodsIds=" . $goodsIds . "&beginDate=" . $beginDate . "&endDate=" . $endDate;
- $result = Utils::httpRequest($url);
- $result = json_decode($result, true);
- //查出opera_prod表中所有的code(即驴妈妈的productId)
- $code_arr = $opera_prod->getCodeArr();
- if ($result['state']['code'] != 1000) {
- file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . '按 ID 获取价格库存接口接口访问失败 ' . $result['state']['solution'] . PHP_EOL, FILE_APPEND);
- }
- foreach ($result['priceList'] as $val) {
- if ($val['productStatus'] == true) {
- foreach ($val['goodsList']['goods'] as $v) {
- if ($v['goodsOnLine'] == true) {
- if ($v['prices']['price']) {
- foreach ($v['prices']['price'] as $value) {
- $tmp_prod_code = $val['productId'];
- $tmp_prod_name = $code_arr[$tmp_prod_code]['prod_name'];
- $tmp_ticket_code = $v['goodsId'];
- $tmp_ticket_date = $value['date'];
- $tmp_ticket_name = $util::doCdada($v['goodsName']);
- $tmp_ticket_num = $value['stock'] == -1 ? 9999 : $value['stock'];
- $tmp_ticket_price = $value['b2bPrice'];
- $tmp_agent_price = $value['sellPrice'];
- $tmp_cs_prod_id = $code_arr[$tmp_prod_code]['prod_id'];
- $tmp_insert = $outside_ticket->InsertData($tmp_prod_code, $tmp_prod_name, $tmp_ticket_code, $tmp_ticket_date, $tmp_ticket_name,
- $tmp_ticket_num, $tmp_ticket_price, $tmp_agent_price, $tmp_cs_prod_id);
- if (!$tmp_insert) {
- file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . $tmp_prod_code . $tmp_prod_name . $tmp_ticket_date
- . "单产品插入更新失败" . PHP_EOL, FILE_APPEND);
- }
- }
- }
- } else {//商品下架在此处理
- $outside_ticket->cancelGoods($val['productId'], $v['goodsId']);
- }
- }
- } else {//产品下架在此处理
- $opera_prod->cancelProductByCode($val['productId']);
- }
- }
- }
-
- /**
- * Function Description:定时任务将outside_ticket同步到opera_product_run
- * Function Name: actionUptOperaRun
- *
- *
- * @author 娄梦宁
- */
- public function UptOperaRun()
- {
- $opera_prod_run = new OperaProductRun();
- $result = $opera_prod_run->uptRun();
- if ($result == 2) {
- file_put_contents(__DIR__ . '/../log/lvmama/' . date("Y-m-d") . '.log', date("Y-m-d H:i:s") . '定时任务将outside_ticket同步到opera_product_run 报错 ' . PHP_EOL, FILE_APPEND);
- }
- }
- }
|