|
- <?php
-
- namespace backend\modules\api\models;
-
- use yii\db\ActiveRecord;
- use Yii;
- use yii\base\Exception;
- use backend\modules\zzcs\models\OrderSendMessage;
- use backend\modules\motorcade\models\BusOilDoc;
- use backend\modules\motorcade\models\BusDocLog;
-
- /**
- * This is the model class for table "run_bus_expenses".
- *
- * @property integer $ID
- * @property integer $create_user_id
- * @property string $create_time
- * @property integer $update_user_id
- * @property string $update_time
- * @property integer $cancel_flag
- * @property integer $bus_number
- * @property integer $use_bus_org_id
- * @property string $run_date
- * @property integer $bus_res_id
- * @property integer $bus_driver_res_id
- * @property integer $expense_subject_id
- * @property integer $expense_type
- * @property string $expense_value
- * @property string $start_value
- * @property string $end_value
- * @property string $doc_log_id
- */
- class RunBusExpenses extends ActiveRecord
- {
- /**
- * @inheritdoc
- */
- public static function tableName()
- {
- return 'run_bus_expenses';
- }
-
- /**
- * @inheritdoc
- */
- public function rules()
- {
- return [
- [['create_user_id', 'create_time', 'run_date'], 'required'],
- [['create_user_id', 'update_user_id', 'cancel_flag', 'bus_number', 'use_bus_org_id', 'bus_res_id', 'bus_driver_res_id', 'expense_subject_id', 'expense_type'], 'integer'],
- [['update_time'], 'safe'],
- [['expense_value', 'start_value', 'end_value', 'doc_log_id'], 'number'],
- [['create_time'], 'string', 'max' => 20],
- [['run_date'], 'string', 'max' => 10],
- ];
- }
-
- /**
- * @inheritdoc
- */
- public function attributeLabels()
- {
- return [
- 'ID' => 'ID',
- 'create_user_id' => 'Create User ID',
- 'create_time' => 'Create Time',
- 'update_user_id' => 'Update User ID',
- 'update_time' => 'Update Time',
- 'cancel_flag' => 'Cancel Flag',
- 'bus_number' => '出车单号',
- 'use_bus_org_id' => '用车单位',
- 'run_date' => '出车日期',
- 'bus_res_id' => '车辆res_id',
- 'bus_driver_res_id' => '司机res_id',
- 'expense_subject_id' => '支出科目 对应dict_type.id',
- 'expense_type' => '支出方式 对应dict_type.id',
- 'expense_value' => '支出金额',
- 'start_value' => '科目为邮电费时对应开始时的里程数,为路桥费时对应ETC充值卡开始时的金额',
- 'end_value' => '科目为邮电费时对应结束时的里程数,为路桥费时对应ETC充值卡结束时的金额',
- 'doc_log_id' => '对应bus_doc_log 表中的id',
- ];
- }
-
- /**
- * Function Description:获取司机的总里程数
- * Function Name: getTotalMileageByDriver
- * @param int $driver_id 司机id
- *
- * @return array|int|mixed|null|ActiveRecord
- *
- * @author 张帅
- */
- public function getTotalMileageByDriver($driver_id)
- {
- $result = self::find()
- ->select("sum(end_value-start_value) as total_mileage")
- ->where([
- 'and',
- ['=', 'bus_driver_res_id', $driver_id],
- ['=', 'expense_subject_id', 462],
- ['=', 'cancel_flag', 0],
- ['!=', 'end_value', 0],
- ])
- ->asArray()->one();
- $result = ($result['total_mileage'] == null ? 0 : $result['total_mileage']);
- return $result;
- }
-
- /**
- * Function Description:出行开始
- * Function Name: runStart
- * @param $bus_number
- * @param $postage
- * @param $toll_charge
- *
- * @return bool
- *
- * @author 张帅
- */
- public function runStart($bus_number, $postage, $toll_charge)
- {
- #region 1.通过出车单号获取行程详情
- $bus_order_info = BusOrder::find()
- ->select([
- 'bus_number',//出车单号
- 'use_bus_org_id',//用车单位
- 'run_date',//出车日期
- 'bus_res_id' => 'send_bus_res_id',//所用车辆
- 'bus_driver_res_id' => 'send_bus_driver_res_id',//出车司机
- ])
- ->where([
- 'bus_number' => $bus_number,
- 'cancel_flag' => 0,
- ])
- ->asArray()->one();
- #endregion
-
- #region 2.获取要添加的出行任务费用数据
- $expenses_value[] = $bus_order_info + [
- 'create_user_id' => $bus_order_info['bus_driver_res_id'],
- 'create_time' => date('Y-m-d H:i:s', time()),
- 'update_user_id' => $bus_order_info['bus_driver_res_id'],
- 'update_time' => date('Y-m-d H:i:s', time()),
- 'cancel_flag' => 0,
- 'expense_subject_id' => 462,
- 'expense_type' => 0,
- 'expense_value' => 0,
- 'start_value' => $postage,
- ];
- $expenses_value[] = $bus_order_info + [
- 'create_user_id' => $bus_order_info['bus_driver_res_id'],
- 'create_time' => date('Y-m-d H:i:s', time()),
- 'update_user_id' => $bus_order_info['bus_driver_res_id'],
- 'update_time' => date('Y-m-d H:i:s', time()),
- 'cancel_flag' => 0,
- 'expense_subject_id' => 463,
- 'expense_type' => 473,
- 'expense_value' => 0,
- 'start_value' => $toll_charge,
- ];
- #endregion
-
- #region 3.修改数据
- $transaction = Yii::$app->db->beginTransaction();
- try {
- //插入添加的出行任务费用
- $res = Yii::$app->db->createCommand()->batchInsert(self::tableName(),
- ['bus_number', 'use_bus_org_id', 'run_date', 'bus_res_id', 'bus_driver_res_id', 'create_user_id', 'create_time', 'update_user_id', 'update_time', 'cancel_flag', 'expense_subject_id', 'expense_type', 'expense_value', 'start_value'],
- $expenses_value)->execute();
- if (!$res) {
- throw new Exception('输入数据不符合格式');
- }
- //修改出车状态
- $bus_order_one = BusOrder::findOne(['bus_number' => $bus_number, 'cancel_flag' => 0]);
- $bus_order_one->attributes = ['update_user_id' => $bus_order_info['bus_driver_res_id'], 'update_time' => date('Y-m-d H:i:s', time()), 'run_status' => 437];
- $res = $bus_order_one->update();
- if (!$res) {
- throw new Exception('输入数据不符合格式');
- }
- $transaction->commit();
- $result = true;
- } catch (Exception $e) {
- # 回滚事务
- $result = false;
- }
- return $result;
- #endregion
- }
-
- /**
- * Function Description:任务结束
- * Function Name: runEnd
- * @param $bus_number
- * @param $postage
- * @param $toll_charge
- *
- * @return bool
- *
- * @author 张帅
- */
- public function runEnd($bus_number, $postage, $toll_charge, $diff_distance = 0)
- {
- #region 1.通过出车单号获取行程详情
- $bus_order_info = BusOrder::find()
- ->select([
- 'bus_number',//出车单号
- 'use_bus_org_id',//用车单位
- 'run_date',//出车日期
- 'bus_res_id' => 'send_bus_res_id',//所用车辆
- 'bus_driver_res_id' => 'send_bus_driver_res_id',//出车司机
- ])
- ->where([
- 'bus_number' => $bus_number,
- 'cancel_flag' => 0,
- ])
- ->asArray()->one();
- #endregion
-
-
- #region 2.修改数据
- $transaction = Yii::$app->db->beginTransaction();
- try {
- //(1)修改邮电费
- $postage_one = self::findOne(['bus_number' => $bus_number, 'cancel_flag' => 0, 'expense_subject_id' => 462]);
- $postage_start_value = $postage_one->start_value;
- if ($postage < $postage_start_value) {
- throw new Exception('请认真填写');
- }
-
- #region 获取参考油价
- $bus_postage = BaseBus::find()->select('mpg,oil_price,fuel_form')->where(['bus_id' => $bus_order_info['bus_res_id']])->asArray()->one();
- if (count($bus_postage) == 0 || empty($bus_postage['mpg']) || $bus_postage['mpg'] == 0) {//升/百公里 度/百公里
- $mpg = $bus_postage['fuel_form'] == 487 ? 82 : 25;
- } else {
- $mpg = $bus_postage['mpg'];
- }
- if (count($bus_postage) == 0 || empty($bus_postage['oil_price']) || $bus_postage['oil_price'] == 0) {// 元/升 元/度
- $oil_price = $bus_postage['fuel_form'] == 487 ? 2.2 : 6.11;
- } else {
- $oil_price = $bus_postage['oil_price'];
- }
- #endregion
-
- $expense_value = round((($postage - $postage_start_value) / 100 * $mpg * $oil_price), 2);//油耗费或者电耗费用
-
- $postage_value = [
- 'update_user_id' => $bus_order_info['bus_driver_res_id'],
- 'update_time' => date('Y-m-d H:i:s', time()),
- 'expense_value' => $expense_value,
- 'end_value' => $postage,
- ];
- $postage_one->attributes = $postage_value;
- $res = $postage_one->update();
- if (!$res) {
- throw new Exception('输入数据不符合格式');
- }
-
- //(2)修改路桥费
- $toll_charge_one = self::findOne(['bus_number' => $bus_number, 'cancel_flag' => 0, 'expense_subject_id' => 463]);
- $toll_charge_start_value = $toll_charge_one->start_value;
- $expense_value = $toll_charge_start_value - $toll_charge;
-
- //插入ETC记录
- $doc_log_id = 0;
- $bus_oil_doc_info = BusOilDoc::findOne(['BIND_BUS' => $bus_order_info['bus_res_id'], 'CARD_TYPE' => 2]);
- if (false != $bus_oil_doc_info && isset($bus_oil_doc_info["ID"])) {
- $card_balance = $bus_oil_doc_info["CARD_BALANCE"] - $expense_value;
- $bus_doc_log = new BusDocLog();
- $bus_doc_log->attributes = [
- 'CREATE_USER_ID' => $bus_order_info['bus_driver_res_id'],
- 'CREATE_TIME' => date("Y-m-d H:i:s"),
- 'UPDATE_USER_ID' => $bus_order_info['bus_driver_res_id'],
- 'UPDATE_TIME' => date("Y-m-d H:i:s"),
- 'CARD_ID' => $bus_oil_doc_info["ID"],
- 'BUS_ID' => $bus_oil_doc_info['BIND_BUS'],
- 'OPERATION_TYPE' => 601,
- 'OPERATION_DRIVER' => $bus_order_info['bus_driver_res_id'],
- 'OPERATION_DATE' => date("Y-m-d"),
- 'VALUE' => $expense_value,
- 'VALUE_OLD' => $bus_oil_doc_info["CARD_BALANCE"],
- 'NOTE' => "APP司机出车报账"
- ];
- $bus_doc_log->save();
- $doc_log_id = $bus_doc_log->attributes['ID'];
-
- if ($expense_value > 0) {
- $bus_oil_doc_info->attributes = ['CARD_BALANCE' => $card_balance, 'UPDATE_TIME' => date('Y-m-d H:i:s', time()), 'UPDATE_USER_ID' => $bus_order_info['bus_driver_res_id']];
- $res = $bus_oil_doc_info->update();
- }
- }
-
-
- $toll_charge_value = [
- 'update_user_id' => $bus_order_info['bus_driver_res_id'],
- 'update_time' => date('Y-m-d H:i:s', time()),
- 'expense_value' => $expense_value,
- 'end_value' => $toll_charge,
- 'doc_log_id' => $doc_log_id,
- ];
-
- $toll_charge_one->attributes = $toll_charge_value;
- $res = $toll_charge_one->update();
- if (!$res) {
- throw new Exception('输入数据不符合格式');
- }
-
- //修改出车状态
- $bus_order_one = BusOrder::findOne(['bus_number' => $bus_number, 'cancel_flag' => 0]);
- $bus_order_one->attributes = ['update_user_id' => $bus_order_info['bus_driver_res_id'], 'update_time' => date('Y-m-d H:i:s', time()), 'run_status' => 438];
- $res = $bus_order_one->update();
- if (!$res) {
- throw new Exception('输入数据不符合格式');
- }
- //以下为给乘客发送短信
- // $bus_order = new BusOrder();
- // $order_send_message = new OrderSendMessage();
- // $order_check_ticket = new OrderCheckTickets();
- // // 根据bus_number查询到run_id,为了进一步查询到检票的乘客作准备
- // $result = $bus_order->getRunIdByBusNumber($bus_number);
- // $customer_phone_list = $order_check_ticket->getCustomerMobile($result['run_id'],$result['bus_order_id']);
- // if(!empty($customer_phone_list)){
- // foreach($customer_phone_list as $k => $customer_phone){
- // $res_send_message = $order_send_message->sendTelMessage($customer_phone['customer_mobile'], '感谢您乘坐蜘蛛出行巴士旅游专线,祝您游玩愉快,如有门票、旅游直通车预订需求,请关注(蜘蛛行)公众号,有返佣哦!如对这次乘坐有任何建议,请拨打021-33280519进行反馈');
- // //短信记录插入order_send_message表
- // $current_time = date("Y-m-d H:i:s");
- // $send_msg_values = [
- // 'ORDER_ID' => $customer_phone['order_id'],
- // 'SEND_MOBILE' => $customer_phone['customer_mobile'],
- // 'SEND_MESSAGE' => '【蜘蛛行】感谢您乘坐蜘蛛出行巴士旅游专线,祝您游玩愉快,如有门票、旅游直通车预订需求,请关注(蜘蛛行)公众号,有返佣哦!如对这次乘坐有任何建议,请拨打021-33280519进行反馈',
- // 'SEND_TIME' => $current_time,
- // 'SEND_ERROR' => $res_send_message,
- // 'CREATE_USER_ID' => 2,
- // 'CREATE_TIME' => $current_time,
- // 'UPDATE_USER_ID' => 2,
- // 'UPDATE_TIME' => $current_time,
- // ];
- // $msgRecord = new OrderSendMessage();
- // $msgRecord->attributes = $send_msg_values;
- // $res = $msgRecord->insert();
- //// if (!$res) {
- //// throw new Exception('插入失败');
- //// }
- // }
- // }
-
-
- //司贴
- // $expenses_value[] = $bus_order_info + [
- // 'create_user_id' => $bus_order_info['bus_driver_res_id'],
- // 'create_time' => date('Y-m-d H:i:s', time()),
- // 'update_user_id' => $bus_order_info['bus_driver_res_id'],
- // 'update_time' => date('Y-m-d H:i:s', time()),
- // 'cancel_flag' => 0,
- // 'expense_subject_id' => 464,
- // 'expense_type' => 474,
- // 'expense_value' => $diff_distance*0.6,
- // ];
- // $res = Yii::$app->db->createCommand()->batchInsert(self::tableName(),
- // ['bus_number', 'use_bus_org_id', 'run_date', 'bus_res_id', 'bus_driver_res_id', 'create_user_id', 'create_time', 'update_user_id', 'update_time', 'cancel_flag', 'expense_subject_id', 'expense_type', 'expense_value'],
- // $expenses_value)->execute();
-
- $transaction->commit();
- $result = true;
- } catch (Exception $e) {
- # 回滚事务
- $result = false;
- }
- #endregion
-
- return $result;
- }
-
- /**
- * Function Description:获取邮电费和路桥费
- * Function Name: getRunOrderExpenses
- * @param $bus_number
- *
- * @return array
- *
- * @author 张帅
- */
- public function getRunOrderExpenses($bus_number)
- {
- #region 1.从数据库获取任务邮电费和路桥费费用
- $expenses_list = self::find()
- ->select([
- 'e.bus_number',
- 'e.expense_subject_id',//支出科目
- 'e.expense_value',//支出金额
- 'e.start_value',
- 'e.end_value',
- 'e.run_date',//报账日期
- 'task_name' => 'o.itinerary_name',
- ])
- ->from(self::tableName() . ' as e')
- ->leftJoin(BusOrder::tableName() . ' as o', 'o.bus_number = e.bus_number')
- ->where([
- 'and',
- ['=', 'e.cancel_flag', 0],
- ['=', 'o.cancel_flag', 0],
- ['in', 'e.expense_subject_id', [462, 463]],
- ['in', 'e.bus_number', $bus_number],
- ])
- ->asArray()
- ->all();
- #endregion
-
- #region 2.整理数据
- $result = [];
- foreach ($expenses_list as $key => $vel) {
- if (count($result) == 0) {
- $result['bus_number'] = $vel['bus_number'];//出行单号
- $result['run_date'] = $vel['run_date'];//出行日期
- $result['task_name'] = $vel['task_name'];//任务名称
- }
- if ($vel['expense_subject_id'] == 462) {
- $result['mileage'] = $vel['end_value'] - $vel['start_value'];//行驶里程
- }
- if ($vel['expense_subject_id'] == 463) {
- $result['toll_charge'] = $vel['expense_value'];//路桥费
- }
- }
- #endregion
-
- return $result;
- }
-
- /**
- * Function Description:提交报账
- * Function Name: getSubmitFinance
- * @param $bus_number
- * @param $food_expense
- * @param $hotel_expense
- * @param $park_expense
- *
- * @return bool
- *
- * @author 张帅
- */
- public function getSubmitFinance($bus_number, $food_expense, $hotel_expense, $park_expense)
- {
- #region 1.通过出车单号获取行程详情
- $bus_order_info = BusOrder::find()
- ->select([
- 'bus_number',//出车单号
- 'use_bus_org_id',//用车单位
- 'run_date',//出车日期
- 'bus_res_id' => 'send_bus_res_id',//所用车辆
- 'bus_driver_res_id' => 'send_bus_driver_res_id',//出车司机
- ])
- ->where([
- 'bus_number' => $bus_number,
- 'cancel_flag' => 0,
- ])
- ->asArray()->one();
- #endregion
-
- #region 2.获取要添加的出行任务费用数据
- //(1)餐饮费
- $expenses_value[] = $bus_order_info + [
- 'create_user_id' => $bus_order_info['bus_driver_res_id'],
- 'create_time' => date('Y-m-d H:i:s', time()),
- 'update_user_id' => $bus_order_info['bus_driver_res_id'],
- 'update_time' => date('Y-m-d H:i:s', time()),
- 'cancel_flag' => 0,
- 'expense_subject_id' => 466,
- 'expense_type' => 475,
- 'expense_value' => $food_expense,
- ];
- //(2)住宿费
- $expenses_value[] = $bus_order_info + [
- 'create_user_id' => $bus_order_info['bus_driver_res_id'],
- 'create_time' => date('Y-m-d H:i:s', time()),
- 'update_user_id' => $bus_order_info['bus_driver_res_id'],
- 'update_time' => date('Y-m-d H:i:s', time()),
- 'cancel_flag' => 0,
- 'expense_subject_id' => 467,
- 'expense_type' => 475,
- 'expense_value' => $hotel_expense,
- ];
- //(3)停车费
- $expenses_value[] = $bus_order_info + [
- 'create_user_id' => $bus_order_info['bus_driver_res_id'],
- 'create_time' => date('Y-m-d H:i:s', time()),
- 'update_user_id' => $bus_order_info['bus_driver_res_id'],
- 'update_time' => date('Y-m-d H:i:s', time()),
- 'cancel_flag' => 0,
- 'expense_subject_id' => 465,
- 'expense_type' => 475,
- 'expense_value' => $park_expense,
- ];
- #endregion
- //(4)司贴
-
- $expenses_value[] = $bus_order_info + [
- 'create_user_id' => $bus_order_info['bus_driver_res_id'],
- 'create_time' => date('Y-m-d H:i:s', time()),
- 'update_user_id' => $bus_order_info['bus_driver_res_id'],
- 'update_time' => date('Y-m-d H:i:s', time()),
- 'cancel_flag' => 0,
- 'expense_subject_id' => 464,
- 'expense_type' => 474,
- 'expense_value' => 0,
- ];
-
- #endregion
-
- #region 3.修改数据
- $transaction = Yii::$app->db->beginTransaction();
- try {
- //插入添加的出行任务费用
- $res = Yii::$app->db->createCommand()->batchInsert(self::tableName(),
- ['bus_number', 'use_bus_org_id', 'run_date', 'bus_res_id', 'bus_driver_res_id', 'create_user_id', 'create_time', 'update_user_id', 'update_time', 'cancel_flag', 'expense_subject_id', 'expense_type', 'expense_value'],
- $expenses_value)->execute();
- if (!$res) {
- throw new Exception('输入数据不符合格式');
- }
- //修改报账状态
- $bus_order_one = BusOrder::findOne(['bus_number' => $bus_number, 'cancel_flag' => 0]);
- $bus_order_one->attributes = ['update_user_id' => $bus_order_info['bus_driver_res_id'], 'update_time' => date('Y-m-d H:i:s', time()), 'finance_status' => 445];
- $res = $bus_order_one->update();
- if (!$res) {
- throw new Exception('输入数据不符合格式');
- }
- $transaction->commit();
- $result = true;
- } catch (Exception $e) {
- # 回滚事务
- $result = false;
- }
- #endregion
-
- return $result;
- }
-
- /**
- * Function Description:获取费用详情
- * Function Name: getFinanceDetail
- * @param string $bus_number 出行单号
- *
- * @return array
- *
- * @author 张帅
- */
- public function getFinanceDetail($bus_number)
- {
- #region 1.从数据库获取任务费用
- $expenses_list = self::find()
- ->select([
- 'e.bus_number',
- 'e.expense_subject_id',//支出科目
- 'e.expense_value',//支出金额
- 'e.start_value',
- 'e.end_value',
- 'e.run_date',//报账日期
- 'task_name' => 'o.itinerary_name',
- ])
- ->from(self::tableName() . ' as e')
- ->leftJoin(BusOrder::tableName() . ' as o', 'o.bus_number = e.bus_number')
- ->where([
- 'and',
- ['=', 'e.cancel_flag', 0],
- ['=', 'o.cancel_flag', 0],
- ['in', 'e.expense_subject_id', [462, 463, 465, 466, 467]],
- ['in', 'e.bus_number', $bus_number],
- ])
- ->asArray()
- ->all();
- #endregion
-
- #region 2.整理数据
- $result = [];
- foreach ($expenses_list as $key => $vel) {
- if (count($result) == 0) {
- $result['bus_number'] = $vel['bus_number'];//出行单号
- $result['run_date'] = $vel['run_date'];//出行日期
- $result['task_name'] = $vel['task_name'];//任务名称
- }
- if ($vel['expense_subject_id'] == 462) {
- $result['mileage'] = $vel['end_value'] - $vel['start_value'];//行驶里程
- }
- if ($vel['expense_subject_id'] == 463) {
- $result['toll_charge'] = $vel['expense_value'];//路桥费
- }
- if ($vel['expense_subject_id'] == 465) {
- $result['food_expense'] = $vel['expense_value'];//餐饮费
- }
- if ($vel['expense_subject_id'] == 466) {
- $result['hotel_expense'] = $vel['expense_value'];//住宿费
- }
- if ($vel['expense_subject_id'] == 467) {
- $result['park_expense'] = $vel['expense_value'];//停车费
- }
- }
- #endregion
- return $result;
- }
-
- /**
- * Function Description:重新报账
- * Function Name: getResubmitFinance
- * @param $bus_number
- * @param $food_expense
- * @param $hotel_expense
- * @param $park_expense
- *
- * @return bool
- *
- * @author 张帅
- */
- public function getResubmitFinance($bus_number, $food_expense, $hotel_expense, $park_expense)
- {
- #region 1.修改数据
- $transaction = Yii::$app->db->beginTransaction();
- try {
- //(1)修改餐饮费
- $food_one = self::findOne(['bus_number' => $bus_number, 'cancel_flag' => 0, 'expense_subject_id' => 465]);
- $food_one->attributes = ['update_time' => date('Y-m-d H:i:s', time()), 'expense_value' => $food_expense,];
- $res = $food_one->update();
- if (!$res) {
- throw new Exception('输入数据不符合格式1');
- }
-
- //(2)修改住宿费
- $hotel_one = self::findOne(['bus_number' => $bus_number, 'cancel_flag' => 0, 'expense_subject_id' => 466]);
- $hotel_one->attributes = ['update_time' => date('Y-m-d H:i:s', time()), 'expense_value' => $hotel_expense,];
- $res = $hotel_one->update();
- if (!$res) {
- throw new Exception('输入数据不符合格式2');
- }
-
- //(3)修改停车费
- $park_one = self::findOne(['bus_number' => $bus_number, 'cancel_flag' => 0, 'expense_subject_id' => 467]);
- $park_one->attributes = ['update_time' => date('Y-m-d H:i:s', time()), 'expense_value' => $park_expense,];
- $res = $park_one->update();
- if (!$res) {
- throw new Exception('输入数据不符合格式3');
- }
-
- //(4)修改报账状态
- $bus_order_one = BusOrder::findOne(['bus_number' => $bus_number, 'cancel_flag' => 0]);
- $bus_order_one->attributes = ['update_time' => date('Y-m-d H:i:s', time()), 'finance_status' => 445];
- $res = $bus_order_one->update();
- if (!$res) {
- throw new Exception('输入数据不符合格式4');
- }
- $transaction->commit();
- $result = true;
- } catch (Exception $e) {
- # 回滚事务
- $result = false;
- }
- #endregion
- return $result;
- }
-
- /**
- * Function Description:获取结束最大值
- * Function Name: getExpenseMaxEndValue
- * @param int $bus_res_id 巴士资源id
- * @param int $expense_subject_id 费用类型id
- *
- * @return mixed
- *
- * @author 邱颂
- */
- public function getExpenseMaxEndValue($bus_res_id, $expense_subject_id)
- {
- // $expense_info = self::find()
- // ->select([
- // 'MAX(end_value) as max_value'
- // ])
- // ->where([
- // 'and',
- // ['=', 'bus_res_id', $bus_res_id],
- // ['=', 'expense_subject_id', $expense_subject_id],
- // ])
- // ->groupBy(['bus_res_id', 'expense_subject_id'])
- // ->asArray()
- // ->one();
- // return $expense_info["max_value"];
- $end_milege = self::find()
- ->select('rbe.end_value')
- ->from(RunBusExpenses::tableName() . ' as rbe')
- ->innerJoin(BusOrder::tableName() . ' as bo', 'rbe.bus_number = bo.bus_number')
- ->where(['and', ['=', 'rbe.cancel_flag', '0'], ['=', 'bo.cancel_flag', '0'], ['=', 'rbe.bus_res_id', $bus_res_id], ['=', 'rbe.expense_subject_id', $expense_subject_id], ['=', 'bo.run_status', '438']])
- ->orderBy(['bo.run_date' => SORT_DESC, 'bo.start_time' => SORT_DESC])
- ->asArray()
- ->one();
- return ($end_milege == false || !isset($end_milege['end_value'])) ? false : intval($end_milege['end_value']);
- }
-
- /**
- * Function Description:获取上个月与本月的司贴列表
- * Function Name: getDriverSubsidyList
- * @param int $driver_id 司机id
- *
- * @return array
- *
- * @author 张帅
- */
- public function getDriverSubsidyList($driver_id)
- {
- #region 要返回的数组
- $result = [
- 'pre' => [
- 'day_name' => date('n', strtotime("-1 month")) . '月',
- 'total_expense_value' => 0,
- 'subsidy_list' => [],
- ],
- 'now' => [
- 'day_name' => date('n') . '月',
- 'total_expense_value' => 0,
- 'subsidy_list' => [],
- ],
- ];
- #endregion
-
- #region 获取司贴列表
- $driver_subsidy_list = self::find()
- ->select([
- 'run_date',
- 'bus_number',
- 'task_name' => BusOrder::find()->select('itinerary_name')->where('bus_number = e.bus_number')->limit(1),//任务名称
- 'expense_value',
- ])
- ->where([
- 'and',
- ['=', 'bus_driver_res_id', $driver_id],
- ['=', 'cancel_flag', 0],
- ['=', 'expense_subject_id', 464],
- ['>=', 'run_date', date('Y-m-d', strtotime("-1 month"))],
- ])
- ->from(self::tableName() . ' as e')
- ->orderBy(['run_date' => SORT_DESC])
- ->asArray()->all();
- #endregion
-
- #region 分组装入
- if (count($driver_subsidy_list) > 0) {
- foreach ($driver_subsidy_list as $key => $vel) {
- $vel_month = date('n', strtotime($vel['run_date']));
- $vel_day = date('j', strtotime($vel['run_date']));
- $vel['run_day'] = $vel_day . '日';
- $arr_key = $vel_month != date('n') ? 'pre' : 'now';
- $result[$arr_key]['subsidy_list'][] = $vel;
- $result[$arr_key]['total_expense_value'] += $vel['expense_value'];
- }
- }
- #endregion
-
- return $result;
- }
-
- /**
- * 通过车辆的资源id获取到结束的最大公里数
- * @param $bus_res_id 司机资源id
- * @author 傅冬荣
- */
- public function getLastMilegeByBusResId($bus_res_id)
- {
- // $end_milege = self::find()
- // ->select('MAX(end_value) as end_value')
- // ->where(['and',['=','cancel_flag',0],['=','bus_res_id',$bus_res_id],['=','expense_subject_id',462]])
- // ->asArray()
- // ->one();
- $end_milege = self::find()
- ->select('rbe.end_value')
- ->from(RunBusExpenses::tableName() . ' as rbe')
- ->innerJoin(BusOrder::tableName() . ' as bo', 'rbe.bus_number = bo.bus_number')
- ->where(['and', ['=', 'rbe.cancel_flag', '0'], ['=', 'bo.cancel_flag', '0'], ['=', 'rbe.bus_res_id', $bus_res_id], ['=', 'rbe.expense_subject_id', '462'], ['=', 'bo.run_status', '438']])
- ->orderBy(['bo.run_date' => SORT_DESC, 'TIME_FORMAT(bo.start_time,"%H:%i")' => SORT_DESC])
- ->asArray()
- ->all();
-
- return !$end_milege ? 0 : intval($end_milege[0]['end_value']);
- }
-
- /**
- * 通过bus_number获取到该行程的开始里程数
- * @author 傅冬荣
- */
- public function getStartMilegeByBusNumber($bus_number)
- {
- $start_value = self::find()
- ->select('start_value')
- ->where(['and', ['=', 'cancel_flag', 0], ['=', 'bus_number', $bus_number], ['=', 'expense_subject_id', 462]])
- ->asArray()
- ->one();
- return intval($start_value['start_value']);
- }
-
- /**
- * 通过司机姓名或者日期来获取报账列表
- * @param $driver_name 司机姓名
- * @param $bus_no 车牌号
- * @param $run_date 开车日期
- * * @author 傅冬荣
- */
- public function getExpensesListByBusNumber($bus_number)
- {
-
- $filter = ['and', ['=', 'rbe.cancel_flag', 0]];
- $filter[] = ['=', 'rbe.bus_number', $bus_number];
- $expenses_list = self::find()
- ->select(['rbe.update_time', 'rbe.update_user_id', 'rbe.run_date', 'rbe.bus_number', 'rbe.bus_res_id', 'rbe.bus_driver_res_id', 'dt.type_name', 'expense_subject_id', 'expense_value', 'start_value', 'end_value'])
- ->from(RunBusExpenses::tableName() . ' as rbe')
- ->innerJoin(DictType::tableName() . ' as dt', 'rbe.expense_subject_id = dt.id')
- ->filterWhere($filter)
- ->orderBy(['run_date' => SORT_DESC])
- ->asArray()->all();
- // ->createCommand()->getRawSql();
-
- return $expenses_list;
- }
- }
|