'empty'), $param); if (!$valid['status']) { $result['code'] = (string)$valid['status']; $result['info'] = $valid['info']; return $result; } $line_id = isset($param['line_id']) ? trim($param['line_id']) : false; $run_date = isset($param['run_date']) ? trim($param['run_date']) : false; if (!$line_id || !$run_date) { $json['code'] = '2'; $json['info'] = '缺少必要参数'; return $json; } //1.获取线路名称 $line_name = $this->getDetailName($line_id); //2.获取销售渠道 $channel_list = $this->getChannelList($line_id); //3.获取开始站点信息 $start_station = $this->getStartStation($line_id, $run_date); //这里判断如果没有数据,返回错误--温依莅 if (!$start_station) { $json['code'] = '2'; $json['info'] = '所选日期没有相关线路'; return $json; } $json['code'] = '0'; $json['info'] = '返回' . $line_id . '数据成果'; $json['line_name'] = $line_name; $json['channel_list'] = $channel_list; $json['start_station'] = $start_station; return $json; } /** * 温依莅 * 根据日期得到有班次的组合线路信息 * @param $web_data * @return array * *成功返回参数 * code(str) * info(str) * product_list(array): * line_id(int) 组合线路id * line_name(str) 组合线路名称 */ public function groupProductList($web_data) { if($web_data['run_date'] <= date('Y-m-d') && empty($web_data['line_id']) == false){//历史订单则线路可以进行规定 //数据查询成功 $json["code"] = '0'; $json["info"] = '组合产品列表'; $json["product_list"][] = array('line_id'=> $web_data['line_id'],'line_name'=> $web_data['line_name']); return $json; } //组合线路产品列表 $run_date = isset($web_data["run_date"]) ? trim($web_data["run_date"]) : false; //判断参数是否缺少 if (false === $run_date) { $json['code'] = '2'; $json['info'] = '缺少必要参数'; return $json; } //判断日期格式正确 $tmp_arr = explode('-', $run_date); $bool = checkdate($tmp_arr[1], $tmp_arr[2], $tmp_arr[0]);//判断日期是否是合法日期 if (!$bool) { $json['code'] = '3'; $json['info'] = '日期格式不正确'; return $json; } $current_page = 1; $page_size = 100; $product_type = 0; $line = null; $json = array(); $sql = "call sp_choice_kicket_group ($this->user_id,$current_page,$page_size,'$line',$product_type,'$run_date')"; zzcsUtils::writeLog($sql); $reset = $this->procQuery($sql); if ($reset === false) { $json["code"] = $reset['code']; $json["info"] = $reset['info']; return $json; } else { //数据查询成功 $json["code"] = '0'; $json["info"] = '组合产品列表'; if (isset($reset['data'][1])) { $product_list = array(); foreach ($reset['data'][1] as $k => $v) { $product_list[$k]['line_id'] = $v['line_id']; //$product_list[$k]['line_code']=$v['line_code']; $product_list[$k]['line_name'] = $v['line_name']; } $json["product_list"] = $product_list; } else { $json["product_list"] = array(); } return $json; } } /** * Function Description:得到所有组合线路列表 * Function Name: getGroupLine * * @return mixed * * @author 温依莅 */ public function getGroupLine() { $sql = "SELECT line_id,line_name FROM `opera_line` WHERE line_type=316 AND IS_ONSALE=1 AND CANCEL_FLAG=0 ORDER BY DISP_ORDER;"; $line_info = $this->query($sql); if (!$line_info) { $json['code'] = '1'; $json['info'] = '数据获取错误'; return $json; } //若查询无信息 if (count($line_info) == 0) { $json['code'] = '1'; $json['info'] = '无符合条件的线路'; //$json['list'] = array(); return $json; } $json['code'] = '0'; $json['info'] = '获取线路成功'; $json['list'] = $line_info; return $json; } /** * Des:根据手机号和日期得到该手机号今日是否下过组合线路订单 * Name: getPurchaseHistory * @param $param * @return mixed * @author 温依莅 */ public function getPurchaseHistory($param) { $valid = zzcsUtils::validateParams(array('tel' => 'tel'), $param); //参数验证 if (!$valid['status']) { $result['code'] = (string)$valid['status']; $result['info'] = $valid['info']; return $result; } $phone = $param['tel']; $sql = "SELECT a.order_id,a.order_description FROM order_main a RIGHT JOIN opera_line b ON a.parent_prod_id = b.line_id WHERE b.line_type=316 AND b.cancel_flag=0 AND b.if_disabled=0 AND b.is_onsale=1 AND a.cancel_flag=0 AND a.customer_mobile='$phone' AND a.order_valid_status=1 AND a.order_status<>148 AND a.parent_order_id=0 AND date_format(now(),'%Y-%m-%d') = date_format(a.create_time,'%Y-%m-%d');"; $history_info = $this->query($sql); if (!$history_info) { $json['code'] = '1'; $json['info'] = '数据库错误'; return $json; } //若查询无信息 if (count($history_info) == 0) { $json['code'] = '1'; $json['info'] = '无符合条件的订单'; //$json['list'] = array(); return $json; } $json['code'] = '0'; $json['info'] = '今日已下过订单'; //$json['list'] = $history_info; return $json; } /**zs * 获取组合线路票种信息 * @param $param */ public function getTicketType($param) { $line_id = isset($param['line_id']) ? $param['line_id'] : false; $channel_id = isset($param['channel_id']) ? trim($param['channel_id']) : false;//渠道商id; if (!$line_id || $channel_id === false) { $result['code'] = '2'; $result['info'] = "缺少必要参数"; return $result; } $sql = "SELECT ticket_id, seat_type, (SELECT type_name FROM dict_type WHERE id = seat_type) AS seat_type_name, human_type, (SELECT type_name FROM dict_type WHERE id = human_type) AS human_type_name, prod_price, cus_price FROM opera_tickets WHERE line_id = " . $line_id . " AND cancel_flag = 0"; $ticket_info = $this->query($sql); if (count($ticket_info) == 0) { $json['code'] = '0'; $json['info'] = '没有可售卖的票种'; $json['list'] = array(); } foreach ($ticket_info as $k => $v) { $sale_type = $this->getTicketChannelSaleType($channel_id, $v['ticket_id'], 316);//获取销售类型 if ($sale_type)//如果该销售方式被关掉 { if ($sale_type == "177") { $ticket_info[$k]['price'] = $v['prod_price']; } else { $ticket_info[$k]['price'] = $v['cus_price']; } } else { unset($ticket_info[$k]); } } $json['code'] = '0'; $json['info'] = '返回票种信息成功'; $json['list'] = array_merge($ticket_info); return $json; } /** * 添加组合线路的订单 * @param $param */ public function addOrder($param) { /* line_id: outside_sale_org_id:订单渠道 outside_order_no:渠道订单号 salesman:业务员 start_date:出发日期 start_station: 上车站点 prod_list: 预定票种,格式为{票种ID,票种价格,预定数量}{票种ID,票种价格,预定数量} customer_info:联系人信息,格式为 {联系人,联系电话,备注}*/ $valid = zzcsUtils::validateParams( array( 'line_id,org_id,start_date,seq_id,start_station,start_time,prod_list,customer_info,rec_list' => 'empty', 'receive_value' => 'amount' ), $param); //参数验证 if (!$valid['status']) { $result['code'] = (string)$valid['status']; $result['info'] = $valid['info']; return $result; } $user_id = $this->user_id; $line_id = $param['line_id']; //线路编号 $org_id = $param['org_id']; $order_no = isset($param['order_no']) ? $param['order_no'] : false; $salesman = isset($param['salesman']) ? $param['salesman'] : false; $start_date = $param['start_date']; $start_station = $param['start_station']; $prod_list = $param['prod_list']; $rec_list = $param['rec_list']; $receive_value = $param['receive_value']; $seq_id = $param['seq_id']; $start_time = $param['start_time']; $customer_info = $param['customer_info']; //customer_info中,手机和联系人只要有1个信息就可以 $tmp = substr($customer_info, 1, -1); $tmpArray = explode(',', $tmp); //前台传过来的顺序不能变 1、联系人 2、手机号 3、备注 4、后期添加的新字段 if (trim($tmpArray[0]) == '' && !zzcsUtils::validate(trim($tmpArray[1]), 'tel')) { $customer_info = false; } if (zzcsUtils::validate(trim($tmpArray[1]), 'tel')) { $phone = $tmpArray[1];//手机号码 $sql = "select count(1) cnt from order_main WHERE PROD_START_STATION_DATE='{$start_date}' and CUSTOMER_MOBILE='{$phone}' and PARENT_PROD_ID = {$line_id};"; $getCnt = $this->query($sql); if ($getCnt['0']['cnt'] >= 1) { $result['code'] = '2'; $result['info'] = "同一手机号不可在一天内下多个同线路的订单!"; return $result; } } $pay_type = 275; $time = date('Y-m-d H:i:s', time()); if (!$user_id || false === $line_id || false === $org_id || false === $order_no || false === $salesman || false === $start_date || false === $start_station || false === $prod_list || false === $customer_info || false === $receive_value || false === $seq_id || false === $start_time) { $result['code'] = '2'; $result['info'] = "缺少必要参数"; return $result; } $sql = "call sp_make_order_group($user_id,$line_id,$org_id,'{$order_no}','{$salesman}','{$start_date}',$seq_id,$start_station,'{$start_time}','{$prod_list}','{$customer_info}',{$receive_value},{$pay_type})"; zzcsUtils::writeLog($sql); $res = $this->procQuery($sql); if ($res['code'] != 0) { //存储过程执行出错 $json["code"] = (string)$res['code']; $json["info"] = $res['info']; return $json; } //查询成功后,修改该主订单的子订单信息(receive_value值) $rec_arr = explode('|', trim($rec_list, '|')); $update_rec_sql = ''; foreach ($rec_arr as $k => $v) { $arr = explode(',', $v); $update_rec_sql .= "UPDATE order_main SET RECEIVE_VALUE=$arr[1] WHERE parent_order_id = " . $res['data'][0][0]['order_id'] . " and prod_id=$arr[0];"; } zzcsUtils::writeLog($update_rec_sql); $res2 = $this->exec($update_rec_sql); if (false === $res2) { $json['code'] = '1'; $json['info'] = '更改子订单失败'; return $json; } //数据查询成功 $json["code"] = '0'; $json["info"] = '组合线路下单成功'; $json["order_id"] = $res['data'][0][0]['order_id']; $update_status_sql = "UPDATE order_main SET update_user_id = " . $user_id . ", update_time = '" . $time . "', order_status = 146 WHERE order_id = " . $json["order_id"] . " OR parent_order_id = " . $json["order_id"]; zzcsUtils::writeLog($update_status_sql); $res3 = $this->exec($update_status_sql); if (false === $res3) { $json['code'] = '1'; $json['info'] = '更改订单状态失败'; return $json; } //获取拓展信息 $expandParams = array( 'terrace' => empty($param['terrace']) ? '' : $param['terrace'],//上平台-即渠道商的子渠道 'tavern_stay' => empty($param['tavern_stay']) ? '' : $param['tavern_stay'],//入住酒店 'add_line_price' => empty($param['add_line_price']) ? '' : $param['add_line_price']//加线金额 ); $this->addExpand($res['data'][0][0]['order_id'], $expandParams);//添加订单的拓展信息 return $json; } /** * 根据订单ID获取订单基本数据 * @param $param * @return mixed 订单修改需要返回 run_date, line_id * * User: 温依莅 */ public function getOrderInfo($param) { //验证order_id $valid = zzcsUtils::validateParams(array('order_id' => 'empty'), $param); //参数验证 if (!$valid['status']) { $result['code'] = (string)$valid['status']; $result['info'] = $valid['info']; return $result; } $order_id = trim($param['order_id']); //根据order_id 获取订基本信息 $sql = "SELECT a.order_id,b.LINE_ID, b.line_name, a.PROD_START_STATION_DATE, IFNULL((SELECT terrace from order_expand_xm where order_id='$order_id'),0.00) as 'terrace', IFNULL((SELECT tavern_stay from order_expand_xm where order_id='$order_id'),0.00) as 'tavern_stay', IFNULL((SELECT add_line_price from order_expand_xm where order_id='$order_id'),0.00) as 'add_line_price', a.PROD_START_STATION_RES_ID,a.PROD_START_STATION_RES_NAME, c.SUPPLIER_NAME,c.ID SUPPLIER_ID, (select GROUP_CONCAT(tmp.rec SEPARATOR '|') from(SELECT *,CONCAT_WS(',',PROD_ID,RECEIVE_VALUE) as rec FROM `order_main` where PARENT_ORDER_ID=$order_id group by prod_id) as tmp) as rec_desc, a.OUTSIDE_ORDER_NO, a.ORDER_DESCRIPTION, a.RECEIVE_VALUE,a.customer_name,a.customer_mobile,a.customer_memo,a.sales_man FROM order_main a LEFT JOIN opera_line b ON a.PARENT_PROD_ID = b.LINE_ID LEFT JOIN base_supplier c on a.OUTSIDE_SALE_ORG_ID=c.ID WHERE a.ORDER_ID=$order_id and a.CANCEL_FLAG=0 and b.line_type=316 and b.cancel_flag=0 and a.order_status<>148 limit 1"; $res_list = $this->query($sql); if (!$res_list) { $json['code'] = '2'; $json['info'] = '数据库错误'; return $json; } if (count($res_list) == 0) { $json['code'] = '2'; $json['info'] = '无有效订单数据'; return $json; } //得到tickets信息 $temp_str = $res_list[0]['ORDER_DESCRIPTION']; $rec_str = $res_list[0]['rec_desc'];//代收单价信息 $temp_arr = explode('|', $temp_str, -1); $rec_arr = explode('|', $rec_str); $ticket_list = array(); foreach ($temp_arr as $k => $v) { $arr = explode(',', $v); $ticket_list[$k]['ticket_id'] = $arr[0]; $ticket_list[$k]['num'] = end($arr); //插入票种代收单价 foreach ($rec_arr as $k1 => $v1) { $arr2 = explode(',', $v1); if ($arr2[0] == $arr[0]) { $ticket_list[$k]['sin_price'] = end($arr2); } } } $json['code'] = '0'; $json['info'] = '根据订单号返回订单信息'; $json['list'] = $res_list; $json['list'][0]['ticket_info'] = $ticket_list; return $json; } /** * 组合订单的修改功能 * @param $param * @return mixed * * User: Steven */ public function updateGroupOrder($param) { $valid = zzcsUtils::validateParams( array( 'line_id,org_id,start_date,seq_id,start_station,start_time,prod_list,customer_info,rec_list' => 'empty', 'receive_value' => 'amount' ), $param); //参数验证 if (!$valid['status']) { $result['code'] = (string)$valid['status']; $result['info'] = $valid['info']; return $result; } $user_id = $this->user_id; $line_id = $param['line_id']; //线路编号 $org_id = $param['org_id']; $order_no = isset($param['order_no']) ? $param['order_no'] : false; $salesman = isset($param['salesman']) ? $param['salesman'] : false; $start_date = $param['start_date']; $start_station = $param['start_station']; $prod_list = $param['prod_list']; $rec_list = $param['rec_list']; $receive_value = $param['receive_value']; $seq_id = $param['seq_id']; $start_time = $param['start_time']; $customer_info = $param['customer_info']; //customer_info中,手机和联系人只要有1个信息就可以 $tmp = substr($customer_info, 1, -1); $tmpArray = explode(',', $tmp); //前台传过来的顺序不能变 1、联系人 2、手机号 3、备注 4、后期添加的新字段 if (trim($tmpArray[0]) == ''&& trim($tmpArray[1]) == '') { $customer_info = false; } if (zzcsUtils::validate(trim($tmpArray[1]), 'tel')) { $phone = $tmpArray[1];//手机号码 $sql = " select count(1) cnt from order_main a WHERE a.PROD_START_STATION_DATE='{$start_date}' and a.CUSTOMER_MOBILE='{$phone}' and a.PARENT_PROD_ID = {$line_id} AND a.CUSTOMER_MOBILE != ( select CUSTOMER_MOBILE from order_main WHERE ORDER_ID = {$param['order_id']} );"; $getCnt = $this->query($sql); if ($getCnt['0']['cnt'] >= 1) { $result['code'] = '2'; $result['info'] = "同一手机号不可在一天内下多个同线路的订单!"; return $result; } } $pay_type = 275; $order_id = $param['order_id']; //要修改的订单号码 //取消当前订单 $sql_cancel = "call sp_cancel_order(" . $user_id . "," . $order_id . ")"; zzcsUtils::writeLog($sql_cancel); $res_cancel = $this->procQuery($sql_cancel); if ($res_cancel['code'] != 0) { //存储过程执行出错 $result["code"] = (string)$res_cancel['code']; $result["info"] = $res_cancel['info']; return $result; } //将该订单的cancel_flag置为1,以区分是修改订单还是取消订单 $sql = "update order_main set update_user_id=$user_id,update_time=now(),cancel_flag=1 where order_id={$order_id} or parent_order_id={$order_id}"; $this->query($sql); $sql_update = "call sp_make_order_group($user_id,$line_id,$org_id,'{$order_no}','{$salesman}','{$start_date}',$seq_id,$start_station,'{$start_time}','{$prod_list}','{$customer_info}',{$receive_value},{$pay_type})"; zzcsUtils::writeLog($sql_update); $res_update = $this->procQuery($sql_update); if ($res_update['code'] != 0) { //存储过程执行出错 $result["code"] = (string)$res_update['code']; $result["info"] = $res_update['info']; return $result; } //查询成功后,修改该主订单的子订单信息(receive_value值) $rec_arr = explode('|', trim($rec_list, '|')); $update_rec_sql = ''; foreach ($rec_arr as $k => $v) { $arr = explode(',', $v); $update_rec_sql .= "UPDATE order_main SET RECEIVE_VALUE=$arr[1] WHERE parent_order_id = " . $res_update['data'][0][0]['order_id'] . " and prod_id=$arr[0];"; } zzcsUtils::writeLog($update_rec_sql); $res = $this->exec($update_rec_sql); if (false === $res) { $json['code'] = '1'; $json['info'] = '更改子订单失败'; return $json; } $time = date('Y-m-d H:i:s', time()); //修改订单状态为146(已支付) $update_status_sql = "UPDATE order_main SET update_user_id = " . $user_id . ", update_time = '" . $time . "', order_status = 146 WHERE order_id = " . $res_update['data'][0][0]['order_id'] . " OR parent_order_id = " . $res_update['data'][0][0]['order_id']; zzcsUtils::writeLog($update_status_sql); $res3 = $this->exec($update_status_sql); if (false === $res3) { $json['code'] = '1'; $json['info'] = '更改订单状态失败'; return $json; } //获取拓展信息 $expandParams = array( 'terrace' => empty($param['terrace']) ? '' : $param['terrace'],//上平台-即渠道商的子渠道 'tavern_stay' => empty($param['tavern_stay']) ? '' : $param['tavern_stay'],//入住酒店 'add_line_price' => empty($param['add_line_price']) ? '' : $param['add_line_price']//加线金额 ); $this->setOrderExpand($res_update['data'][0][0]['order_id'], $expandParams);//设置订单的拓展信息 $result["code"] = '0'; $result["info"] = '修改成功'; return $result; } //设置订单拓展信息 public function setOrderExpand($order_id, $expandParams) { $sql = '' . "SELECT order_id, terrace, tavern_stay, add_line_price from order_expand_xm WHERE order_id = {$order_id}"; $getExpand = $this->query($sql);//获取特殊标记订单信息 if (isset($getExpand[0]['order_id'])) { $this->editExpand($order_id, $expandParams);//如果存在则修改 } else { $this->addExpand($order_id, $expandParams);//如果不存在则添加 } } //添加拓展信息 protected function addExpand($order_id, $params) { $sql = '' . "REPLACE INTO `order_expand_xm` ( `order_id`,`terrace`,`tavern_stay`,`add_line_price`) VALUES ('{$order_id}', '{$params['terrace']}', '{$params['tavern_stay']}', '{$params['add_line_price']}');"; $this->insert($sql); } //修改拓展信息 protected function editExpand($order_id, $params) { $sql = '' . "UPDATE order_expand_xm set terrace='{$params['terrace']}' , tavern_stay='{$params['tavern_stay']}',add_line_price='{$params['add_line_price']}' where order_id = {{$order_id}};"; $this->edit($sql); } /**获取组合线路出发站点 * Des: * Name: getStartStation * @param $line_id * @param $run_date * @return array|bool */ private function getStartStation($line_id, $run_date) { $sql = "SELECT a.seq_id,c.zone_mark,c.res_id,c.res_name,s.start_time FROM opera_line_group a,run_main m, run_station s,base_resource c WHERE a.line_id = " . $line_id . " AND a.day_num = 1 AND a.start_res_id = 0 AND a.sub_line_id = m.prod_id AND a.start_minutes = m.run_minutes AND m.run_date = '" . $run_date . "' AND m.run_id = s.run_id AND s.station_res_id = c.res_id AND s.station_inout_type IN (108,109) UNION ALL SELECT a.seq_id,c.zone_mark,c.res_id,c.res_name,s.start_time FROM opera_line_group a,run_main m, run_station s,base_resource c WHERE a.line_id = " . $line_id . " AND a.day_num = 1 AND a.start_res_id > 0 AND a.sub_line_id = m.prod_id AND a.start_minutes = m.run_minutes AND m.run_date = '" . $run_date . "' AND m.run_id = s.run_id AND a.start_order_id <= s.station_order_id AND s.station_res_id = c.res_id AND s.station_inout_type IN (108,109)"; $res_list = $this->query($sql); //这里加一步判断,如果所传日期没有信息,返回false--温依莅 if (count($res_list) == 0) { return false; } $res_list_zone = array(); $res_array = array(); foreach ($res_list as $k => $v) { if ($v['zone_mark'] == '1') { $res_array[$v['res_id']] = $v['res_id']; $res_list_zone[$v['res_id']] = $v; unset($res_list[$k]); } } foreach ($res_list as $k => $v) { $res_list1[$v['res_id']] = $v; } $res_sql = "SELECT res_id,res_name,parent_id FROM base_resource WHERE cancel_flag = 0 AND parent_id IN (" . implode(',', $res_array) . ") AND zone_mark = 0 AND res_type_id = 24"; $res_array_list1 = $this->query($res_sql); $res_array_list = array(); foreach ($res_array_list1 as $k => $v) { $res_array_list[$v['res_id']]['res_id'] = $v['res_id']; $res_array_list[$v['res_id']]['res_name'] = $v['res_name']; $res_array_list[$v['res_id']]['seq_id'] = $res_list_zone[$v['parent_id']]['seq_id']; $res_array_list[$v['res_id']]['start_time'] = $res_list_zone[$v['parent_id']]['start_time']; $res_array_list[$v['res_id']]['zone_mark'] = $res_list_zone[$v['parent_id']]['zone_mark']; } $res_list1 = array(); foreach ($res_array_list as $k => $v) { $res_list1[$k] = $v; } $res_list = array_merge($res_list1); //这里做一个重排如果包含厦门酒店未知则把其设置为第一个元素 foreach ($res_list as $k3 => $v3) { if ($v3['res_id'] == 11964) { unset($res_list[$k3]); array_unshift($res_list, $v3); } } return $res_list; } /** * Des:获取组合线路订单渠道商列表 * Name: getChannelList * @param $line_id * @return array */ private function getChannelList($line_id) { $sql = "SELECT a.supplier_id,b.supplier_name,b.sales_man FROM base_supplier_sale AS a INNER JOIN base_supplier AS b ON a.supplier_id = b.id WHERE a.parent_type = 310 AND a.product_type IN (316, 0) AND a.cancel_flag = 0 AND b.cancel_flag = 0 AND b.is_disabled = 0 AND a.supplier_id NOT IN ( SELECT supplier_id FROM ( SELECT supplier_id,count(ticket_id) AS cn FROM opera_tickets_distrib WHERE cancel_flag = 0 AND authority_status = 0 AND ticket_id IN (SELECT ticket_id FROM opera_tickets WHERE line_id = " . $line_id . " AND cancel_flag = 0) GROUP BY supplier_id ) AS dt WHERE cn = (SELECT count(ticket_id) FROM opera_tickets WHERE line_id = " . $line_id . " AND cancel_flag = 0) ) GROUP BY a.supplier_id"; $channel_list = $this->query($sql); return $channel_list; } /** * Des:获取组合线路名字 * Name: getDetailName * @param $line_id * @return array */ private function getDetailName($line_id) { $sql = "SELECT line_name FROM opera_line WHERE line_id = " . $line_id . " AND cancel_flag = 0"; $line_name = $this->query($sql); $line_name = $line_name[0]['line_name']; return $line_name; } /** * Des:获取渠道的票种销售方式 * Name: getTicketChannelSaleType * @param $channel_id * @param $ticket_id * @param $line_type * @return array|bool */ public function getTicketChannelSaleType($channel_id, $ticket_id, $line_type) { $sql = "SELECT sale_type FROM base_supplier_sale AS a WHERE NOT EXISTS ( SELECT supplier_id FROM opera_tickets_distrib WHERE supplier_id = a.supplier_id AND ticket_id = " . $ticket_id . " AND cancel_flag = 0 ) AND supplier_id = " . $channel_id . " AND parent_type = 310 AND product_type IN (" . $line_type . ", 0) AND cancel_flag = 0 UNION ALL SELECT sale_type FROM opera_tickets_distrib WHERE supplier_id = " . $channel_id . " AND ticket_id = " . $ticket_id . " AND authority_status = 1 AND cancel_flag = 0"; $sale_type = $this->query($sql); if (count($sale_type) == 0) { return false; } $sale_type = $sale_type[0]['sale_type']; return $sale_type; } /** * 组合产品订单列表 * @param $web_data * @return mixed */ function groupOrderList($web_data) { //组合产品订单列表 //hyk $time_limit = isset($web_data["time_limit"]) ? trim($web_data["time_limit"]) : false; $start_time = isset($web_data["start_time"]) ? trim($web_data["start_time"]) : false; $end_time = isset($web_data["end_time"]) ? trim($web_data["end_time"]) : false; $order_source = isset($web_data["order_source"]) ? trim($web_data["order_source"]) : false; $order_status = isset($web_data["order_status"]) ? trim($web_data["order_status"]) : false; $current_page = isset($web_data["current_page"]) ? trim($web_data["current_page"]) : false; $page_size = isset($web_data["page_size"]) ? trim($web_data["page_size"]) : false; $product_line = isset($web_data["product_line"]) ? trim($web_data["product_line"]) : false; $biller = isset($web_data["biller"]) ? trim($web_data["biller"]) : false;//添加计调员id $create_user_id = $biller; $line = isset($web_data["line"]) ? trim($web_data["line"]) : false; $more_search = isset($web_data["more_search"]) ? trim($web_data["more_search"]) : false; $search_type = isset($web_data["search_type"]) ? trim($web_data["search_type"]) : false; if ($time_limit === false || $start_time === false || $end_time === false || $order_source === false || $order_status === false || $current_page === false || $page_size === false || $product_line === false || $search_type === false || $line === false || $more_search === false || $biller === false) { //参数不完整; $json["code"] = '2'; $json["info"] = "缺少必要参数"; return $json; } $sql = "CALL xm_order_get_list_xm(" . $this->user_id . "," . $create_user_id . "," . $time_limit . ",'" . $start_time . "','" . $end_time . "'," . $order_source . "," . $order_status . ",'" . $more_search . "'," . $current_page . "," . $page_size . ",'" . $line . "','',''," . $search_type . "," . $product_line . ")"; zzcsUtils::writeLog($sql); $res = $this->procQuery($sql); if ($res['code'] != 0) { //执行存储过程出错 $json["code"] = $res['code']; $json["info"] = $res['info']; return $json; } else { $json["code"] = "0"; $json["info"] = "订单列表"; $json["page"]["total_count"] = $res["data"][0][0]["num"]; $json["page"]["page_count"] = $res["data"][0][0]["pagecount"]; $json["page"]["curr_page"] = $res["data"][0][0]["currpage"]; $json["page"]["page_size"] = $res["data"][0][0]["pagesize"]; $json["order_list"] = $res["data"][1]; $label_data = array(); if (empty($res["data"][2])) { // $json["label"]["pay"]=$res["data"][2]; $label_data["pay"] = 0; $label_data["out"] = 0; $label_data["end"] = 0; $label_data["cancle"] = 0; $label_data["all"] = 0; } else { $label_data["pay"] = 0; $label_data["out"] = 0; $label_data["end"] = 0; $label_data["cancle"] = 0; $label_data["all"] = 0; $ttt = 0; foreach ($res["data"][2] as $temp) { $ttt = $ttt + $temp["order_cnt"]; switch ($temp["order_status"]) { case 145: $label_data["pay"] = $temp["order_cnt"]; break; case 146: $label_data["out"] = $temp["order_cnt"]; break; case 147: $label_data["end"] = $temp["order_cnt"]; break; case 148: $label_data["cancle"] = $temp["order_cnt"]; break; } } $label_data["all"] = $ttt; } $json["label"] = $label_data; return $json; } } /** * Des:将符合筛选条件的订单导出为Excel文件(.xls) * Name: exportOrder * @param $web_data * @return mixed * @author 温依莅 */ public function exportOrder($web_data) { //得到导出信息 //单产品订单列表 //hyk $time_limit = isset($web_data['time_limit']) ? trim($web_data['time_limit']) : false; $start_time = isset($web_data["start_time"]) ? trim($web_data["start_time"]) : false; $end_time = isset($web_data["end_time"]) ? trim($web_data["end_time"]) : false; $order_source = isset($web_data["order_source"]) ? trim($web_data["order_source"]) : false; $order_status = isset($web_data["order_status"]) ? trim($web_data["order_status"]) : false; $current_page = isset($web_data["current_page"]) ? trim($web_data["current_page"]) : false; $page_size = isset($web_data["page_size"]) ? trim($web_data["page_size"]) : false; $product_line = isset($web_data["product_line"]) ? trim($web_data["product_line"]) : false; $biller = isset($web_data["biller"]) ? trim($web_data["biller"]) : false;//添加计调员id $create_user_id = $biller; $user_id = $this->user_id; $line = isset($web_data["line"]) ? trim($web_data["line"]) : false; $more_search = isset($web_data["more_search"]) ? trim($web_data["more_search"]) : false; $search_type = isset($web_data["search_type"]) ? trim($web_data["search_type"]) : false; if ($time_limit === false || $start_time === false || $end_time === false || $order_source === false || $order_status === false || $current_page === false || $page_size === false || $product_line === false || $search_type === false || $line === false || $more_search === false || $biller === false) { //参数不完整; $json["code"] = '2'; $json["info"] = "缺少必要参数"; return $json; } $sql = "CALL xm_order_get_list_xm(" . $user_id . "," . $create_user_id . "," . $time_limit . ",'" . $start_time . "','" . $end_time . "'," . $order_source . "," . $order_status . ",'" . $more_search . "'," . $current_page . "," . $page_size . ",'" . $line . "','',''," . $search_type . "," . $product_line . ")"; //zzcsUtils::writeLog($sql); $res = $this->procQuery($sql); if ($res['code'] != 0) { //执行存储过程出错 $json["code"] = $res['code']; $json["info"] = $res['info']; return $json; } //如果无订单信息,不导出,返回提示信息 $list_ori = $res['data'][1]; if (count($list_ori) == 0) { $json["code"] = '3'; $json["info"] = '无订单信息'; return $json; } //----excel导出信息 require_once ROOT_PATH . '/ZZCS/Common/PHPExcel.php'; //error_reporting(E_ALL); date_default_timezone_set('Asia/Shanghai'); $objPHPExcel = new PHPExcel(); $order_main_id_array = array(); //处理存储过程返回的数据,得到前端页面数据 foreach ($list_ori as $k => $v) { $order_main_id_array[] = $v['M_ID']; //预订产品信息 $list_ori[$k]['line'] = $v['line']; $list_ori[$k]['start_station'] = $v['start_station']; $list_ori[$k]['end_station'] = $v['end_station']; $list_ori[$k]['children_num'] = 0; $list_ori[$k]['adults_num'] = 0; if (!$v['order_description']) { $seat_array_tmp = explode("×", $v['seat']); $passenger_num_all = $seat_array_tmp[1]; $list_ori[$k]['adults_num'] = $passenger_num_all; $list_ori[$k]['real_passager_num'] = $v['real_passager_num'] == -1 ? $passenger_num_all : $v['real_passager_num']; $list_ori[$k]['book'] = $v['line'] . '|' . ($v['real_passager_num'] == -1 ? $v['seat'] : $v['seat'] . '(实际人数:' . $v['real_passager_num'] . ')') . '|' . $v['start_station'] . '--' . $v['end_station']; } else { $temp_str = $v['order_description']; $temp_arr = explode('|', $temp_str, -1); $ticket_detail = ''; $passenger_num_all = 0; foreach ($temp_arr as $k1 => $v1) { $arr = explode(',', $v1); $len = count($arr); $ticket_detail .= $arr[$len - 2] . '×' . end($arr) . ' '; $passenger_num_all += end($arr); if ($arr[$len - 2] == "儿童") { $list_ori[$k]['children_num'] += end($arr); } else { $list_ori[$k]['adults_num'] += end($arr); } } $list_ori[$k]['real_passager_num'] = $v['real_passager_num'] == -1 ? $passenger_num_all : $v['real_passager_num']; $list_ori[$k]['book'] = $v['line'] . '|' . ($v['real_passager_num'] == -1 ? $ticket_detail : $ticket_detail . '(实际人数:' . $v['real_passager_num'] . ')') . '|' . $v['start_station'] . '--' . $v['end_station']; } //订单状态 if ($v['order_status'] == '145') { $state_str = '待支付'; } else if ($v['order_status'] == '146') { $state_str = '已出票'; } else if ($v['order_status'] == '147') { $state_str = '已完成'; } else { $state_str = '已取消'; } $list_ori[$k]['state_str'] = $state_str; } $sql = " SELECT o.parent_order_id, o.run_id,o.run_bus_order_id,r.send_bus_no,r.send_driver_name,r.send_driver_mobile,r.send_tour_guide_name,r.send_tour_guide_mobile " . " FROM order_main as o left join run_bus as r ON r.run_id=o.run_id AND r.bus_order_id=o.run_bus_order_id " . " WHERE o.parent_order_id IN(" . implode(",", $order_main_id_array) . ") " . " ORDER BY o.parent_order_id,o.run_date,o.run_time "; $sql_result = $this->query($sql); $order_bus_array = array(); $order_bus_run_id = array(); foreach ($sql_result as $sql_info) { $order_id = $sql_info["parent_order_id"]; if (!isset($order_bus_array[$order_id])) { $order_bus_array[$order_id] = array(); $order_bus_run_id[$order_id] = array(); } if (in_array($sql_info["run_id"], $order_bus_run_id[$order_id])) { continue; } $order_bus_run_id[$order_id][] = $sql_info["run_id"]; if ($sql_info["run_bus_order_id"] > 0) { $order_bus_array[$order_id][] = $sql_info; } else { $order_bus_array[$order_id][] = array("send_bus_no" => "", "send_driver_name" => "", "send_driver_mobile" => "", "send_tour_guide_name" => "", "send_tour_guide_mobile" => ""); } } /*以下是一些设置 ,作者 ,标题之类*/ $objPHPExcel->getProperties()->setCreator("出行") ->setLastModifiedBy("出行") ->setTitle("数据EXCEL导出") ->setSubject("数据EXCEL导出") ->setDescription("备份数据") ->setKeywords("excel") ->setCategory("result file"); /*以下就是对处理Excel里的数据, 横着取数据*/ //$data=array(array('uid'=>'1','email'=>'ceshi@163.com','password'=>'111111'),array('uid'=>'2','email'=>'uuu@126.com','password'=>'6666'));//测试数据 $objPHPExcel->setActiveSheetIndex(0) //Excel的第A列,uid是你查出数组的键值,下面以此类推 ->setCellValue('A1', '订单编号') ->setCellValue('B1', '下单时间') ->setCellValue('C1', '下单人账号') ->setCellValue('D1', '下单人姓名') ->setCellValue('E1', '订单渠道') ->setCellValue('F1', '渠道订单号') ->setCellValue('G1', '业务员') ->setCellValue('H1', '预订产品') ->setCellValue('I1', '成人数') ->setCellValue('J1', '儿童数') ->setCellValue('K1', '上车总人数') ->setCellValue('L1', '出发日期') ->setCellValue('M1', '出发时间') ->setCellValue('N1', '上车地点') ->setCellValue('O1', '下车地点') ->setCellValue('P1', '接驳车号') ->setCellValue('Q1', '接驳司机') ->setCellValue('R1', '接驳司机手机') ->setCellValue('S1', '接驳导游') ->setCellValue('T1', '接驳导游手机') ->setCellValue('U1', '联系人') ->setCellValue('V1', '联系电话') ->setCellValue('W1', '金额') ->setCellValue('X1', '代收金额') ->setCellValue('Y1', '状态') ->setCellValue('Z1', '订单备忘') ->setCellValue('AA1', '出团车号') ->setCellValue('AB1', '出团司机') ->setCellValue('AC1', '出团司机手机') ->setCellValue('AD1', '出团导游') ->setCellValue('AE1', '出团导游手机') ->setCellValue('AF1', '第二日出团车号') ->setCellValue('AG1', '第二日出团司机') ->setCellValue('AH1', '第二日出团司机手机') ->setCellValue('AI1', '第二日出团导游') ->setCellValue('AJ1', '第二日出团导游手机'); foreach ($list_ori as $k => $v) { $send_bus_array = $order_bus_array[$v['M_ID']]; $num = $k + 2; //$objPHPExcel->getActiveSheet(0)->getStyle('F'.$num)->getAlignment()->setWrapText(true); //$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(50); $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('H')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('I')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('J')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('K')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('L')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('M')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('N')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('O')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('P')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('Q')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('R')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('S')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('T')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('U')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('V')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('W')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('X')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('Y')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('Z')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('AA')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('AB')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('AC')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('AD')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('AE')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('AF')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('AG')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('AH')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('AI')->setAutoSize(true); $objPHPExcel->getActiveSheet()->getColumnDimension('AJ')->setAutoSize(true); $objPHPExcel->setActiveSheetIndex(0) //Excel的第A列,uid是你查出数组的键值,下面以此类推 ->setCellValue('A' . $num, $v['M_ID']) ->setCellValue('B' . $num, $v['create_time']) ->setCellValue('C' . $num, $v['create_user_account']) ->setCellValue('D' . $num, $v['create_user_name']) ->setCellValue('E' . $num, $v['org_name']) ->setCellValue('F' . $num, $v['outside_order_no']) ->setCellValue('G' . $num, $v['sales_man_name']) ->setCellValue('H' . $num, $v['line']) ->setCellValue('I' . $num, $v['adults_num']) ->setCellValue('J' . $num, $v['children_num']) ->setCellValue('K' . $num, $v['real_passager_num']) ->setCellValue('L' . $num, substr($v['travel_time'], 0, 10)) ->setCellValue('M' . $num, substr($v['travel_time'], 11)) ->setCellValue('N' . $num, $v['start_station']) ->setCellValue('O' . $num, $v['end_station']) ->setCellValue('P' . $num, $send_bus_array[0]['send_bus_no']) ->setCellValue('Q' . $num, $send_bus_array[0]['send_driver_name']) ->setCellValue('R' . $num, $send_bus_array[0]['send_driver_mobile']) ->setCellValue('S' . $num, $send_bus_array[0]['send_tour_guide_name']) ->setCellValue('T' . $num, $send_bus_array[0]['send_tour_guide_mobile']) ->setCellValue('U' . $num, $v['contacts']) ->setCellValue('V' . $num, $v['tel']) ->setCellValue('W' . $num, $v['total_price']) ->setCellValue('X' . $num, $v['receive_value']) ->setCellValue('Y' . $num, $v['state_str']) ->setCellValue('Z' . $num, $v['remark']) ->setCellValue('AA' . $num, $send_bus_array[1]['send_bus_no']) ->setCellValue('AB' . $num, $send_bus_array[1]['send_driver_name']) ->setCellValue('AC' . $num, $send_bus_array[1]['send_driver_mobile']) ->setCellValue('AD' . $num, $send_bus_array[1]['send_tour_guide_name']) ->setCellValue('AE' . $num, $send_bus_array[1]['send_tour_guide_mobile']) ->setCellValue('AF' . $num, isset($send_bus_array[2]) && isset($send_bus_array[2]['send_bus_no']) ? $send_bus_array[2]['send_bus_no'] : "-") ->setCellValue('AG' . $num, isset($send_bus_array[2]) && isset($send_bus_array[2]['send_driver_name']) ? $send_bus_array[2]['send_driver_name'] : "-") ->setCellValue('AH' . $num, isset($send_bus_array[2]) && isset($send_bus_array[2]['send_driver_mobile']) ? $send_bus_array[2]['send_driver_mobile'] : "-") ->setCellValue('AI' . $num, isset($send_bus_array[2]) && isset($send_bus_array[2]['send_tour_guide_name']) ? $send_bus_array[2]['send_tour_guide_name'] : "-") ->setCellValue('AJ' . $num, isset($send_bus_array[2]) && isset($send_bus_array[2]['send_tour_guide_mobile']) ? $send_bus_array[2]['send_tour_guide_mobile'] : "-"); } $objPHPExcel->getActiveSheet()->setTitle('User'); $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . date('Y-m-d') . '.xls"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); ob_start(); $objWriter->save('php://output'); $xlsData = ob_get_contents(); ob_end_clean(); $json["code"] = '0'; $json["file"] = "data:application/vnd.ms-excel;base64," . base64_encode($xlsData); $json["file_name"] = date('Y-m-d') . '订单'; return $json; } /** * Function Description:得到组合线路的天数 * Function Name: getDayNum * @param $line_id * * @return mixed * * @author 温依莅 */ public function getDayNum($line_id) { if (!is_numeric($line_id + 0)) { return false; } $sql = "SELECT count(DISTINCT day_num) AS day FROM opera_line_group WHERE line_id=" . $line_id; $day = $this->query($sql); if (!$day) { return false; } return $day[0]['day']; } /** * Function Description:得到补单日期的接驳和直通车次信息【注意两日游情况】 * Function Name: getDayNum * @param $param * * @return mixed * * @author 温依莅 */ public function getDayCar($param) { $valid = zzcsUtils::validateParams( array( 'run_date' => 'empty', 'line_id' => 'number' ), $param); //参数验证 if (!$valid['status']) { $result['code'] = (string)$valid['status']; $result['info'] = $valid['info']; return $result; } $day = $this->getDayNum($param['line_id']); if (!$day) { $json["code"] = '5'; $json["info"] = "获取线路天数失败"; return $json; } $run_date = $param['run_date']; //判断日期格式正确 $tmp_arr = explode('-', $run_date); $bool = checkdate($tmp_arr[1], $tmp_arr[2], $tmp_arr[0]);//判断日期是否是合法日期 if (!$bool) { $json['code'] = '3'; $json['info'] = '日期格式不正确'; return $json; } $next_day = date('Y-m-d', strtotime('+1 day', strtotime($run_date))); //开始获取当日的接驳和直通车信息 #接驳 $sql1 = "select b.run_id, m.run_date, b.bus_order_id as run_bus_id, (b.SEAT_COUNT-b.SALED_COUNT) AS stock, b.send_bus_no, b.send_driver_name, b.send_tour_guide_name from run_bus b left join run_main m on b.run_id = m.run_id where m.run_date = '$run_date' and b.group_line_flag = 1 and b.cancel_flag = 0 and m.prod_id > 0 and b.run_id in ( select distinct run_id from order_main where parent_order_id > 0 and prod_id in (select ticket_id from opera_tickets t, opera_line l where t.line_id = l.line_id and l.line_type = 316 and l.product_type = 324) ) order by b.bus_order_id"; $bus_info11 = $this->query($sql1); #直通 $sql2 = "SELECT a.order_id,a.parent_order_id,a.run_id,b.BUS_ORDER_ID as run_bus_id,(b.seat_count - b.saled_count) AS stock, d.run_date, b.send_bus_no, b.send_driver_name, b.send_tour_guide_name FROM order_main a,run_bus b, opera_line c,run_main d WHERE a.run_id = b.run_id AND a.PARENT_PROD_ID = c.line_id AND b.run_id = d.run_id AND d.prod_id = 0 AND d.run_date = '$run_date' AND c.line_type = 255 AND b.cancel_flag = 0 group by b.bus_order_id having 324=(SELECT l.product_type FROM opera_line l LEFT JOIN order_main m ON l.line_id = m.PARENT_PROD_ID WHERE m.order_id = a.PARENT_ORDER_ID limit 1);"; $bus_info12 = $this->query($sql2); //两日游--需追加第二天的接驳和直通车次信息 if ($day == 2) { #第二天的车次--接驳【第二日默认无接驳】 /* $sql1 = "select b.run_id, b.bus_order_id as run_bus_id, (b.SEAT_COUNT-b.SALED_COUNT) AS stock, b.send_bus_no, b.send_driver_name, b.send_tour_guide_name from run_bus b left join run_main m on b.run_id = m.run_id where m.run_date = '$run_date' and b.group_line_flag = 1 and b.cancel_flag = 0 and m.prod_id > 0 and b.run_id in ( select distinct run_id from order_main where parent_order_id > 0 and prod_id in (select ticket_id from opera_tickets t, opera_line l where t.line_id = l.line_id and l.line_type = 316 and l.product_type = 324) ) order by b.bus_order_id"; $bus_info21 = $this->query($sql1);*/ #第二天的车次--直通 $sql3 = "SELECT a.order_id,a.parent_order_id,a.run_id,b.bus_order_id as run_bus_id,(b.seat_count - b.saled_count) AS stock, d.run_date, b.send_bus_no, b.send_driver_name, b.send_tour_guide_name FROM order_main a,run_bus b, opera_line c,run_main d WHERE a.run_id = b.run_id AND a.PARENT_PROD_ID = c.line_id AND b.run_id = d.run_id AND d.prod_id = 0 AND d.run_date = '$next_day' AND c.line_type = 255 AND b.cancel_flag = 0 group by b.bus_order_id having 324=(SELECT l.product_type FROM opera_line l LEFT JOIN order_main m ON l.line_id = m.PARENT_PROD_ID WHERE m.order_id = a.parent_order_id limit 1);"; $bus_info22 = $this->query($sql3); //一日游 } else { //$bus_info21=array(); $bus_info22 = array(); } $data['bus11'] = $bus_info11; $data['bus12'] = $bus_info12; $data['bus22'] = $bus_info22; $json['code'] = '0'; $json['info'] = '获取车次信息成功'; $json['list'] = $data; return $json; } /** * Function Description:补单下单 * Function Name: addExtraOrder * @param $param * * @return mixed * * @author 温依莅 */ public function addExtraOrder($param) { /* line_id: outside_sale_org_id:订单渠道 outside_order_no:渠道订单号 salesman:业务员 start_date:出发日期 start_station: 上车站点 prod_list: 预定票种,格式为{票种ID,票种价格,预定数量}{票种ID,票种价格,预定数量} customer_info:联系人信息,格式为 {联系人,联系电话,备注}*/ $valid = zzcsUtils::validateParams( array( 'line_id,org_id,start_date,seq_id,start_station,start_time,prod_list,customer_info,rec_list,count_num' => 'empty', 'receive_value' => 'amount' ), $param); //参数验证 if (!$valid['status']) { $result['code'] = (string)$valid['status']; $result['info'] = $valid['info']; return $result; } $user_id = $this->user_id; $line_id = $param['line_id']; //线路编号 $org_id = $param['org_id']; $order_no = isset($param['order_no']) ? $param['order_no'] : false; $salesman = isset($param['salesman']) ? $param['salesman'] : false; $start_date = $param['start_date']; $start_station = $param['start_station']; $prod_list = $param['prod_list']; $rec_list = $param['rec_list']; $receive_value = $param['receive_value']; $seq_id = $param['seq_id']; $start_time = $param['start_time']; $customer_info = $param['customer_info']; //####车次信息--需在下单后做相应数据处理 $car_info = $param['car_info']; $count_num = $param['count_num']; //customer_info中,手机和联系人只要有1个信息就可以 $tmp = substr($customer_info, 1, -1); $tmpArray = explode(',', $tmp); //前台传过来的顺序不能变 1、联系人 2、手机号 3、备注 4、后期添加的新字段 if (trim($tmpArray[0]) == '' && !zzcsUtils::validate(trim($tmpArray[1]), 'tel')) { $customer_info = false; } if (zzcsUtils::validate(trim($tmpArray[1]), 'tel')) { $phone = $tmpArray[1];//手机号码 $sql = "select count(1) cnt from order_main WHERE PROD_START_STATION_DATE='{$start_date}' and CUSTOMER_MOBILE='{$phone}' and PARENT_PROD_ID = {$line_id};"; $getCnt = $this->query($sql); if ($getCnt['0']['cnt'] >= 1) { $result['code'] = '2'; $result['info'] = "同一手机号不可在一天内下多个同线路的订单!"; return $result; } } $pay_type = 275; $time = date('Y-m-d H:i:s', time()); if (!$user_id || false === $line_id || false === $org_id || false === $order_no || false === $salesman || false === $start_date || false === $start_station || false === $prod_list || false === $customer_info || false === $receive_value || false === $seq_id || false === $start_time) { $result['code'] = '2'; $result['info'] = "缺少必要参数"; return $result; } $sql = "call sp_make_order_group($user_id,$line_id,$org_id,'{$order_no}','{$salesman}','{$start_date}',$seq_id,$start_station,'{$start_time}','{$prod_list}','{$customer_info}',{$receive_value},{$pay_type})"; zzcsUtils::writeLog($sql); $res = $this->procQuery($sql); if ($res['code'] != 0) { //存储过程执行出错 $json["code"] = (string)$res['code']; $json["info"] = $res['info']; return $json; } //查询成功后,修改该主订单的子订单信息(receive_value值) $rec_arr = explode('|', trim($rec_list, '|')); $update_rec_sql = ''; foreach ($rec_arr as $k => $v) { $arr = explode(',', $v); $update_rec_sql .= "UPDATE order_main SET RECEIVE_VALUE={$arr[1]} WHERE parent_order_id = {$res['data'][0][0]['order_id']} and prod_id={$arr[0]};"; } zzcsUtils::writeLog($update_rec_sql); $res2 = $this->exec($update_rec_sql); if (false === $res2) { $json['code'] = '1'; $json['info'] = '更改子订单失败'; return $json; } //数据查询成功 $json["code"] = '0'; $json["info"] = '组合线路下单成功'; $json["order_id"] = $res['data'][0][0]['order_id']; //##修改订单状态 $update_status_sql = "UPDATE order_main SET update_user_id = " . $user_id . ", update_time = '" . $time . "', order_status = 146 WHERE order_id = " . $json["order_id"] . " OR parent_order_id = " . $json["order_id"]; zzcsUtils::writeLog($update_status_sql); $res3 = $this->exec($update_status_sql); if (false === $res3) { $json['code'] = '1'; $json['info'] = '更改订单状态失败'; return $json; } ####此处添加补单逻辑,对订单表order_main的run_id,bus_order_id 和run_bus的字段进行修改 $update_bus_sql = ''; foreach ($car_info as $k => $v) { #只有$v的run_id 和run_bus_id都不为0才更新数据 if ($v['run_id'] == 0 || $v['run_bus_id'] == 0) { continue; } //以下更新订单班次和车次信息(run_id,run_bus_order_id),更新车次的已售座位数信息(saled_count,real_total_count) //当日接驳 if ($k == 0) { //修改新增乘客巴士已售座位 $update_bus_sql .= "UPDATE run_bus SET saled_count = (saled_count +" . $count_num . "), real_total_count = (real_total_count +" . $count_num . "), UPDATE_USER_ID=$user_id WHERE run_id = " . $v['run_id'] . " and bus_order_id=" . $v['run_bus_id'] . ";"; //修改子订单以及车次号 $update_bus_sql .= "update order_main set RUN_ID=" . $v['run_id'] . ", RUN_BUS_ORDER_ID=" . $v['run_bus_id'] . ", UPDATE_USER_ID=$user_id where parent_order_id in (" . $json["order_id"] . ") and run_date= '" . $v['run_date'] . "' and PARENT_PROD_ID in (select line_id from opera_line where line_type=256);"; //当日直通 } else if ($k == 1) { //修改新增乘客巴士已售座位 $update_bus_sql .= "UPDATE run_bus SET saled_count = (saled_count +" . $count_num . "), real_total_count = (real_total_count +" . $count_num . "), UPDATE_USER_ID=$user_id WHERE run_id = " . $v['run_id'] . " and bus_order_id=" . $v['run_bus_id'] . ";"; //修改子订单以及车次号 $update_bus_sql .= "update order_main set RUN_ID=" . $v['run_id'] . ", RUN_BUS_ORDER_ID=" . $v['run_bus_id'] . ", UPDATE_USER_ID=$user_id where parent_order_id in (" . $json["order_id"] . ") and run_date= '" . $v['run_date'] . "' and PARENT_PROD_ID in (select line_id from opera_line where line_type=255);"; //第二日直通 } else { //修改新增乘客巴士已售座位 $update_bus_sql .= "UPDATE run_bus SET saled_count = (saled_count +" . $count_num . "), real_total_count = (real_total_count +" . $count_num . "), UPDATE_USER_ID=$user_id WHERE run_id = " . $v['run_id'] . " and bus_order_id=" . $v['run_bus_id'] . ";"; //修改子订单以及车次号 $update_bus_sql .= "update order_main set RUN_ID=" . $v['run_id'] . ", RUN_BUS_ORDER_ID=" . $v['run_bus_id'] . ", UPDATE_USER_ID=$user_id where parent_order_id in (" . $json["order_id"] . ") and run_date= '" . $v['run_date'] . "' and PARENT_PROD_ID in (select line_id from opera_line where line_type=255);"; } } zzcsUtils::writeLog($update_bus_sql); if ($update_bus_sql) { $res_bus = $this->exec($update_bus_sql); if (false === $res_bus) { $json['code'] = '1'; $json['info'] = '更改车次信息失败'; return $json; } } ####补单逻辑结束 //获取拓展信息 $expandParams = array( 'terrace' => empty($param['terrace']) ? '' : $param['terrace'],//上平台-即渠道商的子渠道 'tavern_stay' => empty($param['tavern_stay']) ? '' : $param['tavern_stay'],//入住酒店 'add_line_price' => empty($param['add_line_price']) ? '' : $param['add_line_price']//加线金额 ); $this->setOrderExpand($json["order_id"], $expandParams);//设置订单的拓展信息 return $json; } }