$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; } }