You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1526 lines
70 KiB

  1. <?php
  2. namespace backend\modules\motorcade\models;
  3. use common\components\zOfficeWechat;
  4. use backend\common\Utils;
  5. use backend\modules\api\models\BusExpenses;
  6. use backend\modules\zzcs\models\BaseResource;
  7. use backend\modules\zzcs\models\BaseUser;
  8. use backend\modules\zzcs\models\DictType;
  9. use backend\modules\zzcs\models\RunBus;
  10. use common\models\zModel;
  11. use common\components\zHttp;
  12. use Yii;
  13. use yii\data\ActiveDataProvider;
  14. use yii\data\SqlDataProvider;
  15. use yii\db\Exception;
  16. use yii\db\Query;
  17. use backend\modules\motorcade\components\LogComponent;
  18. /**
  19. * This is the model class for table "bus_order".
  20. *
  21. * @property integer $id
  22. * @property integer $bus_number
  23. * @property integer $create_user_id
  24. * @property string $create_time
  25. * @property integer $update_user_id
  26. * @property string $update_time
  27. * @property integer $cancel_flag
  28. * @property integer $use_bus_org_id
  29. * @property integer $task_type
  30. * @property integer $motorcade_id
  31. * @property string $run_date
  32. * @property integer $run_bus_id
  33. * @property integer $run_id
  34. * @property integer $line_id
  35. * @property integer $start_time
  36. * @property integer $bus_order_id
  37. * @property integer $bus_type_res_id
  38. * @property integer $seat_count
  39. * @property integer $saled_count
  40. * @property integer $itinerary_id
  41. * @property string $itinerary_name
  42. * @property integer $line_type
  43. * @property integer $day_num
  44. * @property integer $bus_cost_type
  45. * @property string $bus_cost
  46. * @property string $remark
  47. * @property string $send_msg
  48. * @property integer $send_type
  49. * @property string $send_cost
  50. * @property integer $send_bus_res_id
  51. * @property integer $send_bus_driver_res_id
  52. * @property integer $send_status
  53. * @property integer $run_status
  54. * @property integer $finance_status
  55. * @property integer $end_status
  56. * @property integer $line_status
  57. * @property integer $finance_lock
  58. * @property integer $outcome_finance_lock
  59. * @property integer $send_bus_count
  60. * @property integer $contacts
  61. * @property integer $tels
  62. * @property integer $safe
  63. * @property string $single_contact
  64. * @property integer $bus_order_finance
  65. *
  66. * @property array $bus_order_status_array
  67. * @property BusDepartment $department
  68. */
  69. class BusOrder extends zModel
  70. {
  71. const LINE_TYPE_PROVINCE = 1; //省际
  72. const LINE_TYPE_CITY = 2; //市内
  73. const TASK_TYPE_SYNC = 546; //同步
  74. const TASK_TYPE_CREATE = 547; //车队系统添加
  75. const TASK_TYPE_CUSTOM = 548; //定制巴士
  76. const STATUS_SEND_WAITING_SURE = 441; //待调度确认
  77. const STATUS_SEND_SURE = 442; //已调度
  78. const STATUS_RUN_SENDING = 434; //调度安排中
  79. const STATUS_RUN_READY = 435; //出车准备
  80. const STATUS_RUN_WAITING = 436; //待出车
  81. const STATUS_RUN_RUNNING = 437; //出车中
  82. const STATUS_RUN_FINISH = 438; //出车完成
  83. const STATUS_RUN_CANCEL = 439; //出车取消
  84. const STATUS_FINANCE_NOT = 444; //出车准备
  85. const STATUS_FINANCE_WAITING = 445; //待审核
  86. const STATUS_FINANCE_SURE = 446; //已审核
  87. const STATUS_FINANCE_REJECT = 447; //被驳回
  88. const STATUS_END_NOTHING = 448; //未结算,什么操作都没有 1
  89. const STATUS_END_WAITING_CONFIRM = 602; //待核对 2
  90. const STATUS_END_WAITING_FINISH = 603; //待结算 3
  91. const STATUS_END_FINISH = 449; //已结算 4
  92. const CLIENT_TYPE_COMPANY = 469; //企业用车
  93. const CLIENT_TYPE_PERSONAL = 470; //个人用车
  94. const FINANCE_LOCK_OPEN = 0; //财务结算 未关账
  95. const FINANCE_LOCK_LOCKED = 1; //财务结算 已关账
  96. const BUS_COST_TYPE_ALL = 477; //包车计价
  97. const BUS_COST_TYPE_ONE = 478; //人数计价
  98. const SEND_TYPE_INCOME = 0; //内部派车
  99. const SEND_TYPE_OUTSIDE = 1; //外部派车
  100. public $muti_flag = ''; //是否批量的标示
  101. public $run_date_from = ''; //日期的开始时间(批量添加出车任务)
  102. public $run_date_to = ''; //日期的结束时间
  103. public $run_status_name;
  104. public $send_status_name;
  105. public $finance_status_name;
  106. public $end_status_name;
  107. public $line_status_name;
  108. public $order_count;
  109. public $miles;
  110. public $driver_fee;
  111. public $park_fee;
  112. public $food_fee;
  113. public $sleep_fee;
  114. public $driver_name;
  115. public $bus_driver_res_id;
  116. public $itinerary_list = [];
  117. public $end_time;
  118. public $bus_no;
  119. public $line_type_name;
  120. public $bus_number_name;
  121. public $run_date_name;
  122. //导出报表参数
  123. public $op;
  124. public $date_type;
  125. public $start_date;
  126. public $end_date;
  127. public $bus_id;
  128. public $driver_id;
  129. public $depart_name;
  130. public $lichengshu;
  131. //不同状态对应的数量
  132. public $count_all = 0;
  133. public $count_440 = 0;
  134. public $count_441 = 0;
  135. public $count_442 = 0;
  136. public $count_443 = 0;
  137. //如果状态发生了变化,出车详情 detail.js需要作相应变更
  138. const bus_order_status_array = [
  139. // 430 => [ //出车状态 run_status
  140. 0 => '',
  141. 434 => "调度安排中",
  142. 435 => "出车准备",
  143. 436 => "待出车",
  144. 437 => "出车中",
  145. 438 => "已完成",
  146. 439 => "已取消", //巴士停运状态142 已取消148
  147. // ],
  148. // 431 => [ //调度状态 send_status
  149. // 0 => '',
  150. 440 => "待调度",
  151. 441 => "待调度确认",
  152. 442 => "已调度",
  153. 443 => "被驳回",
  154. // ],
  155. // 432 => [ //报账状态 finance_status
  156. // 0 => '',
  157. 444 => "未报账",
  158. 445 => "待审核",
  159. 446 => "已审核",
  160. 447 => "被驳回",
  161. // ],
  162. // 433 => [ //收支结算状态 end_status
  163. // 0 => '',
  164. 448 => "未结算",
  165. 449 => "已结算",
  166. 482 => "被驳回",
  167. self::STATUS_END_WAITING_CONFIRM => '待核对',
  168. self::STATUS_END_WAITING_FINISH => '待结算',
  169. // ]
  170. ];
  171. //车辆报账费用科目
  172. public static $bus_order_fee_array = [
  173. 'FEE_OIL' => 462,
  174. 'FEE_BRIDGE' => 463,
  175. 'FEE_DRIVER' => 464,
  176. 'FEE_PARK' => 465,
  177. 'FEE_FOOD' => 466,
  178. 'FEE_HOTEL' => 467,
  179. ];
  180. // public function getReceive()
  181. // {
  182. // $query = BusOrder::find();
  183. // $dataProvider = new ActiveDataProvider([
  184. // 'query' => $query
  185. // ]);
  186. // return $dataProvider;
  187. // }
  188. public function load($data, $formName = null)
  189. {
  190. $this->start_date = isset($data['start_date']) ? $data['start_date'] : date('Y-m-01');
  191. $this->end_date = isset($data['end_date']) ? $data['end_date'] : date('Y-m-t');
  192. $this->date_type = isset($data['date_type']) ? $data['date_type'] : 1;
  193. $this->muti_flag = isset($data['BusOrder']['muti_flag']) ? $data['BusOrder']['muti_flag'] : false;
  194. if ($this->muti_flag) {
  195. $this->run_date_from = $data['BusOrder']['run_date_from'];
  196. $this->run_date_to = $data['BusOrder']['run_date_to'];
  197. }
  198. return parent::load($data, $formName);
  199. }
  200. //可以取消出车的状态值,run_status为其他状态时不可以取消
  201. static $bus_cancel_array = [434, 435, 436];
  202. /**
  203. * @inheritdoc
  204. */
  205. public static function tableName()
  206. {
  207. return 'bus_order';
  208. }
  209. /**
  210. * @inheritdoc
  211. */
  212. public function rules()
  213. {
  214. return [
  215. [['bus_number', 'run_date', 'itinerary_id', 'bus_type_res_id', 'line_type', 'day_num', 'bus_cost_type'], 'required'],
  216. [['bus_number', 'create_user_id', 'update_user_id', 'cancel_flag', 'use_bus_org_id', 'run_id',
  217. 'bus_order_id', 'bus_type_res_id', 'seat_count', 'itinerary_id', 'line_type', 'day_num',
  218. 'bus_cost_type', 'send_bus_res_id', 'send_bus_driver_res_id', 'send_status', 'run_status',
  219. 'finance_status', 'task_type', 'send_bus_count'], 'integer'],
  220. [['update_time', 'line_group_type', 'run_bus_id'], 'safe'],
  221. [['create_time', 'contacts'], 'string', 'max' => 20],
  222. [['run_date'], 'string', 'max' => 10],
  223. [['itinerary_name', 'remark', 'single_contact'], 'string', 'max' => 100],
  224. [['remark'], 'string', 'max' => 100],
  225. [['run_status'], 'cancelCheck', 'on' => 'cancel'],
  226. [['itinerary_name'], 'required', 'message' => '请填写线路名称'],
  227. [['use_bus_org_id'], 'required', 'message' => '请选择用车单位'],
  228. [['bus_type_res_id'], 'required', 'message' => '请选择用车类型'],
  229. [['saled_count'], 'number', 'message' => '请正确填写乘客人数'],
  230. [['bus_cost'], 'required', 'message' => '请填写车价'],
  231. [['bus_cost'], 'number', 'message' => '请正确填写车价'],
  232. [['tels'], 'number', 'message' => '请正确填写联系电话'],
  233. [['tels'], 'string', 'max' => 20],
  234. [['send_cost'], 'number', 'message' => '请填写数字'],
  235. [['send_bus_res_id', 'send_bus_driver_res_id'], 'validateBothRequired', 'params' => ['message' => '车辆司机必须同时调派']],
  236. [['use_bus_org_id'], 'singleContactValidate'],
  237. [['single_contact'], 'trim']
  238. ];
  239. }
  240. /**
  241. * @inheritdoc
  242. */
  243. public function attributeLabels()
  244. {
  245. return [
  246. 'id' => 'ID',
  247. 'bus_number' => '出车单号',
  248. 'create_user_id' => 'Create User ID',
  249. 'create_time' => '创建时间',
  250. 'update_user_id' => '修改用户',
  251. 'update_time' => '修改时间',
  252. 'cancel_flag' => 'Cancel Flag',
  253. 'use_bus_org_id' => '用车单位',
  254. 'run_date' => '出车时间',
  255. 'run_bus_id' => '车次号',
  256. 'run_id' => 'Run ID',
  257. 'bus_order_id' => 'Bus Order ID',
  258. 'bus_type_res_id' => '用车类型',
  259. 'seat_count' => '座位数',
  260. 'saled_count' => '乘客数',
  261. 'itinerary_id' => '行程编号',
  262. 'itinerary_name' => '线路名称',
  263. 'line_type' => '线路类型',
  264. 'line_group_type' => '线路组合',
  265. 'day_num' => '行程天数',
  266. 'bus_cost_type' => '计价方式',
  267. 'bus_cost' => '金额',
  268. 'send_type' => '外部用车',
  269. 'remark' => '用车备注',
  270. 'send_msg' => '调度信息',
  271. 'send_bus_res_id' => '车辆',
  272. 'send_bus_driver_res_id' => '司机',
  273. 'send_status' => '调度状态',
  274. 'run_status' => '出车状态',
  275. 'finance_status' => '报账状态',
  276. 'start_date' => '起始时间',
  277. 'end_date' => '结束时间',
  278. 'Driver Name' => '司机姓名',
  279. 'Miles ' => '公里数',
  280. 'Driver Fee' => '司贴',
  281. 'Park Fee' => '停车费',
  282. 'Food Fee' => '餐饮费',
  283. 'Sleep Fee' => '住宿费',
  284. 'contacts' => '联系人',
  285. 'tels' => '联系电话',
  286. 'single_contact' => '单结收款人',
  287. ];
  288. }
  289. /**
  290. * @return \yii\db\ActiveQuery
  291. */
  292. public function getUser()
  293. {
  294. return $this->hasOne(BaseUser::className(), ['ID' => 'create_user_id']);
  295. }
  296. /**
  297. * @return \yii\db\ActiveQuery 调派的车辆
  298. */
  299. public function getBus()
  300. {
  301. return $this->hasOne(BaseBus::className(), ['BUS_ID' => 'send_bus_res_id']);
  302. }
  303. /**
  304. * @return \yii\db\ActiveQuery 调派的司机
  305. */
  306. public function getDriver()
  307. {
  308. return $this->hasOne(BaseDriver::className(), ['DRIVER_ID' => 'send_bus_driver_res_id']);
  309. }
  310. //行程明细
  311. public function getItinerary()
  312. {
  313. return $this->hasMany(BusItinerary::className(), ['itinerary_id' => 'itinerary_id'])->from(BusItinerary::tableName() . ' i')->andFilterWhere(['i.cancel_flag' => 0])->orderBy('day_seq_id, start_time');
  314. }
  315. //用车单位
  316. public function getDepartment()
  317. {
  318. return $this->hasOne(BusDepartment::className(), ['ID' => 'use_bus_org_id']);
  319. }
  320. //出车报账明细
  321. public function getExpense()
  322. {
  323. return $this->hasMany(RunBusExpenses::className(), ['bus_number' => 'bus_number'])->onCondition([RunBusExpenses::tableName() . '.cancel_flag' => 0])->orderBy('expense_subject_id');
  324. }
  325. //计价方式
  326. public function getBusCostType()
  327. {
  328. return $this->hasOne(DictType::className(), ['ID' => 'bus_cost_type']);
  329. }
  330. //调度状态,各种状态
  331. public function getSendType()
  332. {
  333. return $this->hasOne(DictType::className(), ['ID' => 'send_status'])->from(DictType::tableName() . ' as st');
  334. }
  335. //出车状态
  336. public function getRunType()
  337. {
  338. return $this->hasOne(DictType::className(), ['ID' => 'run_status'])->from(DictType::tableName() . ' as rt');
  339. }
  340. //报账状态
  341. public function getFinanceType()
  342. {
  343. return $this->hasOne(DictType::className(), ['ID' => 'finance_status'])->from(DictType::tableName() . ' as ft');
  344. }
  345. //结算状态
  346. public function getEndType()
  347. {
  348. return $this->hasOne(DictType::className(), ['ID' => 'end_status'])->from(DictType::tableName() . ' as et');
  349. }
  350. //应付结算状态
  351. public function getOutcomeEndType()
  352. {
  353. return $this->hasOne(DictType::className(), ['ID' => 'outcome_end_status'])->from(DictType::tableName() . ' as oet');
  354. }
  355. //状态变更记录
  356. public function getStatusLog()
  357. {
  358. return $this->hasMany(BusOrderStatusLog::className(), ['BUS_NUMBER' => 'bus_number'])
  359. ->andFilterWhere(['cancel_flag' => 0])
  360. ->orderBy('CREATE_TIME DESC')->groupBy('TYPE');
  361. }
  362. //取消的操作人,取的update_user其实应该查状态日志
  363. public function getCancelInfo()
  364. {
  365. return $this->hasOne(BaseUser::className(), ['ID' => 'update_user_id']);
  366. }
  367. /**
  368. * User:Steven
  369. *
  370. * 获取车座类型
  371. * @return array
  372. */
  373. public function getBusType()
  374. {
  375. $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";
  376. $conn = Yii::$app->db;
  377. $data = $conn->createCommand($sql)->queryAll();
  378. return ['model' => $this, 'data' => $data];
  379. }
  380. /**
  381. * User:Steven
  382. *
  383. * 获取用车单位
  384. * @return array
  385. */
  386. public function getBusdepartment()
  387. {
  388. $main_cooperation_id = $this->login_user->MAIN_CORP_ID2;
  389. $sql = "select ID,settle_type,depart_name from bus_department where main_cooperation_id=$main_cooperation_id and cancel_flag=0 and status<>612";
  390. $conn = Yii::$app->db;
  391. $data = $conn->createCommand($sql)->queryAll();
  392. return ['model' => $this, 'data' => $data];
  393. }
  394. public function getChuCheCompany()
  395. {
  396. $main_cooperation_id = $this->login_user->MAIN_CORP_ID2;
  397. $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)";
  398. $conn = Yii::$app->db;
  399. $data = $conn->createCommand($sql)->queryAll();
  400. return ['model' => $this, 'data' => $data];
  401. }
  402. /**
  403. * Created by PhpStorm.
  404. * NOTES:
  405. * User: Steven
  406. * Date: 2018/3/15
  407. * Time: 10:37
  408. * Class getLogInfo
  409. * @param $bus_number
  410. * @return array|\yii\db\ActiveRecord[]
  411. */
  412. public function getLogInfo($bus_number)
  413. {
  414. $action_log = BusActionLog::find()->leftJoin('base_user b', 'a.user_id=b.ID')->from(BusActionLog::tableName() . ' as a')
  415. ->select(['a.*', 'b.TRUE_NAME'])->where(['a.bus_order_id' => $bus_number]);
  416. $res = $action_log->asArray()->all();
  417. $log = BusOrderStatusLog::find()->select(['a.*', 'b.TRUE_NAME'])->leftJoin('base_user b', 'a.CREATE_USER_ID=b.ID')->from(BusOrderStatusLog::tableName() . ' as a')
  418. ->where(['a.BUS_NUMBER' => $bus_number, 'a.cancel_flag' => 0])->asArray()->all();
  419. $arr = [];
  420. foreach ($log as $val) {
  421. $arr[] = [
  422. 'msg' => $val['MSG'],
  423. 'created_at' => $val['CREATE_TIME'],
  424. 'true_name' => $val['TRUE_NAME']
  425. ];
  426. }
  427. foreach ($res as $item) {
  428. $arr[] = [
  429. 'msg' => $item['msg'],
  430. 'created_at' => $item['created_at'],
  431. 'true_name' => $item['TRUE_NAME']
  432. ];
  433. }
  434. $time = array_column($arr, 'created_at');
  435. array_multisort($time, SORT_ASC, $arr);
  436. return $arr;
  437. }
  438. /**
  439. * User:Steven
  440. * 添加出车入口
  441. *
  442. */
  443. public function addBus()
  444. {
  445. $res = false;
  446. $bus = $_POST;
  447. $conn = Yii::$app->db;
  448. $transaction = $conn->beginTransaction(); //开始事务
  449. try {
  450. if ($this->muti_flag == "on") { //批量添加出车任务
  451. $date_arr = $this->getDateFromRange($this->run_date, $this->run_date_to);
  452. foreach ($date_arr as $item) {
  453. $res = $this->addBusService($bus, $conn, $item);
  454. }
  455. } else {
  456. $res = $this->addBusService($bus, $conn, $this->run_date);
  457. }
  458. $transaction->commit(); //提交
  459. } catch (Exception $e) {
  460. $transaction->rollBack();
  461. }
  462. return $res;
  463. }
  464. /**
  465. * User:Steven
  466. * 处理添加出车任务逻辑
  467. *
  468. * @param $bus
  469. * @param $conn \yii\db\Connection
  470. * @param $item
  471. *
  472. * @return string
  473. */
  474. public function addBusService($bus, $conn, $item)
  475. {
  476. $get_unique_id = "select func_get_unique_id(5,1) as unique_id";
  477. $data = $conn->createCommand($get_unique_id)->queryAll();
  478. $this->itinerary_id = $data[0]['unique_id']; //行程ID
  479. $this->bus_number = $data[0]['unique_id']; //出车单号
  480. $this->run_date = $item;
  481. $this->task_type = $this->task_type == null ? BusOrder::TASK_TYPE_CREATE : $this->task_type; //标识当前任务类型是车系统添加的
  482. $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();
  483. $this->seat_count = $seat_count[0]['seat_count'];
  484. $arr = array();
  485. if (empty($this->itinerary_list)) {
  486. $bus_it = array_values($bus['BusItinerary']);
  487. } else {
  488. $bus_it = $this->itinerary_list;
  489. }
  490. foreach ($bus_it as $k => $v) {
  491. if (!is_a($v, BusItinerary::className())) {
  492. $busItinerary = new BusItinerary();
  493. $busItinerary->setAttributes($v);
  494. } else {
  495. $busItinerary = clone $v;
  496. }
  497. $busItinerary['itinerary_id'] = $data[0]['unique_id'];
  498. $busItinerary['station_seq_id'] = $k + 1;
  499. $time_arr = explode(':', $v['start_time']);
  500. $busItinerary['start_time'] = str_pad($time_arr[0], 2, 0, STR_PAD_LEFT) . ':' . $time_arr[1];
  501. $arr[] = $busItinerary;
  502. }
  503. foreach ($arr as $value) {
  504. $value->save(); //向bus_itinerary表中加入当前出车任务的行程数据
  505. }
  506. if ($this->validate()) {
  507. $busOrder = clone $this;
  508. $time_array = explode(':', $bus_it[0]['start_time']);
  509. $busOrder->start_time = str_pad($time_array[0], 2, 0, STR_PAD_LEFT) . ':' . $time_array[1];
  510. //如果在添加出车时,就已经调派了司机和车辆,那么调度状态为待调度确认
  511. if ($busOrder->send_bus_res_id != '' && $busOrder->send_bus_driver_res_id != '') {
  512. $busOrder->send_status = $this::STATUS_SEND_WAITING_SURE;
  513. // $busOrder->run_status = $this::STATUS_RUN_SENDING;
  514. }
  515. $res = $busOrder->save(); //向bus_order添加出车任务
  516. if ($res) { // 添加操作日志
  517. $msg = "创建任务单号为{$busOrder->bus_number}的出车任务。";
  518. if ($busOrder->send_bus_res_id != '') {
  519. $bus = BaseBus::findOne($busOrder->send_bus_res_id);
  520. $msg .= '车辆调度:' . $bus->BUS_NO . ';';
  521. }
  522. if ($busOrder->send_bus_driver_res_id != '') {
  523. $driver = BaseDriver::findOne($busOrder->send_bus_driver_res_id);
  524. $msg .= '司机调度:' . $driver->DRIVER_NAME;
  525. }
  526. LogComponent::addLog($busOrder->bus_number, LOG_TYPE_ORDER, $msg, 'bus_number', $busOrder->bus_number, 0);
  527. }
  528. } else {
  529. $this->start_time = $bus_it[0]['start_time'];
  530. $res = false;
  531. }
  532. return $res;
  533. }
  534. /**
  535. * User:Steven
  536. * Desc:同步cs系统的出车记录
  537. * @param bool $flag 是否自定义同步,默认是同步未来三天的数据
  538. * @return array
  539. */
  540. public function SyncBusOrder($flag = true)
  541. {
  542. if ($flag) {
  543. $begin_date = date("Y-m-d");
  544. $end_date = date("Y-m-d", strtotime("+3 day"));
  545. //获取要同步的数据
  546. $sql_proc = "call sp_get_bus_order('{$begin_date}','{$end_date}')";
  547. } else {
  548. $begin_date = date("Y-m-d", strtotime("+3 day"));
  549. $end_date = '2018-10-08';
  550. //获取要同步的数据
  551. $sql_proc = "call sp_get_bus_order_tem('{$begin_date}','{$end_date}')";
  552. }
  553. $conn = Yii::$app->db;
  554. $data = $conn->createCommand($sql_proc)->queryAll();
  555. $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}'";
  556. $run_list = $conn->createCommand($sql)->queryAll();
  557. $transaction = $conn->beginTransaction(); //开始事务
  558. try {
  559. $run_list_already = array();
  560. if (!empty($run_list)) {
  561. foreach ($run_list as $key => $value) {
  562. $run_list_already[$value['run_id']]['bus_order_id'][] = $value['bus_order_id'];
  563. }
  564. }
  565. if (!empty($data)) {
  566. foreach ($data as $k => $v) {
  567. //根据不同的承运车队同步数据到不同的运营主体下:
  568. switch ($v['motorcade_id']) {
  569. case 628: //恒栋车队
  570. $user_id = 487; //admin_007:恒栋管理员
  571. $main_corporation_id = 7;
  572. break;
  573. case 403: //千旅车队
  574. $user_id = 559; //admin_013:千旅管理员
  575. $main_corporation_id = 13;
  576. break;
  577. case 1284: //黄山长三角车队
  578. $user_id = 579; //admin_011:郝贵福
  579. $main_corporation_id = 12;
  580. break;
  581. case 1288: //苏州舟游车队
  582. $user_id = 582; //周慧
  583. $main_corporation_id = 15;
  584. break;
  585. case 1466: //整车接送车队(李子健)
  586. $user_id = 673; //admin_021
  587. $main_corporation_id = 26;
  588. break;
  589. case 1469: //上海瑞景管理员(李子健)
  590. $user_id = 676; //admin_023
  591. $main_corporation_id = 27;
  592. break;
  593. case 1691: //
  594. $user_id = 783; //admin_035
  595. $main_corporation_id = 35;
  596. break;
  597. case 1783: // 黄果树车队
  598. $user_id = 830; // admin_830
  599. $main_corporation_id = 38;
  600. break;
  601. case 1796: //
  602. $user_id = 831; //
  603. $main_corporation_id = 40;
  604. break;
  605. case 1743: //
  606. $user_id = 853; //
  607. $main_corporation_id = 41;
  608. break;
  609. case 1725:
  610. $user_id = 854; //
  611. $main_corporation_id = 42;
  612. break;
  613. case 1679: //
  614. $user_id = 855; //
  615. $main_corporation_id = 43;
  616. break;
  617. default:
  618. $user_id = 0;
  619. }
  620. if ($user_id == 0) {
  621. continue;
  622. }
  623. 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'])) { //已经同步过的任务
  624. $department_id = $this->getDepartmentID($main_corporation_id, $v['main_corp_id'], $user_id);
  625. if ($v['run_bus_status'] == 142) //142:已停运 对巴士对车次进行取消,车队系统也需要取消对应出车任务
  626. $run_str = ', run_status = 439, send_status = 440, send_bus_res_id=null, send_bus_driver_res_id=null';
  627. else
  628. $run_str = ', run_status = if(run_status = 439, 434, run_status), send_status = if(run_status = 439, 440, send_status)';
  629. $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']},
  630. 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']}";
  631. $up_rs = $conn->createCommand($sql_update)->execute();
  632. if (!$up_rs) {
  633. throw new \Exception('修改失败');
  634. }
  635. } elseif ($v['run_bus_status'] != 142) { //未同步的出车任务,需要新增
  636. $department_id = $this->getDepartmentID($main_corporation_id, $v['main_corp_id'], $user_id);
  637. #region 将当前的车次线路所属的运营主体作为用车单位存入bus_department
  638. #endregion
  639. $get_unique_id = "select func_get_unique_id(5,1) as unique_id"; //得到新的出车任务ID
  640. $data_id = $conn->createCommand($get_unique_id)->queryAll();
  641. $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,
  642. 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,
  643. group_concat(if(c.type_id=213,c.property,'')separator'') as latitude
  644. from run_station a
  645. left join base_resource b on a.station_res_id=b.res_id
  646. left join base_resource_property c on b.res_id=c.res_id and c.cancel_flag=0
  647. where run_id={$v['run_id']} group by a.station_res_id"; //查询当前班次的途经站点
  648. $station_list = $conn->createCommand($sql_station)->queryAll();
  649. if (!empty($station_list)) {
  650. foreach ($station_list as $s_k => $s_v) {
  651. $time_array = explode(':', $s_v['start_time']);
  652. $bt_start_time = str_pad($time_array[0], 2, 0, STR_PAD_LEFT) . ':' . $time_array[1];
  653. $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`)
  654. 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}')";
  655. $conn->createCommand($sql_itinerary)->execute();
  656. }
  657. }
  658. $time_arr = explode(':', $v['run_time']);
  659. $this->bus_number = $data_id[0]['unique_id']; //出车单号
  660. $this->create_user_id = $user_id;
  661. $this->update_user_id = $user_id;
  662. $this->create_time = $v['create_time'];
  663. $this->use_bus_org_id = $department_id;
  664. $this->run_date = $v['run_date'];
  665. $this->task_type = 546; //标识任务类型是巴士任务同步
  666. $this->run_bus_id = $v['id']; //车次ID,对应run_bus中的主键ID,用于派车时更新巴士系统车次库存時使用
  667. $this->run_id = $v['run_id'];
  668. $this->line_id = $v['line_id']; //线路ID
  669. $this->start_time = str_pad($time_arr[0], 2, 0, STR_PAD_LEFT) . ':' . $time_arr[1]; //发车时间
  670. $this->bus_order_id = $v['bus_order_id'];
  671. $this->bus_type_res_id = $v['bus_type_res_id'];
  672. $this->seat_count = $v['seat_count'];
  673. $this->saled_count = $v['saled_count'];
  674. $this->itinerary_id = $data_id[0]['unique_id'];
  675. $this->itinerary_name = $v['prod_name'];
  676. $this->day_num = 1; //第几日行程,巴士目前均为一日
  677. $this->bus_cost_type = $v['cost_type']; //成本类型
  678. $this->bus_cost = $v['cost_price']; //成本
  679. $this->motorcade_id = $v['motorcade_id']; //承运车队
  680. $this->line_type = $v['line_type'] == 255 ? 1 : 2; //255直通 156:穿梭
  681. $this->send_status = 440; //调度状态
  682. $this->run_status = 434; //出车状态
  683. $this->finance_status = 444; //报账状态
  684. //$this->send_bus_res_id = $v['send_bus_res_id'];
  685. //$this->send_bus_driver_res_id = $v['send_bus_driver_res_id'];
  686. $model = clone $this;
  687. $res = $model->save();
  688. if (!$res) { //如果执行失败,手动抛出异常
  689. throw new \Exception('新增同步任务失败');
  690. }
  691. LogComponent::addLog($this->bus_number, LOG_TYPE_ORDER, "CS推送出车任务,出车单号{$this->bus_number}", 'bus_number', $this->bus_number, 0, 2);
  692. }
  693. }
  694. }
  695. $transaction->commit(); //提交
  696. } catch (\Exception $e) {
  697. $transaction->rollBack();
  698. $msg = array('status' => false, 'msg' => $e->getMessage());
  699. $arr = array("agentid" => 1000003,
  700. "title" => '出车任务同步错误预警:',
  701. "msg" => $e->getMessage(),
  702. "touser" => 'wanglg');
  703. zOfficeWechat::sendMsg($arr);
  704. }
  705. return ['model' => $this, 'data' => $data];
  706. }
  707. /**
  708. * User:Steven
  709. * Desc:用于同步出车任务获取用车单位,如果没有,需要新增
  710. * @param $main_corporation_id
  711. * @param $main_corp_id
  712. * @param $user_id
  713. */
  714. public function getDepartmentID($main_corporation_id, $main_corp_id, $user_id)
  715. {
  716. $conn = Yii::$app->db;
  717. $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";
  718. $res_exist_main_corp = $conn->createCommand($sql_exist_main_corp)->queryAll();
  719. if (!isset($res_exist_main_corp[0]['id'])) { //bus_department中不存在当前的车次线路所属的运营主体的用车单位
  720. $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`)
  721. 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;";
  722. $conn->createCommand($sql_insert_corp)->execute();
  723. $department_id = $conn->getLastInsertId(); //得到用车单位ID
  724. } else {
  725. $department_id = $res_exist_main_corp[0]['id'];
  726. }
  727. return $department_id;
  728. }
  729. /**
  730. * User:Steven
  731. * 获取车辆调度结果
  732. *
  733. * @return array
  734. */
  735. /* public function getBusDispatchResult()
  736. {
  737. $current_page = 1;
  738. $page_size = 5;
  739. $offset = ($current_page - 1) * $page_size;
  740. $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')
  741. ->from(self::tableName() . ' as a')
  742. ->leftJoin(BaseBus::tableName() . ' as b', 'a.send_bus_res_id=b.bus_id')
  743. ->leftJoin(BaseDriver::tableName() . ' as c', 'a.send_bus_driver_res_id=c.driver_id')
  744. ->leftJoin(DictType::tableName() . ' as d', 'a.send_status=d.id');
  745. $countQuery = clone $query;
  746. $pages = new \yii\data\Pagination([
  747. 'totalCount' => $countQuery->count(),
  748. 'pageSize' => 2,
  749. ]);
  750. $models = $query->offset($pages->offset)
  751. ->limit($pages->limit)
  752. ->all();
  753. $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
  754. from bus_order a
  755. LEFT JOIN base_bus b on a.send_bus_res_id=b.bus_id
  756. LEFT JOIN base_driver c on a.send_bus_driver_res_id=c.driver_id
  757. LEFT JOIN dict_type d on a.send_status=d.id";
  758. // $conn = Yii::$app->db;
  759. // $data = $conn->createCommand($sql)->queryAll();
  760. $dataProvider = new SqlDataProvider([
  761. 'sql' => $sql,
  762. 'pagination' => [
  763. 'pagesize' => '5',
  764. ],
  765. 'totalCount' => 14,
  766. ]);
  767. $dataProvider = new ActiveDataProvider([
  768. 'query' => self::find()->with(['bus', 'driver'])->where(['cancel_flag' => 0]),
  769. 'pagination' => [
  770. 'pageSize' => 5,
  771. ],
  772. ]);
  773. return ['model' => $this, 'data' => ['dataProvider' => $dataProvider]];
  774. }*/
  775. /**
  776. * User: wangxj
  777. *
  778. * 检测出车订单的状态,目前是否可以取消
  779. *
  780. * @param string $attribute 结束日期
  781. *
  782. */
  783. public function cancelCheck($attribute)
  784. {
  785. if ($this->oldAttributes[$attribute] == 439) {
  786. $this->addError($attribute, '出车已取消,请勿重复操作');
  787. } elseif (!in_array($this->oldAttributes[$attribute], $this::$bus_cancel_array))
  788. $this->addError($attribute, '出车状态已变更,现在无法取消');
  789. }
  790. public function beforeSave($insert)
  791. {
  792. if ($this->isNewRecord) {
  793. $this->create_time = date('Y-m-d H:i:s', time());
  794. if ($this->create_user_id === null || $this->create_user_id == '') {
  795. $this->create_user_id = Yii::$app->user->id;
  796. }
  797. if ($this->saled_count == null) {
  798. $this->saled_count = 0;
  799. }
  800. $this->cancel_flag = 0;
  801. } else {
  802. $this->update_time = date('Y-m-d H:i:s', time());
  803. $this->update_user_id = Yii::$app->user->id;
  804. }
  805. return parent::beforeSave($insert);
  806. }
  807. /**
  808. * 获取指定日期段内每一天的日期
  809. * @param string $startdate 开始日期
  810. * @param string $enddate 结束日期
  811. * @return array
  812. */
  813. public function getDateFromRange($startdate, $enddate)
  814. {
  815. $stimestamp = strtotime($startdate);
  816. $etimestamp = strtotime($enddate);
  817. // 计算日期段内有多少天
  818. $days = ($etimestamp - $stimestamp) / 86400 + 1;
  819. // 保存每天日期
  820. $date = array();
  821. for ($i = 0; $i < $days; $i++) {
  822. $date[] = date('Y-m-d', $stimestamp + (86400 * $i));
  823. }
  824. return $date;
  825. }
  826. public static function getBaozhangStatus()
  827. {
  828. $sql = "SELECT id,type_name FROM dict_type WHERE parent_id = 432";
  829. $connect = Yii::$app->db;
  830. $data = $connect->createCommand($sql)->queryAll();
  831. return ['data' => $data];
  832. }
  833. public function getDepartInfo()
  834. {
  835. $sql = "SELECT id,depart_name FROM bus_department WHERE cancel_flag = 0";
  836. $connect = Yii::$app->db;
  837. $data = $connect->createCommand($sql)->queryAll();
  838. return ['model' => $this, 'data' => $data];
  839. }
  840. public function modifyLineSafe()
  841. {
  842. $status = isset($_POST['status']) ? $_POST['status'] : 0;
  843. $bus_order_id = isset($_POST['bus_order_id']) ? $_POST['bus_order_id'] : '';
  844. $towhich = isset($_POST['towhich']) ? $_POST['towhich'] : '';
  845. if ($bus_order_id == '') {
  846. return ['data' => '确认失败'];
  847. } else {
  848. $sql = "update bus_order set $towhich = $status where bus_number = $bus_order_id";
  849. }
  850. $connect = Yii::$app->db;
  851. $data_temp = $connect->createCommand($sql)->execute();
  852. $sql1 = "select line_type,line_status,safe from bus_order where bus_number = $bus_order_id";
  853. $data = $connect->createCommand($sql1)->queryOne();
  854. //在置状态前,判断状态是否在出车准备,如果是才更新,否则不改变run_status;
  855. $sql_status = "select run_status from bus_order where bus_number = $bus_order_id";
  856. $data_status = $connect->createCommand($sql_status)->queryOne();
  857. if ($data['line_type'] == '1') {
  858. if ($data['line_status'] == '1' && $data['safe'] == '1') {
  859. if ($data_status['run_status'] == 434 || $data_status['run_status'] == 435) {
  860. $sql2 = "update bus_order set run_status = '436' where bus_number = $bus_order_id";
  861. $data_temp = $connect->createCommand($sql2)->execute();
  862. $data['info'] = '待出车';
  863. }
  864. $data['status'] = '0';
  865. }
  866. } else if ($data['line_type'] == '2') {
  867. if ($data['safe'] == '1') {
  868. if ($data_status['run_status'] == 434 || $data_status['run_status'] == 435) {
  869. $sql3 = "update bus_order set run_status ='436' where bus_number = $bus_order_id";
  870. $data_temp = $connect->createCommand($sql3)->execute();
  871. $data['info'] = '待出车';
  872. }
  873. $data['status'] = '0';
  874. }
  875. }
  876. $data['code'] = '0';
  877. return ['data' => $data];
  878. }
  879. public function cancelBusOrder()
  880. {
  881. $user_id = Yii::$app->user->id;
  882. $bus_order_id = isset($_POST['id']) ? $_POST['id'] : '';
  883. // $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)";
  884. $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
  885. set a.send_bus_driver_res_id=null,a.send_bus_driver_res_id=null, a.run_status = 439,
  886. a.update_user_id = $user_id,b.run_status=if(b.RUN_ID is null,b.run_status,148),
  887. b.UPDATE_USER_ID =if(b.RUN_ID is null,b.UPDATE_USER_ID,$user_id),
  888. c.SEND_STATUS = if (b.RUN_ID is null,c.SEND_STATUS,144),
  889. c.SEND_DRIVER_MOBILE = if (b.RUN_ID is null,c.SEND_DRIVER_MOBILE,''),
  890. c.SEND_BUS_RES_ID = if (b.RUN_ID is null,c.SEND_BUS_RES_ID,0),
  891. c.SEND_BUS_NO = if (b.RUN_ID is null,c.SEND_BUS_NO,''),
  892. c.SEND_BUS_DRIVER_RES_ID = if (b.RUN_ID is null,c.SEND_BUS_DRIVER_RES_ID,0),
  893. c.SEND_DRIVER_NAME = if (b.RUN_ID is null,c.SEND_DRIVER_NAME,''),
  894. c.UPDATE_USER_ID = if (b.RUN_ID is null,c.UPDATE_USER_ID,$user_id)
  895. where a.id in ($bus_order_id)";
  896. $connect = Yii::$app->db;
  897. $data = $connect->createCommand($sql)->execute();
  898. return ['data' => $data];
  899. }
  900. //获取天数
  901. public static function getDayNum()
  902. {
  903. $day_num = 31;
  904. $data = [];
  905. for ($i = 1; $i <= $day_num; $i++) {
  906. $data[$i] = $i . '天';
  907. }
  908. return $data;
  909. }
  910. /**
  911. * User: wangxj
  912. *
  913. * 修改run_bus表对应的值
  914. *
  915. */
  916. public function updateRunBus()
  917. {
  918. $bus = $this->getBus()->one();
  919. $driver = $this->getDriver()->one();
  920. if ($bus == null) {
  921. $bus = new BaseBus();
  922. }
  923. if ($driver == null) {
  924. $driver = new BaseDriver();
  925. }
  926. $run_bus = RunBus::updateAll([
  927. 'SALED_COUNT' => $this->saled_count,
  928. 'SEND_BUS_RES_ID' => $this->send_bus_res_id,
  929. 'SEND_BUS_NO' => $bus->BUS_NO,
  930. 'SEND_BUS_ORG_ID' => $bus->ORG_ID,
  931. 'SEND_BUS_TYPE_RES_ID' => $bus->BUS_TYPE_RES_ID,
  932. 'SEND_BUS_DRIVER_RES_ID' => $this->send_bus_driver_res_id,
  933. 'SEND_DRIVER_NAME' => $driver->DRIVER_NAME,
  934. 'SEND_DRIVER_MOBILE' => $driver->PHONE_NO,
  935. 'SEND_BUS_USER_ID' => Yii::$app->user->id,
  936. ], ['cancel_flag' => 0, 'id' => $this->run_bus_id]);
  937. }
  938. /**
  939. * @param $params
  940. * 车管报表导出
  941. */
  942. public function getExport($params)
  943. {
  944. //op
  945. //bus-income 出车收入
  946. //hybrid_you 油电费用 油
  947. //hybrid_dian 油电费用 电
  948. //road-bridge 路桥
  949. //driver-fee 司机费用
  950. //detail 订单明细
  951. $this->op = $params['op'];
  952. $this->date_type = isset($params['date_type']) ? $params['date_type'] : 1;
  953. $this->start_date = $params['start_date'];
  954. $this->end_date = $params['end_date'];
  955. $this->use_bus_org_id = isset($params['use_bus_org_id']) ? $params['use_bus_org_id'] : -1;
  956. $this->line_type = isset($params['line_type']) ? $params['line_type'] : -1;
  957. $this->bus_id = isset($params['bus_id']) ? $params['bus_id'] : -1;
  958. $this->driver_id = isset($params['driver_id']) ? $params['driver_id'] : -1;
  959. $this->bus_number = isset($params['bus_number']) ? $params['bus_number'] : '';
  960. if (in_array($this->op, ['hybrid_you', 'hybrid_dian'])) {
  961. $query = BusExpenses::find()->from(BusExpenses::tableName() . ' as a')
  962. ->leftJoin(BaseBus::tableName(), ' a.bus_id= base_bus.bus_id and a.cancel_flag = 0')->asArray();
  963. $query->andFilterWhere([
  964. 'base_bus.MAIN_CORP_ID' => $this->login_user->MAIN_CORP_ID2
  965. ]);
  966. } else {
  967. $query = self::find()->from(self::tableName() . ' as a')
  968. ->leftJoin(RunBusExpenses::tableName(), ' a.bus_number = run_bus_expenses.bus_number and run_bus_expenses.cancel_flag=0 ')->asArray();
  969. }
  970. $dataProvider = new ActiveDataProvider([
  971. 'query' => $query,
  972. 'pagination' => false,
  973. 'sort' => [
  974. 'attributes' => [
  975. 'chuche_count',
  976. 'maoli',
  977. 'income',
  978. 'detail_income',
  979. 'all_cost',
  980. 'lichengshu',
  981. 'youdian',
  982. 'zhusu',
  983. 'canyin',
  984. 'tingche',
  985. 'sitie',
  986. 'luqiao',
  987. 'run_date',
  988. 'finish_date',
  989. 'bus_number',
  990. 'bus_name',
  991. 'driver_name',
  992. 'itinerary_name',
  993. 'use_bus_org_name',
  994. 'all_cost',
  995. 'start_lichengshu',
  996. 'end_lichengshu',
  997. 'buy_date',
  998. 'bus_no',
  999. 'brand_name',
  1000. 'expense_subject_id',
  1001. 'seat_desc',
  1002. 'receive_value',
  1003. 'expense_price',
  1004. 'all_lichengshu',
  1005. ],
  1006. ],
  1007. ]);
  1008. if (!in_array($this->op, ['hybrid_you', 'hybrid_dian'])) {
  1009. $dataProvider->sort->defaultOrder = ['chuche_count' => SORT_DESC];
  1010. }
  1011. //判断是否油电费
  1012. if (in_array($this->op, ['hybrid_you', 'hybrid_dian'])) {
  1013. //计算里程数时,必须联run_bus_expense,bus_expense不会记录加油之后跑的任务里程数
  1014. $query->leftJoin(RunBusExpenses::tableName() . ' as e', 'e.bus_res_id = a.bus_id and e.cancel_flag = 0 and e.expense_subject_id = 462');
  1015. $query->addSelect([
  1016. 'base_bus.bus_no', 'base_bus.bus_id as ID', 'base_bus.buy_date',
  1017. '(select res_name from base_resource where base_bus.brand_id = res_id) as brand_name',
  1018. 'a.expense_subject_id',
  1019. 'base_bus.seat_desc', '(sum(receive_value) * count(DISTINCT a.id) / count(*)) receive_value',
  1020. '(sum(a.expense_price) * count(DISTINCT a.id) / count(*)) expense_price',
  1021. 'max(a.start_value) as all_lichengshu',
  1022. '(max(e.end_value)-min(e.start_value)) as lichengshu',
  1023. ]);
  1024. $query->andFilterWhere([
  1025. 'a.cancel_flag' => 0,
  1026. 'a.expense_subject_id' => $this->op == 'hybrid_you' ? 479 : 480,
  1027. ]);
  1028. $query->andFilterWhere([
  1029. 'between', 'a.create_time', $this->start_date . ' 00:00:00', $this->end_date . ' 23:59:59'
  1030. ]);
  1031. if ($this->bus_id != -1) {
  1032. $query->andFilterWhere([
  1033. 'a.bus_id' => $this->bus_id
  1034. ]);
  1035. }
  1036. $query->groupBy('bus_no');
  1037. } else {
  1038. // 出车收入
  1039. if ($this->op == 'bus-income') {
  1040. $query->addSelect([
  1041. '(select depart_name from bus_department where bus_department.ID = a.use_bus_org_id)as use_bus_org_name',
  1042. 'a.use_bus_org_id',
  1043. ]);
  1044. $query->groupBy('a.use_bus_org_id');
  1045. } elseif ($this->op == 'driver-fee') {
  1046. // 司机费用
  1047. $query->addSelect([
  1048. 'a.send_bus_driver_res_id',
  1049. '(select driver_name from base_driver where base_driver.DRIVER_ID = a.send_bus_driver_res_id) as driver_name',
  1050. ]);
  1051. $query->groupBy(['a.send_bus_driver_res_id']);
  1052. } elseif ($this->op == 'road-bridge') {
  1053. $query->addSelect([
  1054. 'a.send_bus_res_id',
  1055. '(select bus_no from base_bus where base_bus.BUS_ID = a.send_bus_res_id) as bus_name',
  1056. '(select seat_desc from base_bus where base_bus.BUS_ID = a.send_bus_res_id) as seat_desc',
  1057. '(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',
  1058. ]);
  1059. $query->groupBy(['a.send_bus_res_id']);
  1060. } elseif ($this->op == 'detail' || $this->op == 'send_res_id') {
  1061. $query->addSelect([
  1062. 'a.use_bus_org_id',
  1063. '(select depart_name from bus_department where bus_department.ID = a.use_bus_org_id)as use_bus_org_name',
  1064. 'a.bus_number',
  1065. 'a.run_date',
  1066. 'date_add(a.run_date,INTERVAL a.day_num day) as finish_date',
  1067. '(select bus_no from base_bus where base_bus.BUS_ID = a.send_bus_res_id) as bus_name',
  1068. '(select driver_name from base_driver where base_driver.DRIVER_ID = a.send_bus_driver_res_id) as driver_name',
  1069. 'a.itinerary_name',
  1070. 'sum(if(expense_subject_id = 462,run_bus_expenses.start_value,0)) as start_lichengshu',
  1071. 'sum(if(expense_subject_id = 462,run_bus_expenses.end_value,0)) as end_lichengshu',
  1072. '(select type_name from dict_type where id = a.finance_status) as finance_status',
  1073. ]);
  1074. $query->groupBy(['a.bus_number']);
  1075. if ($this->bus_number != '') {
  1076. $query->andFilterWhere([
  1077. 'a.bus_number' => $this->bus_number
  1078. ]);
  1079. }
  1080. }
  1081. // 公共数据
  1082. $query->addSelect([
  1083. 'a.id',
  1084. 'count(distinct a.bus_number) as chuche_count',
  1085. '(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',
  1086. '(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',
  1087. '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',
  1088. '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',
  1089. // 'sum(a.send_cost) as send_cost',
  1090. '(sum(if(run_bus_expenses.expense_subject_id = 462 or isnull(run_bus_expenses.expense_subject_id = 462),a.send_cost,0))
  1091. + 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', //如果是外部派车,不需要加总司机报账的数据
  1092. '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))
  1093. -(sum(if(run_bus_expenses.expense_subject_id = 462 or isnull(run_bus_expenses.expense_subject_id = 462),a.send_cost,0))
  1094. + sum(if(expense_subject_id in (462,463,464,465,466,467),run_bus_expenses.expense_value,0))))) as maoli',
  1095. 'sum(if(expense_subject_id = 462,run_bus_expenses.end_value-run_bus_expenses.start_value,0)) as lichengshu',
  1096. 'sum(if(expense_subject_id = 462,run_bus_expenses.expense_value,0)) as youdian',
  1097. 'sum(if(expense_subject_id = 463,run_bus_expenses.expense_value,0)) as luqiao',
  1098. 'sum(if(expense_subject_id = 464,run_bus_expenses.expense_value,0)) as sitie',
  1099. 'sum(if(expense_subject_id = 465,run_bus_expenses.expense_value,0)) as tingche',
  1100. 'sum(if(expense_subject_id = 466,run_bus_expenses.expense_value,0)) as canyin',
  1101. 'sum(if(expense_subject_id = 467,run_bus_expenses.expense_value,0)) as zhusu',
  1102. ]);
  1103. //时间搜索类型
  1104. if ($this->date_type == 2) { //收车日期
  1105. $query->andFilterWhere(['between', "date_add(a.run_date,interval day_num day)", $this->start_date, $this->end_date]);
  1106. } else { //默认是出车日期 1
  1107. $query->andFilterWhere(['between', 'a.run_date', $this->start_date, $this->end_date]);
  1108. }
  1109. //出车准备,待出车,出车中,已完成
  1110. $query->andFilterWhere(['in', 'run_status', [435, 436, 437, 438]]);
  1111. $query->andFilterWhere([
  1112. 'a.cancel_flag' => 0
  1113. ]);
  1114. $query->andFilterWhere([
  1115. '(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
  1116. ]);
  1117. if ($this->use_bus_org_id != -1) {
  1118. $query->andFilterWhere(['a.use_bus_org_id' => $this->use_bus_org_id]);
  1119. }
  1120. if ($this->driver_id != -1) {
  1121. $query->andFilterWhere(['a.send_bus_driver_res_id' => $this->driver_id]);
  1122. }
  1123. if ($this->bus_id != -1) {
  1124. $query->andFilterWhere(['a.send_bus_res_id' => $this->bus_id]);
  1125. }
  1126. //线路类型
  1127. if ($this->line_type != -1) {
  1128. $query->andFilterWhere([
  1129. 'a.line_type' => $this->line_type
  1130. ]);
  1131. }
  1132. // $query->orderBy('chuche_count desc');
  1133. }
  1134. // 获取slq
  1135. $tmp = $query->createCommand()->getRawSql();
  1136. if (!isset($params['show'])) {
  1137. $dataProvider = $dataProvider->getModels();
  1138. }
  1139. return $dataProvider;
  1140. }
  1141. /**
  1142. * User:Steven
  1143. * Desc:
  1144. * @param $string
  1145. */
  1146. protected function writeLog($string)
  1147. {
  1148. $string = date('Y-m-d H:i:s') . PHP_EOL . $string . PHP_EOL;
  1149. if (!file_exists(__DIR__ . '/../../../runtime/logs/syncBusOrder')) {
  1150. mkdir(__DIR__ . '/../../../runtime/logs/syncBusOrder', 0777, true);
  1151. }
  1152. file_put_contents(__DIR__ . '/../../../runtime/logs/syncBusOrder/' . date('Y-m-d') . '.log', $string, FILE_APPEND);
  1153. }
  1154. public function getEndStatusLabel()
  1155. {
  1156. if ($this->end_status == self::STATUS_END_NOTHING) {
  1157. $status = $this->finance_lock;
  1158. } else {
  1159. $status = $this->end_status;
  1160. }
  1161. return searchOrder::$finance_type_array[$status];
  1162. }
  1163. public function getScheduleDriver($run_date, $driver_name)
  1164. {
  1165. if (!empty($driver_name)) {
  1166. $dn = preg_replace('/,|,/', '|', trim($driver_name, ',, '));
  1167. $w1 = 'bd.driver_name REGEXP "' . $dn . '" and ';
  1168. $w2 = '(select driver_name from base_driver where driver_id = name) REGEXP "' . $dn . '" and ';
  1169. $w3 = 'base_driver.driver_name REGEXP "' . $dn . '" and ';
  1170. } else {
  1171. $w1 = $w2 = $w3 = '';
  1172. }
  1173. //获取当月头 和当月尾
  1174. $month_start_date = date('Y-m-01', strtotime($run_date));
  1175. $month_end_date = date('Y-m-t', strtotime($run_date));
  1176. $main_corp_id = $this->login_user->MAIN_CORP_ID2;
  1177. $sql = "select * from
  1178. (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,
  1179. 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,
  1180. 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,
  1181. 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,
  1182. group_concat(distinct date13 order by date13 desc) as date13,group_concat(distinct date14 order by date14 desc) as date14,
  1183. info_type,sum(expense_value) as sitie from
  1184. (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,
  1185. 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
  1186. from
  1187. (
  1188. select driver_id,driver_name,info_type,
  1189. 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,
  1190. 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,
  1191. 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,
  1192. 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,
  1193. 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,
  1194. 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,
  1195. 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,
  1196. 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,
  1197. 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,
  1198. 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,
  1199. 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,
  1200. 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,
  1201. 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,
  1202. 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
  1203. from
  1204. (
  1205. select * from
  1206. (
  1207. 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
  1208. 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
  1209. run_date between '{$run_date}' and date_add('{$run_date}', interval 13 day) and bo.run_status IN (434, 435, 436, 437, 438)
  1210. where {$w1} bd.main_corp_id = {$main_corp_id} and bd.cancel_flag= 0 and bd.driver_name !=''
  1211. group by bd.driver_id,bo.run_date
  1212. union all
  1213. 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,
  1214. 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
  1215. base_document.doc_option in (515,589) and base_document.start_date between '{$run_date}' and date_add('{$run_date}', interval 13 day)
  1216. and {$w2}
  1217. (select main_corp_id from base_driver where driver_id = name) = {$main_corp_id}
  1218. ) a2
  1219. ) a
  1220. ) b
  1221. 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
  1222. run_bus_expenses.run_date between '{$month_start_date}' and '{$month_end_date}'
  1223. group by driver_id
  1224. ) d order by convert(driver_name USING gbk) COLLATE gbk_chinese_ci asc";
  1225. $sql_count = "select count(1) as sum_all from base_driver where {$w3} main_corp_id={$main_corp_id} and cancel_flag= 0";
  1226. $total = Yii::$app->db->createCommand($sql_count)->queryOne();
  1227. $dataProvider = new SqlDataProvider([
  1228. 'sql' => $sql,
  1229. 'pagination' => [
  1230. 'pagesize' => '15',
  1231. ],
  1232. 'totalCount' => $total['sum_all']
  1233. ]);
  1234. return $dataProvider;
  1235. }
  1236. //用于获取七日 日期和星期
  1237. public static function getDateArr($start_date)
  1238. {
  1239. $end_date = date("Y-m-d", (strtotime("$start_date") + 3600 * 24 * 13));
  1240. $stime = strtotime($start_date);
  1241. $etime = strtotime($end_date);
  1242. $datearr = ['date', 'xingqi', 'udate'];
  1243. while ($stime <= $etime) {
  1244. $datearr['date'][] = date('m-d', $etime);
  1245. $datearr['udate'][] = date('Y-m-d', $etime);
  1246. switch (date('w', $etime)) {
  1247. case 0:
  1248. $datearr['xingqi'][] = "周日";
  1249. break;
  1250. case 1:
  1251. $datearr['xingqi'][] = "周一";
  1252. break;
  1253. case 2:
  1254. $datearr['xingqi'][] = "周二";
  1255. break;
  1256. case 3:
  1257. $datearr['xingqi'][] = "周三";
  1258. break;
  1259. case 4:
  1260. $datearr['xingqi'][] = "周四";
  1261. break;
  1262. case 5:
  1263. $datearr['xingqi'][] = "周五";
  1264. break;
  1265. case 6:
  1266. $datearr['xingqi'][] = "周六";
  1267. break;
  1268. }
  1269. $etime = $etime - 3600 * 24;
  1270. }
  1271. return $datearr;
  1272. }
  1273. public function getScheduleDriverDetail($run_date, $driver_name)
  1274. {
  1275. // $sql = "select * from
  1276. //(
  1277. //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,
  1278. //bo.itinerary_name,if(line_type=1,'省际','市内') as line_type,
  1279. //bo.saled_count,
  1280. //(select bus_no from base_bus bb where bb.BUS_ID = bo.send_bus_res_id) as bus_no,
  1281. //(select type_name from dict_type dt where dt.id = bo.run_status ) as run_status
  1282. //from bus_order bo
  1283. //inner join base_driver bd on bd.DRIVER_ID=bo.send_bus_driver_res_id and bd.DRIVER_NAME like '%范强%'
  1284. //inner join bus_department bde on bde.ID = bo.use_bus_org_id
  1285. //inner join bus_itinerary bi on bi.itinerary_id = bo.itinerary_id and bi.day_seq_id = bo.day_num
  1286. //where bo.run_date ='2017-02-08'
  1287. //group by bus_number
  1288. //union all
  1289. //select
  1290. //bd.driver_name, 'wb' as bus_number, '' as depart_name, '' as run_date,
  1291. //'' as day_num, '' as start_time, '' as end_time, '' as itinerary_name, '' as line_type,
  1292. //'' as saled_count, '' as bus_no, '' as run_status
  1293. //from base_document bdo
  1294. //inner join base_driver bd on bd.DRIVER_ID=bdo.name and bd.DRIVER_NAME like '%范强%'
  1295. //where bdo.doc_option in (515,589) and bdo.pid=0 and bdo.start_date = '2017-02-08'
  1296. //)a";
  1297. $query = self::find()->select([
  1298. 'driver_id',
  1299. "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',
  1300. 'bo.itinerary_name', 'bo.line_type',
  1301. 'bo.saled_count',
  1302. '(select bus_no from base_bus bb where bb.BUS_ID = bo.send_bus_res_id) as bus_no',
  1303. '(select type_name from dict_type dt where dt.id = bo.run_status ) as run_status_name'])
  1304. ->from('base_driver bd')
  1305. ->leftJoin('bus_order bo', ' bd.DRIVER_ID=bo.send_bus_driver_res_id and bo.run_date = \'' . "{$run_date}" . '\'')
  1306. ->leftJoin('bus_department bde', 'bde.ID = bo.use_bus_org_id')
  1307. ->leftJoin('bus_itinerary bi', 'bi.itinerary_id = bo.itinerary_id and bi.day_seq_id = bo.day_num')
  1308. ->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]]])
  1309. ->groupBy('bd.DRIVER_ID,bo.bus_number');
  1310. $query2 = BaseDocument::find()
  1311. ->select([
  1312. '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",
  1313. "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"
  1314. ])
  1315. ->from(BaseDocument::tableName() . ' as bdo')->innerJoin('base_driver bd', 'bd.DRIVER_ID=bdo.name and bd.DRIVER_NAME like \'' . "%{$driver_name}%" . '\'')
  1316. ->where(['and', 'bdo.id is not null', ['=', 'bdo.pid', 0], ['=', 'bdo.START_DATE', "{$run_date}"], ['in', 'bdo.doc_option', [515, 589]]])
  1317. ->groupBy('bdo.ID');
  1318. $new_query = (new Query())->select(['bd.driver_name', 'tmpA.*'])->from(['tmpA' => $query->union($query2, true)]);
  1319. $new_query->rightJoin('base_driver bd', 'bd.driver_id = tmpA.driver_id');
  1320. $new_query->where(['and', ['=', 'bd.CANCEL_FLAG', 0], ['=', 'bd.MAIN_CORP_ID', $this->login_user->MAIN_CORP_ID2], ['like', 'bd.DRIVER_NAME', $driver_name]]);
  1321. $new_query->orderBy('`bus_number_name` is not null desc,driver_name,run_date_name desc,start_time');
  1322. $dataProvider = new ActiveDataProvider([
  1323. 'query' => $new_query
  1324. ]);
  1325. return $dataProvider;
  1326. }
  1327. public function getbase_driver()
  1328. {
  1329. return $this->hasOne(BaseDriver::className(), ['DRIVER_ID' => 'send_bus_driver_res_id']);
  1330. }
  1331. public function getStatus()
  1332. {
  1333. return $this->hasOne(DictType::className(), ['ID' => 'run_status']);
  1334. }
  1335. //维保和出车的任务显示
  1336. public static function getFinShow($string)
  1337. {
  1338. // wb, wb,4 4 如果只有数字取数字 没有数字取维保
  1339. $tp = explode(',', $string);
  1340. if (count($tp) == 1)
  1341. $fin = $tp[0];
  1342. elseif (count($tp) > 1) {
  1343. if ($tp[1] == '')
  1344. $fin = $tp[0];
  1345. else
  1346. $fin = $tp[1];
  1347. }
  1348. if ($fin == 'wb') {
  1349. $fin = '维保';
  1350. } elseif ($fin == '') {
  1351. $fin = '空闲';
  1352. }
  1353. return $fin;
  1354. }
  1355. //出车单位结算方式是单结时,必须填写单结收款人
  1356. public function singleContactValidate()
  1357. {
  1358. $depart = $this->department;
  1359. if ($depart->settle_type == 292 && trim($this->single_contact) == '') {
  1360. $this->addError('single_contact', '此用车单位必须填写收款人');
  1361. }
  1362. }
  1363. /**
  1364. * 从cs同步当前出车任务数据
  1365. *
  1366. * @return bool
  1367. * @author wangxj
  1368. */
  1369. public function syncOneBusOrder()
  1370. {
  1371. $arr = array("agentid" => 1000003,
  1372. "title" => '出车任务同步错误预警:',
  1373. "msg" => json_encode('关账同步出错:' . $this->bus_number),
  1374. "touser" => 'shifp|wangxj');
  1375. $v = RunBus::find()->select(['run_bus.*', 'opera_line.main_corp_id'])
  1376. ->leftJoin('run_main', 'run_bus.RUN_ID = run_main.RUN_ID')
  1377. ->leftJoin('opera_line', 'run_main.prod_id = opera_line.line_id')->where(['run_bus.id' => $this->run_bus_id])->asArray()->one();
  1378. // $v = RunBus::findOne($this->run_bus_id);
  1379. if ($v == null || $v->CANCEL_FLAG == 1) {
  1380. zOfficeWechat::sendMsg($arr);
  1381. return false;
  1382. }
  1383. switch ($v['COST_MOTORCADE_ID']) {
  1384. case 628: //恒栋车队
  1385. $user_id = 487; //admin_007:恒栋管理员
  1386. $main_corporation_id = 7;
  1387. break;
  1388. case 403: //千旅车队
  1389. $user_id = 559; //admin_013:千旅管理员
  1390. $main_corporation_id = 13;
  1391. break;
  1392. case 1284: //黄山长三角车队
  1393. $user_id = 579; //admin_011:郝贵福
  1394. $main_corporation_id = 12;
  1395. break;
  1396. case 1288: //苏州舟游车队
  1397. $user_id = 582; //周慧
  1398. $main_corporation_id = 15;
  1399. break;
  1400. case 1466: //整车接送车队(李子健)
  1401. $user_id = 673; //admin_021
  1402. $main_corporation_id = 26;
  1403. break;
  1404. case 1469: //上海瑞景管理员(李子健)
  1405. $user_id = 676; //admin_023
  1406. $main_corporation_id = 27;
  1407. break;
  1408. default:
  1409. $main_corporation_id = 0;
  1410. $user_id = 0;
  1411. }
  1412. if ($user_id == 0) {
  1413. zOfficeWechat::sendMsg($arr);
  1414. return false;
  1415. }
  1416. $department_id = $this->getDepartmentID($main_corporation_id, $v['main_corp_id'], $user_id);
  1417. if ($v['RUN_BUS_STATUS'] == 142) //142:已停运 对巴士对车次进行取消,车队系统也需要取消对应出车任务
  1418. $run_str = ', run_status = 439, send_status = 440, send_bus_res_id=null, send_bus_driver_res_id=null';
  1419. else
  1420. $run_str = ', run_status = if(run_status = 439, 434, run_status), send_status = if(run_status = 439, 440, send_status)';
  1421. $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']},
  1422. bus_cost={$v['COST_PRICE']},bus_cost_type = {$v['COST_TYPE']},update_time=now(),saled_count={$v['SALED_COUNT']} $run_str
  1423. where run_id={$v['RUN_ID']} and bus_order_id={$v['BUS_ORDER_ID']}";
  1424. $up_rs = Yii::$app->db->createCommand($sql_update)->execute();
  1425. return $up_rs > 0;
  1426. }
  1427. }
  1428. ?>