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.
 
 
 
 
 
 

372 lignes
14 KiB

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: tannerwang
  5. * Date: 2019/4/19
  6. * Time: 14:16
  7. */
  8. namespace backend\modules\api\models;
  9. use backend\modules\api\util\Util;
  10. use common\util\CurlInterface;
  11. use common\util\ZybBusUtil;
  12. use yii\base\Model;
  13. class ZybBus extends Model
  14. {
  15. public static $SUPPLIER_ID = 1835;
  16. public $header;
  17. public $identityInfo;
  18. public $order;
  19. public function rules()
  20. {
  21. return [
  22. [['order'], 'required'],
  23. [['order'], 'cancelOrderValidate', 'on' => ['cancel-order']],
  24. [['order'], 'queryOrderValidate', 'on' => ['query-order']],
  25. ];
  26. }
  27. public function scenarios()
  28. {
  29. return [
  30. 'cancel-order' => ['order'],
  31. 'query-order' => ['order'],
  32. ];
  33. }
  34. // 退票处理
  35. public function refundTicket()
  36. {
  37. $order = $this->order;
  38. $orderRetreat = $order['orderRetreat'];
  39. $orderMain = new OrderMain();
  40. $checkOutsideOrderNo = $orderMain->checkOutsideOrderNo($orderRetreat['zybOrderCode'], self::$SUPPLIER_ID);
  41. if (empty($checkOutsideOrderNo['0']['order_id'])) {
  42. return $this->formartResponse('fail', '订单不存在', null);
  43. // return ['describe' => '订单不存在', 'status' => 'fail'];
  44. }
  45. // 订单已退订
  46. if ($checkOutsideOrderNo[0]['order_status'] == '148') {
  47. // $orderDetail = $this->orderDetail(['corpOrderId' => $orderRetreat['zybOrderCode']]);
  48. return $this->formartResponse('success', '订单已取消', null);
  49. }
  50. $data = [
  51. 'order_id' => $checkOutsideOrderNo['0']['order_id'],
  52. "user_id" => 813
  53. ];
  54. $curl = new CurlInterface($data, 4);
  55. $result = $curl->execute('http://' . CS1_DOMAIN . '/api/submit-order/cancel-bus-order', 'POST');
  56. if (!isset($result['code']) || $result['code'] != '0') {
  57. $msg = empty($result['info']) ? '取消订单失败!' : $result['info'];
  58. return $this->formartResponse('fail', $msg, null);
  59. }
  60. // $orderDetail = $this->orderDetail(['corpOrderId' => $params['corpOrderId']]);
  61. return $this->formartResponse('success', '订单取消成功', null);
  62. }
  63. // 订单退订参数校验
  64. public function cancelOrderValidate($attribute)
  65. {
  66. if (!empty($this->$attribute)) {
  67. $order = $this->$attribute;
  68. $orderRetreat = $order['orderRetreat'];
  69. if (empty($orderRetreat['retreatNum'])) {
  70. $this->addError($attribute, "退票数量不能为空");
  71. }
  72. if (empty($orderRetreat['zybRetreatCode'])) {
  73. $this->addError($attribute, "智游宝退单号不能为空");
  74. }
  75. if (empty($orderRetreat['zybOrderCode'])) {
  76. $this->addError($attribute, "智游宝订单号不能为空");
  77. }
  78. } else {
  79. $this->addError($attribute, "信息不能为空");
  80. }
  81. }
  82. // 订单查询参数校验
  83. public function queryOrderValidate($attribute)
  84. {
  85. if (!empty($this->$attribute)) {
  86. $order = $this->$attribute;
  87. $orderRetreat = $order['orderInfo'];
  88. if (empty($orderRetreat['zybOrderCode'])) {
  89. $this->addError($attribute, "订单号不能为空");
  90. }
  91. } else {
  92. $this->addError($attribute, "查询缺少必要参数");
  93. }
  94. }
  95. // 智游宝查询订单信息
  96. public function queryOrderDetail()
  97. {
  98. $order = $this->order;
  99. $orderCode = $order['orderInfo']['zybOrderCode'];
  100. $orderMain = new OrderMain();
  101. $checkOutsideOrderNo = $orderMain->checkOutsideOrderNo($orderCode, self::$SUPPLIER_ID);
  102. $order_id = $checkOutsideOrderNo['0']['order_id'];
  103. if (empty($order_id)) {
  104. return $this->formartResponse('fail', '订单不存在', null);
  105. }
  106. $orderInfo['orderInfo']['extOrderCode'] = $order_id;
  107. return $this->formartResponse('success', '成功', $orderInfo);
  108. }
  109. // 格式化返回值
  110. private function formartResponse($status, $describe, $data)
  111. {
  112. return ['status' => $status, 'describe' => $describe, 'order' => $data];
  113. }
  114. /**
  115. * Des:下单
  116. * Name: order
  117. * @param $params
  118. * @return array
  119. * @author 倪宗锋
  120. */
  121. public function makeOrder($params)
  122. {
  123. $checkParams = $this->checkOrderParams($params);//参数 校验并返回产品详情
  124. if ($checkParams['flag'] == false) {
  125. return $checkParams;
  126. }
  127. $prodInfo = $checkParams['data'];
  128. //错误返回值
  129. $errorTicketArray = [];
  130. if($params['orderDetail']['credentials'] != null) {
  131. foreach ($params['orderDetail']['credentials'] as $val) {
  132. $errorTicket = [
  133. "certificateNo" => $val['idCard'],
  134. "ticketStatus" => 3,
  135. "noTicketReason" => "无票"
  136. ];
  137. $errorTicketArray[] = $errorTicket;
  138. }
  139. }
  140. $errorReturn = [
  141. "order_id" => "",
  142. "corpOrderId" => $params['orderInfo']['zybOrderCode'],
  143. 'smsTemplate' => '',
  144. "tickets" => $errorTicketArray
  145. ];
  146. #校验订单是否已经存在
  147. $orderDetail = $this->orderDetail(['corpOrderId' => $params['orderInfo']['zybOrderCode'], 'send_message' => ""]);//获取定下详情,如果存在则直接返回
  148. if ($orderDetail['flag'] == true) {
  149. return Util::returnArrEr('error', $errorReturn);
  150. }
  151. #不存在则去下单
  152. #票ID
  153. $ticket_id = $params['orderDetail']['goodsCode'];
  154. #获取lineId
  155. $operaTickets = new OperaTickets();
  156. $line_id = $operaTickets->getLineIdByTickedId($ticket_id);
  157. #获取班次ID
  158. $runMain = new RunMain();
  159. $startDate = date('Y-m-d', strtotime($params['orderDetail']['startDate']));
  160. if ($ticket_id == "464905") {
  161. $startTime = "07:20";
  162. } else {
  163. $startTime = "17:00";
  164. }
  165. $run_id = $runMain->getRunIdByLine($line_id, $startDate, $startTime);
  166. if (empty($run_id)) {
  167. return Util::returnArrEr('get run error', $errorReturn);
  168. }
  169. $outSideSubmitOrder = new OutsideSubmitOrder();
  170. $date = [
  171. 'from_org_id' => ZybBusUtil::util()->getSupplierId(),
  172. 'outside_order_no' => $params['orderInfo']['zybOrderCode'],
  173. 'ticket_id' => $ticket_id,
  174. 'ticket_num' => $prodInfo['prod_cnt'],
  175. 'price' => $prodInfo['price'],
  176. 'all_price' => $prodInfo['total_money'],
  177. 'customer_name' => $params['orderInfo']['linkName'],
  178. 'customer_mobile' => $params['orderInfo']['tel'],
  179. 'customer_id_no' => $params['orderInfo']['idCard'],
  180. 'passenger' => $prodInfo['passenger_str']
  181. ];
  182. $submitOrderId = $outSideSubmitOrder->addRow($date);
  183. #设置 返回下单接口参数
  184. $prod_str = [1, $run_id, $ticket_id, $prodInfo['price'], $prodInfo['prod_cnt']];
  185. $order_info_str = [813, 0, ZybBusUtil::util()->getSupplierId(), $params['orderInfo']['zybOrderCode'], 0, 275, 1, '李秉臻'];
  186. $customer_info_str = [$params['orderInfo']['linkName'], $params['orderInfo']['tel'], 1, '', ''];
  187. $passenger_info = $prodInfo['passenger_info'];
  188. $data = [
  189. 'prod_str' => '{' . implode(',', $prod_str) . '}',
  190. 'order_info_str' => '{' . implode(',', $order_info_str) . '}',
  191. 'customer_info_str' => '{' . implode(',', $customer_info_str) . '}',
  192. 'passenger_info' => json_encode($passenger_info),
  193. 'is_send_msg' => 0
  194. ];
  195. $curl = new CurlInterface($data, 4);
  196. $result = $curl->execute('http://' . CS1_DOMAIN . '/api/submit-order/submit-bus-order', 'POST');
  197. if (!isset($result['code']) || $result['code'] != '0') {
  198. $msg = empty($result['info']) ? '预定失败!' : $result['info'];
  199. $outSideSubmitOrder->editInfo(['status' => 2, 'ID' => $submitOrderId]);
  200. return Util::returnArrEr($msg, $errorReturn);
  201. }
  202. $outSideSubmitOrder->editInfo(['status' => 1, 'ID' => $submitOrderId]);
  203. //获取短信内容,同时模拟插入发送短信履历
  204. $order_id_array = explode(",", $result['data']);
  205. $send_message = $this->getSendMessageAndSimulateSend($order_id_array[0]);
  206. return $this->orderDetail(['corpOrderId' => $params['orderInfo']['zybOrderCode'], 'send_message' => $send_message]);
  207. }
  208. /**
  209. * 获取短信信息并发送
  210. * @param $order_id
  211. * @return string
  212. */
  213. public function getSendMessageAndSimulateSend($order_id)
  214. {
  215. $msg = new OperaMessageTemplate();
  216. $res = $msg->otaGetMsgInfo($order_id);
  217. if (!isset($res["code"]) || $res["code"] != 0) {
  218. return "获取短信错误,请联系客服!!!";
  219. } else {
  220. $current_time = date("Y-m-d H:i:s");
  221. $send_message = $res["content"];
  222. $send_tel = $res["mobile"];
  223. $send_msg_values = [
  224. 'ORDER_ID' => $order_id,
  225. 'SEND_MOBILE' => $send_tel,
  226. 'SEND_MESSAGE' => $send_message,
  227. 'SEND_TIME' => $current_time,
  228. 'SEND_ERROR' => 1,
  229. 'CREATE_USER_ID' => 2,
  230. 'CREATE_TIME' => $current_time,
  231. 'UPDATE_USER_ID' => 2,
  232. 'UPDATE_TIME' => $current_time
  233. ];
  234. $msgRecord = new OrderSendMessage();
  235. $msgRecord->attributes = $send_msg_values;
  236. $res = $msgRecord->insert();
  237. return $send_message;
  238. }
  239. }
  240. /**
  241. * Des:下单参数校验并返回整理后的数据
  242. * Name: checkOrderParams
  243. * @param $params
  244. * @return array
  245. * @author 倪宗锋
  246. */
  247. public function checkOrderParams($params)
  248. {
  249. if (empty($params['orderInfo']['zybOrderCode'])) {
  250. return Util::returnArrEr('params error', '', '301');
  251. }
  252. if (empty($params['orderDetail']['zybPrice'])) {
  253. return Util::returnArrEr('params error', '', '301');
  254. }
  255. if (empty($params['orderDetail']['zybTotalPrice'])) {
  256. return Util::returnArrEr('params error', '', '301');
  257. }
  258. if (empty($params['orderDetail']['num'])) {
  259. return Util::returnArrEr('params error', '', '301');
  260. }
  261. //购买的产品数量
  262. $prod_info = [
  263. 'total_money' => 0,
  264. 'price' => 0,
  265. 'prod_cnt' => 0,
  266. 'passenger_info' => []
  267. ];
  268. #产品信息
  269. $prod_info['price'] = $params['orderDetail']['zybPrice'];
  270. $prod_info['total_money'] = $params['orderDetail']['zybTotalPrice'];
  271. $prod_info['prod_cnt'] = $params['orderDetail']['num'];
  272. if($params['orderDetail']['credentials'] != null) {
  273. foreach ($params['orderDetail']['credentials'] as $val) {
  274. #出行人信息
  275. $pass = [
  276. 'passenger_name' => $val['name'],
  277. 'passenger_cardid' => $val['idCard'],
  278. ];
  279. $pass_str = $val['name'] . '*' . $val['idCard'];
  280. $prod_info['passenger_info'][] = $pass;
  281. if (empty($prod_info['passenger_str'])) {
  282. $prod_info['passenger_str'] = $pass_str;
  283. } else {
  284. $prod_info['passenger_str'] .= '/' . $pass_str;
  285. }
  286. }
  287. }
  288. return Util::returnArrSu('', $prod_info);
  289. }
  290. /**
  291. * Des:出票信息
  292. * Name: orderDetail
  293. * @param $params
  294. * @return array
  295. * @author 倪宗锋
  296. */
  297. public function orderDetail($params)
  298. {
  299. if (empty($params['corpOrderId'])) {
  300. return Util::returnArrEr('params error', '', '301');
  301. }
  302. $orderMain = new OrderMain();
  303. $checkOutsideOrderNo = $orderMain->checkOutsideOrderNo($params['corpOrderId'], ZybBusUtil::util()->getSupplierId());
  304. if (empty($checkOutsideOrderNo['0']['order_id'])) {
  305. return Util::returnArrEr('order not exist', '', '301');
  306. }
  307. /*******设置订单状态**********/
  308. $message = '';
  309. if (in_array($checkOutsideOrderNo['0']['order_status'], [146, 117, 314])) {
  310. $order_status = 2;
  311. } else if ($checkOutsideOrderNo['0']['order_status'] == 148) {
  312. $order_status = 5;
  313. } else {
  314. $order_status = 4;
  315. $message = '未支付';
  316. }
  317. #获取出行人 信息
  318. $order_id = $checkOutsideOrderNo['0']['order_id'];
  319. $orderCustomer = new OrderCustomerInfo();
  320. $getCustomer = $orderCustomer->getCustomer($order_id);
  321. $tickets = [];
  322. foreach ($getCustomer as $val) {
  323. $array = [
  324. 'certificateNo' => $val['cus_id_no'],//乘客证件号码
  325. 'ticketStatus' => $order_status,//订单出票状态,1出票中,2已出票,3 无票,4退票中,5已退票,6退票失败
  326. ];
  327. if (empty($message) == false) {
  328. $array['noTicketReason'] = $message;//无票原因。ticketStatus=3时必填
  329. }
  330. if ($order_status == 2) {
  331. $array['ticketNo'] = $order_id;//出票号
  332. $array['ticketPwd'] = $order_id;//票密码/验证码
  333. }
  334. $tickets[] = $array;
  335. }
  336. //获取出票短信
  337. //返回值
  338. $return = [
  339. 'orderId' => $order_id,
  340. 'corpOrderId' => $params['corpOrderId'],
  341. 'smsTemplate' => $params['send_message'],
  342. 'tickets' => $tickets
  343. ];
  344. return Util::returnArrSu('', $return);
  345. }
  346. }