Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 

292 lignes
10 KiB

  1. <?php
  2. /**
  3. *
  4. * ============================================================================
  5. * * 版权所有 蜘蛛出行 * *
  6. * 网站地址: http://www.zhizhuchuxing.com
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * Author By: 倪宗锋
  12. * PhpStorm EntranceTicketService.php
  13. * Create By 2017/3/20 16:14 $
  14. */
  15. namespace common\util;
  16. use common\models\ProdCategory;
  17. use common\models\ProdMain;
  18. class EntranceTicketService
  19. {
  20. /**
  21. * Function Description:处理价格
  22. * Function Name: dealFloat
  23. * @param $float
  24. *
  25. * @return float
  26. *
  27. * @author LUOCJ
  28. */
  29. public function dealFloat($float)
  30. {
  31. $int = floor($float);
  32. if ($float - $int == 0) {
  33. $float = $int;
  34. }
  35. return $float;
  36. }
  37. /**
  38. * Des:获取门票产品初始化数据
  39. * Name: getInitialize
  40. * @param $prod_cate_id
  41. * @return array
  42. * @author 倪宗锋
  43. */
  44. public function getInitialize($prod_cate_id)
  45. {
  46. if (Util::checkPattern('intVal', $prod_cate_id) == false) {
  47. return Util::returnArrEr('params error');
  48. }
  49. /**获取产品信息*/
  50. $prodCate = new ProdCategory();
  51. $prodInfo = $prodCate->getProdDetail($prod_cate_id);
  52. if (!isset($prodInfo['category_id']) || $prodInfo['category_id'] != 2) {
  53. return Util::returnArrEr('该产品不是门票产品!');
  54. }
  55. /**获取产品的价格日历*/
  56. $getDatePriceList = $this->getDatePriceList($prodInfo);
  57. if ($getDatePriceList['flag'] == false) {
  58. return $getDatePriceList;
  59. }
  60. $datePriceList = $getDatePriceList['data'];
  61. $prodInfo['date_list'] = $datePriceList;
  62. $keys = array_keys($datePriceList);//将数组的健组成一个数组
  63. $date = $keys[0];//取健的第一个值为默认日期
  64. $prodInfo['date'] = $date;
  65. /**获取产品的价格列表*/
  66. $getProdArr = $this->getProdArr($prodInfo, $date);
  67. if ($getProdArr['flag'] == false) {
  68. return $getProdArr;
  69. }
  70. $prodInfo['prod_arr'] = $getProdArr['data'];
  71. return Util::returnArrSu('', $prodInfo);
  72. }
  73. /**
  74. * Des:获取价格日历
  75. * Name: getDatePriceList
  76. * @param $prodInfo
  77. * @return array
  78. * @author 倪宗锋
  79. */
  80. public function getDatePriceList($prodInfo)
  81. {
  82. if (empty($prodInfo['sign']) == false) {//如果是cs的门票
  83. $siteConfig = Util::getSiteConfig();
  84. $time = time();
  85. $data = [
  86. 'auth_code' => Util::authCodeForCs($time),
  87. 'user_key' => $siteConfig['adm_user_key'],
  88. 'user' => $siteConfig['adm_user'],
  89. 'user_id' => $siteConfig['adm_user_id'],
  90. 'request_time' => $time,
  91. 'action' => 'gate_ticket_mini_value',
  92. 'sign' => $prodInfo['sign'],
  93. ];
  94. $curl = new CurlInterface($data, 4);
  95. $result = $curl->execute($siteConfig['adm_host1'] . '/api/nfx', 'POST');
  96. if (!isset($result['code']) || $result['code'] != '0' || count($result['list']) == 0) {
  97. return Util::returnArrEr('产品已售完!');
  98. }
  99. $datePriceList = [];
  100. foreach ($result['list'] as $val) {
  101. $datePriceList[$val['ticket_date']] = $val['mini_price'];
  102. }
  103. //判断售卖截止时间差
  104. $s_time_h = $prodInfo['close_sale_time'];
  105. $_time_new = array();
  106. foreach ($datePriceList as $k => $v) {
  107. //得到能卖的时间
  108. // $v.=" 00:00:00";
  109. $s_time = strtotime($k) + $s_time_h * 60 * 60;
  110. //能卖的时间和当前时间比较
  111. $currdate = time();
  112. if ($s_time > $currdate) {
  113. $_time_new[$k] = $v;
  114. }
  115. }
  116. $datePriceList = $_time_new;
  117. } else {
  118. $endDate = strtotime(date('Y-m-01') . " +4 month -1 day");//获取第三个月的最后一天
  119. $_time = range(strtotime(date('Y-m-d')), $endDate, 24 * 60 * 60);
  120. $_time = array_map(create_function('$v', 'return date("Y-m-d", $v);'), $_time);
  121. //判断售卖截止时间差
  122. $s_time_h = $prodInfo['close_sale_time'];
  123. $_time_new = array();
  124. foreach ($_time as $k => $v) {
  125. //得到能卖的时间
  126. // $v.=" 00:00:00";
  127. $s_time = strtotime($v) + $s_time_h * 60 * 60;
  128. //能卖的时间和当前时间比较
  129. $currdate = time();
  130. if ($s_time > $currdate) {
  131. $_time_new[] = $v;
  132. }
  133. }
  134. $datePriceList = array_fill_keys($_time_new, $this->dealFloat($prodInfo['show_price']));
  135. }
  136. return Util::returnArrSu('', $datePriceList);
  137. }
  138. /**
  139. * Des:获取品类的产品列表
  140. * Name: getProdArr
  141. * @param $prodInfo
  142. * @param $date
  143. * @return array
  144. * @author 倪宗锋
  145. */
  146. public function getProdArr($prodInfo, $date)
  147. {
  148. $prodMain = new ProdMain();
  149. $prodArray = $prodMain->getProdArr($prodInfo['pro_cate_id']);//获取本地存储的门票品类下的门票产品
  150. if (empty($prodInfo['sign']) == false) {
  151. $result = $this->getCsPro($prodInfo, $date);
  152. if (!isset($result['code']) || $result['code'] != '0' || count($result['list']) == 0) {
  153. return Util::returnArrEr('系统繁忙,请稍后再试!');
  154. }
  155. //对数据进行整合
  156. $csProdArr = $result['list'];
  157. foreach ($prodArray as $key => $val) {
  158. $prod = false;
  159. foreach ($csProdArr as $csVal) {
  160. if ($csVal['prod_id'] == $val['bus_id']) {
  161. if (Util::checkPattern('intVal', $csVal['ticket_num'])) {
  162. $prod = true;
  163. $prodArray[$key]['prod_count'] = $csVal['ticket_num'];
  164. $prodArray[$key]['prod_price'] = $csVal['ticket_price'];
  165. break;
  166. }
  167. }
  168. }
  169. if ($prod == false) {//当这个产品在cs那边不存在的话 则删除该产品
  170. unset($prodArray[$key]);
  171. }
  172. }
  173. $prodArray = array_values($prodArray);
  174. }
  175. foreach($prodArray as &$v){
  176. $v['prod_price'] = $this->dealFloat($v['prod_price']);
  177. }
  178. return Util::returnArrSu('', $prodArray);
  179. }
  180. /**
  181. * Des:获取品类某天的产品列表
  182. * Name: getProdArrForDate
  183. * @param $params
  184. * @return array
  185. * @author 倪宗锋
  186. */
  187. public function getProdArrForDate($params)
  188. {
  189. if (Util::checkPattern('intVal', $params['prod_cate_id']) == false) {
  190. return Util::returnArrEr('params error');
  191. }
  192. /**获取产品品类信息*/
  193. $prodCate = new ProdCategory();
  194. $prodInfo = $prodCate->getProdDetail($params['prod_cate_id']);
  195. if (!isset($prodInfo['category_id']) || $prodInfo['category_id'] != 2) {
  196. return Util::returnArrEr('该产品不是门票产品!');
  197. }
  198. /**获取的品类的产品列表*/
  199. $getProdArr = $this->getProdArr($prodInfo, $params['date']);
  200. if ($getProdArr['flag'] == false) {
  201. return $getProdArr;
  202. }
  203. $return['prod_arr'] = $getProdArr['data'];
  204. return Util::returnArrSu('', $return);
  205. }
  206. /**
  207. * Des:获取cs门票产品
  208. * Name: getCsPro
  209. * @param $prodInfo
  210. * @param $date
  211. * @return array
  212. * @author 倪宗锋
  213. */
  214. public function getCsPro($prodInfo, $date)
  215. {
  216. $siteConfig = Util::getSiteConfig();
  217. $time = time();
  218. $data = [
  219. 'auth_code' => Util::authCodeForCs($time),
  220. 'user_key' => $siteConfig['adm_user_key'],
  221. 'user' => $siteConfig['adm_user'],
  222. 'user_id' => $siteConfig['adm_user_id'],
  223. 'request_time' => $time,
  224. 'action' => 'gate_ticket_date_run',
  225. 'sign' => $prodInfo['sign'],
  226. 'date' => $date
  227. ];
  228. $curl = new CurlInterface($data, 4);
  229. $result = $curl->execute($siteConfig['adm_host1'] . '/api/nfx', 'POST');//获取cs的门票产品
  230. return $result;
  231. }
  232. /**
  233. * Des:获取cs系统门票订单产品价格
  234. * Name: getOrderPriceFromCs
  235. * @param $prodInfo
  236. * @param $date
  237. * @param $order_prod_arr
  238. * @return array
  239. * @author 倪宗锋
  240. */
  241. public function getOrderPriceFromCs($prodInfo, $date, $order_prod_arr)
  242. {
  243. $prodMain = new ProdMain();
  244. $prodArray = $prodMain->getProdArr($prodInfo['pro_cate_id']);//获取本地存储的门票品类下的门票产品
  245. $result = $this->getCsPro($prodInfo, $date);
  246. if (!isset($result['code']) || $result['code'] != '0' || count($result['list']) == 0) {
  247. return Util::returnArrEr('系统繁忙,请稍后再试!');
  248. }
  249. //对数据进行整合
  250. $csProdArr = $result['list'];
  251. $csOrderProdParams = [];
  252. /**将数据拼接成cs产品ID对应产品数量的格式**/
  253. foreach ($order_prod_arr as $orderProd) {
  254. foreach ($prodArray as $val) {
  255. if ($orderProd['prod_id'] == $val['prod_id']) {
  256. $csOrderProdParams[$val['bus_id']] = [
  257. 'prod_id' => $val['bus_id'],
  258. 'prod_cnt' => $orderProd['prod_count']
  259. ];
  260. break;
  261. }
  262. }
  263. }
  264. /**根据cs产品格式计算价格**/
  265. $price = 0;
  266. foreach ($csProdArr as $csPro) {
  267. if (isset($csOrderProdParams[$csPro['prod_id']])) {
  268. $theProd = $csOrderProdParams[$csPro['prod_id']];
  269. $price += $theProd['prod_cnt'] * ceil($csPro['ticket_price']);
  270. }
  271. }
  272. return Util::returnArrSu('', $price);
  273. }
  274. }