RepairController.php 11.9 KB
<?php

namespace app\ht\modules\device\controllers;

use Yii;
use yii\data\Pagination;
use app\ht\controllers\BaseController;
use common\business\WarrantyLevelRule;
use common\models\DeviceFault               as DeviceFaultModel;
use common\models\ModelsRepairPlanPrices    as ModelsRepairPlanPricesModel;
use common\models\RegionFeeSetting          as RegionFeeSettingModel;
use common\models\RepairPlan                as RepairPlanModel;
use domain\device\DeviceCatRepository;
use function floatval;
use function intval;
use function time;
use function doubleval;
use function explode;

/**
 * 维修方案管理
 * @package app\ht\modules\catalog\controllers
 */
class RepairController extends BaseController
{
    public function actionIndex()
    {
        $req        = Yii::$app->request;
        $catId      = $req->get('catId');
        $faultId    = $req->get('faultId');

        $fault = DeviceFaultModel::findOne(["id" => $faultId])->toArray();
        $deviceCat = DeviceCatRepository::selectOne($catId, true);

        $params                 = array();
        $params                 = $this->dataList($req);
        $params['fault']        = $fault;
        $params['deviceCat']    = $deviceCat;
        $params['catId']        = $catId;
        $params['faultId']      = $faultId;

        return $this->render("index", $params);
    }

    public function actionCreate()
    {
        $res = Yii::$app->request;
        $faultId = $res->get('faultId');
        $catId = $res->get('catId');

        $fault = DeviceFaultModel::findOne(["id" => $faultId])->toArray();
        $deviceCat = DeviceCatRepository::selectOne($catId, true);

        $params                 = array();
        $params['faultId']      = $faultId;
        $params['catId']        = $catId;
        $params['fault']        = $fault;
        $params['deviceCat']    = $deviceCat;

        return $this->render("create", $params);
    }

    /**
     * 执行添加
     * {"fault_id":fault_id,"repair_name":repair_name,"reason":reason,"repair_price":repair_price}
     */
    public function actionDoAdd()
    {
        $res = Yii::$app->request;
        $fault_id = $res->post('fault_id');
        $repair_name = $res->post('repair_name');
        $reason = $res->post('reason');
        $repair_price = $res->post('repair_price');

        // 组织数据
        $repairPlan = new RepairPlanModel();
        $repairPlan->device_fault_id = intval($fault_id);
        $repairPlan->name = $repair_name;
        $repairPlan->reason = $reason;
        $repairPlan->standard_price = floatval($repair_price);
        $repairPlan->created_at = time();
        $repairPlan->updated_at = time();
        $repairPlan->version = Yii::$app->params['DATA_VERSION'];

        // 写入数据库
        $result = $repairPlan->insert();

        // 返回
        $msg = array();
        if ($result) {
            $msg['status'] = 1;
            $msg['msg'] = "操作成功";
        } else {
            $msg['status'] = 0;
            $msg['msg'] = "操作失败";
        }

        return $this->renderJson($msg);
    }

    /**
     * 更新方案
     * @return string
     */
    public function actionUpdate()
    {
        $req        = Yii::$app->request;
        $catId      = $req->get('catId');
        $faultId    = $req->get('faultId');
        $id         = $req->get('id');

        $result = RepairPlanModel::findOne(["id"=>$id])->toArray();
        $fault = DeviceFaultModel::findOne(["id"=>$faultId])->toArray();
        $deviceCat = DeviceCatRepository::selectOne($catId, true);

        $params = array();
        $params['repair']       = $result;
        $params['fault']        = $fault;
        $params['deviceCat']    = $deviceCat;
        $params['catId']        = $catId;
        $params['faultId']      = $faultId;

        return $this->render("update",$params);
    }

