RepairOrderController.php 6.03 KB
<?php

namespace app\ht\modules\order\controllers;

use Yii;
use yii\data\Pagination;
use app\ht\controllers\BaseController;
use domain\order\RepairOrderRepository;
use common\helpers\ImageManager;
use domain\order\RepairOrderRate;
use domain\order\RepairOrderRateRepository;
use domain\order\RepairOrderStatus;
use domain\user\UserRepository;
use stdClass;
use function strtotime;

/**
 * 订单管理
 */
class RepairOrderController extends BaseController
{

    /**
     * @return string
     */
    public function actionIndex()
    {
        $params = $this->dataList(1);
        /**
         * 渲染模板
         */
        return $this->render('index', $params);
    }

    /**
     * 查询数据列表
     */
    protected function dataList($type = '')
    {
        $request        = Yii::$app->request;
        $createTime     = $request->get('createTime');
        $endTime        = $request->get('endTime');
        $contactMobile  = $request->get('contactMobile');
        $customer       = $request->get('customer');
        $carNo          = $request->get('carNo');
        $maintainerMobile = $request->get('maintainerMobile');
        $status         = $request->get('status');

        $gets = [
            'createTime'    => $createTime,
            'endTime'       => $endTime,
            'contactMobile' => $contactMobile,
            'customer'      => $customer,
            'carNo'         => $carNo,
            'maintainerMobile' => $maintainerMobile,
            'status'        => $status,
            'statusList'    => RepairOrderStatus::getLabels()
        ];

        $where = ['and'];
        if ($createTime) {
            $createTime = strtotime($createTime);
            $where[] = ['>=', 'ord.created_at', $createTime];
        }
        if ($endTime) {
            $endTime = strtotime($endTime) + 86400;
            $where[] = ['<=', 'ord.created_at', $endTime];
        }
        if ($contactMobile) {
            $where[] = ['like', 'ord.contact_mobile', $contactMobile];
        }
        if ($customer) {
            $where[] = ['like', 'ord.customer', $customer];
        }
        if ($carNo) {
            $where[] = ['like', 'ord.car_no', $carNo];
        }
        if ($maintainerMobile) {
            $where[] = ['like', 'u.mobile', $maintainerMobile];
        }
        if ($status) {
            $where[] = ['=', 'ord.status', $status];
        }
        if ($type == 0) {
            $pageList = RepairOrderRepository::getAdminOrderList(0, 0, $where);
            $pages = null;
        } else {
            $pageSize = 20;
            $pages = new Pagination(['totalCount' => RepairOrderRepository::getAdminOrderListCount($where), 'pageSize' => $pageSize]);
            $pageList = RepairOrderRepository::getAdminOrderList($pages->offset, $pages->limit, $where);
        }

        /**
         * 数据整理
         */
        return [
            'listdata'   => $pageList,
            'pages'      => $pages,
            'gets'       => $gets
        ];
    }
    /**
     * 导出订单数据
     * @return string
     */
    public function actionExportDa()
    {
        $data = $this->dataList(0);

        return $this->renderPartial("exportDa", $data);
    }

    /**
     * @return string
     */
    public function actionInfo()
    {
        $id = $this->request->get('id');

        $orderModel = RepairOrderRepository::findOne(['id' => $id]);
        if (empty($orderModel)) {
            $params = [];
            return $this->render('info', $params);
        }
        $orderId = $orderModel->id;
        $brokenImageModels = RepairOrderRepository::findOrderImageAll(['repair_order_id' => $orderId]);
        $brokenImages = [];

        foreach($brokenImageModels as $k => $v) {
            $brokenImages[] = ImageManager::getUrl($v->image_path);
        }
        $totalPrice = $orderModel->order_price;
        $rPlans = RepairOrderRepository::findOrderPlansAll(['repair_order_id' => $orderId]);
        $repairPlans = [];
        foreach($rPlans as $k => $plan) {
            $repairPlans[] = ['plan' => $plan['repair_plan'] ,'price' => $plan['price']];
        }
        $fImages = RepairOrderRepository::findOrderFinishImageAll(['repair_order_id' => $orderId]);
        $finishImages = [];
        foreach($fImages as $k => $image) {
            $finishImages[] =  ImageManager::getUrl($image['image_path']);;
        }
        $hasComment = false;
        $comments = [];
        $rateModel = RepairOrderRateRepository::findOne(['repair_order_id' => $orderId]);
        if ($rateModel) {
            $hasComment = true;
            $comments = ['starTxt' => RepairOrderRate::starLabel($rateModel->star_count), 'comment' => $rateModel->comment];
        }
        $user = UserRepository::findOne(['id' => $orderModel->user_id]);
        $order = [
            'id'            => $orderId,
            'uuid'          => $orderModel->uuid,
            'userId'        => $orderModel->user_id,
            'userName'      => $user->name,
            'userMobile'    => $user->mobile,
            'carNo'         => $orderModel->car_no,
            'carModel'      => $orderModel->car_model,
            'customer'      => $orderModel->customer,
            'contact_mobile'=> $orderModel->contact_mobile,
            'preRepair'     => $orderModel->predict_fault,
            'prePrice'      => $orderModel->predict_price.'元',
            'preFinishDate' => $orderModel->predict_finish_time? date('Y-m-d H:00', $orderModel->predict_finish_time):'暂无',
            'orderDateTime' => date('Y-m-d H:00', $orderModel->created_at),
            'finishDateTime'=> $orderModel->finish_at? date('Y-m-d H:00', $orderModel->finish_at):'暂无',
            'status'        => RepairOrderStatus::getLabels($orderModel->status),
            'hasComment'    => $hasComment,
            'comments'      => $comments,
            'brokenImages'  => $brokenImages,
            'repairPlans'   => $repairPlans,
            'totalPrice'    => $totalPrice,
            'finishImages'  => $finishImages
        ];
        $params['order'] = $order;

        return $this->render('info', $params);
    }
}