Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 

250 rader
9.4 KiB

  1. <?php
  2. /**
  3. *
  4. * ============================================================================
  5. * * 版权所有 蜘蛛出行 * *
  6. * 网站地址: http://www.zhizhuchuxing.com
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * Author By: 倪宗锋
  12. * PhpStorm LineProdService.php
  13. * Create By 2017/3/29 16:38 $
  14. */
  15. namespace common\util\prod;
  16. use common\models\BusTicket;
  17. use common\models\OrderMain;
  18. use common\models\ProdCategory;
  19. use common\util\curl\CsCurl;
  20. use common\util\Util;
  21. class LineProdService
  22. {
  23. /**
  24. * Des:获取主线路产品库存日历
  25. * Name: getLineSaleDate
  26. * @param $pro_cate_id
  27. * @param $if_back
  28. * @param $date
  29. * @return array
  30. * @author 倪宗锋
  31. */
  32. public static function getLineSaleDate($pro_cate_id, $if_back, $date = '')
  33. {
  34. if (Util::checkPattern('intVal', $pro_cate_id) == false) {
  35. return Util::returnArrEr('params error');
  36. }
  37. $prodCate = new ProdCategory();
  38. $prodInfo = $prodCate->getBusProdDetail($pro_cate_id);
  39. if ($if_back) {
  40. $end_area_id = $prodInfo['start_area_id'];//站点 起始站POI作为终点站POI
  41. $start_area_id = $prodInfo['end_area_id'];//站点 终点站POI作为起始站POI
  42. $return = CsCurl::getLineSaleDate('', $start_area_id, $end_area_id);//获取两个POI之间的班次库存
  43. } else {
  44. if (empty($prodInfo['sign'])) {
  45. return Util::returnArrEr('该产品已下架!');
  46. }
  47. $line_id = $prodInfo['sign'];//线路ID
  48. $return = CsCurl::getLineSaleDate($line_id);//获取线路的班次库存
  49. }
  50. //将比今天或者指定日期小的日期剔除
  51. if (empty($return['data']['list']['0']) == false) {
  52. if (empty($date)) {
  53. $date = date('Y-m-d');
  54. }
  55. foreach ($return['data']['list'] as $key => $val) {
  56. if (strtotime($val) < strtotime($date)) {
  57. unset($return['data']['list'][$key]);
  58. } else {
  59. break;
  60. }
  61. }
  62. }
  63. $return['data']['list'] = array_values($return['data']['list']);
  64. return $return;
  65. }
  66. /**
  67. * Des:获取主线路的按日期查询班次及库存
  68. * Name: getLineBusStock
  69. * @param $date
  70. * @param $pro_cate_id
  71. * @param $if_back
  72. * @return array
  73. * @author 倪宗锋
  74. */
  75. public static function getLineBusStock($date, $pro_cate_id, $if_back)
  76. {
  77. if (Util::checkPattern('intVal', $pro_cate_id) == false) {
  78. return Util::returnArrEr('params error!');
  79. }
  80. /**从cs获取主线路班次库存*/
  81. $getBusStock = static::getBusStockForLineFromCs($pro_cate_id, $date, $if_back);
  82. if ($getBusStock['flag'] == false) {
  83. return $getBusStock;
  84. }
  85. /**设置前端使用的价格库存*/
  86. $setReturn = static::setTicketReturn($getBusStock['data'], $date);
  87. return $setReturn;
  88. }
  89. /**
  90. * Des:从cs获取主线路班次库存
  91. * Name: getBusStockForLineFromCs
  92. * @param $pro_cate_id
  93. * @param $date
  94. * @param $if_back
  95. * @return array
  96. * @author 倪宗锋
  97. */
  98. public static function getBusStockForLineFromCs($pro_cate_id, $date, $if_back)
  99. {
  100. $prodCate = new ProdCategory();
  101. $prodInfo = $prodCate->getBusProdDetail($pro_cate_id);
  102. if ($if_back) {
  103. $end_area_id = $prodInfo['start_area_id'];//站点 起始站POI作为终点站POI
  104. $start_area_id = $prodInfo['end_area_id'];//站点 终点站POI作为起始站POI
  105. $return = CsCurl::getGoBusStockForArea($start_area_id, $end_area_id, $date);//获取两个POI之间的班次库存
  106. } else {
  107. if (empty($prodInfo['sign'])) {
  108. return Util::returnArrEr('该产品已下架!');
  109. }
  110. $line_id = $prodInfo['sign'];//线路ID
  111. $return = CsCurl::getGoBusStockForLine($line_id, $date);//获取线路的班次库存
  112. }
  113. /******************************增加售卖截止时间判断*****************************/
  114. $close_sale_time = $prodInfo['close_sale_time'];
  115. if ($close_sale_time == '') $close_sale_time = 24;
  116. $s_time = strtotime($date) + $close_sale_time * 60 * 60;
  117. $curr_h_i = date('H:i:s', $s_time);
  118. if ($curr_h_i == '00:00:00') $curr_h_i = '24:00:00';
  119. //1.判断是否存在订单了
  120. $orderMain = new OrderMain();
  121. $param = ["prod_cate_id" => $pro_cate_id, "start_date" => $date, "start_time" => $curr_h_i, "small24" => $close_sale_time < 0];
  122. $boolExist = $orderMain->existOrder($param);
  123. if (!$boolExist) {
  124. if ($s_time <= time()) {
  125. return Util::returnArrEr('该日的班次已截止售卖,请选择其它日期');
  126. }
  127. }
  128. /******************************华丽的分割线*****************************/
  129. return $return;
  130. }
  131. /**
  132. * Des:设置获取班次返回值
  133. * Name: setTicketReturn
  134. * @param $data
  135. * @return array
  136. * @author 倪宗锋
  137. */
  138. public static function setTicketReturn($data, $date)
  139. {
  140. /**获取所有去重后的票种ID*/
  141. $ticketIds = static::getTicketByCSTicket($data);
  142. if (empty($ticketIds['ticket'])) {
  143. return Util::returnArrEr('当前日期票已售完,请选择其他日期!');
  144. }
  145. /**获取票种对应的站点数组*/
  146. $bus_ticket = new BusTicket();
  147. $ticketArr = $bus_ticket->getTicketAndLineByIDs($ticketIds['ticket']);
  148. foreach ($ticketIds['runBusArr'] as $key => $val) {
  149. $ticketIds['runBusArr'][$key]['start_station_list'] = static::getBusArrBYTicketList($val['ticket_list'], $ticketArr, $date);
  150. unset($ticketIds['runBusArr'][$key]['ticket_list']);
  151. if (count($ticketIds['runBusArr'][$key]['start_station_list']) <= 0) {//如果没有可选站点则 删除该班次
  152. unset($ticketIds['runBusArr'][$key]);
  153. continue;
  154. }
  155. }
  156. ksort($ticketIds['runBusArr']);
  157. if (empty($ticketIds['runBusArr'])) {
  158. return Util::returnArrEr('没有库存,请重选日期');
  159. }
  160. return Util::returnArrSu('', ['station_list' => array_values($ticketIds['runBusArr'])]);
  161. }
  162. /**
  163. * Des:凭借前端班次数组
  164. * Name: getBusArrBYTicketList
  165. * @param $ticketList
  166. * @param $ticketArr
  167. * @return array
  168. * @author 倪宗锋
  169. */
  170. public static function getBusArrBYTicketList($ticketList, $ticketArr, $date)
  171. {
  172. $theArr = [];
  173. foreach ($ticketList as $key => $val) {
  174. /**判断时间*/
  175. $stat_time = strtotime($date . ' ' . $val['start_time'] . ':00');
  176. if ($stat_time <= time()) {
  177. continue;
  178. }
  179. foreach ($ticketArr as $tkey => $tVal) {
  180. if (isset($tVal['end_station_list'][$key])) {
  181. $sArr = [];
  182. if (empty($theArr[$tkey])) {
  183. $theArr[$tkey]['start_res_id'] = $tVal['start_res_id'];
  184. $theArr[$tkey]['start_res_name'] = $tVal['start_res_name'];
  185. if (isset($val['prod_num'])) {
  186. $theArr[$tkey]['start_res_time'] = $val['start_time'];
  187. } else {//兼容之前的版本
  188. $theArr[$tkey]['start_res_time'] = '00:00:00';
  189. }
  190. $theArr[$tkey]['end_station_list'] = [];
  191. }
  192. $sArr['station_id'] = $tVal['end_station_list'][$key]['end_res_id'];
  193. $sArr['station_name'] = $tVal['end_station_list'][$key]['end_res_name'];
  194. $sArr['pro_cate_id'] = $tVal['end_station_list'][$key]['pro_cate_id'];
  195. if (isset($val['prod_num'])) {
  196. $sArr['count'] = $val['prod_num'];
  197. $sArr['end_res_time'] = $val['end_time'];
  198. } else {//兼容之前的版本
  199. $sArr['count'] = $val;
  200. $sArr['end_res_time'] = '00:00';
  201. }
  202. $theArr[$tkey]['end_station_list'][] = $sArr;
  203. }
  204. }
  205. }
  206. return array_values($theArr);
  207. }
  208. /**
  209. * Des:获取TICKET字符串
  210. * Name: getTicketByCSTicket
  211. * @param $busArr
  212. * @return array
  213. * @author 倪宗锋
  214. */
  215. public static function getTicketByCSTicket($busArr)
  216. {
  217. $ticketArr = [];
  218. $runBusArr = [];
  219. foreach ($busArr as $val) {
  220. if (count($val['ticket_list']) == 0) {
  221. continue;
  222. }
  223. $cnt = 0;
  224. foreach ($val['ticket_list'] as $key => $tiVal) {
  225. if ($tiVal > 0) {
  226. $cnt++;
  227. $ticketArr[$key] = $key;//去重保存
  228. }
  229. }
  230. if ($cnt) {//没有库存的不保存
  231. $runBusArr[$val['run_time']] = $val;
  232. }
  233. }
  234. return ['ticket' => array_values($ticketArr), 'runBusArr' => $runBusArr];
  235. }
  236. }