|
- <?php
-
- namespace backend\modules\api\controllers;
-
- use backend\modules\api\logic\HotelCancelOrder;
- use backend\modules\api\logic\SubmitBusAgentOrder;
- use backend\modules\api\logic\SubmitGroupOrder;
- use backend\modules\api\logic\ModifyBusOrder;
- use backend\modules\api\logic\SubmitOrder;
- use backend\modules\api\models\BaseSupplier;
- use backend\modules\api\models\ErrorOrderLog;
- use backend\modules\api\models\OrderInsuranceConnect;
- use backend\modules\api\util\Util;
- use backend\modules\zzcs\logic\GroupOrderList;
- use backend\modules\api\models\OperaProduct;
- use backend\modules\api\models\OperaProductRun;
- use backend\modules\api\models\OperaTickets;
- use backend\modules\api\models\OrderMain;
- use backend\modules\api\models\RunMain;
- use backend\modules\api\models\RunProd;
- use backend\modules\api\models\ToFrom;
- use common\util\CtripUtil;
- use yii\web\Controller;
- use common\models\Msg;
- use Yii;
- use backend\modules\api\logic\CancelTourist;
- use backend\modules\api\logic\BaseBalance;
- use common\models\Utils;
-
- class SubmitOrderController extends Controller
- {
- public $enableCsrfValidation = false;
-
- /**
- * Function Description:入口
- * Function Name: actionIndex
- *
- * @return string
- *
- * @author 张帅
- */
- public function actionIndex()
- {
- $request = Yii::$app->request;
- $action = $request->post('action');
- $func = 'action';
- $action = explode('_', $action);
- foreach ($action as $key => $vel) {
- $func .= ucfirst($vel);
- }
- if ($action === false || method_exists($this, $func) == false) {
- $json = ['code' => 1, 'info' => '必要参数缺失'];
- return json_encode($json);
- }
- return $this->$func();
- }
-
- /**
- * Function Description:得到票种代售信息(测试接口)
- * Function Name: actionGetTicketAgentInfo
- *
- * @return string
- *
- * @author 温依莅
- */
- public function actionGetTicketAgentInfo()
- {
- $prod_id = Yii::$app->request->post('prod_id');
- $supplier_id = Yii::$app->request->post('supplier_id');
- $user_id = Yii::$app->request->post('user_id');
- $main_corp_id = Yii::$app->request->post('main_corp_id', -1);
- $SubmitBusOrder = new SubmitBusAgentOrder();
- $res = $SubmitBusOrder->getTicketAgentInfo($prod_id, $supplier_id, $user_id, $main_corp_id);
- return json_encode($res);
- }
-
- /**
- * Function Description:提交巴士订单
- * Function Name: actionSubmitBusOrder
- *
- *
- * @author 张帅
- */
- public function actionSubmitBusOrder()
- {
- // $opera_tickets = new OperaTickets();
- // $run_prod = new RunProd();
- // $run_main = new RunMain();
- // $order_main = new OrderMain();
- $agent_obj = new SubmitBusAgentOrder();
- #region 获取参数
- $prod_str = Yii::$app->request->post('prod_str');//购买票种列表 格式为{去程/返程标志(1:去程 2:返程),去程/返程班次ID,票种ID,票种单价,预定数量,车号}...其中车号若不指定则传0或不传
- $order_info_str = Yii::$app->request->post('order_info_str');//'订单信息 {下单用户,会员号,渠道id,渠道订单号,是否预定(0否1是),支付方式(授信275),是否支付(0否1是),业务员}'
- $customer_info_str = Yii::$app->request->post('customer_info_str');//联系人信息,格式为{联系人,联系电话,z证件类型,联系人身份证,备注}
- $order_append_str = Yii::$app->request->post('order_append_str', '{0,0}');//订单附加 ,格式为{门票价格,酒店价格}
- $receiver_value_str = Yii::$app->request->post('receiver_value_str', '{0,0}');//代收,格式为{代收单价,代收总价}
- $is_send_msg = Yii::$app->request->post('is_send_msg', 1);//是否发短信(0否1是) 默认1
- $buy_insurance = Yii::$app->request->post('buy_insurance', 0);//是否购买保险信 默认0 ,内部保险 1,外部保险 2
- $insurance = Yii::$app->request->post('insurance', '');//保险单详细 [{姓名,身份证},{姓名,身份证},{姓名,身份证}] array数组json_encode
- $passenger_info=json_decode(Yii::$app->request->post('passenger_info','[]'),true);//乘车人详细 [{姓名,身份证},{姓名,身份证},{姓名,身份证}] array数组json_encode
- #endregion
-
- // $prod_str = "{1,934866,454959,30.00,1}";
- // $order_info_str = "{1,1,12,123,1,275,1,黄小霞}";
- // $customer_info_str = "{test,,150,,}";
- // $order_append_str = "{0,0}";
- // $receiver_value_str = "{0,0}";
- // $is_send_msg = 0;
-
- #region 0.巴士实名制判断
- // $prod_str_check = substr($prod_str, 1, -1);
- // $prod_str_check = explode(',',explode('}{', $prod_str_check)[0]);
- // if(count($passenger_info)==0 || count($passenger_info) !=$prod_str_check[4]){
- // $result['code'] = '3';
- // $result['info'] = '乘车人信息不全!';
- // return json_encode($result);
- // }
- # endregion
-
- #region 1.获取票种信息
- $prod_arr = $agent_obj->getBusProductList($prod_str);
- if (count($prod_arr) == 0) {
- $result['code'] = '1';
- $result['info'] = '没有选购产品';
- return json_encode($result);
- }
- // return json_encode($prod_arr);
- #endregion
-
- #region 2.获取订单配置数据
- $order_info_arr = $agent_obj->getOrderInfoArray($order_info_str);
- #endregion
-
- #region 3.获取乘客信息
- $customer_info_arr = $agent_obj->getCustomerInfoArray($customer_info_str);
- #endregion
-
- #region 4.获取附属产品
- $order_append_arr = $agent_obj->getOrderAppendArray($order_append_str);
- #endregion
-
- #region 5.获取产品的详细属性
- $run_ticket_arr = [];//班次票种数组
- foreach ($prod_arr as $key => $vel) {
- $run_ticket_one['run_id'] = $vel['run_id'];
- $run_ticket_one['ticket_id'] = $vel['ticket_id'];
- $run_ticket_arr[] = $run_ticket_one;
- }
- $prod_list = $agent_obj->getBusProductListByRunTicket($run_ticket_arr);
-
- #region 判断获取的产品和要下单的产品数量是否一致
- if (count($prod_arr) != count($prod_list)) {
- $result['code'] = '2';
- $result['info'] = '产品有误';
- $result['prod_list'] = $prod_list;
- $result['prod_arr'] = $prod_arr;
- return json_encode($result);
- }
- #endregion
-
- #endregion
-
- #region 6.判断价格
- #endregion
-
- #region 7.检查run_x中是否有班次是否存在
- $date_run_arr = [];//日期-班次数组
- $run_date = '';
- foreach ($prod_list as $key => $vel) {
- $run_date = $vel['run_date'];
- $vel_run_date = substr($vel['run_date'], 0, 7);
- $vel_run_date = str_replace('-', '', $vel_run_date);
- $date_run_arr[$vel_run_date][] = $vel['run_id'];
- }
- $check_run_result = $agent_obj->checkRunX($date_run_arr);
-
- #region 检查run_x数据
- if (!$check_run_result) {
- $result['code'] = '1';
- $result['info'] = '没有班次';
- return json_encode($result);
- }
- #endregion
-
- #endregion
-
- #region 8.获取每个班次的可订座位量
- $run_bus_arr = [];
- foreach ($prod_list as $key => $vel) {
- $run_one['run_id'] = $vel['run_id'];//班次id
- $run_one['run_date'] = substr($vel['run_date'], 0, 7);//班次日期
- $run_one['run_date'] = str_replace('-', '', $run_one['run_date']);//班次日期
- $run_one['seat_type'] = $vel['seat_type'];//座位类型
- $run_one['start_seq_id'] = $vel['start_seq_id'];//开始站顺序号
- $run_one['end_seq_id'] = $vel['end_seq_id'];//结束站顺序号
- $run_one['seat_count'] = $run_one['end_seq_id'] - $run_one['start_seq_id'];//途径个数
- $run_one['ticket_id'] = $vel['ticket_id'];
- $run_one['num'] = $prod_arr[$vel['ticket_id']]['num'];
- $run_one['bus_order_id'] = $prod_arr[$vel['ticket_id']]['bus_order_id'];
- $run_bus_arr[] = $run_one;
- }
- $run_bus_seat = $agent_obj->getRunBusSeat($run_bus_arr);
-
- #region 检查库存
- if (!$run_bus_seat) {
- $result['code'] = '1';
- $result['info'] = '库存不足';
- return json_encode($result);
- }
- #endregion
-
- #endregion
-
- #region 9.连坐优先分配座位
- $seat_arr = $agent_obj->getSeatArray($run_bus_seat, $prod_arr);
- #endregion
-
- #region 10.获取订单价格信息(包含代收价)
- $prod_list_arr = $agent_obj->getBusProductListReceiver($prod_list, $receiver_value_str, $prod_arr);
- #endregion
-
- #region 11.判断整合代收信息
-
- $res = $agent_obj->getFinalProductList($prod_list_arr, $order_info_arr['outside_sale_org_id'], $order_info_arr['outside_order_no'], $order_info_arr['user_id']);
- if ($res['code'] != '0') {
- $result['code'] = '1';
- $result['info'] = '存在不可售票种';
- $result['error_info'] = $res['info'];
- return json_encode($result);
- }
- #endregion
-
- #region 11.下单插入数据
- $result = $agent_obj->submitBusOrder($prod_list_arr, $seat_arr, $order_info_arr, $customer_info_arr, $order_append_arr, $is_send_msg, $buy_insurance);
- #endregion
-
- #region 12.记录乘客身份证信息
- if(count($passenger_info)!=0) {
- $insert_passenger_info = $agent_obj->IstPassengerInfo($result['data'], $passenger_info);
- if (!$insert_passenger_info) {
- $order_main = new OrderMain();
- $memo = $customer_info_arr['customer_memo'] . ' 乘车人身份证录入错误!';
- $order_main::updateAll( ['customer_memo' => $memo],['order_id' => $result['data']]);
- }
- }
- #endregion
-
- #region 13.下保险单 不论成功失败 不影响正常订单流程
- if ($buy_insurance !=0 && $insurance != '' && $result['code'] == 0) {
- $insuraceData = [
- #请求头
- 'auth_code' => Yii::$app->request->post('auth_code'),
- 'user_key' => Yii::$app->request->post('user_key'),
- 'user' => Yii::$app->request->post('user'),
- 'user_id' => Yii::$app->request->post('user_id'),
- 'request_time' => Yii::$app->request->post('request_time'),
- #报文体
- 'order_info_arr' => json_encode($order_info_arr),
- 'bus_order_id' => $result['data'],
- 'insurance' => $insurance,
- 'action' => 'add_insurance'
- ];
- Utils::httpRequestForasyn('http://' . CS1_DOMAIN . '/api/submit-order', $insuraceData);
- }
- #endregion
- #region 14.订单相关后续操作
- #判断下单渠道是否需要预付#
- $order_id_arr = explode(',', $result['data']);
- $submit_order=new SubmitOrder();
- foreach ($order_id_arr as $val) {
- #插入渠道商预付记录
- $submit_order->SupplierBalance($val,1,'巴士订单支付');
- #判断是否要录入检票信息
- $submit_order->CheckTicketByOrder($val,$order_info_arr['user_id']);
- }
- #endregion
- return json_encode($result);
- }
-
- /**
- * Des:新增订单保险单
- * Name: actionAddInsurance
- * @author 倪宗锋
- */
- public function actionAddInsurance()
- {
- /**1、获取参数*/
- $order_info_arr = Yii::$app->request->post('order_info_arr');//订单配置数据
- $bus_order_id = Yii::$app->request->post('bus_order_id', '');//巴士订单ID
- $insurance = Yii::$app->request->post('insurance', ''); //保险人列表
- $tourist_id = Yii::$app->request->post('tourist_id', ''); //有tourist_id的是自由行过来的保险,没有的是车票的保险
- /**2、校验参数*/
- if (empty($order_info_arr) || empty($bus_order_id) || empty($insurance)) {
- $result['code'] = '1';
- $result['info'] = '参数错误!';
- return json_encode($result);
- }
- $agent_obj = new SubmitBusAgentOrder();
- if($tourist_id == ''){
- //车票过来的保险下单
- $agent_obj::addInsurance(json_decode($order_info_arr, true), $bus_order_id, json_decode($insurance, true));
- }else{
- //自由行保险
- $agent_obj::addFreeWalkInsurance(json_decode($order_info_arr, true), $bus_order_id, json_decode($insurance, true),$tourist_id);
- }
-
- $result['code'] = '0';
- $result['info'] = '执行结束!';
- return json_encode($result);
- }
-
- /**
- * Function Description:巴士订单修改接口
- * Function Name: actionModifyBusOrder
- *
- * @return string
- *
- * @author 温依莅
- */
- public function actionModifyBusOrder()
- {
-
- $GroupModify = new ModifyBusOrder();
-
- //获取参数
- $order_id = Yii::$app->request->post('order_id', -1);//需要修改巴士订单号
- $prod_str = Yii::$app->request->post('prod_str', -1);//巴士产品修改信息json:{"to_go":1,"run_id":"907812","prod_id":"453300","order_price":"33.94","bus_people_num":3,"bus_order_id":0}
- $order_info_str = Yii::$app->request->post('order_info_str', -1);//巴士订单信息json:{"modify_user_id":"1","member_id":0,"outside_sale_org_id":"75","outside_order_no":"","is_book":0,"pay_type":275,"is_pay":1,"sales_man":"业务员"}
- $customer_info_str = Yii::$app->request->post('customer_info_str', -1);//顾客信息json:{"customer_name":"测试员","customer_phone":"15753206507","customer_id_type":"150","customer_id_no":"","customer_remark":""}
- $order_append_str = Yii::$app->request->post('order_append_str', json_encode(array('gate_price' => 0, 'hotel_price' => 0)));//附加信息json:门票价格,酒店价格{'gate_price':0,'hotel_price':0}
- $receiver_value_str = Yii::$app->request->post('receiver_value_str', json_encode(array('sin_rec_value' => 0, 'total_rec_value' => 0)));//代收价格array:代售单价,代售总价{'sin_rec_value' : 0, 'total_rec_value' : 0}
-
- if ($order_id == -1 || $prod_str == -1 || $order_info_str == -1 || $customer_info_str == -1) {
- $json = array();
- $json['code'] = 1;
- $json['info'] = '参数有误';
- return json_encode($json);
- }
- //调用ModifyBusOrder的ModifyBusHub方法处理修改请求
- $result = $GroupModify->ModifyBusHub($order_id, json_decode($prod_str, true), json_decode($order_info_str, true), json_decode($customer_info_str, true), json_decode($order_append_str, true), json_decode($receiver_value_str, true));
- return json_encode($result);
- }
-
- /**
- * Function Description:巴士订单退票
- * Function Name: actionCancelBusOrder
- *
- * @return string
- *
- * @author 张帅
- */
- public function actionCancelBusOrder()
- {
- $order_main = new OrderMain();
- $to_from = new ToFrom();
-
- #region 获取参数
- $order_id = Yii::$app->request->post('order_id', '');//订单号(必传)
- $user_id = Yii::$app->request->post('user_id', 2);//用户id 默认1
- $if_link = Yii::$app->request->post('if_link', 0);//是否一起退单 0是1否 默认0
- $cancel_reason = Yii::$app->request->post('cancel_reason', '系统退单');//退票原因 默认:系统退单
- //$opera_platform = Yii::$app->request->post('opera_platform', '统一退票');//操作平台 默认:cs
- #endregion
- if ($order_id == "") {
- return json_encode(["code" => "1", "info" => "缺少订单号"]);
- }
- $order_id_arr = [];//订单id数组
- $line_type = 'single';
-
- //判断用户是否有退票权限及该票是否是销售终端
- $check_cancel = $order_main->check_cancel($order_id);
- if ($check_cancel != 1) {
- $result['code'] = '1';
- $result['info'] = '无退票权限';
- return json_encode($result);
- }
- #region 判断是否一起退票
- if ($if_link == 0) {
- #region 查询是否为往返单
- $order_to_from = $to_from->getToFromOrder($order_id);
- count($order_to_from) == 0 ? $order_id_array[] = $order_id : $order_id_array = array_merge($order_to_from);
- foreach ($order_id_array as $key => $vel) {
- $order_id_arr[$vel] = $vel;
- }
- #endregion
- } else {
- $order_id_arr[$order_id] = $order_id;
- }
- #endregion
-
- #region 判断线路类型是单一还是组合
- $line_info = $order_main->getOrderLineIdCount($order_id_arr);
- #endregion
-
- #region 判断订单是否已失效
- foreach ($line_info as $key => $vel) {
- if ($vel['order_valid_status'] == 0) {
- unset($order_id_arr[$key]);
- } else {
- if ($vel['line_id'] == 0 || $vel['line_type'] == 255 || $vel['line_type'] == 256) {
- $line_type = 'single';
- } else {
- $line_type = 'group';
- }
- }
- }
-
- if (count($order_id_arr) == 0) {
- $result['code'] = '0';
- $result['info'] = '订单已取消';
- return json_encode($result);
- }
- #endregion
-
- if ($line_type == 'single') {//单一线路
- #region 获取订单所属的班次信息
- $order_run_info = $order_main->getOrderRunInfo($order_id_arr);
- #endregion
-
- #region 取消单一订单
- $result = $order_main->cancelSingleBusOrder($order_id_arr, $order_run_info, $user_id, $cancel_reason);
- #endregion
- // if ($result['code'] == 0 && $user_id != 698) {
- // #region 微信车票订单通知微信端
- // $outside_sale_org_id = $order_main->getOutsideSaleOrgId($order_id_arr);
- // if ($outside_sale_org_id == 164) {
- // $util = new Util();
- // //微信渠道
- // foreach ($order_id_arr as $val) {
- // $cancel_push = $util::interfaceZzcx($val, 1);
- // //推送错误记录错误
- // if ($cancel_push['code'] != 0) {
- // $error_order_info = new ErrorOrderLog();
- // if (isset($cancel_push['info'])) {
- // $error_msg = $cancel_push['info'];
- // } else {
- // $error_msg = '';
- // }
- // $error_order_info->istOrderLog($val, '微信车票订单通知微信端返回值错误 ' . $error_msg);
- // }
- // }
- // }
- // #endregion
- // }
-
- #region 保险退单 //update : fuhc 2017-10-23
- $order_insurance_connect = new OrderInsuranceConnect();
- $config = Yii::$app->params;
- foreach ($order_id_arr as $order_key => $order_val) {
- $res = $order_insurance_connect->getOneInfo($order_val);
- if ($res) {
- //将保险退掉 --- 门票退单
- $sub = new SubmitOrder();
- $order_id_ary = [];
- foreach ($res as $key => $val) {
- $order_id_ary[] = $val['insurance_order_id'];
- $sub->CancelTicketOrder([
- "order_id" => $val['insurance_order_id'],
- "user_id" => $user_id,
- "cancel_reason" => $cancel_reason
- ]);
- }
- $order_id_cstr = implode(',', $order_id_ary);
- //发送取消保险短信通知
- if (empty($config['YunYinPhone']) == false) {
- foreach ($config['YunYinPhone'] as $phone) {
- $msg = "巴士订单({$order_val})退掉了保险订单,单价3元。系统订单号:" . $order_id_cstr . "。请及时确认及取消订单。。";
- Msg::sendTelMsg($phone, $msg);
- }
- }
- }
- }
- #endregion
- #region 插入记录和供应商余额接口
- #判断下单渠道是否需要预付#
- $submit_order=new SubmitOrder();
- $submit_order->SupplierBalance($order_id,2,'巴士订单取消');
- #endregion
- } else {//组合线路
- $result['code'] = '1';
- $result['info'] = '暂不支持组合线路退单';
- return json_encode($result);
- }
-
- return json_encode($result);
- }
-
- /**
- * Function Description:修改订单成本价
- * Function Name: actionUpdateBasePrice
- *
- * @return bool
- *
- * @author 张帅
- */
- public function actionUpdateBasePrice()
- {
- $order_main = new OrderMain();
-
- #region 获取参数
- $order_id = Yii::$app->request->post('order_id');//订单id
- $people_num = Yii::$app->request->post('people_num');//人数
- $base_price = Yii::$app->request->post('base_price');//成本价
- #endregion
-
- $result = $order_main->updateBasePrice($order_id, $people_num, $base_price);
- return $result;
- }
-
- /**
- * Function Description:提交门票订单
- * Function Name: actionSubmitTicketOrder
- *
- * @return string
- *
- * @author 张帅
- */
- public function actionSubmitTicketOrder()
- {
- $order_main = new OrderMain();
- $opera_product = new OperaProduct();
- $opera_product_run = new OperaProductRun();
-
- #region 获取参数
- $main_prod_id = Yii::$app->request->post('main_prod_id');//主票种id
- $run_date = Yii::$app->request->post('run_date');//出行日期
- $prod_str = Yii::$app->request->post('prod_str');//购买票种列表 格式为{子票种ID,票种单价,预定数量}...
- $order_info_str = Yii::$app->request->post('order_info_str');//'订单信息 {下单用户,会员号,渠道id,渠道订单号,是否自动退票(0否1是),支付方式(授信275),是否支付(0否1是),业务员}'
- $customer_info_str = Yii::$app->request->post('customer_info_str');//联系人信息,格式为{联系人,联系电话,z证件类型,联系人身份证,备注}
- $receiver_value_str = Yii::$app->request->post('receiver_value_str');//代收,格式为{代收单价,代收总价}
- #endregion
-
- #region 1.获取票种信息
- $prod_arr = $opera_product->getTicketProductList($prod_str);
- if (count($prod_arr) == 0) {
- $result['code'] = '1';
- $result['info'] = '没有选购产品';
- return json_encode($result);
- }
- #endregion
-
- #region 2.获取订单配置数据
- $order_info_arr = $order_main->getOrderInfoArray($order_info_str);
- $to_org_id = $order_info_arr['outside_sale_org_id'];
- #endregion
-
- #region 3.获取乘客信息
- $customer_info_arr = $order_main->getCustomerInfoArray($customer_info_str);
- #endregion
-
- #region 4.获取主订单数据详情
- $main_prod = $opera_product->getTicketMainProductListByProdId($main_prod_id);
- if (count($main_prod) == 0) {
- $result['code'] = '1';
- $result['info'] = '产品有误';
- return json_encode($result);
- }
- #endregion
-
- #region 5.获取产品的详细属性
- $prod_list = $opera_product_run->getTicketProductListByTicketDate($main_prod_id, $run_date, $prod_arr,$to_org_id);
-
- #region 判断获取的产品和要下单的产品数量是否一致
- if (isset($prod_list['code']) && $prod_list['code'] == 1) {
- return json_encode($prod_list);
- }
- #endregion
-
- #endregion
-
- #region 6.获取代收价及主订单部分信息
- $prod_list_result = $order_main->getTicketProductListReceiver($prod_list, $receiver_value_str);
- $prod_list = $prod_list_result['prod_list'];
- $main_prod += $prod_list_result['main_order_info'];
- $main_prod['run_date'] = $run_date;
- #endregion
-
- #region 7.下单插入数据
- $result = $order_main->submitTicketOrder($main_prod, $prod_list, $order_info_arr, $customer_info_arr);
- #endregion
-
- return json_encode($result);
- }
-
- /**
- * Function Description:门票退单
- * Function Name: actionCancelTicketOrder
- *
- * @return string
- *
- * @author 张帅
- */
- public function actionCancelTicketOrder()
- {
- $order_id = Yii::$app->request->post('order_id');//订单号(必传)
- $user_id = Yii::$app->request->post('user_id', 1);//用户id 默认1
- $cancel_reason = Yii::$app->request->post('cancel_reason', '系统退单');//退票原因 默认:系统退单
- $sub = new SubmitOrder();
- $result = $sub->CancelTicketOrder([
- "order_id" => $order_id,
- "user_id" => $user_id,
- "cancel_reason" => $cancel_reason
- ]);
- return json_encode($result);
- }
-
- /**
- * Function Description:提交组合订单
- * Function Name: actionSubmitGroupOrder
- *
- * @return string
- *
- * @author 张帅
- */
- public function actionSubmitGroupOrder()
- {
- $submit_group_order = new SubmitGroupOrder();
- $group_order_list = new GroupOrderList();
- // $a=json_decode('{"product_name":"\u676d\u5dde-\u4e4c\u9547(HZWZ-CZ001)+\u6d4b\u8bd5\u65b0\u95e8\u7968","bus_product":"[{\"run_id\":\"943601\",\"ticket_id\":\"452870\",\"prod_num\":\"1\",\"prod_price\":480}]","hotel_product":"","ticket_product":"[{\"ticket_id\":\"3873777\",\"run_date\":\"2018-03-09\",\"son_ticket\":[{\"son_ticket_id\":\"3873784\",\"prod_num\":\"1\",\"prod_price\":\"100.00\"}]}]","customer_info":"{\"customer_name\":\"\u6d4b\u8bd5\u5a04\",\"customer_mobile\":\"18616307052\",\"customer_id_type\":\"150\",\"customer_id_no\":\"430321\",\"customer_memo\":\"\"}","order_info":"{\"user_id\":\"263\",\"member_id\":\"263\",\"outside_sale_org_id\":\"164\",\"outside_sale_order_no\":\"15620\",\"order_book_status\":0,\"pay_type\":275,\"order_pay_status\":1,\"sales_man\":\"\"}","group_order_price":"500","action":"submit_group_order"}',true);
- //
- // Yii::$app->request->setBodyParams($a);
-
- #region 1,获取参数
- $product_name = Yii::$app->request->post('product_name', '未命名组合产品');//产品名称
- $bus_product = Yii::$app->request->post('bus_product', '');//巴士订购产品
- $hotel_product = Yii::$app->request->post('hotel_product', '');//酒店订购产品
- $ticket_product = Yii::$app->request->post('ticket_product', '');//门票订购产品
- $customer_info = Yii::$app->request->post('customer_info', '');//顾客信息
- $order_info = Yii::$app->request->post('order_info', '');//订单基础信息
- $group_order_price = Yii::$app->request->post('group_order_price');//组合产品总价格
- $tourist_mark = Yii::$app->request->post('tourist_mark', 0);//标志该组合下单是否是自由行产品下单:0表示否,如是则传组合产品的ID值 tourist_id
- $tourist_org_id = Yii::$app->request->post('tourist_org_id', 0);//自由行产品销售渠道id,区别于order_info里的outside_sale_org_id[运营主体所对应]内部采购渠道id
- $tourist_extra_info = Yii::$app->request->post('tourist_extra_info', json_encode(array('adult_num' => 0, 'child_num' => 0)));//自由行产品下单其他参数(成人,儿童数)
- $passenger_info=json_decode(Yii::$app->request->post('passenger_info','[]'),true);//乘车人详细 [{姓名,身份证},{姓名,身份证},{姓名,身份证}] array数组json_encode
- $insurance = Yii::$app->request->post('insurance', '');
- $buy_insurance = Yii::$app->request->post('buy_insurance', 0);//是否购买保险,0:不购买,1:购买
- #endregion
-
- $order_info_arr = json_decode($order_info, true); //订单基础信息数组
- #region 2,检查数据,并对酒店产品添加佣金相关参数
- if ($tourist_mark && !$tourist_org_id) {
- $result = array();
- $result['code'] = '1';
- $result['info'] = '该组合产品无渠道数据';
- return json_encode($result);
- }
-
- $result_data = $submit_group_order->checkSubmitData($product_name, $bus_product, $hotel_product, $ticket_product, $customer_info, $order_info, $group_order_price, $tourist_mark, $tourist_org_id, $tourist_extra_info,$passenger_info);
- if (isset($result_data['code']) && $result_data['code'] == '1') {
- return json_encode($result_data);
- }
- //如果有酒店产品,得到酒店产品的相关佣金参数
- if ($hotel_product) {
- $hotel_product = $submit_group_order->getHotelCommission($hotel_product, $order_info_arr['outside_sale_org_id']);
- }
-
- #endregion
-
- #region 3,※根据财务规则重新计算子订单价格【对组合产品($tourist_mark非0)情形不计算,只在普通组合产品下单使用】
- $user_id = $order_info_arr['user_id'];
- $finance_info=[];
- if (!$tourist_mark) {
- $prod_info = array(
- 'bus_arr' => json_decode($bus_product, true),
- 'hotel_arr' => json_decode($hotel_product, true),
- 'ticket_arr' => json_decode($ticket_product, true),
- 'group_order_price' => $group_order_price,
- 'channel_id' => $order_info_arr['outside_sale_org_id'],
- 'user_id' => $user_id,
- );
- $finance_compute = $group_order_list->countCost($prod_info);
- if (!isset($finance_compute['code']) || $finance_compute['code'] != '0') {
- return json_encode($finance_compute);
- }
-
- $finance_info = $finance_compute['info_arr'];//财务信息,用于组合下单后插入财务信息
- $prod_list = $finance_compute['prod_list'];//根据财务规则重新计算后的子订单价格
-
- //刷新 $submit_group_order 类的product_info属性
- $result_refresh = $submit_group_order->checkSubmitData($product_name, json_encode($prod_list['bus_arr']), json_encode($prod_list['hotel_arr']), json_encode($prod_list['ticket_arr']), $customer_info, $order_info, $group_order_price, $tourist_mark, $tourist_org_id, $tourist_extra_info);
- if (isset($result_refresh['code']) && $result_refresh['code'] == '1') {
- return json_encode($result_refresh);
- }
- }
- #endregion
-
- #region 4,获取订单配置
- $submit_group_order->getOrderMainBase();//订单配置数据
- #endregion
-
- #region 5,检验并获取巴士数据详情
- $bus_result = $submit_group_order->getBusOrderData();
- if (isset($bus_result['code']) && $bus_result['code'] == '1') {
- return json_encode($bus_result);
- }
- #endregion
-
- #region 6,检验并获取酒店数据详情
- $hotel_result = $submit_group_order->getHotelOrderData();
- if (isset($hotel_result['code']) && $hotel_result['code'] == '1') {
- return json_encode($hotel_result);
- }
- #endregion
-
- #region 7,检验并获取门票数据详情
- $ticket_result = $submit_group_order->getTicketOrderData();
- if (isset($ticket_result['code']) && $ticket_result['code'] == '1') {
- return json_encode($ticket_result);
- }
- #endregion
-
- #region 8,获取唯一键值并补充主订单配置
- $unique_result = $submit_group_order->getUniqueId();
- if (isset($unique_result['code']) && $unique_result['code'] != '0') {
- return json_encode($unique_result);
- }
- #endregion
-
- #region 9,获取订单提交数据配置
- $submit_group_order->getSubmitGroupOrderData();
- #endregion
-
- #region 10,提交订单
- //判断是否购买保险
- if($buy_insurance==1){
- $submit_group_order->order_title_base['is_buy_insurance']=1;
- }else{
- $submit_group_order->order_title_base['is_buy_insurance']=0;
- }
- $result_sub = $submit_group_order->submitGroupOrder();
- if ($result_sub['code'] != '0') {
- return json_encode($result_sub);
- }
- #endregion
- #region 12,※插入供应商余额
- //供应商余额插入
- $submit_group_order->insertBalance($result_sub['order_title_id']);
-
- #endregion
- #region 11,※插入财务信息(部分组合下单后续操作)【$tourist_mark为真情况下不插入财务信息】
- $result = $group_order_list->InsertGroupCost($result_sub, $finance_info, $user_id, $tourist_mark);
-
- #endregion
-
- #region 12,※其他后续处理
- #发送成功短信
- // $url = 'http://' . CS1_DOMAIN . '/api/msg/group-order-send-success-msg';
- // $sendInfo = array();
- // $sendInfo['order_id'] = $result_sub["order_title_id"];
- // Msg::httpRequest($url, $sendInfo);
- #endregion
-
- #region 13.下保险单 不论成功失败 不影响正常订单流程
- if ($buy_insurance !=0 && $insurance != '' && $result['code'] == 0) {
- $insuraceData = [
- #请求头
- 'auth_code' => Yii::$app->request->post('auth_code'),
- 'user_key' => Yii::$app->request->post('user_key'),
- 'user' => Yii::$app->request->post('user'),
- 'user_id' => Yii::$app->request->post('user_id'),
- 'request_time' => Yii::$app->request->post('request_time'),
- #报文体
- 'order_info_arr' => json_encode($order_info_arr),
- 'bus_order_id' => $result_sub["order_title_id"],
- 'insurance' => $insurance,
- 'tourist_id'=>Yii::$app->request->post('tourist_id',''),
- 'action' => 'add_insurance'
- ];
- Utils::httpRequestForasyn('http://' . CS1_DOMAIN . '/api/submit-order/', $insuraceData);
- }
-
- return json_encode($result);
-
- }
-
- /**
- * Function Description:提交组合订单(参考备用)
- * Function Name: actionSubmitGroupOrderBackup
- *
- * @return string
- *
- * @author 张帅
- */
- public function actionSubmitGroupOrderBackup()
- {
- /*$submit_group_order = new SubmitGroupOrder();
- #region 获取参数
- $product_name = Yii::$app->request->post('product_name', '未命名组合产品');//产品名称
- $bus_product = Yii::$app->request->post('bus_product', '');//巴士订购产品
- $hotel_product = Yii::$app->request->post('hotel_product', '');//酒店订购产品
- $ticket_product = Yii::$app->request->post('ticket_product', '');//门票订购产品
- $customer_info = Yii::$app->request->post('customer_info', '');//顾客信息
- $order_info = Yii::$app->request->post('order_info', '');//订单基础信息
- #endregion
-
- #region 检查数据
- $result_data = $submit_group_order->checkSubmitData($product_name, $bus_product, $hotel_product, $ticket_product, $customer_info, $order_info);
- if (isset($result_data['code']) && $result_data['code'] == '1') {
- return json_encode($result_data);
- }
- #endregion
-
- #region 获取订单配置
- $submit_group_order->getOrderMainBase();//订单配置数据
- #endregion
-
- #region 检验并获取巴士数据详情
- $bus_result = $submit_group_order->getBusOrderData();
- if (isset($bus_result['code']) && $bus_result['code'] == '1') {
- return json_encode($bus_result);
- }
- #endregion
-
- #region 检验并获取酒店数据详情
- $hotel_result = $submit_group_order->getHotelOrderData();
- if (isset($hotel_result['code']) && $hotel_result['code'] == '1') {
- return json_encode($hotel_result);
- }
- #endregion
-
- #region 检验并获取门票数据详情
- $ticket_result = $submit_group_order->getTicketOrderData();
- if (isset($ticket_result['code']) && $ticket_result['code'] == '1') {
- return json_encode($ticket_result);
- }
- #endregion
-
- #region 获取唯一键值并补充主订单配置
- $unique_result = $submit_group_order->getUniqueId();
- if (isset($unique_result['code']) && $unique_result['code'] != '0') {
- return json_encode($unique_result);
- }
- #endregion
-
- #region 获取订单提交数据配置
- $submit_group_order->getSubmitGroupOrderData();
- #endregion
-
- #region 提交订单
- $result = $submit_group_order->submitGroupOrder();
- #endregion
-
- return json_encode($result);*/
- }
-
- // 酒店退单接口
- public function actionHotelOrderCancel()
- {
- // $order_id = '1011653';
- // $merge_status = 27;
- $order_id = Yii::$app->request->post('order_id');
- // $merge_status = Yii::$app->request->post('merge_status');
- $user_id = Yii::$app->request->post('user_id', 1);
- $model = new HotelCancelOrder();
- //获取订单基本信息;
- //订单三种预订方法,组合单,录单,直连
- $data = $model->getOrderInfo($order_id);
- //可取消检查
- $checkFlag = $model->checkIfCancel($data);
- if (!$checkFlag) {
- $res['code'] = '2';
- $res['info'] = '该订单不可取消';
- return json_encode($res);
- }
- //556直连 557录单 直连与录单 就多置一个channel_order_status 其余无差别
- // if ($data['docking_type'] == 557) {
- //录单与组合订单
- $res = $model->cancelOrder($data, $user_id);
- return json_encode($res);
- // }
- }
-
- /**
- * Function Description:取消自由行订单统一接口
- * Function Name: actionCancelTourist
- *
- * @return string
- *
- * @author 娄梦宁
- */
- public function actionCancelTourist()
- {
- //身份校验
- // if ($this->actionCheckAuthCode() == false) {
- // $json = ['code' => 1, 'info' => '验证身份失败'];
- // return json_encode($json);
- // }
- $cancelTourist = new CancelTourist();
- $title_id = Yii::$app->request->post('sign',27266);//自由行订单id
- $user_id = Yii::$app->request->post('user_id', 2);//用户id 默认1
- $cancel_reason = Yii::$app->request->post('cancel_reason', '系统退单');//退票原因 默认:系统退单
- $result = $cancelTourist->CancelTouristById($title_id, $user_id, $cancel_reason);
- return json_encode($result);
- }
-
- /**
- * Function Description:验证验证码
- * Function Name: actionCheckAuthCode
- *
- * @return string
- *
- * @author Redstop
- */
- public function actionCheckAuthCode()
- {
- $user = Yii::$app->request->post('user');
- $user_key = Yii::$app->request->post('user_key');
- $request_time = Yii::$app->request->post('request_time');
- $auth_code = Yii::$app->request->post('auth_code');
- //加密规则为 request_time(linux时间戳)前三位 + user + user_key + request_time(linux时间戳)末尾三位,进行MD5加密后,换成大写字母
- $real_auth_code = strtoupper(md5(substr($request_time, 0, 3) . "|" . $user . "|" . $user_key . "|" . substr($request_time, strlen($request_time) - 3, 3)));
- if ($real_auth_code == $auth_code) {
- return true;
- }
- return false;
- }
-
- /**
- * Function Description:处理订单渠道商和供应商的预付款
- * Function Name: SupplierBalance
- *
- *
- * @author 娄梦宁
- */
- public function actionSupplierBalance(){
- $order_id = Yii::$app->request->post('order_id');
- $pay_type = Yii::$app->request->post('pay_type');
- $memo = Yii::$app->request->post('memo');
- $submit_order=new SubmitOrder();
- $submit_order->SupplierBalance($order_id,$pay_type,$memo);
- }
-
- // public function actionCancelForWeChat(){
- // $util=new Util();
- // $order_id=Yii::$app->request->post('order_id');//订单号
- // $result=$util->interfaceZzcx($order_id);
- // return $result;
- // }
-
- public function actionCtripFinish(){
- $otaOrderId=Yii::$app->request->get('otaOrderId');
- $vendorOrderId=Yii::$app->request->get('vendorOrderId');
- $ctrip_util=CtripUtil::NoticeOrderConsumed($otaOrderId,$vendorOrderId,1);
- }
-
- }
|