Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

359 rindas
13 KiB

  1. <?php
  2. /**
  3. *
  4. * ============================================================================
  5. * * 版权所有 蜘蛛出行 * *
  6. * 网站地址: http://www.zhizhuchuxing.com
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * Author By: 倪宗锋
  12. * PhpStorm FreeWalker.php
  13. * Create By 2017/7/8 15:33 $
  14. */
  15. namespace zzcx\service\home;
  16. use common\models\ProdCategory;
  17. use common\models\ProdImg;
  18. use common\models\ProdMain;
  19. use common\util\CurlInterface;
  20. use common\util\Util;
  21. class FreeWalker
  22. {
  23. /**
  24. * Des:获取巴士自由行产品数据
  25. * Name: getSearch
  26. * @param $param
  27. * @return array
  28. * @author 倪宗锋
  29. */
  30. public function getSearch($param)
  31. {
  32. $homeLog = require ROOT_PATH . '/zzcx/config/home_' . YII_ENV . '_config.php';
  33. $param['cms_id'] = $homeLog['free_walker']['cms_id'];
  34. $prodCate = new ProdCategory();
  35. $menPList = $prodCate->getSearchList($param, 4);
  36. if (empty($menPList['0'])) {
  37. $menPList = [];
  38. }
  39. return Util::returnArrSu('', ['list' => $menPList]);
  40. }
  41. /**
  42. * Des:获取产品初始化数据
  43. * Name: getInitialize
  44. * @param $pro_cate_id
  45. * @return array
  46. * @author 倪宗锋
  47. */
  48. public function getInitialize($pro_cate_id)
  49. {
  50. if (Util::checkPattern('intVal', $pro_cate_id) == false) {
  51. return Util::returnArrEr('params error');
  52. }
  53. /**获取产品信息*/
  54. $prodCate = new ProdCategory();
  55. $prodInfo = $prodCate->getProdDetail($pro_cate_id);
  56. if (!isset($prodInfo['category_id']) || $prodInfo['category_id'] != 4) {
  57. return Util::returnArrEr('该产品不是巴士自由行产品!');
  58. }
  59. /**获取产品的价格日历*/
  60. $getDatePriceList = $this->getDatePriceList($prodInfo);
  61. if ($getDatePriceList['flag'] == false) {
  62. return $getDatePriceList;
  63. }
  64. $datePriceList = $getDatePriceList['data']['adult'];
  65. $prodInfo['date_list'] = $datePriceList;
  66. $prodInfo['child_date_list']=$getDatePriceList['data']['child'];
  67. $keys = array_keys($datePriceList);//将数组的健组成一个数组
  68. $date = $keys[0];//取健的第一个值为默认日期
  69. $prodInfo['date'] = $date;
  70. /**获取产品的价格列表*/
  71. $getProdArr = $this->getProdArr($prodInfo, $date);
  72. if ($getProdArr['flag'] == false) {
  73. return $getProdArr;
  74. }
  75. $prodInfo['prod_arr'] = $getProdArr['data'];
  76. /**获取轮播图*/
  77. $prodImg = new ProdImg();
  78. $getProdImg = $prodImg->getProdImg($pro_cate_id);
  79. $prodInfo['img_list'] = $getProdImg;
  80. return Util::returnArrSu('', $prodInfo);
  81. }
  82. /**
  83. * Des:获取价格日历
  84. * Name: getDatePriceList
  85. * @param $prodInfo
  86. * @return array
  87. * @author 倪宗锋
  88. */
  89. public function getDatePriceList($prodInfo)
  90. {
  91. $childPriceList=[];
  92. if (empty($prodInfo['sign']) == false) {//如果是cs的巴士自由行
  93. $siteConfig = Util::getSiteConfig();
  94. $time = time();
  95. $data = [
  96. 'auth_code' => Util::authCodeForCs($time),
  97. 'user_key' => $siteConfig['adm_user_key'],
  98. 'user' => $siteConfig['adm_user'],
  99. 'user_id' => $siteConfig['adm_user_id'],
  100. 'org_id'=> $siteConfig['adm_source_id'],
  101. 'request_time' => $time,
  102. 'action' => 'get_price_date_by_month',
  103. 'sign' => $prodInfo['sign'],
  104. ];
  105. $curl = new CurlInterface($data, 4);
  106. $result = $curl->execute($siteConfig['adm_host1'] . '/api/wx/', 'POST');
  107. if (!isset($result['code']) || $result['code'] != '0' || count($result['list']) == 0) {
  108. return Util::returnArrEr('产品已售完!');
  109. }
  110. $datePriceList = [];
  111. foreach ($result['list'] as $val) {
  112. if (intval($val['ticket_num']) > 0) {
  113. $datePriceList[$val['ticket_date']] = $val['mini_price'];
  114. $childPriceList[$val['ticket_date']] = $val['child_price'];
  115. }
  116. }
  117. if (count($datePriceList) == 0) {
  118. return Util::returnArrEr('产品已售完!');
  119. }
  120. //判断售卖截止时间差
  121. // $s_time_h = $prodInfo['close_sale_time'];
  122. $_time_new = array();
  123. foreach ($datePriceList as $k => $v) {
  124. // //得到能卖的时间
  125. // $s_time = strtotime($k) + $s_time_h * 60 * 60;
  126. // //能卖的时间和当前时间比较
  127. // $currdate = time();
  128. // if ($s_time > $currdate) {
  129. // $_time_new[$k] = $v;
  130. // }
  131. $_time_new[$k] = $v;
  132. }
  133. $datePriceList = $_time_new;
  134. } else {
  135. $endDate = strtotime(date('Y-m-01') . " +4 month -1 day");//获取第三个月的最后一天
  136. $_time = range(strtotime(date('Y-m-d')), $endDate, 24 * 60 * 60);
  137. $_time = array_map(create_function('$v', 'return date("Y-m-d", $v);'), $_time);
  138. //判断售卖截止时间差
  139. // $s_time_h = $prodInfo['close_sale_time'];
  140. $_time_new = array();
  141. foreach ($_time as $k => $v) {
  142. // //得到能卖的时间
  143. // $s_time = strtotime($v) + $s_time_h * 60 * 60;
  144. // //能卖的时间和当前时间比较
  145. // $currdate = time();
  146. // if ($s_time > $currdate) {
  147. // $_time_new[] = $v;
  148. // }
  149. $_time_new[] = $v;
  150. }
  151. $datePriceList = array_fill_keys($_time_new, $this->dealFloat($prodInfo['show_price']));
  152. }
  153. return Util::returnArrSu('', ['adult'=>$datePriceList,'child'=>$childPriceList]);
  154. }
  155. /**
  156. * Des:获取品类某天的产品列表
  157. * Name: getProdArrForDate
  158. * @param $params
  159. * @return array
  160. * @author 倪宗锋
  161. */
  162. public function getProdArrForDate($params)
  163. {
  164. if (Util::checkPattern('intVal', $params['prod_cate_id']) == false) {
  165. return Util::returnArrEr('params error');
  166. }
  167. /**获取产品品类信息*/
  168. $prodCate = new ProdCategory();
  169. $prodInfo = $prodCate->getProdDetail($params['prod_cate_id']);
  170. if (!isset($prodInfo['category_id']) || $prodInfo['category_id'] != 4) {
  171. return Util::returnArrEr('该产品不是巴士自由行产品!');
  172. }
  173. /**获取的品类的产品列表*/
  174. $getProdArr = $this->getProdArr($prodInfo, $params['date']);
  175. if ($getProdArr['flag'] == false) {
  176. return $getProdArr;
  177. }
  178. $return['prod_arr'] = $getProdArr['data'];
  179. /**获取保险**/
  180. $getTripDays = $this->getTripDays($params['prod_cate_id'], $params['date']);
  181. if ($getTripDays['flag'] == false) {
  182. return $getTripDays;
  183. }
  184. $return['price'] = $getTripDays['data']['price'];
  185. return Util::returnArrSu('', $return);
  186. }
  187. /**
  188. * Des:获取品类的产品列表
  189. * Name: getProdArr
  190. * @param $prodInfo
  191. * @param $date
  192. * @return array
  193. * @author 倪宗锋
  194. */
  195. public function getProdArr($prodInfo, $date)
  196. {
  197. $prodMain = new ProdMain();
  198. $prodArray = $prodMain->getProdArr($prodInfo['pro_cate_id']);//获取本地存储的巴士自由行品类下的巴士自由行产品
  199. if (empty($prodInfo['sign']) == false) {
  200. $result = $this->getCsPro($prodInfo, $date);
  201. if (!isset($result['code']) || $result['code'] != '0' || count($result['list']) == 0) {
  202. return Util::returnArrEr('系统繁忙,请稍后再试!');
  203. }
  204. //对数据进行整合
  205. $csProdArr = $result['list'];
  206. foreach ($prodArray as $key => $val) {
  207. $prod = false;
  208. foreach ($csProdArr as $csVal) {
  209. if ($csVal['prod_id'] == $val['bus_id']) {
  210. if (Util::checkPattern('intVal', $csVal['ticket_num'])) {
  211. $prod = true;
  212. $lastId = substr($csVal['prod_id'], -1, 1);
  213. if ($lastId == 1) {
  214. $prodArray[$key]['is_chen'] = 1;
  215. } else {
  216. $prodArray[$key]['is_chen'] = 0;
  217. }
  218. $prodArray[$key]['ticket_all_num'] = $csVal['ticket_all_num'];
  219. $prodArray[$key]['prod_count'] = $csVal['ticket_num'];
  220. $prodArray[$key]['prod_price'] = $csVal['ticket_price'];
  221. break;
  222. }
  223. }
  224. }
  225. if ($prod == false) {//当这个产品在cs那边不存在的话 则删除该产品
  226. unset($prodArray[$key]);
  227. }
  228. }
  229. $prodArray = array_values($prodArray);
  230. }
  231. foreach($prodArray as &$v){
  232. $v['prod_price'] = $this->dealFloat($v['prod_price']);
  233. }
  234. return Util::returnArrSu('', $prodArray);
  235. }
  236. /**
  237. * Des:获取cs巴士自由行产品
  238. * Name: getCsPro
  239. * @param $prodInfo
  240. * @param $date
  241. * @return array
  242. * @author 倪宗锋
  243. */
  244. public function getCsPro($prodInfo, $date)
  245. {
  246. $siteConfig = Util::getSiteConfig();
  247. $time = time();
  248. $data = [
  249. 'auth_code' => Util::authCodeForCs($time),
  250. 'user_key' => $siteConfig['adm_user_key'],
  251. 'user' => $siteConfig['adm_user'],
  252. 'user_id' => $siteConfig['adm_user_id'],
  253. 'org_id'=> $siteConfig['adm_source_id'],
  254. 'request_time' => $time,
  255. 'action' => 'get_price_date_by_day',
  256. 'sign' => $prodInfo['sign'],
  257. 'run_date' => $date
  258. ];
  259. $curl = new CurlInterface($data, 4);
  260. $result = $curl->execute($siteConfig['adm_host1'] . '/api/wx/', 'POST');//获取cs的巴士自由行产品
  261. return $result;
  262. }
  263. /**
  264. * Des:获取产品价格
  265. * Name: getPrice
  266. * @param $params
  267. * @return array
  268. * @author 倪宗锋
  269. */
  270. public function getPrice($params)
  271. {
  272. $prodCategory = new ProdCategory();
  273. $getInfo = $prodCategory->getProdDetail($params['pro_cate_id']);
  274. if (empty($getInfo['category_id']) || $getInfo['category_id'] != 4 || empty($getInfo['sign'])) {
  275. return Util::returnArrEr('该产品不是巴士自由行产品!');
  276. }
  277. $prodMain = new ProdMain();
  278. $prodArr = $prodMain->getProdForCsFreeWalk($params['prod_arr']);
  279. if (count($prodArr) == 0) {
  280. return Util::returnArrEr('请选择产品!');
  281. }
  282. $data = [
  283. 'sign' => $getInfo['sign'],
  284. 'date' => $params['start_date'],
  285. 'prod_arr' => json_encode($prodArr),
  286. 'action' => 'get_tourist_pay_total'
  287. ];
  288. $getPrice = Util::sendCs($data, '/api/wx/', 2);
  289. if (!isset($getPrice['code']) || $getPrice['code'] != 0 || empty($getPrice['data']['list']['total_money'])) {
  290. $msg = '库存不足!';
  291. return Util::returnArrEr($msg);
  292. }
  293. $total_money = ceil($getPrice['data']['list']['total_money']);
  294. return Util::returnArrSu('', ['total_money' => $total_money]);
  295. }
  296. /**
  297. * Function Description:根据prod_cate_id获取自由行保险价格
  298. * Function Name: getTripDays
  299. * @param $pro_cate_id
  300. * @return array
  301. * @author 田玲菲
  302. */
  303. public function getTripDays($pro_cate_id, $run_date)
  304. {
  305. $prodCategory = new ProdCategory();
  306. $result = $prodCategory->getFreeWalkSign($pro_cate_id);
  307. $sign = $result['sign'];
  308. /**调用cs获取行程列表接口 获取行程保险价格*/
  309. $sendData = [
  310. 'sign' => $sign,
  311. 'run_date' => $run_date,
  312. 'action' => 'get_trip_days_insurance'
  313. ];
  314. $getPrice = Util::sendCs($sendData, '/api/wx/', 2);//cs接口调用通用函数
  315. if ($getPrice['flag'] == false) {//如果接口调用失败
  316. return Util::returnArrEr('获取保险价格失败!');
  317. }
  318. /**获取cs行程列表数据*/
  319. if ($getPrice['code'] == 0) {
  320. return Util::returnArrSu('', ['price' => $getPrice['data']['price']]);
  321. } else {
  322. return Util::returnArrEr('获取价格失败:' . $getPrice['data']['info']);
  323. }
  324. }
  325. /**
  326. * Function Description:处理价格
  327. * Function Name: dealFloat
  328. * @param $float
  329. *
  330. * @return float
  331. *
  332. * @author LUOCJ
  333. */
  334. public function dealFloat($float)
  335. {
  336. $int = floor($float);
  337. if ($float - $int == 0) {
  338. $float = $int;
  339. }
  340. return $float;
  341. }
  342. }