'create_date', 2 => 'checkin_date', 3 => 'checkout_date', ]; public $date_type = 1; //预订时间1 ,入住时间2,离店时间3 public $start_date; public $end_date; public $past_start_date; public $past_end_date; public $province = ''; public $city = ''; public $hotel_name = ''; public $supplier_id = '';//供应商ID public $org_sale_id = '0';//渠道商ID public $hotel_id = '0';//酒店ID public $op = 'getInfo'; public $user_id; public $room_type; public $send_user_id = 0; public $principal_id = 0; public $purchaser_id = 0; public $to_url = ''; /** * @inheritdoc */ public function rules() { return [ [['date_type', 'start_date', 'end_date', 'op', 'org_sale_id', 'hotel_name', 'hotel_id'], 'safe'], ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'ID' => 'ID', 'CANCEL_FLAG' => 'Cancel Flag', 'MAIN_CREATE_USER_ID' => 'Main Create User ID', 'CREATE_USER_ID' => 'Create User ID', 'CREATE_TIME' => 'Create Time', 'UPDATE_USER_ID' => 'Update User ID', 'UPDATE_TIME' => 'Update Time', 'SALE_ORG_ID' => 'Sale Org ID', 'SALE_TOP_ORG_ID' => 'Sale Top Org ID', 'PROD_TOP_ORG_ID' => 'Prod Top Org ID', 'ORDER_ID' => 'Order ID', 'ORDER_DESCRIPTION' => 'Order Description', 'OUTSIDE_ORDER_NO' => 'Outside Order No', 'ORDER_VALID_STATUS' => 'Order Valid Status', 'ORDER_BOOK_STATUS' => 'Order Book Status', 'ORDER_PAY_STATUS' => 'Order Pay Status', 'ORDER_PAY_MAIN_ID' => 'Order Pay Main ID', 'ORDER_PAY_USER_ID' => 'Order Pay User ID', 'ORDER_PAY_TIME' => 'Order Pay Time', 'ORDER_PRINT_TIMES' => 'Order Print Times', 'PARENT_ORDER_ID' => 'Parent Order ID', 'PROD_ID' => 'Prod ID', 'PARENT_PROD_ID' => 'Parent Prod ID', 'PROD_NAME' => 'Prod Name', 'PARENT_PROD_NAME' => 'Parent Prod Name', 'ORDER_PRICE' => 'Order Price', 'ORDER_PROD_TYPE' => 'Order Prod Type', 'PROD_SUPPLY_ORG_NAME' => 'Prod Supply Org Name', 'BASE_PRICE' => 'Base Price', 'MID_PRICE' => 'Mid Price', 'RUN_ID' => 'Run ID', 'RUN_DATE' => 'Run Date', 'RUN_DATE_NUM' => 'Run Date Num', 'RUN_TIME' => 'Run Time', 'RUN_TIME_MINUTES' => 'Run Time Minutes', 'RUN_BUS_ORDER_ID' => 'Run Bus Order ID', 'RUN_BUS_SEAT_TYPE' => 'Run Bus Seat Type', 'RUN_BUS_SEAT_SEQ_ID' => 'Run Bus Seat Seq ID', 'RUN_BUS_SEAT_ID' => 'Run Bus Seat ID', 'RUN_BUS_SEAT_NAME' => 'Run Bus Seat Name', 'PROD_START_STATION_RES_ID' => 'Prod Start Station Res ID', 'PROD_START_STATION_RES_NAME' => 'Prod Start Station Res Name', 'PROD_START_STATION_CHECKPORT_RES_ID' => 'Prod Start Station Checkport Res ID', 'PROD_START_STATION_CHECKPORT_RES_NAME' => 'Prod Start Station Checkport Res Name', 'PROD_START_STATION_SEQ_ID' => 'Prod Start Station Seq ID', 'PROD_START_STATION_DATE' => 'Prod Start Station Date', 'PROD_START_STATION_DATE_NUM' => 'Prod Start Station Date Num', 'PROD_START_STATION_TIME' => 'Prod Start Station Time', 'PROD_START_STATION_TIME_MINUTES' => 'Prod Start Station Time Minutes', 'PROD_START_STATION_AREA_ID' => 'Prod Start Station Area ID', 'PROD_START_STATION_AREA_NAME' => 'Prod Start Station Area Name', 'PROD_END_STATION_RES_ID' => 'Prod End Station Res ID', 'PROD_END_STATION_RES_NAME' => 'Prod End Station Res Name', 'PROD_END_STATION_SEQ_ID' => 'Prod End Station Seq ID', 'PROD_END_STATION_DATE' => 'Prod End Station Date', 'PROD_END_STATION_DATE_NUM' => 'Prod End Station Date Num', 'PROD_END_STATION_TIME' => 'Prod End Station Time', 'PROD_END_STATION_TIME_MINUTES' => 'Prod End Station Time Minutes', 'PROD_END_STATION_AREA_ID' => 'Prod End Station Area ID', 'PROD_END_STATION_AREA_NAME' => 'Prod End Station Area Name', 'CUSTOMER_NAME' => 'Customer Name', 'CUSTOMER_SEX' => 'Customer Sex', 'CUSTOMER_MOBILE' => 'Customer Mobile', 'CUSTOMER_ID_TYPE' => 'Customer Id Type', 'CUSTOMER_ID_NO' => 'Customer Id No', 'CUSTOMER_ADDRESS' => 'Customer Address', 'CUSTOMER_ADDRESS_AREA_ID' => 'Customer Address Area ID', 'CUSTOMER_POSTCODE' => 'Customer Postcode', 'CUSTOMER_MEMO' => 'Customer Memo', 'MEMBER_ID' => 'Member ID', 'MEMBER_SCORE_PAY' => 'Member Score Pay', 'MEMBER_SCORE_GET' => 'Member Score Get', 'ORDER_STATUS' => 'Order Status', 'ORDER_DISABLE_TYPE' => 'Order Disable Type', 'ORDER_DISABLE_USER_ID' => 'Order Disable User ID', 'ORDER_DISABLE_TIME' => 'Order Disable Time', 'ORDER_DISABLE_PERCENT' => 'Order Disable Percent', 'ORDER_DISABLE_FEE' => 'Order Disable Fee', 'ORDER_DISABLE_APPLY_USER_ID' => 'Order Disable Apply User ID', 'ORDER_DISABLE_APPLY_TIME' => 'Order Disable Apply Time', 'KEEP_END_TIME' => 'Keep End Time', 'KEEP_END_MINUTES' => 'Keep End Minutes', 'if_gift' => 'If Gift', 'reorder_times' => 'Reorder Times', 'IF_LAST_PROD' => 'If Last Prod', 'ORDER_LEVEL' => 'Order Level', 'ORDER_CONFIRM_CODE' => 'Order Confirm Code', 'OUTSIDE_SALE_ORG_ID' => 'Outside Sale Org ID', 'IS_UP' => 'Is Up', 'APPLY_ID' => 'Apply ID', 'SALES_MAN' => 'Sales Man', 'RECEIVE_VALUE' => 'Receive Value', 'REAL_PASSENGER_NUM' => 'Real Passenger Num', 'STOCK_TYPE' => 'Stock Type', 'REFUSE_FLAG' => 'Refuse Flag', 'PROFIT_VALUE' => 'Profit Value', 'TOTAL_COMMISSION' => 'Total Commission', ]; } /** * User: wangxj * * 函数作用 * * @params */ public function load($post, $formName = null) { $this->start_date = isset($_REQUEST['Report']['start_date']) ? $_REQUEST['Report']['start_date'] : date('Y-m-01', time()); $this->end_date = isset($_REQUEST['Report']['end_date']) ? $_REQUEST['Report']['end_date'] : date('Y-m-d', time()); $this->op = isset($_REQUEST['op']) ? $_REQUEST['op'] : $this->op; $this->hotel_name = isset($_REQUEST['hotel_name']) ? $_REQUEST['hotel_name'] : $this->hotel_name; $this->org_sale_id = isset($_REQUEST['org_sale_id']) ? $_REQUEST['org_sale_id'] : $this->org_sale_id; $this->hotel_id = isset($_REQUEST['hotel_id']) ? $_REQUEST['hotel_id'] : $this->hotel_id; $this->to_url = isset($_REQUEST['to_url']) ? $_REQUEST['to_url'] : $this->to_url; $this->send_user_id = isset($_REQUEST['send_user_id']) ? $_REQUEST['send_user_id'] : $this->send_user_id; $this->principal_id = isset($_REQUEST['principal_id']) ? $_REQUEST['principal_id'] : $this->principal_id; $this->purchaser_id = isset($_REQUEST['purchaser_id']) ? $_REQUEST['purchaser_id'] : $this->purchaser_id; return parent::load($post); } //获取同比日期函数 public function getBeforeDate($start_date, $end_date) { //判断所选日期是否为月头和月尾,如果是则比较上一整月,如果不是则减去当月月数-1拼上原来的天数。 //当月月头 $day_first = date("Y-m-01", strtotime("$start_date")); //当月月尾 $day_last = date("Y-m-t", strtotime("$start_date")); if ($start_date == $day_first && $end_date == $day_last) { $timestamp = strtotime($start_date); $arr = getdate($timestamp); if ($arr['mon'] == 1) { $year = $arr['year'] - 1; $month = $arr['mon'] + 11; $firstday = $year . '-' . $month . '-01'; $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day")); } else { $firstday = date('Y-m-01', strtotime(date('Y', $timestamp) . '-' . (date('m', $timestamp) - 1) . '-01')); $lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day")); } } else { $start_arr = getdate(strtotime($start_date)); $end_arr = getdate(strtotime($end_date)); if ($start_arr['mon'] == 1) { $start_year = $start_arr['year'] - 1; $start_month = $start_arr['mon'] + 11; } else { $start_year = $start_arr['year']; $start_month = $start_arr['mon'] - 1; } if ($end_arr['mon'] == 1) { $end_year = $end_arr['year'] - 1; $end_month = $end_arr['mon'] + 11; } else { $end_year = $end_arr['year']; $end_month = $end_arr['mon'] - 1; } if ($start_month < 10) $start_month = '0' . $start_month; if ($end_month < 10) $end_month = '0' . $end_month; $firstday = $start_year . '-' . $start_month . '-' . date('d', strtotime("$start_date")); $lastday = $end_year . '-' . $end_month . '-' . date('d', strtotime("$end_date")); //判断日期是否合法,不合法则不计算同比; if (date('Y-m-d', strtotime($firstday)) == $firstday) { $result = true; if (date('Y-m-d', strtotime($lastday)) == $lastday) { $result = true; } else { $result = false; } } else { $result = false; } //判断end if ($result == false) { $firstday = ''; $lastday = ''; } } return array($firstday, $lastday); } /** * User:Steven * 生成报表数据 * * @return array */ public function updateStatisticsData() { $sql = "truncate table rep_daily_ht_order; insert into rep_daily_ht_order(create_date,checkin_date,checkout_date,create_user_id,create_user_name,purchase_id,purchase_name,top_area_id,parent_area_id,hotel_id,hotel_name,room_name,supplier_id,supplier_name,channel_id,channel_name,order_count,room_count,sales_value,cost_value,commission_value,profit_value) select substr(m.create_time,1,10) as create_date, m.prod_start_station_date as checkin_date, m.prod_end_station_date as checkout_date, m.create_user_id, u.user_name, p.id as purchase_id, p.purchaser_name, a.top_area_id, a.parent_area_id, m.parent_prod_id as hotel_id, m.parent_prod_name as hotel_name, m.prod_id as room_type, m.prod_name as room_name, m.prod_top_org_id as supplier_id, m.prod_supply_org_name as supplier_name, m.outside_sale_org_id as channel_id, (select supplier_name from base_supplier where id = m.outside_sale_org_id) as channel_name, count(m.id) as order_cnt, sum((select count(*) from order_main where parent_order_id = m.order_id and cancel_flag = 0 and order_valid_status = 1)) as room_cnt, sum(order_price) as order_price, sum(order_price-total_commission-profit_value) as order_cost, sum(total_commission) as order_commission, sum(profit_value) as order_profit from order_main m inner join opera_hotel h on m.parent_prod_id = h.hotel_id inner join base_area_view a on h.area_id = a.area_id inner join base_user u on m.create_user_id = u.id inner join base_supplier_purchase p on h.purchase_name = p.id where m.parent_order_id = 0 and m.cancel_flag = 0 and m.order_valid_status = 1 and m.order_prod_type = 25 group by substr(m.create_time,1,10),m.prod_start_station_date,m.prod_end_station_date, m.create_user_id,u.user_name,p.id,p.purchaser_name,m.parent_prod_id,m.prod_id,m.prod_top_org_id,m.outside_sale_org_id"; $conn = Yii::$app->db; $conn->createCommand($sql)->execute(); return true; } public function getOrderList() { if (isset($_REQUEST['Report'])) $_REQUEST = array_merge($_REQUEST, $_REQUEST['Report']); $this->setAttributes($_REQUEST, false); $order = new OrderMain(); $data['dataProvider'] = $order->search($_REQUEST); return ['model' => $this, 'data' => $data]; } /** * User:Redstop * * 日期维度来统计酒店销售数据 * @return array */ public function getDailyReportInfo($start_date, $end_date) { // $start_date = '2017-08-01'; // $end_date = '2017-08-31'; $date_type = 1;//预定时间 $before_date = $this->getBeforeDate($start_date, $end_date); // 前月日期 $before_start_date = ""; $before_end_date = ""; if ($before_date) { $before_start_date = $before_date[0]; $before_end_date = $before_date[1]; } //增加赔入赔出 $models = OrderFinanceReparations::find()->select(['a.*', 'substring(a.create_time,1,10) as create_time1', 'a.send_user_id', 'sum( if(reparation_type=1,`reparations`,0) ) as peichu', 'sum( if(reparation_type=2,`reparations`,0) ) as peiru']) ->innerJoin('(select order_main.*,order_ht_status_log.create_user_id as send_user_id from order_main INNER JOIN `order_ht_status_log` ON parent_order_id=order_ht_status_log.order_id and order_ht_status_log.order_status=198 where parent_order_id in (select order_id from order_finance_reparations where cancel_flag = 0) and order_prod_type = 26 and order_main.cancel_flag = 0 group by parent_order_id) a', 'a.parent_order_id = order_finance_reparations.order_id') ->where(['and', ['=', 'order_finance_reparations.cancel_flag', 0], ]); $sql = $models->createCommand()->getSql(); $models->andFilterWhere(['between', 'a.create_time', $start_date, $end_date]); // $models->groupBy("substring( `a.create_time` , 1 , 10 )"); $models->groupBy("create_time1")->asArray(); $sum_models = $models->all(); $group_by = "group by substring(create_time,1,10)"; $date_type_sql = "and substring(create_time,1,10) between'{$start_date}' and '{$end_date}'"; $sql = "select substring(create_time,1,10) as date, count(distinct parent_order_id) as order_count, count(*) as jianye_count, sum(order_price) as order_price, sum(base_price) as base_price, sum(total_commission) as total_commission, sum(profit_value) as profit_value from order_main n where order_prod_type = 26 and cancel_flag = 0 and order_status in (198,314,147,313,382) and order_valid_status = 1 $date_type_sql $group_by"; $connection = Yii::$app->db; $data['rowset'] = $connection->createCommand($sql)->queryAll(); //处理环比等数据 foreach ($data['rowset'] as $k => $v) { //判断分母不为0 $v['jianye_count'] = empty($v['jianye_count']) ? 0 : $v['jianye_count']; $v['order_price'] = empty($v['order_price']) ? 0 : $v['order_price']; $v['profit_value'] = empty($v['profit_value']) ? 0 : $v['profit_value']; foreach ($sum_models as $m => $model) { if ($model['create_time1'] == $v['date']) { $data['rowset'][$k]['profit_value'] += $model['peiru'] - $model['peichu']; $v['profit_value'] += $model['peiru'] - $model['peichu']; break; } else { continue; } } //毛利率 if ($v['order_price'] != 0) $data['rowset'][$k]['profit_rate'] = sprintf('%.2f', round($v['profit_value'] * 100 / $v['order_price'], 2)); else $data['rowset'][$k]['profit_rate'] = '-'; //处理百分号 // $data['rowset'][$k]['jianye_count_mom'] = '-'; // $data['rowset'][$k]['order_price_mom'] = '-'; // $data['rowset'][$k]['profit_value_mom'] = '-'; // $data['rowset'][$k]['profit_rate'] = '-'; $data['rowset'][$k]['jianye_count_mom'] = $data['rowset'][$k]['jianye_count_mom'] == '-' ? '-' : $data['rowset'][$k]['jianye_count_mom'] . '%'; $data['rowset'][$k]['order_price_mom'] = $data['rowset'][$k]['order_price_mom'] == '-' ? '-' : $data['rowset'][$k]['order_price_mom'] . '%'; $data['rowset'][$k]['profit_value_mom'] = $data['rowset'][$k]['profit_value_mom'] == '-' ? '-' : $data['rowset'][$k]['profit_value_mom'] . '%'; $data['rowset'][$k]['profit_rate'] = $data['rowset'][$k]['profit_rate'] == '-' ? '-' : $data['rowset'][$k]['profit_rate'] . '%'; } return $data['rowset']; } /** * @Author wanglg * @Desc 统计报表数据查询及处理 * @return mixed */ public function getNewReport() { $op = isset($_GET['op']) ? $_GET['op'] : $this->op; $past_date = $this->getBeforeDate($this->start_date, $this->end_date); $past_array = array('date_type' => $this->date_type, 'date_from' => $past_date[0], 'date_to' => $past_date[1], 'channel_id' => $this->org_sale_id, 'hotel_id' => $this->hotel_id, 'hotel_name' => $this->hotel_name); $searchParam = array('date_type' => $this->date_type, 'date_from' => $this->start_date, 'date_to' => $this->end_date, 'channel_id' => $this->org_sale_id, 'hotel_id' => $this->hotel_id, 'hotel_name' => $this->hotel_name); $params = array('searchOrderMain' => $searchParam); $past_params = array('searchOrderMain' => $past_array); $data['order_info'] = $this->getOrderList1($params, $op); // 基础数据 $data['old_order_info'] = $this->getOrderList1($past_params, $op); //环比基础数据 // 查询本月赔款信息 $compensate_query = $this->getCompensateInOrOut($params['searchOrderMain'], $op); // 查询上月赔款信息 $past_compensate_query = $this->getCompensateInOrOut($past_params['searchOrderMain'], $op); /*$compensate_info = $compensate_query->asArray()->all(); $past_compensate_info = $past_compensate_query->asArray()->all();*/ // 权限设置查询赔款信息:如果既是运营又是采购 if (Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_OPERATOR) { $compensate_query->andFilterWhere(['b.PRINCIPAL_ID' => Yii::$app->user->id]); $past_compensate_query->andFilterWhere(['b.PRINCIPAL_ID' => Yii::$app->user->id]); $compensate_info = $compensate_query->asArray()->all(); $past_compensate_info = $past_compensate_query->asArray()->all(); } elseif (Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_PURCHASE) { $compensate_query->andFilterWhere(['b.SALES_MAN' => Yii::$app->user->id]); $past_compensate_query->andFilterWhere(['b.SALES_MAN' => Yii::$app->user->id]); $compensate_info = $compensate_query->asArray()->all(); $past_compensate_info = $past_compensate_query->asArray()->all(); } elseif (Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_ADMIN || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_CUS_ADMIN || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::SYS_CS || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::SYS_ADMIN || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::FINANCIAL_OFFICER) { // 酒店管理员、客服管理人员、系统管理员、财务可以查看所有数据 $compensate_info = $compensate_query->asArray()->all(); $past_compensate_info = $past_compensate_query->asArray()->all(); } else { $compensate_info = []; $past_compensate_info = []; } $order_colum = ''; $group_colum = ''; $old_order_colum = ''; if ($op == 'getInfo') // 酒店纬度 { $old_order_colum = array_column($data['old_order_info'], 'PARENT_PROD_ID'); $order_colum = array_column($data['order_info'], 'PARENT_PROD_ID'); $group_colum = array_column($data['old_order_info'], 'PARENT_PROD_ID'); } elseif ($op == 'orgSale') // 渠道纬度 { $old_order_colum = array_column($data['old_order_info'], 'OUTSIDE_SALE_ORG_ID'); $order_colum = array_column($data['order_info'], 'OUTSIDE_SALE_ORG_ID'); $group_colum = array_column($data['old_order_info'], 'OUTSIDE_SALE_ORG_ID'); } elseif ($op == 'cusService') // 客服录单 { $old_order_colum = array_column($data['old_order_info'], 'CREATE_USER_ID'); $order_colum = array_column($data['order_info'], 'CREATE_USER_ID'); $group_colum = array_column($data['old_order_info'], 'CREATE_USER_ID'); } elseif ($op == 'cusServiceSend') // 客服发单 { $old_order_colum = array_column($data['old_order_info'], 'SEND_USER_ID'); $order_colum = array_column($data['order_info'], 'SEND_USER_ID'); $group_colum = array_column($data['old_order_info'], 'SEND_USER_ID'); } elseif ($op == 'principal') // 运营 { $old_order_colum = array_column($data['old_order_info'], 'PRINCIPAL_ID'); $order_colum = array_column($data['order_info'], 'PRINCIPAL_ID'); $group_colum = array_column($data['old_order_info'], 'PRINCIPAL_ID'); } elseif ($op == 'purchaser') // 采购 { $old_order_colum = array_column($data['old_order_info'], 'SALES_MAN'); $order_colum = array_column($data['order_info'], 'SALES_MAN'); $group_colum = array_column($data['old_order_info'], 'SALES_MAN'); } elseif ($op == 'roomInfo') { $old_order_colum = array_column($data['old_order_info'], 'PROD_ID'); $order_colum = array_column($data['order_info'], 'PROD_ID'); $group_colum = array_column($data['old_order_info'], 'PROD_ID'); } // 计算本月的赔入赔出 foreach ($compensate_info as $compensate => $val) { // 查找不同纬度将不在数组中的压入数组,组合新数组 if ( ($op == 'getInfo' && !in_array($val['PARENT_PROD_ID'], $order_colum)) || ($op == 'orgSale' && !in_array($val['OUTSIDE_SALE_ORG_ID'], $order_colum)) || ($op == 'cusService' && !in_array($val['CREATE_USER_ID'], $order_colum)) || ($op == 'cusServiceSend' && !in_array($val['SEND_USER_ID'], $order_colum)) || ($op == 'principal' && !in_array($val['PRINCIPAL_ID'], $order_colum)) || ($op == 'purchaser' && !in_array($val['SALES_MAN'], $order_colum)) || ($op == 'roomInfo' && !in_array($val['PROD_ID'], $order_colum)) ) { // $flag = empty($data['order_info']) ? true : false; $val['PROFIT_VALUE'] = $val['compensate_in'] - $val['compensate_out']; array_push($data['order_info'], $val); continue; } foreach ($data['order_info'] as $key => $item) { if ( ($op == 'getInfo' && $val['PARENT_PROD_ID'] == $item['PARENT_PROD_ID']) || ($op == 'orgSale' && $val['OUTSIDE_SALE_ORG_ID'] == $item['OUTSIDE_SALE_ORG_ID']) || ($op == 'cusService' && $val['CREATE_USER_ID'] == $item['CREATE_USER_ID']) || ($op == 'cusServiceSend' && $val['SEND_USER_ID'] == $item['SEND_USER_ID']) || ($op == 'principal' && $val['PRINCIPAL_ID'] == $item['PRINCIPAL_ID']) || ($op == 'purchaser' && $val['SALES_MAN'] == $item['SALES_MAN']) || ($op == 'roomInfo' && $val['PROD_ID'] == $item['PROD_ID']) ) { $data['order_info'][$key]['order_count'] = $data['order_info'][$key]['order_count'] + $val['order_count']; $data['order_info'][$key]['compensate_out'] = $item['compensate_out'] + $val['compensate_out']; $data['order_info'][$key]['compensate_in'] = $item['compensate_in'] + $val['compensate_in']; $data['order_info'][$key]['PROFIT_VALUE'] = $data['order_info'][$key]['PROFIT_VALUE'] + $val['compensate_in'] - $val['compensate_out']; } } } // 处理上月的赔入赔出 foreach ($past_compensate_info as $past_compensate => $val) { if ( ($op == 'getInfo' && !in_array($val['PARENT_PROD_ID'], $old_order_colum)) || ($op == 'orgSale' && !in_array($val['OUTSIDE_SALE_ORG_ID'], $old_order_colum)) || ($op == 'cusService' && !in_array($val['CREATE_USER_ID'], $old_order_colum)) || ($op == 'cusServiceSend' && !in_array($val['SEND_USER_ID'], $old_order_colum)) || ($op == 'principal' && !in_array($val['PRINCIPAL_ID'], $old_order_colum)) || ($op == 'purchaser' && !in_array($val['SALES_MAN'], $old_order_colum)) || ($op == 'roomInfo' && !in_array($val['PROD_ID'], $old_order_colum)) ) { $val['PROFIT_VALUE'] = $val['compensate_in'] - $val['compensate_out']; array_push($data['old_order_info'], $val); continue; } foreach ($data['old_order_info'] as $key => $item) { if ( ($op == 'getInfo' && $val['PARENT_PROD_ID'] == $item['PARENT_PROD_ID']) || ($op == 'orgSale' && $val['OUTSIDE_SALE_ORG_ID'] == $item['OUTSIDE_SALE_ORG_ID']) || ($op == 'cusService' && $val['CREATE_USER_ID'] == $item['CREATE_USER_ID']) || ($op == 'cusServiceSend' && $val['SEND_USER_ID'] == $item['SEND_USER_ID']) || ($op == 'principal' && $val['PRINCIPAL_ID'] == $item['PRINCIPAL_ID']) || ($op == 'purchaser' && $val['SALES_MAN'] == $item['SALES_MAN']) || ($op == 'roomInfo' && $val['PROD_ID'] == $item['PROD_ID']) ) { $data['old_order_info'][$key]['order_count'] = $data['old_order_info'][$key]['order_count'] + $val['order_count']; $data['old_order_info'][$key]['compensate_out'] = $item['compensate_out'] + $val['compensate_out']; $data['old_order_info'][$key]['compensate_in'] = $item['compensate_in'] + $val['compensate_in']; $data['old_order_info'][$key]['PROFIT_VALUE'] = $data['old_order_info'][$key]['PROFIT_VALUE'] + $val['compensate_in'] - $val['compensate_out']; } } } $total_array = []; $old_total_array['total_order_num'] = array_sum(array_column($data['old_order_info'], 'order_count'));// 总订单数 $old_total_array['total_room_num'] = array_sum(array_column($data['old_order_info'], 'room_count'));// 总间夜数 $old_total_array['total_order_price'] = array_sum(array_column($data['old_order_info'], 'ORDER_PRICE'));// 总销售额 $old_total_array['total_base_price'] = array_sum(array_column($data['old_order_info'], 'BASE_PRICE'));// 总销售额 $old_total_array['total_commission_total'] = array_sum(array_column($data['old_order_info'], 'TOTAL_COMMISSION'));// 总渠道佣金 $old_total_array['total_compensate_in'] = array_sum(array_column($data['old_order_info'], 'compensate_in'));// 总赔入 $old_total_array['total_compensate_out'] = array_sum(array_column($data['old_order_info'], 'compensate_out'));// 总赔出 $old_total_array['total_order_profit'] = array_sum(array_column($data['old_order_info'], 'PROFIT_VALUE'));// 订单总利润 foreach ($data['order_info'] as $key => $order) { // 总利润 $total_array['total_order_num'] += $order['order_count'];// 总订单数 $total_array['total_room_num'] += $order['room_count'];// 总间夜数 $total_array['total_order_price'] += round($order['ORDER_PRICE'], 2);// 总销售额 $total_array['total_base_price'] += round($order['BASE_PRICE'], 2);// 总销售额 $total_array['total_commission_total'] += round($order['TOTAL_COMMISSION'], 2);// 总渠道佣金 $total_array['total_compensate_in'] += round($order['compensate_in'], 2);// 总赔入 $total_array['total_compensate_out'] += round($order['compensate_out'], 2);// 总赔出 $total_array['total_order_profit'] += round($order['PROFIT_VALUE'], 2);// 订单总利润 //酒店纬度 if (!in_array($order['PARENT_PROD_ID'], $group_colum) && $op == 'getInfo') { $data['old_order_info'][] = ['PARENT_PROD_ID' => $order['PARENT_PROD_ID'], 'room_count' => 0, 'ORDER_PRICE' => 0, 'BASE_PRICE' => 0, 'TOTAL_COMMISSION' => 0, 'PROFIT_VALUE' => 0, 'compensate_in' => 0, 'compensate_out' => 0]; } // 渠道维度 if (!in_array($order['OUTSIDE_SALE_ORG_ID'], $group_colum) && $op == 'orgSale') { $data['old_order_info'][] = ['OUTSIDE_SALE_ORG_ID' => $order['OUTSIDE_SALE_ORG_ID'], 'room_count' => 0, 'ORDER_PRICE' => 0, 'BASE_PRICE' => 0, 'TOTAL_COMMISSION' => 0, 'PROFIT_VALUE' => 0, 'compensate_in' => 0, 'compensate_out' => 0]; } // 录单客服 if (!in_array($order['CREATE_USER_ID'], $group_colum) && $op == 'cusService') { $data['old_order_info'][] = ['CREATE_USER_ID' => $order['CREATE_USER_ID'], 'room_count' => 0, 'ORDER_PRICE' => 0, 'BASE_PRICE' => 0, 'TOTAL_COMMISSION' => 0, 'PROFIT_VALUE' => 0, 'compensate_in' => 0, 'compensate_out' => 0]; } // 发单客服 if (!in_array($order['SEND_CREATE_USER'], $group_colum) && $op == 'cusServiceSend') { $data['old_order_info'][] = ['SEND_CREATE_USER' => $order['SEND_CREATE_USER'], 'room_count' => 0, 'ORDER_PRICE' => 0, 'BASE_PRICE' => 0, 'TOTAL_COMMISSION' => 0, 'PROFIT_VALUE' => 0, 'compensate_in' => 0, 'compensate_out' => 0]; } // 运营维度 if (!in_array($order['PRINCIPAL_ID'], $group_colum) && $op == 'principal') { $data['old_order_info'][] = ['PRINCIPAL_ID' => $order['PRINCIPAL_ID'], 'room_count' => 0, 'ORDER_PRICE' => 0, 'BASE_PRICE' => 0, 'TOTAL_COMMISSION' => 0, 'PROFIT_VALUE' => 0, 'compensate_in' => 0, 'compensate_out' => 0]; } // 采购维度 if (!in_array($order['PURCHASE_TRUE_NAME'], $group_colum) && $op == 'purchaser') { $data['old_order_info'][] = ['PURCHASE_TRUE_NAME' => $order['PURCHASE_TRUE_NAME'], 'room_count' => 0, 'ORDER_PRICE' => 0, 'BASE_PRICE' => 0, 'TOTAL_COMMISSION' => 0, 'PROFIT_VALUE' => 0, 'compensate_in' => 0, 'compensate_out' => 0]; } // 房型维度 if (!in_array($order['PROD_ID'], $group_colum) && $op == 'roomInfo') { $data['old_order_info'][] = ['PROD_ID' => $order['PROD_ID'], 'room_count' => 0, 'ORDER_PRICE' => 0, 'BASE_PRICE' => 0, 'TOTAL_COMMISSION' => 0, 'PROFIT_VALUE' => 0, 'compensate_in' => 0, 'compensate_out' => 0]; } foreach ($data['old_order_info'] as $item => $old_order) { // 酒店纬度 if ( ($op == 'getInfo' && ($order['PARENT_PROD_ID'] == $old_order['PARENT_PROD_ID'] || $compensate_info['PARENT_PROD_ID'])) // 酒店纬度 || ($op == 'orgSale' && $order['OUTSIDE_SALE_ORG_ID'] == $old_order['OUTSIDE_SALE_ORG_ID']) || ($op == 'cusService' && $order['CREATE_USER_ID'] == $old_order['CREATE_USER_ID']) || ($op == 'cusServiceSend' && $order['SEND_CREATE_USER'] == $old_order['SEND_CREATE_USER']) || ($op == 'principal' && $order['PRINCIPAL_ID'] == $old_order['PRINCIPAL_ID']) || ($op == 'purchaser' && $order['SALES_MAN'] == $old_order['SALES_MAN']) || ($op == 'roomInfo' && $order['PROD_ID'] == $old_order['PROD_ID']) ) { // 间夜月环比 $data['order_info'][$key]['room_count_mom'] = (empty($old_order['room_count']) || $old_order['room_count'] == 0) ? '-' : round(($order['room_count'] - $old_order['room_count']) / $old_order['room_count'] * 100, 2) . '%'; // 销售额月环比 $data['order_info'][$key]['order_price_mom'] = (empty($old_order['ORDER_PRICE']) || $old_order['ORDER_PRICE'] == 0) ? '-' : round(($order['ORDER_PRICE'] - $old_order['ORDER_PRICE']) / $old_order['ORDER_PRICE'] * 100, 2) . '%'; // 毛利月环比 $data['order_info'][$key]['profit_value_mom'] = (empty($old_order['PROFIT_VALUE']) || $old_order['PROFIT_VALUE'] == 0) ? '-' : round(($order['PROFIT_VALUE'] - $old_order['PROFIT_VALUE']) / abs($old_order['PROFIT_VALUE']) * 100, 2) . '%'; // 毛利率 break; } } $data['order_info'][$key]['price_rate'] = (empty($order['ORDER_PRICE']) || $order['ORDER_PRICE'] == 0) ? '-' : round($order['PROFIT_VALUE'] / $order['ORDER_PRICE'], 4) * 100 . '%'; } // 本期总利润 $A = $total_array['total_order_profit'] - $total_array['compensate_out'] + $total_array['compensate_in']; // 上期总利润 $B = $old_total_array['total_order_profit'] - $old_total_array['compensate_out'] + $old_total_array['compensate_in']; // 总环比计算 $total_array['total_mom_room_count'] = empty($old_total_array['total_room_num']) ? '-' : round(($total_array['total_room_num'] - $old_total_array['total_room_num']) / $old_total_array['total_room_num'] * 100, 2) . '%'; $total_array['total_mom_order_price'] = empty($old_total_array['total_order_price']) ? '-' : number_format(($total_array['total_order_price'] - $old_total_array['total_order_price']) / $old_total_array['total_order_price'] * 100, 2) . '%'; $total_array['total_mom_profit_value'] = empty($B) ? '-' : number_format(($A - $B) / $B * 100, 2) . '%'; // 毛利月环比 $total_array['total_price_rate'] = (empty($total_array['total_order_price']) || $total_array['total_order_price'] == 0) ? '-' : number_format($A / $total_array['total_order_price'] * 100, 2) . '%'; // 毛利率 $data['total'] = $total_array; // 处理数据 return $data; } /** * @Author wanglg * @Desc查询日期段内所有订单信息,根据查询维度查询 * @param $params * @param $op * @return */ public function getOrderList1($params, $op) { $model = new searchOrderMain(); // 如果是运营,查询所运营的酒店信息,如果是非酒店运营,采购,管理人员,客服管理人员,返回空数组 if (BaseUserAuth::HOTEL_OPERATOR == Yii::$app->user->identity['USER_ROLE']) { $where = ['order_main.PRINCIPAL_ID' => Yii::$app->user->id]; $childWhere = ['PRINCIPAL_ID' => Yii::$app->user->id]; } elseif (BaseUserAuth::HOTEL_PURCHASE == Yii::$app->user->identity['USER_ROLE']) { $where = ['order_main.SALES_MAN' => Yii::$app->user->id]; $childWhere = ['SALES_MAN' => Yii::$app->user->id]; } elseif (Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_ADMIN || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::HOTEL_CUS_ADMIN || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::SYS_CS || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::SYS_ADMIN || Yii::$app->user->identity['USER_ROLE'] == BaseUserAuth::FINANCIAL_OFFICER) { // 酒店管理员、客服管理人员、后台管理人员和系统管理员可以查看所有数据 $where = ''; $childWhere = ''; } else { return []; } // 查询本月数据 $query = OrderMain::find() ->joinWith('user') ->joinWith('baseChannel') ->leftJoin('base_user as p', 'p.ID=order_main.PRINCIPAL_ID') ->leftJoin('base_user as pur', 'pur.ID=order_main.SALES_MAN') ->from('order_main'); $model->load($params); $query->andFilterWhere([ 'order_main.CANCEL_FLAG' => 0, 'order_main.ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_MAIN, 'order_main.ORDER_VALID_STATUS' => 1, ]); $query->addSelect(['order_main.OUTSIDE_SALE_ORG_ID', 'base_supplier.SUPPLIER_NAME as CHANNEL_NAME', 'order_main.PARENT_PROD_ID', 'order_main.CREATE_USER_ID', 'order_main.PROD_ID', 'order_main.PRINCIPAL_ID', 'order_main.SALES_MAN', 'p.TRUE_NAME as PRINCIPAL_TRUE_NAME', 'base_user.TRUE_NAME AS INPUT_CREATE_USER', 'order_main.PROD_NAME', 'pur.TRUE_NAME as PURCHASE_TRUE_NAME', 'COUNT(order_main.ORDER_ID) as order_count', 'order_main.PARENT_PROD_NAME', 'IF(0=0,0.00,0.00) as compensate_out', 'IF(0=0,0.00,0.00) as compensate_in']); if ($model->channel_id) { $query->andFilterWhere(['order_main.OUTSIDE_SALE_ORG_ID' => trim($model->channel_id)]); } if ($model->hotel_name) { $query->andFilterWhere(['like', 'order_main.PARENT_PROD_NAME', trim($model->hotel_name)]); } if ($model->hotel_id) { $query->andFilterWhere(['order_main.PARENT_PROD_ID' => trim($model->hotel_id)]); } if ($op != 'cusServiceSend') { $query->andFilterWhere(['order_main.ORDER_STATUS' =>// array(198, 314, 147, 313, 382), [OrderMain::ORDER_STATUS_WAITING_CONFIRM, OrderMain::ORDER_STATUS_CONFIRMED, OrderMain::ORDER_STATUS_FINISH, OrderMain::ORDER_STATUS_WAITING_SEND, OrderMain::ORDER_STATUS_CHANGING]]); } if ($op == 'getInfo') { $group_by = 'PARENT_PROD_ID'; $order_by = ['room_count' => SORT_DESC, 'order_main.PARENT_PROD_ID' => SORT_ASC]; } elseif ($op == 'orgSale') { $group_by = 'OUTSIDE_SALE_ORG_ID'; $order_by = ['room_count' => SORT_DESC, 'order_main.OUTSIDE_SALE_ORG_ID' => SORT_ASC]; } elseif ($op == 'cusService') // 客服录单 { $group_by = 'CREATE_USER_ID'; $order_by = ['room_count' => SORT_DESC, 'order_main.CREATE_USER_ID' => SORT_ASC]; } elseif ($op == 'cusServiceSend') // 客服发单 { $query->addSelect(['order_ht_status_log.CREATE_USER_ID AS SEND_USER_ID', 'lu.TRUE_NAME AS SEND_CREATE_USER']); $query->joinWith('orderHtStatusLog.user lu'); $query->andFilterWhere(['order_main.DOCKING_TYPE' => OrderMain::ORDER_TYPE_CHANNEL, 'order_ht_status_log.ORDER_STATUS' => OrderMain::ORDER_STATUS_WAITING_CONFIRM, 'order_ht_status_log.BEFORE_STATUS' => OrderMain::ORDER_STATUS_WAITING_SEND]); $group_by = 'SEND_USER_ID'; $order_by = ['room_count' => SORT_DESC, 'SEND_USER_ID' => SORT_ASC]; } elseif ($op == 'principal') // 运营 { $group_by = 'PRINCIPAL_ID'; $order_by = ['room_count' => SORT_DESC, 'order_main.PRINCIPAL_ID' => SORT_ASC]; } elseif ($op == 'purchaser') // 采购 { $group_by = 'SALES_MAN'; $order_by = ['room_count' => SORT_DESC, 'SALES_MAN' => SORT_ASC]; } elseif ($op == 'roomInfo') // 采购 { $group_by = 'PROD_ID'; $order_by = ['room_count' => SORT_DESC, 'order_main.PROD_ID' => SORT_ASC]; } else { $group_by = 'PARENT_PROD_ID'; $order_by = ['room_count' => SORT_DESC, 'order_main.PARENT_PROD_ID' => SORT_ASC]; } //预订时间 $date_start = ' 00:00:00'; $date_end = ' 23:59:59'; // 入住日期 if ($model->date_type == 2) { // 子查询需要查询的字段 $query->addSelect(['vice_order.ORDER_PRICE ORDER_PRICE', 'vice_order.BASE_PRICE BASE_PRICE', 'vice_order.TOTAL_COMMISSION TOTAL_COMMISSION', 'vice_order.PROFIT_VALUE PROFIT_VALUE', 'vice_order.room_count room_count']); $check_in = OrderMain::find() ->select(['SUM(ORDER_PRICE) ORDER_PRICE', 'SUM(BASE_PRICE) BASE_PRICE', 'SUM(TOTAL_COMMISSION) TOTAL_COMMISSION', 'SUM(PROFIT_VALUE) PROFIT_VALUE', 'count(order_main.ORDER_ID) AS room_count']) ->from('order_main'); $check_in->andFilterWhere(['ORDER_PROD_TYPE' => OrderMain::ORDER_PROD_TYPE_SUM, 'order_main.CANCEL_FLAG' => 0, 'ORDER_VALID_STATUS' => 1, 'order_main.ORDER_STATUS' => [OrderMain::ORDER_STATUS_WAITING_CONFIRM, OrderMain::ORDER_STATUS_CONFIRMED, OrderMain::ORDER_STATUS_FINISH, OrderMain::ORDER_STATUS_WAITING_SEND, OrderMain::ORDER_STATUS_CHANGING], ]); $check_in->andFilterWhere(['between', 'PROD_START_STATION_DATE', $model->date_from, $model->date_to]); if ($childWhere) { $check_in->andFilterWhere($childWhere); } // 查询筛选条件 if ($model->hotel_id) { $check_in->andFilterWhere(['PARENT_PROD_ID' => $model->hotel_id]); } if ($model->channel_id) { $check_in->andFilterWhere(['OUTSIDE_SALE_ORG_ID' => $model->channel_id]); } $check_in->groupBy($group_by); // 按照入住日期查询,因为一个订单可能有多个入住日期,但只统计筛选范围的子订单,需要通过子订单来查询, // 如果是发单维度,需要关联订单状态表查询发单客服 if ($op == 'cusServiceSend') { $check_in->addSelect(["order_ht_status_log.CREATE_USER_ID AS {$group_by}"]); $check_in->leftJoin('order_ht_status_log', 'order_main.PARENT_ORDER_ID=order_ht_status_log.ORDER_ID AND order_ht_status_log.ORDER_STATUS=198 AND order_ht_status_log.BEFORE_STATUS=313') ->leftJoin('base_user', 'order_ht_status_log.CREATE_USER_ID=base_user.ID'); $check_in->andFilterWhere(['DOCKING_TYPE' => OrderMain::ORDER_TYPE_CHANNEL]); $check_in_sql = $check_in->createCommand()->getRawSql(); $query->leftJoin("({$check_in_sql}) as vice_order", "vice_order.{$group_by}=order_ht_status_log.CREATE_USER_ID"); } else { $check_in->addSelect([$group_by]); $check_in_sql = $check_in->createCommand()->getRawSql(); $query->leftJoin("({$check_in_sql}) as vice_order", "vice_order.{$group_by}=order_main.{$group_by}"); } // 主订单的日期筛选 $query->andFilterWhere(['or', ['and', ['<=', 'order_main.PROD_START_STATION_DATE', $model->date_from], ['>', 'order_main.PROD_END_STATION_DATE', $model->date_from]], ['and', ['<=', 'order_main.PROD_START_STATION_DATE', $model->date_to], ['>', 'order_main.PROD_END_STATION_DATE', $model->date_to]], ['and', ['>=', 'order_main.PROD_START_STATION_DATE', $model->date_from], ['<=', 'order_main.PROD_END_STATION_DATE', $model->date_to]]]); } elseif ($model->date_type == 3) { // 离店 $date_column = 'PROD_END_STATION_DATE'; $query->addSelect(['SUM(order_main.ORDER_PRICE) as ORDER_PRICE', 'SUM(order_main.BASE_PRICE) as BASE_PRICE', 'SUM(order_main.TOTAL_COMMISSION) as TOTAL_COMMISSION', 'SUM(order_main.PROFIT_VALUE) as PROFIT_VALUE', 'SUM((SELECT COUNT(ORDER_ID) FROM order_main a WHERE PARENT_ORDER_ID=order_main.ORDER_ID AND a.CANCEL_FLAG=0 AND a.ORDER_PROD_TYPE=26)) as room_count', ]); $query->andFilterWhere(['between', $date_column, $model->date_from, $model->date_to]); } else { // 录单时间 $query->addSelect(['SUM(order_main.ORDER_PRICE) as ORDER_PRICE', 'SUM(order_main.BASE_PRICE) as BASE_PRICE', 'SUM(order_main.TOTAL_COMMISSION) as TOTAL_COMMISSION', 'SUM(order_main.PROFIT_VALUE) as PROFIT_VALUE', 'SUM((SELECT COUNT(ORDER_ID) FROM order_main a WHERE PARENT_ORDER_ID=order_main.ORDER_ID AND a.CANCEL_FLAG=0 AND a.ORDER_PROD_TYPE=26)) as room_count', ]); $query->andFilterWhere(['between', 'order_main.CREATE_TIME', $model->date_from . $date_start, $model->date_to . $date_end]); } if ($where) { $query->andFilterWhere($where); } $query->orderBy($order_by); $query->groupBy($group_by); // $sql = $query->createCommand()->getRawSql(); return $query->asArray()->all(); } /** * @Author wanglg * @Desc 获取赔入赔出sql对象 * @param $params查询维度详细参数 * @param $op查询维度 * @return object */ public function getCompensateInOrOut($params, $op) { $from = $params['date_from'] . ' 00:00:00'; $to = $params['date_to'] . ' 23:59:59'; $info = OrderFinanceReparations::find() ->select(['b.CREATE_TIME', 'b.CREATE_USER_ID', 'b.SALES_MAN AS SALES_MAN', 'b.PRINCIPAL_ID', 'a.ORDER_ID', 'b.PARENT_PROD_ID', 'b.PROD_ID', 'b.CUSTOMER_NAME', 'b.CUSTOMER_MOBILE', 'b.PARENT_PROD_NAME', 'b.PROD_NAME', 'b.OUTSIDE_SALE_ORG_ID', 'b.PROD_START_STATION_DATE', 'b.PROD_END_STATION_DATE', 'IF(0=0, "0", "0") as ORDER_PRICE', 'IF(0=0, "0", "0") as BASE_PRICE', 'IF(0=0, "0", "0") as TOTAL_COMMISSION', 'IF(0=0, "0", "0") as PROFIT_VALUE', 'bs.SUPPLIER_NAME as CHANNEL_NAME', 'user2.TRUE_NAME as INPUT_CREATE_USER', 'user1.TRUE_NAME as PURCHASE_TRUE_NAME', 'IF(0=0, "-", "-") AS ORDER_STATUS_NAME']) ->leftJoin('order_main b', 'a.order_id=b.ORDER_ID') ->leftJoin('base_supplier bs', 'bs.ID=b.OUTSIDE_SALE_ORG_ID') ->leftJoin('base_user user2', 'user2.ID=b.CREATE_USER_ID') ->leftJoin('base_user user1', 'user1.ID=b.SALES_MAN') ->where(['and', 'a.cancel_flag=0', 'b.ORDER_PROD_TYPE=25', 'b.CANCEL_FLAG=0', "a.create_time between '{$from}' and '{$to}'"]) ->from('order_finance_reparations a'); // 如果是发单或录单则不统计赔入赔出 if (in_array($op, ['cusServiceSend', 'cusService'])) { $info->addSelect(['IF(0=0, 0, 0) AS order_count', 'IF(0=0, 0, 0) as compensate_out', 'IF(0=0, 0, 0) as compensate_in',]); } else { $info->addSelect(['COUNT(a.order_id) as order_count', 'SUM(case reparation_type when 1 then reparations else 0.00 end) as compensate_out', 'SUM(case reparation_type when 2 then reparations else 0.00 end) as compensate_in',]); } // 查询发单相关信息 if ($op == 'cusServiceSend') { $info->addSelect(['sl.CREATE_USER_ID as SEND_USER_ID', 'user.TRUE_NAME SEND_CREATE_USER']); $info->leftJoin('order_ht_status_log sl', 'sl.ORDER_ID=b.ORDER_ID and sl.ORDER_STATUS=198 and sl.BEFORE_STATUS=313') ->leftJoin('base_user user', 'sl.CREATE_USER_ID=user.ID'); $info->andFilterWhere(['b.DOCKING_TYPE' => OrderMain::ORDER_TYPE_CHANNEL]); $info->groupBy('SEND_USER_ID'); } else { $group_by = $this->selectGroupBy($op); $info->groupBy($group_by); } if (!empty($params['hotel_id'])) { $info->andFilterWhere(['b.PARENT_PROD_ID' => $params['hotel_id']]); } if (!empty($params['channel_id'])) { $info->andFilterWhere(['b.OUTSIDE_SALE_ORG_ID' => $params['channel_id']]); } if (!empty($params['principal_id'])) { $info->andFilterWhere(['b.PRINCIPAL_ID' => $params['principal_id']]); } if (!empty($params['purchaser_id'])) { $info->andFilterWhere(['b.SALES_MAN' => $params['purchaser_id']]); } if (!empty($params['user_id'])) { $info->andFilterWhere(['b.CREATE_USER_ID' => $params['user_id']]); } if (!empty($params['send_user_id'])) { $info->andFilterWhere(['sl.CREATE_USER_ID' => $params['send_user_id']]); } $info->addSelect(['IF(0=0, "-", "-") as room_count']); // 查询如果订单日期也在该范围内则room_count - 该数量 return $info; } /** * @Author wanglg * @Desc 不同纬度分组 * @param $op分组维度 * @return array */ public function selectGroupBy($op) { if ($op == 'getInfo') { $group_by = ['PARENT_PROD_ID'];// 酒店维度 } elseif ($op == 'orgSale') { $group_by = ['OUTSIDE_SALE_ORG_ID']; } elseif ($op == 'cusService') // 客服录单 { $group_by = ['CREATE_USER_ID']; } elseif ($op == 'principal') // 运营 { $group_by = ['PRINCIPAL_ID']; } elseif ($op == 'purchaser') // 采购 { $group_by = ['SALES_MAN']; } elseif ($op == 'roomInfo') // 房型 { $group_by = ['PROD_ID']; } else { $group_by = ['PARENT_PROD_ID']; } return $group_by; } }