|
- <?php
-
- namespace backend\modules\motorcade\models;
-
- use common\components\zOfficeWechat;
- use backend\common\Utils;
- use backend\modules\api\models\BusExpenses;
- use backend\modules\zzcs\models\BaseResource;
- use backend\modules\zzcs\models\BaseUser;
- use backend\modules\zzcs\models\DictType;
- use backend\modules\zzcs\models\RunBus;
- use common\models\zModel;
- use common\components\zHttp;
- use Yii;
- use yii\data\ActiveDataProvider;
- use yii\data\SqlDataProvider;
- use yii\db\Exception;
- use yii\db\Query;
- use backend\modules\motorcade\components\LogComponent;
-
- /**
- * This is the model class for table "bus_order".
- *
- * @property integer $id
- * @property integer $bus_number
- * @property integer $create_user_id
- * @property string $create_time
- * @property integer $update_user_id
- * @property string $update_time
- * @property integer $cancel_flag
- * @property integer $use_bus_org_id
- * @property integer $task_type
- * @property integer $motorcade_id
- * @property string $run_date
- * @property integer $run_bus_id
- * @property integer $run_id
- * @property integer $line_id
- * @property integer $start_time
- * @property integer $bus_order_id
- * @property integer $bus_type_res_id
- * @property integer $seat_count
- * @property integer $saled_count
- * @property integer $itinerary_id
- * @property string $itinerary_name
- * @property integer $line_type
- * @property integer $day_num
- * @property integer $bus_cost_type
- * @property string $bus_cost
- * @property string $remark
- * @property string $send_msg
- * @property integer $send_type
- * @property string $send_cost
- * @property integer $send_bus_res_id
- * @property integer $send_bus_driver_res_id
- * @property integer $send_status
- * @property integer $run_status
- * @property integer $finance_status
- * @property integer $end_status
- * @property integer $line_status
- * @property integer $finance_lock
- * @property integer $outcome_finance_lock
- * @property integer $send_bus_count
- * @property integer $contacts
- * @property integer $tels
- * @property integer $safe
- * @property string $single_contact
- * @property integer $bus_order_finance
- *
- * @property array $bus_order_status_array
- * @property BusDepartment $department
- */
- class BusOrder extends zModel
- {
- const LINE_TYPE_PROVINCE = 1; //省际
- const LINE_TYPE_CITY = 2; //市内
-
- const TASK_TYPE_SYNC = 546; //同步
- const TASK_TYPE_CREATE = 547; //车队系统添加
- const TASK_TYPE_CUSTOM = 548; //定制巴士
-
- const STATUS_SEND_WAITING_SURE = 441; //待调度确认
- const STATUS_SEND_SURE = 442; //已调度
-
- const STATUS_RUN_SENDING = 434; //调度安排中
- const STATUS_RUN_READY = 435; //出车准备
- const STATUS_RUN_WAITING = 436; //待出车
- const STATUS_RUN_RUNNING = 437; //出车中
- const STATUS_RUN_FINISH = 438; //出车完成
- const STATUS_RUN_CANCEL = 439; //出车取消
-
- const STATUS_FINANCE_NOT = 444; //出车准备
- const STATUS_FINANCE_WAITING = 445; //待审核
- const STATUS_FINANCE_SURE = 446; //已审核
- const STATUS_FINANCE_REJECT = 447; //被驳回
-
- const STATUS_END_NOTHING = 448; //未结算,什么操作都没有 1
- const STATUS_END_WAITING_CONFIRM = 602; //待核对 2
- const STATUS_END_WAITING_FINISH = 603; //待结算 3
- const STATUS_END_FINISH = 449; //已结算 4
-
- const CLIENT_TYPE_COMPANY = 469; //企业用车
- const CLIENT_TYPE_PERSONAL = 470; //个人用车
-
- const FINANCE_LOCK_OPEN = 0; //财务结算 未关账
- const FINANCE_LOCK_LOCKED = 1; //财务结算 已关账
-
- const BUS_COST_TYPE_ALL = 477; //包车计价
- const BUS_COST_TYPE_ONE = 478; //人数计价
-
- const SEND_TYPE_INCOME = 0; //内部派车
- const SEND_TYPE_OUTSIDE = 1; //外部派车
-
- public $muti_flag = ''; //是否批量的标示
- public $run_date_from = ''; //日期的开始时间(批量添加出车任务)
- public $run_date_to = ''; //日期的结束时间
- public $run_status_name;
- public $send_status_name;
- public $finance_status_name;
- public $end_status_name;
- public $line_status_name;
- public $order_count;
- public $miles;
- public $driver_fee;
- public $park_fee;
- public $food_fee;
- public $sleep_fee;
- public $driver_name;
- public $bus_driver_res_id;
- public $itinerary_list = [];
- public $end_time;
- public $bus_no;
- public $line_type_name;
- public $bus_number_name;
- public $run_date_name;
-
- //导出报表参数
- public $op;
- public $date_type;
- public $start_date;
- public $end_date;
- public $bus_id;
- public $driver_id;
- public $depart_name;
- public $lichengshu;
-
- //不同状态对应的数量
- public $count_all = 0;
- public $count_440 = 0;
- public $count_441 = 0;
- public $count_442 = 0;
- public $count_443 = 0;
-
- //如果状态发生了变化,出车详情 detail.js需要作相应变更
- const bus_order_status_array = [
- // 430 => [ //出车状态 run_status
- 0 => '',
- 434 => "调度安排中",
- 435 => "出车准备",
- 436 => "待出车",
- 437 => "出车中",
- 438 => "已完成",
- 439 => "已取消", //巴士停运状态142 已取消148
- // ],
- // 431 => [ //调度状态 send_status
- // 0 => '',
- 440 => "待调度",
- 441 => "待调度确认",
- 442 => "已调度",
- 443 => "被驳回",
- // ],
- // 432 => [ //报账状态 finance_status
- // 0 => '',
- 444 => "未报账",
- 445 => "待审核",
- 446 => "已审核",
- 447 => "被驳回",
- // ],
- // 433 => [ //收支结算状态 end_status
- // 0 => '',
- 448 => "未结算",
- 449 => "已结算",
- 482 => "被驳回",
- self::STATUS_END_WAITING_CONFIRM => '待核对',
- self::STATUS_END_WAITING_FINISH => '待结算',
- // ]
- ];
-
- //车辆报账费用科目
- public static $bus_order_fee_array = [
- 'FEE_OIL' => 462,
- 'FEE_BRIDGE' => 463,
- 'FEE_DRIVER' => 464,
- 'FEE_PARK' => 465,
- 'FEE_FOOD' => 466,
- 'FEE_HOTEL' => 467,
- ];
-
- // public function getReceive()
- // {
- // $query = BusOrder::find();
- // $dataProvider = new ActiveDataProvider([
- // 'query' => $query
- // ]);
- // return $dataProvider;
- // }
-
- public function load($data, $formName = null)
- {
- $this->start_date = isset($data['start_date']) ? $data['start_date'] : date('Y-m-01');
- $this->end_date = isset($data['end_date']) ? $data['end_date'] : date('Y-m-t');
- $this->date_type = isset($data['date_type']) ? $data['date_type'] : 1;
-
-
- $this->muti_flag = isset($data['BusOrder']['muti_flag']) ? $data['BusOrder']['muti_flag'] : false;
-
- if ($this->muti_flag) {
- $this->run_date_from = $data['BusOrder']['run_date_from'];
- $this->run_date_to = $data['BusOrder']['run_date_to'];
- }
- return parent::load($data, $formName);
- }
-
- //可以取消出车的状态值,run_status为其他状态时不可以取消
- static $bus_cancel_array = [434, 435, 436];
-
- /**
- * @inheritdoc
- */
- public static function tableName()
- {
- return 'bus_order';
- }
-
- /**
- * @inheritdoc
- */
- public function rules()
- {
- return [
- [['bus_number', 'run_date', 'itinerary_id', 'bus_type_res_id', 'line_type', 'day_num', 'bus_cost_type'], 'required'],
- [['bus_number', 'create_user_id', 'update_user_id', 'cancel_flag', 'use_bus_org_id', 'run_id',
- 'bus_order_id', 'bus_type_res_id', 'seat_count', 'itinerary_id', 'line_type', 'day_num',
- 'bus_cost_type', 'send_bus_res_id', 'send_bus_driver_res_id', 'send_status', 'run_status',
- 'finance_status', 'task_type', 'send_bus_count'], 'integer'],
- [['update_time', 'line_group_type', 'run_bus_id'], 'safe'],
- [['create_time', 'contacts'], 'string', 'max' => 20],
- [['run_date'], 'string', 'max' => 10],
- [['itinerary_name', 'remark', 'single_contact'], 'string', 'max' => 100],
- [['remark'], 'string', 'max' => 100],
- [['run_status'], 'cancelCheck', 'on' => 'cancel'],
- [['itinerary_name'], 'required', 'message' => '请填写线路名称'],
- [['use_bus_org_id'], 'required', 'message' => '请选择用车单位'],
- [['bus_type_res_id'], 'required', 'message' => '请选择用车类型'],
- [['saled_count'], 'number', 'message' => '请正确填写乘客人数'],
- [['bus_cost'], 'required', 'message' => '请填写车价'],
- [['bus_cost'], 'number', 'message' => '请正确填写车价'],
-
- [['tels'], 'number', 'message' => '请正确填写联系电话'],
- [['tels'], 'string', 'max' => 20],
- [['send_cost'], 'number', 'message' => '请填写数字'],
- [['send_bus_res_id', 'send_bus_driver_res_id'], 'validateBothRequired', 'params' => ['message' => '车辆司机必须同时调派']],
- [['use_bus_org_id'], 'singleContactValidate'],
- [['single_contact'], 'trim']
- ];
- }
-
- /**
- * @inheritdoc
- */
- public function attributeLabels()
- {
- return [
- 'id' => 'ID',
- 'bus_number' => '出车单号',
- 'create_user_id' => 'Create User ID',
- 'create_time' => '创建时间',
- 'update_user_id' => '修改用户',
- 'update_time' => '修改时间',
- 'cancel_flag' => 'Cancel Flag',
- 'use_bus_org_id' => '用车单位',
- 'run_date' => '出车时间',
- 'run_bus_id' => '车次号',
- 'run_id' => 'Run ID',
- 'bus_order_id' => 'Bus Order ID',
- 'bus_type_res_id' => '用车类型',
- 'seat_count' => '座位数',
- 'saled_count' => '乘客数',
- 'itinerary_id' => '行程编号',
- 'itinerary_name' => '线路名称',
- 'line_type' => '线路类型',
- 'line_group_type' => '线路组合',
- 'day_num' => '行程天数',
- 'bus_cost_type' => '计价方式',
- 'bus_cost' => '金额',
- 'send_type' => '外部用车',
- 'remark' => '用车备注',
- 'send_msg' => '调度信息',
- 'send_bus_res_id' => '车辆',
- 'send_bus_driver_res_id' => '司机',
- 'send_status' => '调度状态',
- 'run_status' => '出车状态',
- 'finance_status' => '报账状态',
- 'start_date' => '起始时间',
- 'end_date' => '结束时间',
- 'Driver Name' => '司机姓名',
- 'Miles ' => '公里数',
- 'Driver Fee' => '司贴',
- 'Park Fee' => '停车费',
- 'Food Fee' => '餐饮费',
- 'Sleep Fee' => '住宿费',
- 'contacts' => '联系人',
- 'tels' => '联系电话',
- 'single_contact' => '单结收款人',
-
- ];
- }
-
- /**
- * @return \yii\db\ActiveQuery
- */
- public function getUser()
- {
- return $this->hasOne(BaseUser::className(), ['ID' => 'create_user_id']);
- }
-
- /**
- * @return \yii\db\ActiveQuery 调派的车辆
- */
- public function getBus()
- {
- return $this->hasOne(BaseBus::className(), ['BUS_ID' => 'send_bus_res_id']);
- }
-
- /**
- * @return \yii\db\ActiveQuery 调派的司机
- */
- public function getDriver()
- {
- return $this->hasOne(BaseDriver::className(), ['DRIVER_ID' => 'send_bus_driver_res_id']);
- }
-
- //行程明细
- public function getItinerary()
- {
- return $this->hasMany(BusItinerary::className(), ['itinerary_id' => 'itinerary_id'])->from(BusItinerary::tableName() . ' i')->andFilterWhere(['i.cancel_flag' => 0])->orderBy('day_seq_id, start_time');
- }
-
- //用车单位
- public function getDepartment()
- {
- return $this->hasOne(BusDepartment::className(), ['ID' => 'use_bus_org_id']);
- }
-
- //出车报账明细
- public function getExpense()
- {
- return $this->hasMany(RunBusExpenses::className(), ['bus_number' => 'bus_number'])->onCondition([RunBusExpenses::tableName() . '.cancel_flag' => 0])->orderBy('expense_subject_id');
- }
-
- //计价方式
- public function getBusCostType()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'bus_cost_type']);
- }
-
- //调度状态,各种状态
- public function getSendType()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'send_status'])->from(DictType::tableName() . ' as st');
- }
-
- //出车状态
- public function getRunType()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'run_status'])->from(DictType::tableName() . ' as rt');
- }
-
- //报账状态
- public function getFinanceType()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'finance_status'])->from(DictType::tableName() . ' as ft');
- }
-
- //结算状态
- public function getEndType()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'end_status'])->from(DictType::tableName() . ' as et');
- }
-
- //应付结算状态
- public function getOutcomeEndType()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'outcome_end_status'])->from(DictType::tableName() . ' as oet');
- }
-
- //状态变更记录
- public function getStatusLog()
- {
- return $this->hasMany(BusOrderStatusLog::className(), ['BUS_NUMBER' => 'bus_number'])
- ->andFilterWhere(['cancel_flag' => 0])
- ->orderBy('CREATE_TIME DESC')->groupBy('TYPE');
- }
-
- //取消的操作人,取的update_user其实应该查状态日志
- public function getCancelInfo()
- {
- return $this->hasOne(BaseUser::className(), ['ID' => 'update_user_id']);
- }
-
-
- /**
- * User:Steven
- *
- * 获取车座类型
- * @return array
- */
- public function getBusType()
- {
- $sql = "SELECT a.res_id,a.res_name,a.count FROM (SELECT res_id,res_name,cast(substring_index(res_name,'座',1) AS SIGNED) AS count FROM base_resource WHERE res_type_id=69 AND cancel_flag=0) AS a ORDER BY a.count";
- $conn = Yii::$app->db;
- $data = $conn->createCommand($sql)->queryAll();
- return ['model' => $this, 'data' => $data];
- }
-
- /**
- * User:Steven
- *
- * 获取用车单位
- * @return array
- */
- public function getBusdepartment()
- {
- $main_cooperation_id = $this->login_user->MAIN_CORP_ID2;
- $sql = "select ID,settle_type,depart_name from bus_department where main_cooperation_id=$main_cooperation_id and cancel_flag=0 and status<>612";
- $conn = Yii::$app->db;
- $data = $conn->createCommand($sql)->queryAll();
- return ['model' => $this, 'data' => $data];
- }
-
- public function getChuCheCompany()
- {
- $main_cooperation_id = $this->login_user->MAIN_CORP_ID2;
- $sql = "select res_id,res_name from base_resource where res_id in (select distinct org_id from base_bus where main_corp_id = $main_cooperation_id)";
- $conn = Yii::$app->db;
- $data = $conn->createCommand($sql)->queryAll();
- return ['model' => $this, 'data' => $data];
- }
-
- /**
- * Created by PhpStorm.
- * NOTES:
- * User: Steven
- * Date: 2018/3/15
- * Time: 10:37
- * Class getLogInfo
- * @param $bus_number
- * @return array|\yii\db\ActiveRecord[]
- */
- public function getLogInfo($bus_number)
- {
- $action_log = BusActionLog::find()->leftJoin('base_user b', 'a.user_id=b.ID')->from(BusActionLog::tableName() . ' as a')
- ->select(['a.*', 'b.TRUE_NAME'])->where(['a.bus_order_id' => $bus_number]);
- $res = $action_log->asArray()->all();
- $log = BusOrderStatusLog::find()->select(['a.*', 'b.TRUE_NAME'])->leftJoin('base_user b', 'a.CREATE_USER_ID=b.ID')->from(BusOrderStatusLog::tableName() . ' as a')
- ->where(['a.BUS_NUMBER' => $bus_number, 'a.cancel_flag' => 0])->asArray()->all();
- $arr = [];
- foreach ($log as $val) {
- $arr[] = [
- 'msg' => $val['MSG'],
- 'created_at' => $val['CREATE_TIME'],
- 'true_name' => $val['TRUE_NAME']
- ];
- }
- foreach ($res as $item) {
- $arr[] = [
- 'msg' => $item['msg'],
- 'created_at' => $item['created_at'],
- 'true_name' => $item['TRUE_NAME']
- ];
- }
- $time = array_column($arr, 'created_at');
- array_multisort($time, SORT_ASC, $arr);
- return $arr;
- }
-
- /**
- * User:Steven
- * 添加出车入口
- *
- */
- public function addBus()
- {
- $res = false;
- $bus = $_POST;
- $conn = Yii::$app->db;
- $transaction = $conn->beginTransaction(); //开始事务
- try {
- if ($this->muti_flag == "on") { //批量添加出车任务
- $date_arr = $this->getDateFromRange($this->run_date, $this->run_date_to);
- foreach ($date_arr as $item) {
- $res = $this->addBusService($bus, $conn, $item);
- }
- } else {
- $res = $this->addBusService($bus, $conn, $this->run_date);
- }
- $transaction->commit(); //提交
- } catch (Exception $e) {
- $transaction->rollBack();
- }
- return $res;
- }
-
- /**
- * User:Steven
- * 处理添加出车任务逻辑
- *
- * @param $bus
- * @param $conn \yii\db\Connection
- * @param $item
- *
- * @return string
- */
- public function addBusService($bus, $conn, $item)
- {
- $get_unique_id = "select func_get_unique_id(5,1) as unique_id";
- $data = $conn->createCommand($get_unique_id)->queryAll();
- $this->itinerary_id = $data[0]['unique_id']; //行程ID
- $this->bus_number = $data[0]['unique_id']; //出车单号
- $this->run_date = $item;
- $this->task_type = $this->task_type == null ? BusOrder::TASK_TYPE_CREATE : $this->task_type; //标识当前任务类型是车系统添加的
- $seat_count = $conn->createCommand("SELECT cast(substring_index(res_name,'座',1) AS SIGNED) AS seat_count FROM base_resource WHERE res_id={$this->bus_type_res_id} AND cancel_flag=0 LIMIT 1")->queryAll();
- $this->seat_count = $seat_count[0]['seat_count'];
- $arr = array();
- if (empty($this->itinerary_list)) {
- $bus_it = array_values($bus['BusItinerary']);
- } else {
- $bus_it = $this->itinerary_list;
- }
- foreach ($bus_it as $k => $v) {
- if (!is_a($v, BusItinerary::className())) {
- $busItinerary = new BusItinerary();
- $busItinerary->setAttributes($v);
- } else {
- $busItinerary = clone $v;
- }
- $busItinerary['itinerary_id'] = $data[0]['unique_id'];
- $busItinerary['station_seq_id'] = $k + 1;
- $time_arr = explode(':', $v['start_time']);
- $busItinerary['start_time'] = str_pad($time_arr[0], 2, 0, STR_PAD_LEFT) . ':' . $time_arr[1];
-
- $arr[] = $busItinerary;
- }
- foreach ($arr as $value) {
- $value->save(); //向bus_itinerary表中加入当前出车任务的行程数据
- }
- if ($this->validate()) {
- $busOrder = clone $this;
- $time_array = explode(':', $bus_it[0]['start_time']);
- $busOrder->start_time = str_pad($time_array[0], 2, 0, STR_PAD_LEFT) . ':' . $time_array[1];
- //如果在添加出车时,就已经调派了司机和车辆,那么调度状态为待调度确认
- if ($busOrder->send_bus_res_id != '' && $busOrder->send_bus_driver_res_id != '') {
- $busOrder->send_status = $this::STATUS_SEND_WAITING_SURE;
- // $busOrder->run_status = $this::STATUS_RUN_SENDING;
- }
- $res = $busOrder->save(); //向bus_order添加出车任务
- if ($res) { // 添加操作日志
- $msg = "创建任务单号为{$busOrder->bus_number}的出车任务。";
- if ($busOrder->send_bus_res_id != '') {
- $bus = BaseBus::findOne($busOrder->send_bus_res_id);
- $msg .= '车辆调度:' . $bus->BUS_NO . ';';
- }
- if ($busOrder->send_bus_driver_res_id != '') {
- $driver = BaseDriver::findOne($busOrder->send_bus_driver_res_id);
- $msg .= '司机调度:' . $driver->DRIVER_NAME;
- }
- LogComponent::addLog($busOrder->bus_number, LOG_TYPE_ORDER, $msg, 'bus_number', $busOrder->bus_number, 0);
- }
- } else {
- $this->start_time = $bus_it[0]['start_time'];
- $res = false;
- }
- return $res;
- }
-
- /**
- * User:Steven
- * Desc:同步cs系统的出车记录
- * @param bool $flag 是否自定义同步,默认是同步未来三天的数据
- * @return array
- */
- public function SyncBusOrder($flag = true)
- {
- if ($flag) {
- $begin_date = date("Y-m-d");
- $end_date = date("Y-m-d", strtotime("+3 day"));
- //获取要同步的数据
- $sql_proc = "call sp_get_bus_order('{$begin_date}','{$end_date}')";
- } else {
- $begin_date = date("Y-m-d", strtotime("+3 day"));
- $end_date = '2018-10-08';
- //获取要同步的数据
- $sql_proc = "call sp_get_bus_order_tem('{$begin_date}','{$end_date}')";
- }
-
- $conn = Yii::$app->db;
- $data = $conn->createCommand($sql_proc)->queryAll();
- $sql = "select distinct run_bus_id,run_id,bus_order_id from bus_order where run_id <>0 and run_date between '{$begin_date}' and '{$end_date}'";
- $run_list = $conn->createCommand($sql)->queryAll();
- $transaction = $conn->beginTransaction(); //开始事务
- try {
- $run_list_already = array();
- if (!empty($run_list)) {
- foreach ($run_list as $key => $value) {
- $run_list_already[$value['run_id']]['bus_order_id'][] = $value['bus_order_id'];
- }
- }
- if (!empty($data)) {
- foreach ($data as $k => $v) {
- //根据不同的承运车队同步数据到不同的运营主体下:
- switch ($v['motorcade_id']) {
- case 628: //恒栋车队
- $user_id = 487; //admin_007:恒栋管理员
- $main_corporation_id = 7;
- break;
- case 403: //千旅车队
- $user_id = 559; //admin_013:千旅管理员
- $main_corporation_id = 13;
- break;
- case 1284: //黄山长三角车队
- $user_id = 579; //admin_011:郝贵福
- $main_corporation_id = 12;
- break;
- case 1288: //苏州舟游车队
- $user_id = 582; //周慧
- $main_corporation_id = 15;
- break;
- case 1466: //整车接送车队(李子健)
- $user_id = 673; //admin_021
- $main_corporation_id = 26;
- break;
- case 1469: //上海瑞景管理员(李子健)
- $user_id = 676; //admin_023
- $main_corporation_id = 27;
- break;
- case 1691: //
- $user_id = 783; //admin_035
- $main_corporation_id = 35;
- break;
- case 1783: // 黄果树车队
- $user_id = 830; // admin_830
- $main_corporation_id = 38;
- break;
- case 1796: //
- $user_id = 831; //
- $main_corporation_id = 40;
- break;
- case 1743: //
- $user_id = 853; //
- $main_corporation_id = 41;
- break;
- case 1725:
- $user_id = 854; //
- $main_corporation_id = 42;
- break;
- case 1679: //
- $user_id = 855; //
- $main_corporation_id = 43;
- break;
- default:
- $user_id = 0;
- }
- if ($user_id == 0) {
- continue;
- }
- if (array_key_exists($v['run_id'], $run_list_already) && in_array($v['bus_order_id'], $run_list_already[$v['run_id']]['bus_order_id'])) { //已经同步过的任务
- $department_id = $this->getDepartmentID($main_corporation_id, $v['main_corp_id'], $user_id);
- if ($v['run_bus_status'] == 142) //142:已停运 对巴士对车次进行取消,车队系统也需要取消对应出车任务
- $run_str = ', run_status = 439, send_status = 440, send_bus_res_id=null, send_bus_driver_res_id=null';
- else
- $run_str = ', run_status = if(run_status = 439, 434, run_status), send_status = if(run_status = 439, 440, send_status)';
- $sql_update = "update bus_order set create_user_id=$user_id,use_bus_org_id=$department_id,update_user_id=$user_id,motorcade_id={$v['motorcade_id']},
- bus_cost={$v['cost_price']},bus_cost_type = {$v['cost_type']},update_time=now(),saled_count={$v['saled_count']} $run_str where run_id={$v['run_id']} and bus_order_id={$v['bus_order_id']}";
- $up_rs = $conn->createCommand($sql_update)->execute();
- if (!$up_rs) {
- throw new \Exception('修改失败');
- }
- } elseif ($v['run_bus_status'] != 142) { //未同步的出车任务,需要新增
- $department_id = $this->getDepartmentID($main_corporation_id, $v['main_corp_id'], $user_id);
- #region 将当前的车次线路所属的运营主体作为用车单位存入bus_department
- #endregion
- $get_unique_id = "select func_get_unique_id(5,1) as unique_id"; //得到新的出车任务ID
- $data_id = $conn->createCommand($get_unique_id)->queryAll();
- $sql_station = "select a.run_id,a.prod_id,a.station_order_id,a.start_time,a.station_res_id,a.station_inout_type,a.create_user_id,a.create_time,b.res_name,
- group_concat(distinct if(c.type_id=279,c.property,'') separator'') as address,group_concat(if(c.type_id=212,c.property,'')separator'') as longitude,
- group_concat(if(c.type_id=213,c.property,'')separator'') as latitude
- from run_station a
- left join base_resource b on a.station_res_id=b.res_id
- left join base_resource_property c on b.res_id=c.res_id and c.cancel_flag=0
- where run_id={$v['run_id']} group by a.station_res_id"; //查询当前班次的途经站点
- $station_list = $conn->createCommand($sql_station)->queryAll();
- if (!empty($station_list)) {
- foreach ($station_list as $s_k => $s_v) {
- $time_array = explode(':', $s_v['start_time']);
- $bt_start_time = str_pad($time_array[0], 2, 0, STR_PAD_LEFT) . ':' . $time_array[1];
- $sql_itinerary = "insert into bus_itinerary(`itinerary_id`, `create_time`, `create_user_id`, `cancel_flag`,`station_res_id`, `station_seq_id`, `station_name`, `station_address`, `Longitude`, `Latitude`, `inout_type`, `day_seq_id`, `start_time`)
- values({$data_id[0]['unique_id']},'{$s_v['create_time']}',{$s_v['create_user_id']},0,{$s_v['station_res_id']},{$s_v['station_order_id']},'{$s_v['res_name']}','{$s_v['address']}','{$s_v['longitude']}','{$s_v['latitude']}',{$s_v['station_inout_type']},1,'{$bt_start_time}')";
- $conn->createCommand($sql_itinerary)->execute();
- }
- }
- $time_arr = explode(':', $v['run_time']);
- $this->bus_number = $data_id[0]['unique_id']; //出车单号
- $this->create_user_id = $user_id;
- $this->update_user_id = $user_id;
- $this->create_time = $v['create_time'];
- $this->use_bus_org_id = $department_id;
- $this->run_date = $v['run_date'];
- $this->task_type = 546; //标识任务类型是巴士任务同步
- $this->run_bus_id = $v['id']; //车次ID,对应run_bus中的主键ID,用于派车时更新巴士系统车次库存時使用
- $this->run_id = $v['run_id'];
- $this->line_id = $v['line_id']; //线路ID
- $this->start_time = str_pad($time_arr[0], 2, 0, STR_PAD_LEFT) . ':' . $time_arr[1]; //发车时间
- $this->bus_order_id = $v['bus_order_id'];
- $this->bus_type_res_id = $v['bus_type_res_id'];
- $this->seat_count = $v['seat_count'];
- $this->saled_count = $v['saled_count'];
- $this->itinerary_id = $data_id[0]['unique_id'];
- $this->itinerary_name = $v['prod_name'];
- $this->day_num = 1; //第几日行程,巴士目前均为一日
- $this->bus_cost_type = $v['cost_type']; //成本类型
- $this->bus_cost = $v['cost_price']; //成本
- $this->motorcade_id = $v['motorcade_id']; //承运车队
- $this->line_type = $v['line_type'] == 255 ? 1 : 2; //255直通 156:穿梭
- $this->send_status = 440; //调度状态
- $this->run_status = 434; //出车状态
- $this->finance_status = 444; //报账状态
- //$this->send_bus_res_id = $v['send_bus_res_id'];
- //$this->send_bus_driver_res_id = $v['send_bus_driver_res_id'];
- $model = clone $this;
- $res = $model->save();
- if (!$res) { //如果执行失败,手动抛出异常
- throw new \Exception('新增同步任务失败');
- }
- LogComponent::addLog($this->bus_number, LOG_TYPE_ORDER, "CS推送出车任务,出车单号{$this->bus_number}", 'bus_number', $this->bus_number, 0, 2);
- }
- }
- }
- $transaction->commit(); //提交
- } catch (\Exception $e) {
- $transaction->rollBack();
- $msg = array('status' => false, 'msg' => $e->getMessage());
- $arr = array("agentid" => 1000003,
- "title" => '出车任务同步错误预警:',
- "msg" => $e->getMessage(),
- "touser" => 'wanglg');
- zOfficeWechat::sendMsg($arr);
- }
- return ['model' => $this, 'data' => $data];
- }
-
- /**
- * User:Steven
- * Desc:用于同步出车任务获取用车单位,如果没有,需要新增
- * @param $main_corporation_id
- * @param $main_corp_id
- * @param $user_id
- */
- public function getDepartmentID($main_corporation_id, $main_corp_id, $user_id)
- {
- $conn = Yii::$app->db;
- $sql_exist_main_corp = "select id from bus_department where main_cooperation_id={$main_corporation_id} AND is_main_corp={$main_corp_id} AND cancel_flag=0 limit 1";
- $res_exist_main_corp = $conn->createCommand($sql_exist_main_corp)->queryAll();
- if (!isset($res_exist_main_corp[0]['id'])) { //bus_department中不存在当前的车次线路所属的运营主体的用车单位
- $sql_insert_corp = "insert into `bus_department` (`depart_name`, `cancel_flag`, `create_user_id`, `create_time`, `main_cooperation_id`, `is_main_corp`, `depart_type`, `settle_type`, `settle_cycle`)
- select corporation_name ,'0', $user_id, now(), {$main_corporation_id}, {$main_corp_id}, '469', '275', '295' from base_main_corporation where id={$main_corp_id} and cancel_flag=0;";
- $conn->createCommand($sql_insert_corp)->execute();
- $department_id = $conn->getLastInsertId(); //得到用车单位ID
- } else {
- $department_id = $res_exist_main_corp[0]['id'];
- }
- return $department_id;
- }
- /**
- * User:Steven
- * 获取车辆调度结果
- *
- * @return array
- */
- /* public function getBusDispatchResult()
- {
- $current_page = 1;
- $page_size = 5;
- $offset = ($current_page - 1) * $page_size;
- $query = self::find()->select('a.id,a.bus_number,a.run_date,a.itinerary_name,a.seat_count,a.saled_count, b.bus_id,c.driver_name,a.send_status,d.type_name')
- ->from(self::tableName() . ' as a')
- ->leftJoin(BaseBus::tableName() . ' as b', 'a.send_bus_res_id=b.bus_id')
- ->leftJoin(BaseDriver::tableName() . ' as c', 'a.send_bus_driver_res_id=c.driver_id')
- ->leftJoin(DictType::tableName() . ' as d', 'a.send_status=d.id');
- $countQuery = clone $query;
- $pages = new \yii\data\Pagination([
- 'totalCount' => $countQuery->count(),
- 'pageSize' => 2,
- ]);
- $models = $query->offset($pages->offset)
- ->limit($pages->limit)
- ->all();
-
- $sql = "select a.id,a.bus_number,a.run_date,a.itinerary_name,a.seat_count,a.saled_count, b.bus_no,c.driver_name,a.send_status,d.type_name
- from bus_order a
- LEFT JOIN base_bus b on a.send_bus_res_id=b.bus_id
- LEFT JOIN base_driver c on a.send_bus_driver_res_id=c.driver_id
- LEFT JOIN dict_type d on a.send_status=d.id";
- // $conn = Yii::$app->db;
- // $data = $conn->createCommand($sql)->queryAll();
- $dataProvider = new SqlDataProvider([
- 'sql' => $sql,
- 'pagination' => [
- 'pagesize' => '5',
- ],
- 'totalCount' => 14,
- ]);
-
- $dataProvider = new ActiveDataProvider([
- 'query' => self::find()->with(['bus', 'driver'])->where(['cancel_flag' => 0]),
- 'pagination' => [
- 'pageSize' => 5,
- ],
- ]);
- return ['model' => $this, 'data' => ['dataProvider' => $dataProvider]];
- }*/
-
- /**
- * User: wangxj
- *
- * 检测出车订单的状态,目前是否可以取消
- *
- * @param string $attribute 结束日期
- *
- */
- public function cancelCheck($attribute)
- {
- if ($this->oldAttributes[$attribute] == 439) {
- $this->addError($attribute, '出车已取消,请勿重复操作');
- } elseif (!in_array($this->oldAttributes[$attribute], $this::$bus_cancel_array))
- $this->addError($attribute, '出车状态已变更,现在无法取消');
- }
-
-
- public function beforeSave($insert)
- {
- if ($this->isNewRecord) {
- $this->create_time = date('Y-m-d H:i:s', time());
- if ($this->create_user_id === null || $this->create_user_id == '') {
- $this->create_user_id = Yii::$app->user->id;
- }
- if ($this->saled_count == null) {
- $this->saled_count = 0;
- }
- $this->cancel_flag = 0;
- } else {
- $this->update_time = date('Y-m-d H:i:s', time());
- $this->update_user_id = Yii::$app->user->id;
- }
- return parent::beforeSave($insert);
- }
-
- /**
- * 获取指定日期段内每一天的日期
- * @param string $startdate 开始日期
- * @param string $enddate 结束日期
- * @return array
- */
- public function getDateFromRange($startdate, $enddate)
- {
- $stimestamp = strtotime($startdate);
- $etimestamp = strtotime($enddate);
-
- // 计算日期段内有多少天
- $days = ($etimestamp - $stimestamp) / 86400 + 1;
-
- // 保存每天日期
- $date = array();
-
- for ($i = 0; $i < $days; $i++) {
- $date[] = date('Y-m-d', $stimestamp + (86400 * $i));
- }
-
- return $date;
- }
-
- public static function getBaozhangStatus()
- {
- $sql = "SELECT id,type_name FROM dict_type WHERE parent_id = 432";
- $connect = Yii::$app->db;
- $data = $connect->createCommand($sql)->queryAll();
- return ['data' => $data];
- }
-
- public function getDepartInfo()
- {
- $sql = "SELECT id,depart_name FROM bus_department WHERE cancel_flag = 0";
- $connect = Yii::$app->db;
- $data = $connect->createCommand($sql)->queryAll();
- return ['model' => $this, 'data' => $data];
- }
-
-
- public function modifyLineSafe()
- {
- $status = isset($_POST['status']) ? $_POST['status'] : 0;
- $bus_order_id = isset($_POST['bus_order_id']) ? $_POST['bus_order_id'] : '';
- $towhich = isset($_POST['towhich']) ? $_POST['towhich'] : '';
- if ($bus_order_id == '') {
- return ['data' => '确认失败'];
- } else {
- $sql = "update bus_order set $towhich = $status where bus_number = $bus_order_id";
- }
- $connect = Yii::$app->db;
- $data_temp = $connect->createCommand($sql)->execute();
- $sql1 = "select line_type,line_status,safe from bus_order where bus_number = $bus_order_id";
- $data = $connect->createCommand($sql1)->queryOne();
-
- //在置状态前,判断状态是否在出车准备,如果是才更新,否则不改变run_status;
- $sql_status = "select run_status from bus_order where bus_number = $bus_order_id";
- $data_status = $connect->createCommand($sql_status)->queryOne();
-
- if ($data['line_type'] == '1') {
- if ($data['line_status'] == '1' && $data['safe'] == '1') {
- if ($data_status['run_status'] == 434 || $data_status['run_status'] == 435) {
- $sql2 = "update bus_order set run_status = '436' where bus_number = $bus_order_id";
- $data_temp = $connect->createCommand($sql2)->execute();
- $data['info'] = '待出车';
- }
- $data['status'] = '0';
- }
- } else if ($data['line_type'] == '2') {
- if ($data['safe'] == '1') {
- if ($data_status['run_status'] == 434 || $data_status['run_status'] == 435) {
- $sql3 = "update bus_order set run_status ='436' where bus_number = $bus_order_id";
- $data_temp = $connect->createCommand($sql3)->execute();
- $data['info'] = '待出车';
- }
- $data['status'] = '0';
- }
- }
- $data['code'] = '0';
- return ['data' => $data];
- }
-
- public function cancelBusOrder()
- {
- $user_id = Yii::$app->user->id;
- $bus_order_id = isset($_POST['id']) ? $_POST['id'] : '';
- // $sql = "update bus_order a,run_main b set a.run_status = 439,a.update_user_id = $user_id,b.run_status = 148 where a.run_id = b.run_id and a.bus_number in ($bus_order_id)";
- $sql = "update bus_order a left join run_main b on a.run_id = b.RUN_ID left join run_bus c on a.run_id = c.RUN_ID
- set a.send_bus_driver_res_id=null,a.send_bus_driver_res_id=null, a.run_status = 439,
- a.update_user_id = $user_id,b.run_status=if(b.RUN_ID is null,b.run_status,148),
- b.UPDATE_USER_ID =if(b.RUN_ID is null,b.UPDATE_USER_ID,$user_id),
- c.SEND_STATUS = if (b.RUN_ID is null,c.SEND_STATUS,144),
- c.SEND_DRIVER_MOBILE = if (b.RUN_ID is null,c.SEND_DRIVER_MOBILE,''),
- c.SEND_BUS_RES_ID = if (b.RUN_ID is null,c.SEND_BUS_RES_ID,0),
- c.SEND_BUS_NO = if (b.RUN_ID is null,c.SEND_BUS_NO,''),
- c.SEND_BUS_DRIVER_RES_ID = if (b.RUN_ID is null,c.SEND_BUS_DRIVER_RES_ID,0),
- c.SEND_DRIVER_NAME = if (b.RUN_ID is null,c.SEND_DRIVER_NAME,''),
- c.UPDATE_USER_ID = if (b.RUN_ID is null,c.UPDATE_USER_ID,$user_id)
- where a.id in ($bus_order_id)";
- $connect = Yii::$app->db;
- $data = $connect->createCommand($sql)->execute();
- return ['data' => $data];
- }
-
- //获取天数
- public static function getDayNum()
- {
- $day_num = 31;
- $data = [];
- for ($i = 1; $i <= $day_num; $i++) {
- $data[$i] = $i . '天';
- }
- return $data;
- }
-
- /**
- * User: wangxj
- *
- * 修改run_bus表对应的值
- *
- */
- public function updateRunBus()
- {
- $bus = $this->getBus()->one();
- $driver = $this->getDriver()->one();
- if ($bus == null) {
- $bus = new BaseBus();
- }
- if ($driver == null) {
- $driver = new BaseDriver();
- }
- $run_bus = RunBus::updateAll([
- 'SALED_COUNT' => $this->saled_count,
- 'SEND_BUS_RES_ID' => $this->send_bus_res_id,
- 'SEND_BUS_NO' => $bus->BUS_NO,
- 'SEND_BUS_ORG_ID' => $bus->ORG_ID,
- 'SEND_BUS_TYPE_RES_ID' => $bus->BUS_TYPE_RES_ID,
- 'SEND_BUS_DRIVER_RES_ID' => $this->send_bus_driver_res_id,
- 'SEND_DRIVER_NAME' => $driver->DRIVER_NAME,
- 'SEND_DRIVER_MOBILE' => $driver->PHONE_NO,
- 'SEND_BUS_USER_ID' => Yii::$app->user->id,
- ], ['cancel_flag' => 0, 'id' => $this->run_bus_id]);
-
- }
-
- /**
- * @param $params
- * 车管报表导出
- */
- public function getExport($params)
- {
- //op
- //bus-income 出车收入
- //hybrid_you 油电费用 油
- //hybrid_dian 油电费用 电
- //road-bridge 路桥
- //driver-fee 司机费用
- //detail 订单明细
- $this->op = $params['op'];
- $this->date_type = isset($params['date_type']) ? $params['date_type'] : 1;
- $this->start_date = $params['start_date'];
- $this->end_date = $params['end_date'];
- $this->use_bus_org_id = isset($params['use_bus_org_id']) ? $params['use_bus_org_id'] : -1;
- $this->line_type = isset($params['line_type']) ? $params['line_type'] : -1;
- $this->bus_id = isset($params['bus_id']) ? $params['bus_id'] : -1;
- $this->driver_id = isset($params['driver_id']) ? $params['driver_id'] : -1;
- $this->bus_number = isset($params['bus_number']) ? $params['bus_number'] : '';
- if (in_array($this->op, ['hybrid_you', 'hybrid_dian'])) {
- $query = BusExpenses::find()->from(BusExpenses::tableName() . ' as a')
- ->leftJoin(BaseBus::tableName(), ' a.bus_id= base_bus.bus_id and a.cancel_flag = 0')->asArray();
-
- $query->andFilterWhere([
- 'base_bus.MAIN_CORP_ID' => $this->login_user->MAIN_CORP_ID2
- ]);
- } else {
- $query = self::find()->from(self::tableName() . ' as a')
- ->leftJoin(RunBusExpenses::tableName(), ' a.bus_number = run_bus_expenses.bus_number and run_bus_expenses.cancel_flag=0 ')->asArray();
- }
-
-
- $dataProvider = new ActiveDataProvider([
- 'query' => $query,
- 'pagination' => false,
- 'sort' => [
- 'attributes' => [
- 'chuche_count',
- 'maoli',
- 'income',
- 'detail_income',
- 'all_cost',
- 'lichengshu',
- 'youdian',
- 'zhusu',
- 'canyin',
- 'tingche',
- 'sitie',
- 'luqiao',
- 'run_date',
- 'finish_date',
- 'bus_number',
- 'bus_name',
- 'driver_name',
- 'itinerary_name',
- 'use_bus_org_name',
- 'all_cost',
- 'start_lichengshu',
- 'end_lichengshu',
- 'buy_date',
- 'bus_no',
- 'brand_name',
- 'expense_subject_id',
- 'seat_desc',
- 'receive_value',
- 'expense_price',
- 'all_lichengshu',
- ],
- ],
- ]);
- if (!in_array($this->op, ['hybrid_you', 'hybrid_dian'])) {
- $dataProvider->sort->defaultOrder = ['chuche_count' => SORT_DESC];
- }
- //判断是否油电费
- if (in_array($this->op, ['hybrid_you', 'hybrid_dian'])) {
- //计算里程数时,必须联run_bus_expense,bus_expense不会记录加油之后跑的任务里程数
- $query->leftJoin(RunBusExpenses::tableName() . ' as e', 'e.bus_res_id = a.bus_id and e.cancel_flag = 0 and e.expense_subject_id = 462');
-
- $query->addSelect([
- 'base_bus.bus_no', 'base_bus.bus_id as ID', 'base_bus.buy_date',
- '(select res_name from base_resource where base_bus.brand_id = res_id) as brand_name',
- 'a.expense_subject_id',
- 'base_bus.seat_desc', '(sum(receive_value) * count(DISTINCT a.id) / count(*)) receive_value',
- '(sum(a.expense_price) * count(DISTINCT a.id) / count(*)) expense_price',
- 'max(a.start_value) as all_lichengshu',
- '(max(e.end_value)-min(e.start_value)) as lichengshu',
- ]);
- $query->andFilterWhere([
- 'a.cancel_flag' => 0,
- 'a.expense_subject_id' => $this->op == 'hybrid_you' ? 479 : 480,
- ]);
- $query->andFilterWhere([
- 'between', 'a.create_time', $this->start_date . ' 00:00:00', $this->end_date . ' 23:59:59'
- ]);
- if ($this->bus_id != -1) {
- $query->andFilterWhere([
- 'a.bus_id' => $this->bus_id
- ]);
- }
- $query->groupBy('bus_no');
- } else {
- // 出车收入
- if ($this->op == 'bus-income') {
- $query->addSelect([
- '(select depart_name from bus_department where bus_department.ID = a.use_bus_org_id)as use_bus_org_name',
- 'a.use_bus_org_id',
- ]);
- $query->groupBy('a.use_bus_org_id');
-
- } elseif ($this->op == 'driver-fee') {
- // 司机费用
- $query->addSelect([
- 'a.send_bus_driver_res_id',
- '(select driver_name from base_driver where base_driver.DRIVER_ID = a.send_bus_driver_res_id) as driver_name',
- ]);
- $query->groupBy(['a.send_bus_driver_res_id']);
-
- } elseif ($this->op == 'road-bridge') {
- $query->addSelect([
- 'a.send_bus_res_id',
- '(select bus_no from base_bus where base_bus.BUS_ID = a.send_bus_res_id) as bus_name',
- '(select seat_desc from base_bus where base_bus.BUS_ID = a.send_bus_res_id) as seat_desc',
- '(select res_name from base_resource where base_resource.res_id = (select brand_id from base_bus where base_bus.BUS_ID = a.send_bus_res_id)) as brand_name',
- ]);
- $query->groupBy(['a.send_bus_res_id']);
- } elseif ($this->op == 'detail' || $this->op == 'send_res_id') {
- $query->addSelect([
- 'a.use_bus_org_id',
- '(select depart_name from bus_department where bus_department.ID = a.use_bus_org_id)as use_bus_org_name',
- 'a.bus_number',
- 'a.run_date',
- 'date_add(a.run_date,INTERVAL a.day_num day) as finish_date',
- '(select bus_no from base_bus where base_bus.BUS_ID = a.send_bus_res_id) as bus_name',
- '(select driver_name from base_driver where base_driver.DRIVER_ID = a.send_bus_driver_res_id) as driver_name',
- 'a.itinerary_name',
- 'sum(if(expense_subject_id = 462,run_bus_expenses.start_value,0)) as start_lichengshu',
- 'sum(if(expense_subject_id = 462,run_bus_expenses.end_value,0)) as end_lichengshu',
- '(select type_name from dict_type where id = a.finance_status) as finance_status',
- ]);
- $query->groupBy(['a.bus_number']);
- if ($this->bus_number != '') {
- $query->andFilterWhere([
- 'a.bus_number' => $this->bus_number
- ]);
- }
-
- }
- // 公共数据
- $query->addSelect([
- 'a.id',
- 'count(distinct a.bus_number) as chuche_count',
- '(select type_name from dict_type where dict_type.id = (select settle_type from bus_department where bus_department.ID = a.use_bus_org_id limit 1))as depart_type',
- '(select type_name from dict_type where dict_type.id = (select settle_cycle from bus_department where bus_department.ID = a.use_bus_org_id limit 1))as depart_cycle',
- 'sum(if(run_bus_expenses.expense_subject_id = 462 or isnull(run_bus_expenses.expense_subject_id = 462),if(a.bus_cost_type=478,a.saled_count * a.bus_cost,a.bus_cost),0)) as income',
- 'sum(if(run_bus_expenses.expense_subject_id = 462 or isnull(run_bus_expenses.expense_subject_id = 462),a.send_cost,0)) as send_cost',
- // 'sum(a.send_cost) as send_cost',
- '(sum(if(run_bus_expenses.expense_subject_id = 462 or isnull(run_bus_expenses.expense_subject_id = 462),a.send_cost,0))
- + sum(if(a.send_type = 0 and expense_subject_id in (462,463,464,465,466,467),run_bus_expenses.expense_value,0))) as all_cost', //如果是外部派车,不需要加总司机报账的数据
- 'if(a.send_type=1,if(a.bus_cost_type=478,a.saled_count * a.bus_cost,a.bus_cost)-a.send_cost,(sum(if(run_bus_expenses.expense_subject_id = 462 or isnull(run_bus_expenses.expense_subject_id = 462),if(a.bus_cost_type=478,a.saled_count * a.bus_cost,a.bus_cost),0))
- -(sum(if(run_bus_expenses.expense_subject_id = 462 or isnull(run_bus_expenses.expense_subject_id = 462),a.send_cost,0))
- + sum(if(expense_subject_id in (462,463,464,465,466,467),run_bus_expenses.expense_value,0))))) as maoli',
- 'sum(if(expense_subject_id = 462,run_bus_expenses.end_value-run_bus_expenses.start_value,0)) as lichengshu',
- 'sum(if(expense_subject_id = 462,run_bus_expenses.expense_value,0)) as youdian',
- 'sum(if(expense_subject_id = 463,run_bus_expenses.expense_value,0)) as luqiao',
- 'sum(if(expense_subject_id = 464,run_bus_expenses.expense_value,0)) as sitie',
- 'sum(if(expense_subject_id = 465,run_bus_expenses.expense_value,0)) as tingche',
- 'sum(if(expense_subject_id = 466,run_bus_expenses.expense_value,0)) as canyin',
- 'sum(if(expense_subject_id = 467,run_bus_expenses.expense_value,0)) as zhusu',
- ]);
- //时间搜索类型
- if ($this->date_type == 2) { //收车日期
- $query->andFilterWhere(['between', "date_add(a.run_date,interval day_num day)", $this->start_date, $this->end_date]);
- } else { //默认是出车日期 1
- $query->andFilterWhere(['between', 'a.run_date', $this->start_date, $this->end_date]);
- }
- //出车准备,待出车,出车中,已完成
- $query->andFilterWhere(['in', 'run_status', [435, 436, 437, 438]]);
- $query->andFilterWhere([
- 'a.cancel_flag' => 0
- ]);
- $query->andFilterWhere([
- '(select main_corp_id2 as main_corp_id from base_user e where a.create_user_id = e.id limit 1)' => $this->login_user->MAIN_CORP_ID2
- ]);
- if ($this->use_bus_org_id != -1) {
- $query->andFilterWhere(['a.use_bus_org_id' => $this->use_bus_org_id]);
- }
- if ($this->driver_id != -1) {
- $query->andFilterWhere(['a.send_bus_driver_res_id' => $this->driver_id]);
- }
- if ($this->bus_id != -1) {
- $query->andFilterWhere(['a.send_bus_res_id' => $this->bus_id]);
- }
- //线路类型
- if ($this->line_type != -1) {
- $query->andFilterWhere([
- 'a.line_type' => $this->line_type
- ]);
- }
- // $query->orderBy('chuche_count desc');
- }
-
- // 获取slq
- $tmp = $query->createCommand()->getRawSql();
- if (!isset($params['show'])) {
- $dataProvider = $dataProvider->getModels();
- }
-
- return $dataProvider;
-
- }
-
- /**
- * User:Steven
- * Desc:
- * @param $string
- */
- protected function writeLog($string)
- {
- $string = date('Y-m-d H:i:s') . PHP_EOL . $string . PHP_EOL;
- if (!file_exists(__DIR__ . '/../../../runtime/logs/syncBusOrder')) {
- mkdir(__DIR__ . '/../../../runtime/logs/syncBusOrder', 0777, true);
- }
- file_put_contents(__DIR__ . '/../../../runtime/logs/syncBusOrder/' . date('Y-m-d') . '.log', $string, FILE_APPEND);
- }
-
- public function getEndStatusLabel()
- {
- if ($this->end_status == self::STATUS_END_NOTHING) {
- $status = $this->finance_lock;
- } else {
- $status = $this->end_status;
- }
- return searchOrder::$finance_type_array[$status];
- }
-
- public function getScheduleDriver($run_date, $driver_name)
- {
- if (!empty($driver_name)) {
- $dn = preg_replace('/,|,/', '|', trim($driver_name, ',, '));
- $w1 = 'bd.driver_name REGEXP "' . $dn . '" and ';
- $w2 = '(select driver_name from base_driver where driver_id = name) REGEXP "' . $dn . '" and ';
- $w3 = 'base_driver.driver_name REGEXP "' . $dn . '" and ';
- } else {
- $w1 = $w2 = $w3 = '';
- }
- //获取当月头 和当月尾
- $month_start_date = date('Y-m-01', strtotime($run_date));
- $month_end_date = date('Y-m-t', strtotime($run_date));
- $main_corp_id = $this->login_user->MAIN_CORP_ID2;
- $sql = "select * from
- (select driver_id,driver_name,group_concat(distinct date1 order by date1 desc) as date1,group_concat(distinct date2 order by date2 desc) as date2,group_concat(distinct date3 order by date3 desc) as date3,
- group_concat(distinct date4 order by date4 desc) as date4,group_concat(distinct date5 order by date5 desc) as date5,group_concat(distinct date6 order by date6 desc) as date6,
- group_concat(distinct date7 order by date7 desc) as date7,group_concat(distinct date8 order by date8 desc) as date8, group_concat(distinct date9 order by date9 desc) as date9,
- group_concat(distinct date10 order by date10 desc) as date10,group_concat(distinct date11 order by date11 desc) as date11, group_concat(distinct date12 order by date12 desc) as date12,
- group_concat(distinct date13 order by date13 desc) as date13,group_concat(distinct date14 order by date14 desc) as date14,
- info_type,sum(expense_value) as sitie from
- (select driver_id,driver_name,info_type,max(date1) as date1,max(date2) as date2, max(date3) as date3, max(date4) as date4, max(date5) as date5, max(date6) as date6, max(date7) as date7,
- max(date8) as date8,max(date9) as date9,max(date10) as date10,max(date11) as date11,max(date12) as date12,max(date13) as date13,max(date14) as date14
- from
- (
- select driver_id,driver_name,info_type,
- case when run_date = '{$run_date}' and info_type=1 then sum_all when run_date = '{$run_date}' and info_type=2 then 'wb' else '' end as date1,
- case when run_date = date_add('{$run_date}', interval 1 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 1 day) and info_type=2 then 'wb' else '' end as date2,
- case when run_date = date_add('{$run_date}', interval 2 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 2 day) and info_type=2 then 'wb' else '' end as date3,
- case when run_date = date_add('{$run_date}', interval 3 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 3 day) and info_type=2 then 'wb' else '' end as date4,
- case when run_date = date_add('{$run_date}', interval 4 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 4 day) and info_type=2 then 'wb' else '' end as date5,
- case when run_date = date_add('{$run_date}', interval 5 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 5 day) and info_type=2 then 'wb' else '' end as date6,
- case when run_date = date_add('{$run_date}', interval 6 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 6 day) and info_type=2 then 'wb' else '' end as date7,
- case when run_date = date_add('{$run_date}', interval 7 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 7 day) and info_type=2 then 'wb' else '' end as date8,
- case when run_date = date_add('{$run_date}', interval 8 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 8 day) and info_type=2 then 'wb' else '' end as date9,
- case when run_date = date_add('{$run_date}', interval 9 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 9 day) and info_type=2 then 'wb' else '' end as date10,
- case when run_date = date_add('{$run_date}', interval 10 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 10 day) and info_type=2 then 'wb' else '' end as date11,
- case when run_date = date_add('{$run_date}', interval 11 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 11 day) and info_type=2 then 'wb' else '' end as date12,
- case when run_date = date_add('{$run_date}', interval 12 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 12 day) and info_type=2 then 'wb' else '' end as date13,
- case when run_date = date_add('{$run_date}', interval 13 day) and info_type=1 then sum_all when run_date = date_add('{$run_date}', interval 13 day) and info_type=2 then 'wb' else '' end as date14
- from
- (
- select * from
- (
- select count(bd.driver_id)as sum_all,bd.driver_id,bd.DRIVER_NAME,bo.run_date,1 as info_type from base_driver bd
- left join bus_order bo on bo.cancel_flag = 0 and bd.DRIVER_ID=bo.send_bus_driver_res_id and bo.send_bus_driver_res_id is not null and
- run_date between '{$run_date}' and date_add('{$run_date}', interval 13 day) and bo.run_status IN (434, 435, 436, 437, 438)
- where {$w1} bd.main_corp_id = {$main_corp_id} and bd.cancel_flag= 0 and bd.driver_name !=''
- group by bd.driver_id,bo.run_date
- union all
- select 0 as sum_all,name as send_bus_driver_res_id,(select driver_name from base_driver where driver_id = name) as driver_name,
- base_document.expire_date as run_date, 2 as info_type from base_document where base_document.cancel_flag = 0 and base_document.pid=0 and
- base_document.doc_option in (515,589) and base_document.start_date between '{$run_date}' and date_add('{$run_date}', interval 13 day)
- and {$w2}
- (select main_corp_id from base_driver where driver_id = name) = {$main_corp_id}
- ) a2
- ) a
- ) b
- group by driver_id,info_type ) c left join run_bus_expenses on run_bus_expenses.bus_driver_res_id = c.driver_id and run_bus_expenses.expense_subject_id = 464 and
- run_bus_expenses.run_date between '{$month_start_date}' and '{$month_end_date}'
- group by driver_id
- ) d order by convert(driver_name USING gbk) COLLATE gbk_chinese_ci asc";
-
- $sql_count = "select count(1) as sum_all from base_driver where {$w3} main_corp_id={$main_corp_id} and cancel_flag= 0";
- $total = Yii::$app->db->createCommand($sql_count)->queryOne();
- $dataProvider = new SqlDataProvider([
- 'sql' => $sql,
- 'pagination' => [
- 'pagesize' => '15',
- ],
- 'totalCount' => $total['sum_all']
- ]);
- return $dataProvider;
- }
-
- //用于获取七日 日期和星期
- public static function getDateArr($start_date)
- {
- $end_date = date("Y-m-d", (strtotime("$start_date") + 3600 * 24 * 13));
- $stime = strtotime($start_date);
- $etime = strtotime($end_date);
- $datearr = ['date', 'xingqi', 'udate'];
- while ($stime <= $etime) {
- $datearr['date'][] = date('m-d', $etime);
- $datearr['udate'][] = date('Y-m-d', $etime);
- switch (date('w', $etime)) {
- case 0:
- $datearr['xingqi'][] = "周日";
- break;
- case 1:
- $datearr['xingqi'][] = "周一";
- break;
- case 2:
- $datearr['xingqi'][] = "周二";
- break;
- case 3:
- $datearr['xingqi'][] = "周三";
- break;
- case 4:
- $datearr['xingqi'][] = "周四";
- break;
- case 5:
- $datearr['xingqi'][] = "周五";
- break;
- case 6:
- $datearr['xingqi'][] = "周六";
- break;
- }
- $etime = $etime - 3600 * 24;
- }
- return $datearr;
- }
-
- public function getScheduleDriverDetail($run_date, $driver_name)
- {
- // $sql = "select * from
- //(
- //select bd.DRIVER_NAME,bo.bus_number,bde.depart_name,bo.run_date,bo.day_num,bo.start_time,max(bi.start_time) as end_time,
- //bo.itinerary_name,if(line_type=1,'省际','市内') as line_type,
- //bo.saled_count,
- //(select bus_no from base_bus bb where bb.BUS_ID = bo.send_bus_res_id) as bus_no,
- //(select type_name from dict_type dt where dt.id = bo.run_status ) as run_status
- //from bus_order bo
- //inner join base_driver bd on bd.DRIVER_ID=bo.send_bus_driver_res_id and bd.DRIVER_NAME like '%范强%'
- //inner join bus_department bde on bde.ID = bo.use_bus_org_id
- //inner join bus_itinerary bi on bi.itinerary_id = bo.itinerary_id and bi.day_seq_id = bo.day_num
- //where bo.run_date ='2017-02-08'
- //group by bus_number
- //union all
- //select
- //bd.driver_name, 'wb' as bus_number, '' as depart_name, '' as run_date,
- //'' as day_num, '' as start_time, '' as end_time, '' as itinerary_name, '' as line_type,
- //'' as saled_count, '' as bus_no, '' as run_status
- //from base_document bdo
- //inner join base_driver bd on bd.DRIVER_ID=bdo.name and bd.DRIVER_NAME like '%范强%'
- //where bdo.doc_option in (515,589) and bdo.pid=0 and bdo.start_date = '2017-02-08'
- //)a";
- $query = self::find()->select([
- 'driver_id',
- "bo.id", 'bo.bus_number as bus_number_name', 'bde.depart_name', 'bo.run_date as run_date_name', 'bo.day_num', 'bo.start_time', 'max(bi.start_time) as end_time',
- 'bo.itinerary_name', 'bo.line_type',
- 'bo.saled_count',
- '(select bus_no from base_bus bb where bb.BUS_ID = bo.send_bus_res_id) as bus_no',
- '(select type_name from dict_type dt where dt.id = bo.run_status ) as run_status_name'])
- ->from('base_driver bd')
- ->leftJoin('bus_order bo', ' bd.DRIVER_ID=bo.send_bus_driver_res_id and bo.run_date = \'' . "{$run_date}" . '\'')
- ->leftJoin('bus_department bde', 'bde.ID = bo.use_bus_org_id')
- ->leftJoin('bus_itinerary bi', 'bi.itinerary_id = bo.itinerary_id and bi.day_seq_id = bo.day_num')
- ->where(['and', 'bo.id is not null', ['=', 'bd.CANCEL_FLAG', 0], ['=', 'bd.MAIN_CORP_ID', $this->login_user->MAIN_CORP_ID2], ['like', 'bd.DRIVER_NAME', $driver_name], ['in', 'bo.run_status', [434, 435, 436, 437, 438]]])
- ->groupBy('bd.DRIVER_ID,bo.bus_number');
- $query2 = BaseDocument::find()
- ->select([
- 'driver_id', 'bdo.id', "if(1=2,'',null) as bus_number_name", "if(1=2,'','wb') as depart_name", "if(1=2,'','') as run_date_name", "if(1=2,'','') as day_num",
- "if(1=2,'','') as start_time", "if(1=2,'','') as end_time", "if(1=2,'','') as itinerary_name", "if(1=2,'','') as line_type", "if(1=2,'','') as saled_count", " if(1=2,'','') as bus_no", "if(1=2,'','') as run_status_name"
- ])
- ->from(BaseDocument::tableName() . ' as bdo')->innerJoin('base_driver bd', 'bd.DRIVER_ID=bdo.name and bd.DRIVER_NAME like \'' . "%{$driver_name}%" . '\'')
- ->where(['and', 'bdo.id is not null', ['=', 'bdo.pid', 0], ['=', 'bdo.START_DATE', "{$run_date}"], ['in', 'bdo.doc_option', [515, 589]]])
- ->groupBy('bdo.ID');
- $new_query = (new Query())->select(['bd.driver_name', 'tmpA.*'])->from(['tmpA' => $query->union($query2, true)]);
- $new_query->rightJoin('base_driver bd', 'bd.driver_id = tmpA.driver_id');
- $new_query->where(['and', ['=', 'bd.CANCEL_FLAG', 0], ['=', 'bd.MAIN_CORP_ID', $this->login_user->MAIN_CORP_ID2], ['like', 'bd.DRIVER_NAME', $driver_name]]);
- $new_query->orderBy('`bus_number_name` is not null desc,driver_name,run_date_name desc,start_time');
- $dataProvider = new ActiveDataProvider([
- 'query' => $new_query
- ]);
- return $dataProvider;
- }
-
- public function getbase_driver()
- {
- return $this->hasOne(BaseDriver::className(), ['DRIVER_ID' => 'send_bus_driver_res_id']);
- }
-
- public function getStatus()
- {
- return $this->hasOne(DictType::className(), ['ID' => 'run_status']);
- }
-
- //维保和出车的任务显示
- public static function getFinShow($string)
- {
- // wb, wb,4 4 如果只有数字取数字 没有数字取维保
- $tp = explode(',', $string);
- if (count($tp) == 1)
- $fin = $tp[0];
- elseif (count($tp) > 1) {
- if ($tp[1] == '')
- $fin = $tp[0];
- else
- $fin = $tp[1];
- }
- if ($fin == 'wb') {
- $fin = '维保';
- } elseif ($fin == '') {
- $fin = '空闲';
- }
- return $fin;
- }
-
- //出车单位结算方式是单结时,必须填写单结收款人
- public function singleContactValidate()
- {
- $depart = $this->department;
- if ($depart->settle_type == 292 && trim($this->single_contact) == '') {
- $this->addError('single_contact', '此用车单位必须填写收款人');
- }
- }
-
- /**
- * 从cs同步当前出车任务数据
- *
- * @return bool
- * @author wangxj
- */
- public function syncOneBusOrder()
- {
- $arr = array("agentid" => 1000003,
- "title" => '出车任务同步错误预警:',
- "msg" => json_encode('关账同步出错:' . $this->bus_number),
- "touser" => 'shifp|wangxj');
- $v = RunBus::find()->select(['run_bus.*', 'opera_line.main_corp_id'])
- ->leftJoin('run_main', 'run_bus.RUN_ID = run_main.RUN_ID')
- ->leftJoin('opera_line', 'run_main.prod_id = opera_line.line_id')->where(['run_bus.id' => $this->run_bus_id])->asArray()->one();
-
- // $v = RunBus::findOne($this->run_bus_id);
- if ($v == null || $v->CANCEL_FLAG == 1) {
- zOfficeWechat::sendMsg($arr);
- return false;
- }
- switch ($v['COST_MOTORCADE_ID']) {
- case 628: //恒栋车队
- $user_id = 487; //admin_007:恒栋管理员
- $main_corporation_id = 7;
- break;
- case 403: //千旅车队
- $user_id = 559; //admin_013:千旅管理员
- $main_corporation_id = 13;
- break;
- case 1284: //黄山长三角车队
- $user_id = 579; //admin_011:郝贵福
- $main_corporation_id = 12;
- break;
- case 1288: //苏州舟游车队
- $user_id = 582; //周慧
- $main_corporation_id = 15;
- break;
- case 1466: //整车接送车队(李子健)
- $user_id = 673; //admin_021
- $main_corporation_id = 26;
- break;
- case 1469: //上海瑞景管理员(李子健)
- $user_id = 676; //admin_023
- $main_corporation_id = 27;
- break;
- default:
- $main_corporation_id = 0;
- $user_id = 0;
- }
- if ($user_id == 0) {
- zOfficeWechat::sendMsg($arr);
- return false;
- }
-
- $department_id = $this->getDepartmentID($main_corporation_id, $v['main_corp_id'], $user_id);
- if ($v['RUN_BUS_STATUS'] == 142) //142:已停运 对巴士对车次进行取消,车队系统也需要取消对应出车任务
- $run_str = ', run_status = 439, send_status = 440, send_bus_res_id=null, send_bus_driver_res_id=null';
- else
- $run_str = ', run_status = if(run_status = 439, 434, run_status), send_status = if(run_status = 439, 440, send_status)';
- $sql_update = "update bus_order set create_user_id=$user_id,use_bus_org_id=$department_id,update_user_id=$user_id,motorcade_id={$v['COST_MOTORCADE_ID']},
- bus_cost={$v['COST_PRICE']},bus_cost_type = {$v['COST_TYPE']},update_time=now(),saled_count={$v['SALED_COUNT']} $run_str
- where run_id={$v['RUN_ID']} and bus_order_id={$v['BUS_ORDER_ID']}";
- $up_rs = Yii::$app->db->createCommand($sql_update)->execute();
- return $up_rs > 0;
- }
- }
-
- ?>
|