Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 

362 строки
13 KiB

  1. <?php
  2. /**
  3. *
  4. * ============================================================================
  5. * * 版权所有 蜘蛛出行 * *
  6. * 网站地址: http://www.zhizhuchuxing.com
  7. * ----------------------------------------------------------------------------
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
  9. * 使用;不允许对程序代码以任何形式任何目的的再发布。
  10. * ============================================================================
  11. * Author By: 倪宗锋
  12. * PhpStorm OrderUtil.php
  13. * Create By 2017/3/10 11:52 $
  14. */
  15. namespace common\util;
  16. use common\models\BusTicket;
  17. use common\models\CmsCategory;
  18. use common\models\OrderMain;
  19. use common\models\ProdCategory;
  20. use common\models\ProdMain;
  21. use common\util\curl\CsCurl;
  22. use common\util\prod\LineProdService;
  23. use yii\db\Exception;
  24. class OrderUtil
  25. {
  26. /**
  27. * Des:申请取消订单
  28. * Name: applyCancelOrder
  29. * @param $order_id int 订单ID
  30. * @param $is_check int 是否校验
  31. * @return array
  32. * @author 倪宗锋
  33. */
  34. public static function applyCancelOrder($order_id, $is_check = 1)
  35. {
  36. $return = Util::interfaceZzcx(['order_id' => $order_id, 'is_check' => $is_check], '/zzcx/interfaces/order/cancel-order');
  37. if ($return['flag']) {
  38. return Util::returnArrSu();
  39. }
  40. return Util::returnArrEr($return['msg']);
  41. }
  42. /**
  43. * Des:获取子线路产品的库存日历
  44. * Name: getBusSaleDate
  45. * @param $pro_cate_id
  46. * @param $if_back
  47. * @param $date
  48. * @return array
  49. * @author 倪宗锋
  50. */
  51. public static function getBusSaleDate($pro_cate_id, $if_back, $date = '')
  52. {
  53. $prod_main = new ProdMain();
  54. $bus_ticket = new BusTicket();
  55. if ($if_back == 1) {
  56. $ticket_info = $prod_main->getTicketId($pro_cate_id);
  57. $pro_cate_id = $bus_ticket->getBackTicketId($ticket_info[0]['bus_id']);
  58. }
  59. //读取产品对应的巴士票种id
  60. $ticket_info = $prod_main->getTicketId($pro_cate_id);
  61. $return = CsCurl::getBusSaleDate($ticket_info[0]['bus_id']);//获取库存日历
  62. //将比今天或者指定日期小的日期剔除
  63. if (empty($return['data']['list']['0']) == false) {
  64. if (empty($date)) {
  65. $date = date('Y-m-d');
  66. }
  67. foreach ($return['data']['list'] as $key => $val) {
  68. if (strtotime($val) < strtotime($date)) {
  69. unset($return['data']['list'][$key]);
  70. } else {
  71. break;
  72. }
  73. }
  74. }
  75. $return['data']['list'] = array_values($return['data']['list']);
  76. return $return;
  77. }
  78. /**
  79. * Function Description:切换日期实时获取库存
  80. * Function Name: getBusStock
  81. * @param $date
  82. * @param $pro_cate_id
  83. * @param $if_back
  84. * @return array
  85. *
  86. * @author 娄梦宁
  87. */
  88. public static function getBusStock($date, $pro_cate_id, $if_back)
  89. {
  90. $prod_main = new ProdMain();
  91. $bus_ticket = new BusTicket();
  92. if ($if_back == 1) {
  93. $ticket_info = $prod_main->getTicketId($pro_cate_id);
  94. $pro_cate_id = $bus_ticket->getBackTicketId($ticket_info[0]['bus_id']);
  95. }
  96. //读取产品对应的巴士票种id
  97. $ticket_info = $prod_main->getTicketId($pro_cate_id);
  98. //去cs系统查实时库存信息
  99. $time = time();
  100. $siteConfig = Util::getSiteConfig();
  101. $send_data = [
  102. 'auth_code' => Util::authCodeForCs($time),
  103. 'user_key' => $siteConfig['adm_user_key'],
  104. 'user' => $siteConfig['adm_user'],
  105. 'user_id' => $siteConfig['adm_user_id'],
  106. 'request_time' => $time,
  107. 'action' => 'get_run_array',
  108. 'run_date' => $date,
  109. 'ticket_id' => $ticket_info[0]['bus_id']
  110. ];
  111. $curlInterface = new CurlInterface($send_data, 4);
  112. $curlInterface->setBaseUrl('');
  113. $ticket_arr_cs = $curlInterface->execute($siteConfig['adm_host1'] . '/api/nfx', 'POST');
  114. if ($ticket_arr_cs['code'] == 0 && $ticket_arr_cs['data']) {
  115. $result = [];
  116. foreach ($ticket_arr_cs['data'] as $val) {
  117. if (intval($val['count']) <= 0) {
  118. $val['count'] = 0;
  119. }
  120. /** 将null字段的过滤掉 update on 2017-06-06 14:54**/
  121. if (empty($val['start_time'])) {
  122. continue;
  123. }
  124. $stat_time = strtotime($date . ' ' . $val['start_time']);
  125. if ($stat_time <= time()) {
  126. continue;
  127. }
  128. /**白哥说将已停运的过滤掉 update on 2017-06-01 10:23**/
  129. if ($val['run_status'] == 142) {
  130. continue;
  131. }
  132. foreach ($ticket_info as $k => $v) {
  133. $val['prod_name'] = $v['prod_name'];
  134. $val['prod_id'] = $v['prod_id'];
  135. $val['prod_price'] = $v['prod_price'];
  136. $val['station_str'] = $prod_main->getStation($v['prod_id']);
  137. if ($val['run_status'] != 137) {
  138. $result[$val['start_time']][$k] = $val;
  139. };
  140. }
  141. }
  142. if (count($result) == 0) {
  143. return Util::returnArrEr('该日的班次已截止售卖,请选择其它日期');
  144. }
  145. /******************************增加售卖截止时间判断*****************************/
  146. $prod_category = new ProdCategory();
  147. $prodInfo = $prod_category->getBusProdDetail($pro_cate_id);
  148. $close_sale_time = $prodInfo['close_sale_time'];
  149. if ($close_sale_time == '') $close_sale_time = 24;
  150. $s_time = strtotime($date) + $close_sale_time * 60 * 60;
  151. $curr_h_i = date('H:i:00', $s_time);
  152. if ($curr_h_i == '00:00:00') $curr_h_i = '24:00:00';
  153. //1.判断是否存在订单了
  154. $orderMain = new OrderMain();
  155. $param = ["prod_cate_id" => $pro_cate_id, "start_date" => $date, "start_time" => $curr_h_i, "small24" => $close_sale_time < 0];
  156. $boolExist = $orderMain->existOrder($param);
  157. if (!$boolExist) {
  158. if ($s_time <= time()) {
  159. return Util::returnArrEr('该日的班次已截止售卖,请选择其它日期');
  160. }
  161. }
  162. /******************************华丽的分割线*****************************/
  163. $result1 = ['prod_info' => $result, 'pro_cate_id' => $pro_cate_id];
  164. return Util::returnArrSu('', $result1);
  165. }
  166. return Util::returnArrEr('没有库存,请重选日期');
  167. }
  168. /**
  169. * Function Description:订单状态查询
  170. * Function Name: getOrderStatus
  171. * @param $order_id
  172. *
  173. * @return array
  174. *
  175. * @author 娄梦宁
  176. */
  177. public static function getOrderStatus($order_id)
  178. {
  179. $order_main = new OrderMain();
  180. $str_arr = explode('-', $order_id);
  181. $order_id = $str_arr[0];
  182. $result = $order_main->getOrderStatus($order_id);
  183. if ($result['order_status'] == 1) {
  184. return Util::returnArrSu('尚未支付', array('order_status' => 1));
  185. } elseif ($result['order_status'] == 2) {
  186. return Util::returnArrSu('支付已完成', array('order_status' => 2));
  187. } else {
  188. return Util::returnArrSu('订单已失效', array('order_status' => 0));
  189. }
  190. }
  191. /**
  192. * Function Description:车详情
  193. * Function Name: getDetail
  194. * @param $pro_cate_id
  195. *
  196. * @return array
  197. *
  198. * @author 娄梦宁
  199. */
  200. public static function getDetail($pro_cate_id)
  201. {
  202. //参数校验
  203. if (Util::checkPattern('intVal', $pro_cate_id) == false) {
  204. return Util::returnArrEr('参数错误');
  205. }
  206. $prod_category = new ProdCategory();
  207. $prod_main = new ProdMain();
  208. $prod_detail = $prod_category->getBusProdDetail($pro_cate_id);
  209. if ($prod_detail['sign'] != '') {
  210. $getRunDate = LineProdService::getLineSaleDate($pro_cate_id, 0);
  211. } else {
  212. $getRunDate = OrderUtil::getBusSaleDate($pro_cate_id, 0);
  213. }
  214. //子产品列表
  215. $prod_arr = $prod_main->getProdArr($pro_cate_id);
  216. $prod_detail['prod_arr'] = $prod_arr;
  217. $prod_detail['run_date'] = $getRunDate['data']['list'];
  218. return Util::returnArrSu('', $prod_detail);
  219. }
  220. /**
  221. * Function Description:首页列表数据获取
  222. * Function Name: getAllProd
  223. * @param $where
  224. * @param $point
  225. * @return array
  226. *
  227. * @author 娄梦宁
  228. */
  229. public static function getAllProd($where, $point)
  230. {
  231. $cms_category = new CmsCategory();
  232. $prod_category = new ProdCategory();
  233. $result = [];
  234. $getHotProdArr = $prod_category->GetHotProd($where);
  235. //热销产品
  236. if (count($getHotProdArr)) {
  237. $result[0] = [
  238. 'prod_arr' => $getHotProdArr,
  239. 'cms_category_id' => 1,
  240. 'category_name' => '购买过',
  241. 'recom_arr' => []
  242. ];
  243. }
  244. //推荐产品
  245. $getRecommendArr = $prod_category->GetRecommendProd($where);
  246. if (count($getRecommendArr)) {
  247. $result[1] = [
  248. 'prod_arr' => $getRecommendArr,
  249. 'cms_category_id' => 2,
  250. 'category_name' => '热销',
  251. 'recom_arr' => []
  252. ];
  253. }
  254. //自定义产品类型
  255. $category_arr = $cms_category->getCategoryArr();
  256. foreach ($category_arr as $key => $val) {
  257. $category_id = $val['cms_category_id'];
  258. $prodArr = $prod_category->GetListProd($category_id, $where);
  259. if (count($prodArr)) {
  260. $category_arr[$key]['prod_arr'] = $prodArr;
  261. $siteConfig = Util::getSiteConfig();
  262. if (in_array($category_id, $siteConfig['show_recom'])) {//获取LBS定位推荐产品
  263. $category_arr[$key]['recom_arr'] = $prod_category->getLBSListByCmsCate($point, $category_id);
  264. } else {
  265. $category_arr[$key]['recom_arr'] = [];
  266. }
  267. } else {
  268. unset($category_arr[$key]);
  269. }
  270. }
  271. $arr = array_merge($result, $category_arr);
  272. $data = ['prod_list' => $arr];
  273. return Util::returnArrSu('', $data);
  274. }
  275. /**
  276. * Des:前往蜘蛛出行确认支付
  277. * Name: payOrder
  278. * @param $orderId
  279. * @param $param_arr
  280. * @return array
  281. * @author 倪宗锋
  282. */
  283. public static function payOrderNotify($orderId, $param_arr)
  284. {
  285. $siteConfig = Util::getSiteConfig();
  286. $pay = FxAmount::pay($param_arr['fx_uid'], $param_arr['total_money']);
  287. if ($pay['flag'] == false) {
  288. return $pay;
  289. }
  290. //将数据进行加密
  291. $time = time();
  292. $data = [
  293. 'out_trade_no' => $orderId,
  294. 'time' => $time,
  295. 'buyer_pay_amount' => $param_arr['total_money'],
  296. ];
  297. $code = Util::authCode(http_build_query($data), "ENCODE");
  298. $pay_params = [
  299. 'system' => 1,
  300. 'code' => $code,
  301. 'time' => $time,
  302. ];
  303. //调用支付确认接口
  304. $curl = new CurlInterface($pay_params, 3);
  305. $payResult = $curl->execute($siteConfig['notify_url'], 'POST');
  306. if ($payResult['return_code'] != 'SUCCESS') {
  307. return Util::returnArrEr('预下单失败!' . $payResult['return_msg']);
  308. }
  309. return Util::returnArrSu();
  310. }
  311. /**
  312. * Des:下单
  313. * Name: makeOrder
  314. * @param $params
  315. * @return array
  316. * @author 倪宗锋
  317. */
  318. public static function makeOrder($params)
  319. {
  320. /***前往蜘蛛出行下单***/
  321. $siteConfig = Util::getSiteConfig();
  322. $curl = new CurlInterface($params, 4);
  323. $makeOrder = $curl->execute($siteConfig['zzcx_host'] . '/zzcx/order/order/make-order', 'POST');
  324. if ($makeOrder['flag'] != true) {//下单成功
  325. return Util::returnArrEr($makeOrder['msg']);
  326. }
  327. $return = $makeOrder['data'];//返回值
  328. //如果是余额支付 需扣除当前分销账户的余额 并调用支付完成通知接口告知支付已完成
  329. if ($params['pay_type'] == 3) {//余额支付
  330. $orderId = $return['order_id'];
  331. $payOrder = [
  332. 'fx_uid' => $params['fx_uid'],
  333. 'total_money' => $return['total_money'],
  334. ];
  335. $payFlag = static::payOrderNotify($orderId, $payOrder);
  336. if ($payFlag['flag'] == false) {
  337. return Util::returnArrEr($payFlag['msg']);
  338. }
  339. }
  340. /****设置返回值****/
  341. $return['qr_code'] = $siteConfig['host_name'] . '/fx/?r=weChat/we-chat/q-code&qCode=' . urlencode($return['pay_url']) . '&_math=441';
  342. $return['pay_type'] = $params['pay_type'];
  343. return Util::returnArrSu('', $return);
  344. }
  345. }