    /**
     * 执行维修方案更新操作
     */
    public function actionDoUpdatePlan()
    {
        $req            = Yii::$app->request;
        $repair_id      = $req->post('repair_id');
        $repair_name    = $req->post('repair_name');
        $reason         = $req->post('reason');
        $repair_price   = floatval($req->post('repair_price'));

        if (empty($repair_id)) {
            $result = 0;
        } else {
            $mRepairPlan = RepairPlanModel::findOne(["id" => $repair_id]);
            $mRepairPlan->name = $repair_name;
            $mRepairPlan->reason = $reason;
            $mRepairPlan->standard_price = $repair_price;
            $mRepairPlan->updated_at = time();
            $result = $mRepairPlan->save();
        }

        $msg = array();
        if ($result) {
            $msg['status'] = 1;
            $msg['msg'] = "操作成功";
        } else {
            $msg['status'] = 0;
            $msg['msg'] = "操作失败";
        }

        return $this->renderJson($msg);
    }

    /**
     * 删除维修计划
     */
    public function actionDeletePlan()
    {
        $req        = Yii::$app->request;
        $repair_id  = intval($req->get('id'));
        $catId      = intval($req->get('catId'));
        $faultId    = intval($req->get('faultId'));

        $msg = array();

        if (empty($repair_id)) {
            $result = 0;
            $msg['msg'] = "缺少数据标识,无法删除";
        } else {
            // 1 检查是否在 “models_repair_plan_prices” 表中存在关联关系,如果存在则不允许删除
            $count = ModelsRepairPlanPricesModel::find()->where(["repair_plan_id" => $repair_id])->count();
            if ($count > 0) {
                $result = 0;
                $msg['msg'] = "此维修计划已经和型号进行定价关联,无法删除!";
            } else {
                $result = RepairPlanModel::findOne(["id"=>$repair_id])->delete();
            }
        }

        if ($result) {
            $msg['status'] = 1;
            Yii::$app->getSession()->setFlash('success', "操作成功");
        } else {
            $msg['status'] = 0;
            Yii::$app->getSession()->setFlash('danger', $msg['msg']);
        }

        return $this->redirect(['index', "catId"=>$catId, "faultId"=>$faultId]);

    }

    /**
     * 详细定价
     */
    public function actionListPrice()
    {
        $req        = Yii::$app->request;
        $repair_id  = intval($req->get('id'));
        $catId      = intval($req->get('catId'));
        $faultId    = intval($req->get('faultId'));
        $modelName  = $req->get('modelName');

        $result = RepairPlanModel::findOne(["id" => $repair_id]);
        $fault = DeviceFaultModel::findOne(["id" => $faultId]);
        $deviceCat = DeviceCatRepository::selectOne($catId);

        $map = array();
        $map[] = array("=","p.repair_plan_id",$repair_id,"I");
        if (!empty($modelName)) {
            $map[] = array("like","m.model","%".trim($modelName)."%","S");
        }

        /**
         * 分页处理
         */
        $modelRepairPlanPrices = ModelsRepairPlanPricesModel::getModelsRepairPlanPriceList($repair_id, $map);

        $isComputer = WarrantyLevelRule::isComputer($deviceCat);
        $params = array();
        $params['repair']       = $result;
        $params['fault']        = $fault;
        $params['deviceCat']    = $deviceCat;

        $params['catId']        = $catId;
        $params['faultId']      = $faultId;
        $params['repair_id']    = $repair_id;
        $params['modelName']    = $modelName;

        $params['modelRepairPlanPrices']    = $modelRepairPlanPrices;
        $params['man_hour_fee']             = RegionFeeSettingModel::getManHourFeeByCity();
        $params['warrantyLevel']            = WarrantyLevelRule::getAllWarrantyLevels($isComputer);

        return $this->render("list_price",$params);
    }

