|
- <?php
- /**
- *
- * ============================================================================
- * * 版权所有 蜘蛛出行 * *
- * 网站地址: http://www.zhizhuchuxing.com
- * ----------------------------------------------------------------------------
- * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
- * 使用;不允许对程序代码以任何形式任何目的的再发布。
- * ============================================================================
- * Author By: 张帅
- * PhpStorm GetBusOrderData.php
- * Create By 2017/4/14 18:18 $
- */
-
- namespace backend\modules\api\logic;
-
- use backend\modules\api\models\BaseArea;
- use backend\modules\api\models\BaseResource;
- use backend\modules\api\models\OperaLine;
- use backend\modules\api\models\OperaTickets;
- use backend\modules\api\models\RunMain;
- use backend\modules\api\models\RunProd;
- use backend\modules\api\models\RunStation;
- use yii\db\Query;
-
- class GetBusOrderData extends Query
- {
- public $bus_product;//巴士产品
-
- public $order_main_base = [];//订单基础配置
-
- public $pay_main_base = [];//主支付记录基础配置
-
- public $pay_detail_base = [];//支付明细
-
- public $user_id;//用户id
-
- public $create_time;//创建时间
-
- /**
- * Function Description:获取巴士产品详情列表
- * Function Name: getBusProductListData
- * @param array $bus_product 巴士选购产品
- *
- * @return array|\yii\db\ActiveRecord[]
- *
- * @author 张帅
- */
- public function getBusProductListData($bus_product)
- {
- #region 1.班次票种筛选条件
- $and_where = [
- 'or',
- ];
- foreach ($bus_product as $key => $vel) {
- $and_where[] = [
- 'and',
- ['=', 'rp.run_id', $vel['run_id']],
- ['=', 'rp.prod_id', $vel['ticket_id']],
- ];
- }
- #endregion
-
- //判断产品中是否有相同班次票种的产品,如果有,返回错误信息
- $check_unique_runticket = array();
- foreach ($bus_product as $key => $vel) {
- $runticket_token = $vel['run_id'] . "-" . $vel['ticket_id'];
- if (in_array($runticket_token, $check_unique_runticket)) {
- $json['code'] = '1';
- $json['info'] = '添加了重复的巴士订单,请仔细检查确认';
- return $json;
- } else {
- $check_unique_runticket[] = $runticket_token;
- }
- }
-
- #region 2.查询结果
- $prod_list = RunProd::find()
- ->select([
- 'run_id' => 'rm.run_id',//班次id
- 'run_date' => 'rm.run_date',//出发日期
- 'run_time' => 'rm.run_time',//出发时间
- 'run_minutes' => 'rm.run_minutes',//出发分钟数
- 'ticket_id' => 'rp.prod_id',//票种id
- 'ticket_name' => 't.ticket_name',//票种名称
- 'seat_type' => 't.seat_type',//座位类型
- 'human_type' => 't.human_type',//人群属性
- 'line_id' => 't.line_id',//线路id
- 'line_name' => 'l.line_name',//线路名称
- 'start_res_id' => 't.start_station_res_id',//上车站id
- 'start_res_name' => BaseResource::find()->select('res_name')->where('res_id = t.start_station_res_id')->limit(1),//上车站name
- 'start_area_id' => 't.start_station_area_id',//出发地id
- 'start_area_name' => BaseArea::find()->select('area_name')->where('id = t.start_station_area_id')->limit(1),//出发地name
- 'start_seq_id' => 's1.station_order_id',//开始站顺序号
- 'start_time' => 's1.start_time',//开始时间
- 'start_minutes' => 's1.start_minutes',//开始分钟数
- 'checkport_res_id' => 's1.checkport_res_id',//检票口id
- 'checkport_res_name' => BaseResource::find()->select('res_name')->where('res_id = s1.checkport_res_id')->limit(1),//检票口name
- 'end_res_id' => 't.end_station_res_id',//下车站id
- 'end_res_name' => BaseResource::find()->select('res_name')->where('res_id = t.end_station_res_id')->limit(1),//下车站name
- 'end_area_id' => 't.end_station_area_id',//目的地id
- 'end_area_name' => BaseArea::find()->select('area_name')->where('id = t.end_station_area_id')->limit(1),//目的地name
- 'end_seq_id' => 's2.station_order_id',//结束站顺序号
- 'end_time' => 's2.start_time',//结束时间
- 'end_minutes' => 's2.start_minutes',//结束分钟数
- 'prod_price' => 't.prod_price',//分销价
- 'cus_price' => 't.cus_price',//零售价
- 'principal_id' => 'l.run_duty_id', //运营负责人
- ])
- ->from(RunProd::tableName() . ' as rp')
- ->leftJoin(RunMain::tableName() . ' as rm', 'rp.run_id = rm.run_id')
- ->leftJoin(OperaTickets::tableName() . ' as t', 'rp.prod_id = t.ticket_id')
- ->leftJoin(OperaLine::tableName() . ' as l', 't.line_id = l.line_id')
- ->leftJoin(RunStation::tableName() . ' as s1', 'rm.run_id = s1.run_id and l.line_id = s1.prod_id and t.start_station_res_id = s1.station_res_id')
- ->leftJoin(RunStation::tableName() . ' as s2', 'rm.run_id = s2.run_id and l.line_id = s2.prod_id and t.end_station_res_id = s2.station_res_id')
- ->where([
- 'and',
- ['=', 'rp.cancel_flag', 0],
- ['=', 't.cancel_flag', 0],
- ['=', 't.is_onsale', 1],
- ])
- ->andWhere($and_where)
- ->indexBy(function ($row) {
- return $row['run_id'] . '-' . $row['ticket_id'];
- })
- ->asArray()->all();
- #endregion
-
- #region 3.整理数据
-
-
- $result = [];
- foreach ($bus_product as $key => $vel) {
- $runticket_token = $vel['run_id'] . "-" . $vel['ticket_id'];
- //判断巴士产品在提交过程中是否有改变
- if (isset($prod_list[$runticket_token])) {
- $prod_one = $prod_list[$runticket_token];
- $prod_one['prod_num'] = $vel['prod_num'];//人数
- $prod_one['price'] = $vel['prod_price'];//价格
- $prod_one['bus_no'] = $vel['bus_no'];//车号
- } else {
- $json['code'] = '1';
- $json['info'] = '巴士产品有误';
- return $json;
- }
- $result[] = $prod_one;
- }
- #endregion
-
- $this->bus_product = $result;
-
- $json['code'] = '0';
- $json['info'] = '成功';
- return $json;
- }
-
- /**
- * Function Description:检验班次是否存在并粗略检查库存
- * Function Name: checkRunX
- *
- * @return bool
- *
- * @author 张帅
- */
- public function checkRunX()
- {
- #region 获取巴士选购产品数据
- $bus_product_info = $this->bus_product;
- #endregion
-
- #region 整理月份相同的班次,节约查询次数
- $run_month = [];
- foreach ($bus_product_info as $key => $vel) {
- $table_name = 'run_' . date('Ym', strtotime($vel['run_date']));
- if (!isset($run_month[$table_name][$vel['run_id']])) {
- $run_month[$table_name][$vel['run_id']] = $vel['prod_num'];
- } else {
- $run_month[$table_name][$vel['run_id']] += $vel['prod_num'];
- }
- }
- #endregion
-
- #region 判断每个班次是否存在run_x
- foreach ($run_month as $key => $vel) {
-
- #region 获取每趟班次的库存
- $query = new Query;
- $check_run = $query
- ->select([
- 'run_id',
- 'toatl_count' => "count(run_id)",
- ])
- ->from($key)
- ->where([
- 'and',
- ['in', 'run_id', array_keys($vel)],
- ['=', 'cancel_flag', 0],
- ['=', 'seat_status', 0],
- ['=', 'order_id', 1],
- ['not in', 'seat_type', [104, 105]],
- ])
- ->groupBy(['run_id'])
- ->indexBy('run_id')
- ->all();
- #endregion
-
- #region 查看每个班次是否存在及库存情况
- foreach ($vel as $k => $v) {
- if (!isset($check_run[$k])) {
- $json['code'] = '1';
- $json['info'] = '巴士班次有误';
- return $json;
- }
- if ($check_run[$k]['toatl_count'] < $v) {
- $json['code'] = '1';
- $json['info'] = '巴士库存不足';
- return $json;
- }
- }
- #endregion
-
- #endregion
- }
- #endregion
-
- $json['code'] = '0';
- $json['info'] = '成功';
- return $json;
- }
-
- /**
- * Function Description:获取巴士产品座位
- * Function Name: getRunBusSeat
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getRunBusSeat()
- {
- #region 获取巴士选购产品数据
- $bus_product_info = $this->bus_product;
- #endregion
-
- #region 整理月份相同的班次,节约查询次数
- $run_month = [];
- foreach ($bus_product_info as $key => $vel) {
- $table_name = 'run_' . date('Ym', strtotime($vel['run_date']));
- $run_month[$table_name][$vel['run_id']] = $vel['run_id'];
- }
- #endregion
-
- #region 获取所有班次的所有座位
- $run_seat_arr = [];
- foreach ($run_month as $key => $vel) {
- $query = new Query;
- $run_seat_one = $query
- ->select([
- 'id',
- 'run_id',
- 'bus_order_id',
- 'seat_x',
- 'seat_y',
- 'seat_type',
- 'seat_seq_id',
- 'seat_name',
- 'seat_status',
- 'order_id',
- ])
- ->from($key)
- ->where([
- 'and',
- ['in', 'run_id', array_keys($vel)],
- ['=', 'cancel_flag', 0],
- ['=', 'seat_status', 0],
- ['not in', 'seat_type', [104, 105]],
- ])
- ->orderBy('bus_order_id ASC,order_id ASC,seat_seq_id ASC')
- ->all();
- #endregion
-
- $run_seat_arr = array_merge($run_seat_arr, $run_seat_one);
- }
- #endregion
-
- #region 整理座位数组
- $run_seat_list = [];
- foreach ($run_seat_arr as $key => $vel) {
- $run_seat_list[$vel['run_id']][$vel['bus_order_id']][$vel['order_id']][$vel['seat_type']][$vel['seat_seq_id']] = $vel;
- }
- #endregion
-
- #region 分配座位
- $result = $this->getBusProductSeat($run_seat_list);
- if (isset($result['code']) && $result['code'] == '1') {
- return $result;
- }
-
- return $this->bus_product;
- #endregion
- }
-
- /**
- * Function Description:巴士分配座位
- * Function Name: getBusProductSeat
- * @param array $run_seat_list 座位表
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getBusProductSeat($run_seat_list)
- {
- #region 获取巴士选购产品数据
- $bus_product_info = $this->bus_product;
- #endregion
-
- #region 遍历所有巴士产品
- foreach ($bus_product_info as $bus_key => $bus_vel) {
- $seat_arr = [];
-
- #region 遍历每条产品数据的车次
- foreach ($run_seat_list[$bus_vel['run_id']] as $seat_key => $seat_vel) {
- $seat_arr = [];
-
- #region 遍历首发站的所有空座
- foreach ($seat_vel[$bus_vel['start_seq_id']][$bus_vel['seat_type']] as $key => $vel) {
-
- $seat_arr[$key] = $vel;
- $seat_arr[$key]['id_arr'][] = $vel['id'];
-
- #region 获取中间站均有空座的座位
- for ($i = $bus_vel['start_seq_id'] + 1; $i < $bus_vel['end_seq_id']; $i++) {
- if (!isset($seat_vel[$i][$bus_vel['seat_type']][$key])) {
- unset($seat_arr[$key]);
- break;
- } else {
- $seat_arr[$key]['id_arr'][] = $seat_vel[$i][$bus_vel['seat_type']][$key]['id'];
- }
- }
- #endregion
- }
- #endregion
-
- if (count($seat_arr) >= $bus_vel['prod_num']) {
- #region 获取座位信息(优先获取连坐)
- $seat_arr = $this->getSeatArray($seat_arr, $bus_vel['prod_num']);
- #endregion
-
- #region 剔除挑出的座位
- foreach ($seat_arr as $key => $vel) {
- for ($i = $bus_vel['start_seq_id']; $i < $bus_vel['end_seq_id']; $i++) {
- unset($run_seat_list[$bus_vel['run_id']][$seat_key][$i][$bus_vel['seat_type']][$key]);
- }
- }
- #endregion
- break;
- }
- }
- #endregion
-
- if (count($seat_arr) != $bus_vel['prod_num']) {
- $json['code'] = '1';
- $json['info'] = '巴士库存不足';
- return $json;
- }
-
- $bus_product_info[$bus_key]['seat_arr'] = $seat_arr;
- }
- #endregion
- $this->bus_product = $bus_product_info;
-
- $json['code'] = '0';
- $json['info'] = '成功';
- return $json;
- }
-
- /**
- * Function Description:获取座位信息(优先获取连坐)
- * Function Name: getSeatArray
- * @param array $seat_arr 座位数组
- * @param int $prod_num 产品数
- *
- * @return array
- *
- * @author 张帅
- */
- public function getSeatArray($seat_arr, $prod_num)
- {
- $result = [];
- $seat_no = [];
- $i = 0;
- #region 连座筛选
- foreach ($seat_arr as $key => $vel) {
- $seat_no[$key - $i][$key] = $vel;
- $i++;
- }
- #endregion
-
-
- #region 挑选座位
- foreach ($seat_no as $key => $vel) {
- if (count($vel) >= $prod_num) {
- $result = array_slice($vel, 0, $prod_num, true);
- break;
- }
- }
-
- if (count($result) == 0) {
- $result = array_slice($seat_arr, 0, $prod_num, true);
- }
- #endregion
-
- return $result;
- }
-
- /**
- * Function Description:获取提交巴士订单数据
- * Function Name: getSubmitBusData
- * @param int $unique_id 唯一主键
- * @param array $order_main_base 订单基础配置
- * @param array $pay_main_base 主支付记录基础配置
- * @param array $pay_detail_base 支付明细
- * @param int $user_id 用户id
- * @param string $create_time 创建时间
- * @param array $bus_product_list 最新巴士数据
- * @return array
- *
- * @author 张帅
- */
- public function getSubmitBusData($unique_id, $order_main_base, $pay_main_base, $pay_detail_base, $user_id, $create_time, $bus_product_list)
- {
- #region 设置常量
- $this->order_main_base = $order_main_base;
- $this->pay_main_base = $pay_main_base;
- $this->pay_detail_base = $pay_detail_base;
- $this->user_id = $user_id;
- $this->create_time = $create_time;
- #endregion
- $this->bus_product = $bus_product_list;
-
- #region 获取巴士选购产品数据
- $bus_product_info = $this->bus_product;
- #endregion
-
- #region 提交订单素材
- $order_main_arr = [];//订单表提交数据
- $main_order_id_arr = [];//巴士订单组
- $run_x_arr = [];//run_x需要修改数据
- $run_bus_arr = [];//run_bus需要修改数据
- $run_prod_arr = [];//run_prod需要修改数据
- $run_stock_arr = [];//run_stock需要更新数据
- $pay_main_arr = [];//主支付记录
- $pay_detail_arr = [];//支付明细
- #endregion
-
- $son_order_id = $unique_id;//巴士子订单起始订单号
-
- #region 遍历主订单
- foreach ($bus_product_info as $main_key => $main_vel) {
-
-
- //$order_id = $pay_main_id + 1;//订单递增id
- $main_order_id = $main_vel['order_id'];//主订单id
- $pay_main_id = $main_order_id;
- #region 主订单数据(如果是代售有多组数据)
- $order_main_one = $this->getMainOrderInfoArray($main_order_id, $pay_main_id, $main_vel);
- #endregion
-
- #region 插入主订单
- foreach ($order_main_one as $ok => $ov) {
- $order_main_arr[] = $ov;
- }
-
-
- $main_order_id_arr[$main_order_id] = $main_order_id;//收集主订单号
- #endregion
-
- #region 遍历子订单
- foreach ($main_vel['seat_arr'] as $son_key => $son_vel) {
-
-
- #region 子订单数据(如果是代售有多组数据)
- $order_main_one = $this->getSonOrderInfoArray($son_order_id, $main_order_id, $pay_main_id, $main_vel, $son_vel);
- #endregion
-
- $son_order_id = $son_order_id + $main_vel['agent_depth'];//子订单号增加(增加agent_depth)
-
- #region 插入子订单
- foreach ($order_main_one as $ok => $ov) {
- $order_main_arr[] = $ov;
- }
- #endregion
-
- #region 获取run_x数据
- $run_x_one = $this->getRunXInfo($order_main_one[0], $son_vel);//取agent_level_1的子订单
- $run_x_arr[] = $run_x_one;
- #endregion
-
- #region 获取run_bus数据
- $run_bus_arr = $this->getRunBusInfo($run_bus_arr, $main_vel['run_id'], $son_vel['bus_order_id']);
- #endregion
- }
- #endregion
-
- #region 获取run_prod数据
- $run_prod_arr = $this->getRunProdInfo($run_prod_arr, $main_vel['run_id'], $main_vel['ticket_id'], $main_vel['prod_num']);
- #endregion
-
- #region 获取run_stock数据
- for ($i = $main_vel['start_seq_id']; $i < $main_vel['end_seq_id']; $i++) {
- $run_stock_arr = $this->getRunStockInfo($run_stock_arr, $main_vel['run_id'], $i, $main_vel['seat_type'], $main_vel['prod_num']);
- }
- #endregion
-
- #region 获取主支付记录数据
- $total_price = $main_vel['prod_num'] * $main_vel['price'];
- $pay_main_one = $this->getPayMainInfo($pay_main_id, $main_order_id, $total_price);
- $pay_main_arr[] = $pay_main_one;
- #endregion
-
- #region 获取支付明细数据
- $pay_detail_one = $this->getPayDetailInfo($pay_main_id, $total_price);
- $pay_detail_arr[] = $pay_detail_one;
- #endregion
-
- $unique_id = $son_order_id;
- }
- #endregion
-
- $result = [
- 'main_order_id_arr' => $main_order_id_arr,//巴士订单号数组
- 'order_main_arr' => $order_main_arr,//订单表数据
- 'run_x_arr' => $run_x_arr,//run_x需要修改数据
- 'run_bus_arr' => $run_bus_arr,//run_bus需要修改数据
- 'run_prod_arr' => $run_prod_arr,//run_prod需要修改数据
- 'run_stock_arr' => $run_stock_arr,//run_stock需要更新数据
- 'pay_main_arr' => $pay_main_arr,//主支付记录
- 'pay_detail_arr' => $pay_detail_arr,//支付明细
- 'unique_id' => $unique_id,//唯一键值
- ];
-
- return $result;
- }
-
-
- #==============================================================================================================================================================================#
- #==============================================================================================================================================================================#
- #==============================================================================================================================================================================#
- #==============================================================================================================================================================================#
- #==============================================================================================================================================================================#
-
- /**
- * Function Description:获取巴士主订单数据
- * Function Name: getMainOrderInfoArray
- * @param int $order_id 订单号
- * @param int $pay_main_id 支付号
- * @param array $main_order 订单信息
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getMainOrderInfoArray($order_id, $pay_main_id, $main_order)
- {
-
- $final = array();//主订单数组,如果是自营票种,只有一个值;如果是代售,则有几层,插几个值
- #region 获取订单配置
- $result = $this->order_main_base;
- #endregion
-
- //1,终端主订单号数组(agent_level_1的主订单)
- $result['ID'] = $main_order['order_id'];//订单号
- $result['ORDER_ID'] = $main_order['order_id'];//订单号
- $order_description = $main_order['ticket_name'] . ',' . date('Y-m-d', time()) . ',' . $main_order['prod_num'] . '|' . $main_order['prod_num'];//订单描述
- $result['ORDER_DESCRIPTION'] = $order_description;//订单描述
- $result['ORDER_PAY_MAIN_ID'] = $main_order['order_id'];//主支付记录id
- $result['PARENT_PROD_ID'] = $main_order['line_id'];//父产品id
- $result['PARENT_PROD_NAME'] = $main_order['line_name'];//父产品名称
- $order_price = $main_order['prod_num'] * $main_order['price'];//订单价格
- $result['ORDER_PRICE'] = $order_price;//订单价格
- $result['ORDER_PROD_TYPE'] = 81;//订单类型
- $result['PROD_START_STATION_CHECKPORT_RES_ID'] = $main_order['checkport_res_id'];//上车站检票口资源ID
- $result['PROD_START_STATION_CHECKPORT_RES_NAME'] = empty($main_order['checkport_res_name']) ? '' : $main_order['checkport_res_name'];//上车站检票口资源名称
- $result['PROD_START_STATION_TIME_MINUTES'] = $main_order['start_minutes'];//上车站发车时间距发车日零点分钟数
- $result['PROD_END_STATION_TIME_MINUTES'] = $main_order['end_minutes'];//下车站发车时间距发车日零点分钟数
-
- $result['OUTSIDE_SALE_ORG_ID'] = $main_order['outside_sale_org_id'];//渠道商ID
- $result['OUTSIDE_ORDER_NO'] = $main_order['outside_order_no'];//渠道订单号
- $result['PROD_TOP_ORG_ID'] = $main_order['prod_top_org_id'];//供应商ID
- $result['PROD_SUPPLY_ORG_NAME'] = $main_order['prod_supply_org_name'];//供应商名字
- $result['SUB_CHANNEL_ID'] = $main_order['sub_channel_id'];//下级渠道id
- $result['SUB_CHANNEL_NO'] = $main_order['sub_channel_no'];//下级渠道订单号
- $result['MAIN_CORP_ID'] = $main_order['main_corp_id'];//订单所属运营主体
- $result['SOURCE_MAIN_CORP_ID'] = $main_order['source_main_corp_id'];//线路所属运营主体
- $result['SALE_PATH'] = $main_order['sale_path'];//销售路径
- $result['AGENT_LEVEL'] = $main_order['agent_level'];//售卖层级:终端1,上一级2,再上一级3
- $result['BASE_PRICE'] = $main_order['total_base_price']; //成本价
- $result['PRINCIPAL_ID'] = $main_order['principal_id']; //运营负责人
-
- $final[] = $result;
- //2,☆☆☆ 如果是代售,插入代售的相关主订单 ☆☆☆
- if ($main_order['is_agent'] == 1) {
- $agent_list = $main_order['agent_list'];
- unset($agent_list[1]);//去掉销售层级1的主订单,前面已插入
- foreach ($agent_list as $ak => $av) {
- $result_new = $this->order_main_base;
- #endregion
-
- //1,终端主订单号数组(agent_level_1的主订单)
- $result_new ['ID'] = $av['order_id'];//订单号
- $result_new ['MAIN_CREATE_USER_ID'] = 2;//代售非终端下单用户为 2-系统自动
- $result_new ['CREATE_USER_ID'] = 2;//代售非终端下单用户为 2-系统自动
- $result_new ['ORDER_ID'] = $av['order_id'];//订单号
- $order_description = $main_order['ticket_name'] . ',' . date('Y-m-d', time()) . ',' . $main_order['prod_num'] . '|' . $main_order['prod_num'];//订单描述
- $result_new ['ORDER_DESCRIPTION'] = $order_description;//订单描述
- $result_new ['ORDER_PAY_MAIN_ID'] = $av['order_id'];//主支付记录id
- $result_new ['PARENT_PROD_ID'] = $main_order['line_id'];//父产品id
- $result_new ['PARENT_PROD_NAME'] = $main_order['line_name'];//父产品名称
- $result_new ['ORDER_PRICE'] = $av['total_order_price'];//订单价格
- $result_new ['ORDER_PROD_TYPE'] = 81;//订单类型
- $result_new ['PROD_START_STATION_CHECKPORT_RES_ID'] = $main_order['checkport_res_id'];//上车站检票口资源ID
- $result_new ['PROD_START_STATION_CHECKPORT_RES_NAME'] = empty($main_order['checkport_res_name']) ? '' : $main_order['checkport_res_name'];//上车站检票口资源名称
- $result_new ['PROD_START_STATION_TIME_MINUTES'] = $main_order['start_minutes'];//上车站发车时间距发车日零点分钟数
- $result_new ['PROD_END_STATION_TIME_MINUTES'] = $main_order['end_minutes'];//下车站发车时间距发车日零点分钟数
-
- $result_new ['OUTSIDE_SALE_ORG_ID'] = $av['outside_sale_org_id'];//渠道商ID
- $result_new ['OUTSIDE_ORDER_NO'] = $av['outside_order_no'];//渠道订单号
- $result_new ['SALES_MAN'] = $av['sales_man'];//业务员
- $result_new ['PROD_TOP_ORG_ID'] = $av['prod_top_org_id'];//供应商ID
- $result_new ['PROD_SUPPLY_ORG_NAME'] = $av['prod_supply_org_name'];//供应商名字
- $result_new ['SUB_CHANNEL_ID'] = $av['sub_channel_id'];//下级渠道id
- $result_new ['SUB_CHANNEL_NO'] = $av['sub_channel_no'];//下级渠道订单号
- $result_new ['MAIN_CORP_ID'] = $av['main_corp_id'];//订单所属运营主体
- $result_new ['SOURCE_MAIN_CORP_ID'] = $av['source_main_corp_id'];//线路所属运营主体
- $result_new ['SALE_PATH'] = $av['sale_path'];//销售路径
- $result_new ['AGENT_LEVEL'] = $av['agent_level'];//售卖层级:终端1,上一级2,再上一级3
- $result_new ['BASE_PRICE'] = $av['total_base_price']; //成本价
- $result_new ['PRINCIPAL_ID'] = isset($av['principal_id']) ? $av['principal_id'] : 0; //运营负责人
-
- $result_new ['ORDER_TITLE_ID'] = 0;//组合产品代售非终端订单此值为0
-
- $final[] = $result_new;
- }
- }
-
- return $final;
- }
-
- /**
- * Function Description:获取巴士子订单数据
- * Function Name: getSonOrderInfoArray
- * @param int $son_order_id 订单号
- * @param int $main_order_id 父订单号
- * @param int $pay_main_id 支付号
- * @param array $main_order 订单信息
- * @param array $seat_info 座位信息
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getSonOrderInfoArray($son_order_id, $main_order_id, $pay_main_id, $main_order, $seat_info)
- {
- $final = array();//子订单数组,如果是自营票种,只有一个值;如果是代售,则有几层,插几个值
-
- #region 获取订单配置
- $result = $this->order_main_base;
- #endregion
- //1,终端子订单号数组(agent_level_1的子订单)
- $result['ID'] = $son_order_id;//订单号
- $result['ORDER_ID'] = $son_order_id;//订单号
- $result['ORDER_PAY_MAIN_ID'] = $main_order_id;//主支付记录id
- $result['PARENT_ORDER_ID'] = $main_order_id;//父订单id
- $result['PROD_ID'] = $main_order['ticket_id'];//子产品id
- $result['PROD_NAME'] = $main_order['ticket_name'];//子产品名称
- $result['PARENT_PROD_ID'] = $main_order['line_id'];//父产品id
- $result['PARENT_PROD_NAME'] = $main_order['line_name'];//父产品名称
- $result['ORDER_PRICE'] = $main_order['price'];//订单价格
- $result['ORDER_PROD_TYPE'] = 82;//订单类型
-
- $result['RUN_BUS_ORDER_ID'] = $seat_info['bus_order_id'];//车号
- $result['RUN_BUS_SEAT_TYPE'] = $seat_info['seat_type'];//座位类型
- $result['RUN_BUS_SEAT_SEQ_ID'] = $seat_info['seat_seq_id'];//座位内部序列ID
- $result['RUN_BUS_SEAT_NAME'] = $seat_info['seat_name'];//座位名称
-
- $result['RUN_ID'] = $main_order['run_id'];//班次
- $result['RUN_DATE'] = $main_order['run_date'];//出行日期
- $result['RUN_DATE_NUM'] = (strtotime($main_order['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24);//班次首发日期参数,发车日期至2016-01-01天数,算法使用,
- $result['RUN_TIME'] = $main_order['run_time'];//出行日期
-
- $result['PROD_START_STATION_RES_ID'] = $main_order['start_res_id'];//上车站id
- $result['PROD_START_STATION_RES_NAME'] = $main_order['start_res_name'];//上车站名称
- $result['PROD_START_STATION_CHECKPORT_RES_ID'] = $main_order['checkport_res_id'];//上车站检票口资源ID
- $result['PROD_START_STATION_CHECKPORT_RES_NAME'] = empty($main_order['checkport_res_name']) ? '' : $main_order['checkport_res_name'];//上车站检票口资源名称
- $result['PROD_START_STATION_SEQ_ID'] = $main_order['start_seq_id'];//上车站点顺序号
- $result['PROD_START_STATION_DATE'] = $main_order['run_date'];//上车站点上车日期
- $result['PROD_START_STATION_DATE_NUM'] = (strtotime($main_order['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24);//上车站距2016-01-01天数
- $result['PROD_START_STATION_TIME'] = $main_order['start_time'];//上车站上车时间
- $result['PROD_START_STATION_TIME_MINUTES'] = $main_order['start_minutes'];//上车站点分钟数
- $result['PROD_START_STATION_AREA_ID'] = $main_order['start_area_id'];//出发地id
- $result['PROD_START_STATION_AREA_NAME'] = $main_order['start_area_name'];//出发地名称
-
- $result['PROD_END_STATION_RES_ID'] = $main_order['end_res_id'];//下车站id
- $result['PROD_END_STATION_RES_NAME'] = $main_order['end_res_name'];//下车站名称
- $result['PROD_END_STATION_SEQ_ID'] = $main_order['end_seq_id'];//下车站点顺序号
- $result['PROD_END_STATION_DATE'] = $main_order['run_date'];//下车站点下车日期
- $result['PROD_END_STATION_DATE_NUM'] = (strtotime($main_order['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24);//下车站距2016-01-01天数
- $result['PROD_END_STATION_TIME'] = $main_order['end_time'];//下车站下车时间
- $result['PROD_END_STATION_TIME_MINUTES'] = $main_order['end_minutes'];//下车站点分钟数
- $result['PROD_END_STATION_AREA_ID'] = $main_order['end_area_id'];//目的地id
- $result['PROD_END_STATION_AREA_NAME'] = $main_order['end_area_name'];//目的地名称
-
- $result['OUTSIDE_SALE_ORG_ID'] = $main_order['outside_sale_org_id'];//渠道商ID
- $result['OUTSIDE_ORDER_NO'] = $main_order['outside_order_no'];//渠道订单号
- $result['PROD_TOP_ORG_ID'] = $main_order['prod_top_org_id'];//供应商ID
- $result['PROD_SUPPLY_ORG_NAME'] = $main_order['prod_supply_org_name'];//供应商名字
- $result['SUB_CHANNEL_ID'] = $main_order['sub_channel_id'];//下级渠道id
- $result['SUB_CHANNEL_NO'] = $main_order['sub_channel_no'];//下级渠道订单号
- $result['MAIN_CORP_ID'] = $main_order['main_corp_id'];//订单所属运营主体
- $result['SOURCE_MAIN_CORP_ID'] = $main_order['source_main_corp_id'];//线路所属运营主体
- $result['SALE_PATH'] = $main_order['sale_path'];//销售路径
- $result['AGENT_LEVEL'] = $main_order['agent_level'];//售卖层级:终端1,上一级2,再上一级3
- $result['BASE_PRICE'] = $main_order['base_price']; //成本价
- $result['PRINCIPAL_ID'] = $main_order['principal_id']; //运营负责人
-
- $final[] = $result;
-
- $son_order_id++;
- //2,☆☆☆ 如果是代售,插入代售的相关子订单 ☆☆☆
- if ($main_order['is_agent'] == 1) {
- $agent_list = $main_order['agent_list'];
- unset($agent_list[1]);//去掉销售层级1的主订单,前面已插入
- foreach ($agent_list as $ak => $av) {
- $result_new = $this->order_main_base;
- #endregion
-
- //1,终端主订单号数组(agent_level_1的主订单)
- $result_new['ID'] = $son_order_id;//订单号
- $result_new ['MAIN_CREATE_USER_ID'] = 2;//代售非终端下单用户为 2-系统自动
- $result_new ['CREATE_USER_ID'] = 2;//代售非终端下单用户为 2-系统自动
- $result_new['ORDER_ID'] = $son_order_id;//订单号
- $result_new['ORDER_PAY_MAIN_ID'] = $main_order_id;//主支付记录id (agent_level 为2或3的代售订单,无单独的pay_main记录,使用终端订单的order_pay_main_id)
- $result_new['PARENT_ORDER_ID'] = $av['order_id'];//父订单id
- $result_new['PROD_ID'] = $main_order['ticket_id'];//子产品id
- $result_new['PROD_NAME'] = $main_order['ticket_name'];//子产品名称
- $result_new['PARENT_PROD_ID'] = $main_order['line_id'];//父产品id
- $result_new['PARENT_PROD_NAME'] = $main_order['line_name'];//父产品名称
- $result_new['ORDER_PRICE'] = $av['price'];//订单价格
- $result_new['ORDER_PROD_TYPE'] = 82;//订单类型
-
- $result_new['RUN_BUS_ORDER_ID'] = $seat_info['bus_order_id'];//车号
- $result_new['RUN_BUS_SEAT_TYPE'] = $seat_info['seat_type'];//座位类型
- $result_new['RUN_BUS_SEAT_SEQ_ID'] = $seat_info['seat_seq_id'];//座位内部序列ID
- $result_new['RUN_BUS_SEAT_NAME'] = $seat_info['seat_name'];//座位名称
-
- $result_new['RUN_ID'] = $main_order['run_id'];//班次
- $result_new['RUN_DATE'] = $main_order['run_date'];//出行日期
- $result_new['RUN_DATE_NUM'] = (strtotime($main_order['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24);//班次首发日期参数,发车日期至2016-01-01天数,算法使用,
- $result_new['RUN_TIME'] = $main_order['run_time'];//出行日期
-
- $result_new['PROD_START_STATION_RES_ID'] = $main_order['start_res_id'];//上车站id
- $result_new['PROD_START_STATION_RES_NAME'] = $main_order['start_res_name'];//上车站名称
- $result_new['PROD_START_STATION_CHECKPORT_RES_ID'] = $main_order['checkport_res_id'];//上车站检票口资源ID
- $result_new['PROD_START_STATION_CHECKPORT_RES_NAME'] = empty($main_order['checkport_res_name']) ? '' : $main_order['checkport_res_name'];//上车站检票口资源名称
- $result_new['PROD_START_STATION_SEQ_ID'] = $main_order['start_seq_id'];//上车站点顺序号
- $result_new['PROD_START_STATION_DATE'] = $main_order['run_date'];//上车站点上车日期
- $result_new['PROD_START_STATION_DATE_NUM'] = (strtotime($main_order['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24);//上车站距2016-01-01天数
- $result_new['PROD_START_STATION_TIME'] = $main_order['start_time'];//上车站上车时间
- $result_new['PROD_START_STATION_TIME_MINUTES'] = $main_order['start_minutes'];//上车站点分钟数
- $result_new['PROD_START_STATION_AREA_ID'] = $main_order['start_area_id'];//出发地id
- $result_new['PROD_START_STATION_AREA_NAME'] = $main_order['start_area_name'];//出发地名称
-
- $result_new['PROD_END_STATION_RES_ID'] = $main_order['end_res_id'];//下车站id
- $result_new['PROD_END_STATION_RES_NAME'] = $main_order['end_res_name'];//下车站名称
- $result_new['PROD_END_STATION_SEQ_ID'] = $main_order['end_seq_id'];//下车站点顺序号
- $result_new['PROD_END_STATION_DATE'] = $main_order['run_date'];//下车站点下车日期
- $result_new['PROD_END_STATION_DATE_NUM'] = (strtotime($main_order['run_date']) - strtotime('2016-01-01')) / (60 * 60 * 24);//下车站距2016-01-01天数
- $result_new['PROD_END_STATION_TIME'] = $main_order['end_time'];//下车站下车时间
- $result_new['PROD_END_STATION_TIME_MINUTES'] = $main_order['end_minutes'];//下车站点分钟数
- $result_new['PROD_END_STATION_AREA_ID'] = $main_order['end_area_id'];//目的地id
- $result_new['PROD_END_STATION_AREA_NAME'] = $main_order['end_area_name'];//目的地名称
-
- $result_new['OUTSIDE_SALE_ORG_ID'] = $av['outside_sale_org_id'];//渠道商ID
- $result_new['OUTSIDE_ORDER_NO'] = $av['outside_order_no'];//渠道订单号
- $result_new['SALES_MAN'] = $av['sales_man'];//业务员
- $result_new['PROD_TOP_ORG_ID'] = $av['prod_top_org_id'];//供应商ID
- $result_new['PROD_SUPPLY_ORG_NAME'] = $av['prod_supply_org_name'];//供应商名字
- $result_new['SUB_CHANNEL_ID'] = $av['sub_channel_id'];//下级渠道id
- $result_new['SUB_CHANNEL_NO'] = $av['sub_channel_no'];//下级渠道订单号
- $result_new['MAIN_CORP_ID'] = $av['main_corp_id'];//订单所属运营主体
- $result_new['SOURCE_MAIN_CORP_ID'] = $av['source_main_corp_id'];//线路所属运营主体
- $result_new['SALE_PATH'] = $av['sale_path'];//销售路径
- $result_new['AGENT_LEVEL'] = $av['agent_level'];//售卖层级:终端1,上一级2,再上一级3
- $result_new['BASE_PRICE'] = $av['base_price']; //成本价
- $result_new ['PRINCIPAL_ID'] = isset($av['principal_id']) ? $av['principal_id'] : 0; //运营负责人
-
- $result_new ['ORDER_TITLE_ID'] = 0;//组合产品代售非终端订单此值为0
- $son_order_id++;
- $final[] = $result_new;
- }
- }
-
- return $final;
- }
-
- /**
- * Function Description:获取run_x要更新的数据
- * Function Name: getRunXInfo
- * @param array $order_main 订单信息
- * @param array $seat_arr 座位信息
- *
- * @return array
- *
- * @author 张帅
- */
- public function getRunXInfo($order_main, $seat_arr)
- {
- $result = [];
-
- $result['run_date'] = $order_main['RUN_DATE'];
- $result['order_main_id'] = $order_main['ORDER_ID'];//订单号
- $result['order_main_prod_id'] = $order_main['PARENT_PROD_ID'];//线路id
- $result['order_prod_id'] = $order_main['PROD_ID'];//票种id
- $result['seat_status'] = 2;//座位状态
- $result['order_lock_user_id'] = $order_main['CREATE_USER_ID'];
- $result['order_lock_time'] = $order_main['CREATE_TIME'];
- $result['run_x_id'] = $seat_arr['id_arr'];
-
- return $result;
- }
-
- /**
- * Function Description:获取run_bus要更新的数据
- * Function Name: getRunBusInfo
- * @param array $run_bus_arr run_bus要更新的数据
- * @param int $run_id 班次id
- * @param int $bus_order_id 车号
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getRunBusInfo($run_bus_arr, $run_id, $bus_order_id)
- {
- if (!isset($run_bus_arr[$run_id . '-' . $bus_order_id])) {
- $run_bus_one = [];
- $run_bus_one['run_id'] = $run_id;//班次id
- $run_bus_one['bus_order_id'] = $bus_order_id;//班次id
- $run_bus_one['update_user_id'] = $this->user_id;//更新用户id
- $run_bus_one['update_time'] = $this->create_time;//更新时间
- $run_bus_one['num'] = 1;//人数
-
- $run_bus_arr[$run_id . '-' . $bus_order_id] = $run_bus_one;//run_bus数据
- } else {
- $run_bus_arr[$run_id . '-' . $bus_order_id]['num']++;//增加人数
- }
-
- return $run_bus_arr;
- }
-
- /**
- * Function Description:获取run_prod要更新的数据
- * Function Name: getRunProdInfo
- * @param array $run_prod_arr run_prod要更新的数据
- * @param int $run_id 班次id
- * @param int $ticket_id 票种id
- * @param int $prod_num 人数
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getRunProdInfo($run_prod_arr, $run_id, $ticket_id, $prod_num)
- {
- if (!isset($run_prod_arr[$run_id . '-' . $ticket_id])) {
- $run_prod = [];
- $run_prod['run_id'] = $run_id;//班次id
- $run_prod['ticket_id'] = $ticket_id;//班次id
- $run_prod['update_user_id'] = $this->user_id;//更新用户id
- $run_prod['update_time'] = $this->create_time;//更新时间
- $run_prod['num'] = $prod_num;//人数
-
- $run_prod_arr[$run_id . '-' . $ticket_id] = $run_prod;//run_prod数据
- } else {
- $run_prod_arr[$run_id . '-' . $ticket_id]['num'] += $prod_num;//增加人数
- }
-
- return $run_prod_arr;
- }
-
- /**
- * Function Description:获取run_stock要更新的数据
- * Function Name: getRunStockInfo
- * @param array $run_stock_arr run_stock要更新的数据
- * @param int $run_id 班次id
- * @param int $seq_id 站点顺序号id
- * @param int $seat_type 座位类型
- * @param int $prod_num 人数
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getRunStockInfo($run_stock_arr, $run_id, $seq_id, $seat_type, $prod_num)
- {
- if (!isset($run_stock_arr[$run_id . '-' . $seq_id . '-' . $seat_type])) {
- $run_stock = [];
- $run_stock['run_id'] = $run_id;//班次id
- $run_stock['seq_id'] = $seq_id;//站点顺序号id
- $run_stock['seat_type'] = $seat_type;//座位类型
- $run_stock['update_user_id'] = $this->user_id;//更新用户id
- $run_stock['update_time'] = $this->create_time;//更新时间
- $run_stock['num'] = $prod_num;//人数
-
- $run_stock_arr[$run_id . '-' . $seq_id . '-' . $seat_type] = $run_stock;//run_stock数据
- } else {
- $run_stock_arr[$run_id . '-' . $seq_id . '-' . $seat_type]['num'] += $prod_num;//增加人数
- }
-
- return $run_stock_arr;
- }
-
- /**
- * Function Description:获取主支付记录数据
- * Function Name: getPayMainInfo
- * @param int $pay_main_id 支付id
- * @param int $order_id 订单id
- * @param double $total_price 总价
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getPayMainInfo($pay_main_id, $order_id, $total_price)
- {
- #region 获取主支付记录配置
- $result = $this->pay_main_base;
- #endregion
-
- $result['ID'] = $pay_main_id;//支付id
- $result['PAY_TOTAL'] = $total_price;//订单id
- $result['ORDER_ID'] = $order_id;//总价
-
- return $result;
- }
-
- /**
- * Function Description:获取支付明细数据
- * Function Name: getPayDetailInfo
- * @param int $pay_main_id 支付id
- * @param double $total_price 总价
- *
- * @return mixed
- *
- * @author 张帅
- */
- public function getPayDetailInfo($pay_main_id, $total_price)
- {
- #region 获取支付明细配置
- $result = $this->pay_detail_base;
- #endregion
-
- $result['ID'] = $pay_main_id;//支付id
- $result['PAY_MAIN_ID'] = $pay_main_id;//订单id
- $result['PAY_MONEY'] = $total_price;//总价
-
- return $result;
- }
- }
|