    /**
     * @return string
     */
    public function actionDoAddPlanPrice()
    {
        $req = Yii::$app->request;
        $data  =$req->post('data');
        // 查出来就修改,否则就新增
        $man_hour_fee = RegionFeeSettingModel::getManHourFeeByCity();
        // $tmp = array();
        foreach ($data as $val) {
            $pid = $val['id'];
            $modelsRepairPlanPrices = ModelsRepairPlanPricesModel::find()->where(["id" => intval($pid)])->one();
            // 如果不存在则新增,否则修改
            if (!empty($modelsRepairPlanPrices)) {
                $modelsRepairPlanPrices = ModelsRepairPlanPricesModel::findOne($pid);
                $modelsRepairPlanPrices->parts_price = doubleval($val['parts_price']);
                $modelsRepairPlanPrices->repair_hours = doubleval($val['repair_hours']);
                $modelsRepairPlanPrices->difficulty_degree =doubleval($val['difficulty_degree']);
                $modelsRepairPlanPrices->price = doubleval($val['parts_price'])+ $man_hour_fee * doubleval($val['repair_hours']) * doubleval($val['difficulty_degree']);
                $modelsRepairPlanPrices->warranty_level = $val['warranty_level'];
                $modelsRepairPlanPrices->updated_at = time();
                $modelsRepairPlanPrices->update();
            }
        }

        $map = array();
        $map['status'] = 1;
        $map['msg'] = "操作成功";
        return $this->renderJson($map);
    }

    /**
     * 读取数据
     * @param $request
     * @return array
     */
    protected function dataList($request)
    {
        $faultId = intval($request->get('faultId'));
        $repairName  = $request->get('repairName');

        /**
         * 分页处理
         */
        $repairPlanModel = RepairPlanModel::find()->where(['device_fault_id' => $faultId, 'version' => Yii::$app->params['DATA_VERSION']])->orderBy('id desc');
        if (!empty($repairName)) {
            $repairPlanModel->andWhere(['like','name',$repairName]);
        }

        $pageSize = $request->get("pageSize") ? (int) $request->get("pageSize") : 20;
        $pages = new Pagination(['totalCount' => $repairPlanModel->count(), 'pageSize' => $pageSize]);
        $repairList = $repairPlanModel->offset($pages->offset)->limit($pages->limit)->all();

        return [
            'repairList' => $repairList,
            'pages'      => $pages,
            'repairName' => $repairName,
        ];
    }

    /**
     * 批量添加维修方案
     * @return string
     */
    public function actionBatchCreate()
    {
        $res = Yii::$app->request;
        $faultId = $res->get('faultId');
        $catId = $res->get('catId');

        $fault = DeviceFaultModel::findOne(["id" => $faultId])->toArray();
        $deviceCat = DeviceCatRepository::selectOne($catId, true);

        $params                 = array();
        $params['faultId']      = $faultId;
        $params['catId']        = $catId;
        $params['fault']        = $fault;
        $params['deviceCat']    = $deviceCat;

        return $this->render("batch_create", $params);
    }

    /**
     * 执行批量添加维修方案
     * @return string
     * @throws \Exception
     */
    public function actionDoBatchCreate()
    {
        $res = Yii::$app->request;
        $fault_id = $res->post('fault_id');
        $repairList = $res->post('repairList');
        $msg = array();

        foreach ($repairList as $key => $val) {
            $repair = explode("_", $val);

            // 组织数据
            $repairPlan = new RepairPlanModel();
            $repairPlan->device_fault_id = intval($fault_id);
            $repairPlan->name = $repair[0];
            $repairPlan->reason = $repair[1];
            $repairPlan->standard_price = floatval($repair[2]);
            $repairPlan->created_at = time();
            $repairPlan->updated_at = time();
            $repairPlan->version = Yii::$app->params['DATA_VERSION'];

            // 写入数据库
            $result = $repairPlan->insert();
            if (false == $result) {
                $msg['status'] = 0;
                $msg['msg'] = "操作失败";
                return $this->renderJson($msg);
            }
        }

        $msg['status'] = 1;
        $msg['msg'] = "操作成功";

        return $this->renderJson($msg);
    }
}