From 3a892ee0206991fdf7aabad974c1c993866abfa1 Mon Sep 17 00:00:00 2001 From: xu Date: Wed, 25 Dec 2019 09:50:23 +0800 Subject: [PATCH] app-wx(v0.1.0 build 7) F 订单详情,登录界面,注册完善 F 图片上传接口调整 --- app-wx/config/main.php | 5 ++--- app-wx/config/params.php | 2 +- app-wx/controllers/BaseController.php | 62 ++++++++++++++++++-------------------------------------------- app-wx/exts/User.php | 112 ---------------------------------------------------------------------------------------------------------------- app-wx/models/User.php | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- app-wx/modules/order/controllers/BaseController.php | 4 ++-- app-wx/modules/order/controllers/CustomerBaseController.php | 24 ++++++++++++++++++++++++ app-wx/modules/order/controllers/CustomerController.php | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ app-wx/modules/order/controllers/DefaultController.php | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------- app-wx/modules/order/views/default/cindex.php | 40 ++++++++++++++++++++++++++++++++++++++++ app-wx/modules/order/views/default/index.php | 2 +- app-wx/modules/order/views/default/pages/customer-order-template.php | 199 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ app-wx/modules/order/views/default/pages/order-details-template.php | 5 ++++- app-wx/modules/order/views/default/pages/submit-template.php | 4 ++-- app-wx/modules/user/controllers/DefaultController.php | 45 ++++++++------------------------------------- app-wx/modules/user/controllers/LoginController.php | 211 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------- app-wx/modules/user/views/default/index.php | 6 ++++++ app-wx/modules/user/views/default/pages/register-template.php | 4 +++- common/helpers/ImageManager.php | 426 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- common/helpers/Utils.php | 54 ------------------------------------------------------ domain/order/RepairFinishImages.php | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ domain/order/RepairOrder.php | 36 ++++++++++++++++++++++++++++++++++++ domain/order/RepairOrderImages.php | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ domain/order/RepairOrderRepairPlan.php | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ domain/order/RepairOrderRepairPlanRepository.php | 37 +++++++++++++++++++++++++++++++++++++ domain/order/RepairOrderRepository.php | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ domain/order/RepairOrderStatus.php | 35 +++++++++++++++++++++++++++++++++++ domain/order/models/RepairFinishImages.php | 2 +- domain/order/models/RepairOrder.php | 23 ++++++++++++++++++++++- domain/order/models/RepairOrderImages.php | 2 +- domain/order/models/RepairOrderRate.php | 2 +- domain/order/models/RepairOrderRepairPlan.php | 2 +- domain/user/PhoneCode.php | 17 +++++++++++++++++ domain/user/User.php | 36 ++++++++++++++++++++++++++++++++++++ domain/user/UserRepository.php | 20 ++++++++++++++++++++ domain/user/models/User.php | 21 +++++++++++++++++++++ web/dist/js/order-app.js | 2 +- web/dist/js/user-app.js | 2 +- web/src/js/order/app.js | 25 ++++++++++++++++++------- web/src/js/order/cost-list-controller.js | 5 +++-- web/src/js/order/customer-order-controller.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ web/src/js/order/order-details-controller.js | 2 +- web/src/js/order/rate-controller.js | 7 ++++--- web/src/js/order/submit-controller.js | 181 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- web/src/js/user/login-controller.js | 23 +++++++++++++++++++---- web/src/js/user/register-controller.js | 27 ++++++++++++++++++++++----- 46 files changed, 1675 insertions(+), 740 deletions(-) delete mode 100644 app-wx/exts/User.php create mode 100644 app-wx/modules/order/controllers/CustomerBaseController.php create mode 100644 app-wx/modules/order/controllers/CustomerController.php create mode 100644 app-wx/modules/order/views/default/cindex.php create mode 100644 app-wx/modules/order/views/default/pages/customer-order-template.php create mode 100644 domain/order/RepairFinishImages.php create mode 100644 domain/order/RepairOrder.php create mode 100644 domain/order/RepairOrderImages.php create mode 100644 domain/order/RepairOrderRepairPlan.php create mode 100644 domain/order/RepairOrderRepairPlanRepository.php create mode 100644 domain/order/RepairOrderRepository.php create mode 100644 domain/order/RepairOrderStatus.php create mode 100644 domain/user/PhoneCode.php create mode 100644 domain/user/User.php create mode 100644 domain/user/UserRepository.php create mode 100644 web/src/js/order/customer-order-controller.js diff --git a/app-wx/config/main.php b/app-wx/config/main.php index 0196c1b..efb4d1c 100644 --- a/app-wx/config/main.php +++ b/app-wx/config/main.php @@ -12,7 +12,7 @@ return [ 'runtimePath' => Yii::getAlias('@rootRuntime').'/app-wx/', 'bootstrap' => ['log'], 'controllerNamespace' => 'app\wx\controllers', - 'defaultRoute' => 'user', + 'defaultRoute' => 'order', 'modules' => [ 'order' => [ 'class' => 'app\wx\modules\order\Module', @@ -23,9 +23,8 @@ return [ ], 'components' => [ 'user' => [ - 'class'=> 'app\wx\exts\User', 'identityClass' => 'app\wx\models\User', - 'enableAutoLogin' => false,//是否启用自动登录 + 'enableAutoLogin' => true,//是否启用自动登录 ], 'errorHandler' => [ 'errorAction' => 'site/error', diff --git a/app-wx/config/params.php b/app-wx/config/params.php index 06b9302..db06082 100644 --- a/app-wx/config/params.php +++ b/app-wx/config/params.php @@ -1,5 +1,5 @@ 'admin@example.com', - 'VERSION' => 'v0.1.0 build 6', // 当前发布版本号: v0.1.0 是版本号 | build 1 是编译次数 + 'VERSION' => 'v0.1.0 build 7', // 当前发布版本号: v0.1.0 是版本号 | build 1 是编译次数 ]; diff --git a/app-wx/controllers/BaseController.php b/app-wx/controllers/BaseController.php index 9aa55ac..3d9417d 100644 --- a/app-wx/controllers/BaseController.php +++ b/app-wx/controllers/BaseController.php @@ -120,9 +120,13 @@ class BaseController extends AppController * 获取 ID * @return int|string */ - public function getEngineerId() + public function getUserId() { - return 0; + if (isset(Yii::$app->user)) { + return Yii::$app->user->id; + } else { + return 0; + } } /** @@ -171,17 +175,22 @@ class BaseController extends AppController */ protected function handleMallAccessCtrl() { - //AppLog::DEBUG("BaseController: handleMallAccessCtrl()" ); $appUser = Yii::$app->getUser(); + + if (YII_ENV_DEV) { + $baseURL = Yii::$app->request->getHostInfo() . Yii::$app->request->baseUrl; + } else { + $baseURL = Yii::$app->request->getHostInfo(); + } + if(YII_ENV_DEV && $appUser->isGuest){ - $uid = Yii::$app->params['testUID']; // 请在各自的config/params-local.php里配置 - header("Location: " . Yii::$app->params["baseUrl"] . "/user#login" );exit; - return ; + //header("Location: " .$baseURL . "/user#login" ); + //exit; } - //test和 prod 环境,进行微信登陆 + //test和 prod 环境 if ($appUser->isGuest){ - header("Location: " . Yii::$app->params["baseUrl"] . "/user#login" );exit; - return ; + header("Location: " . $baseURL . "/user#login" ); + exit; } } @@ -220,41 +229,6 @@ class BaseController extends AppController return true; } - // - public function setPhoneCode($phone, $code) - { - Yii::$app->session['v_'.$phone] = array('create_time' => time(),'vCode' => md5($phone.'_'.$code)); - } - - public function getPhoneCode($phone) - { - return Yii::$app->session['v_'.$phone]; - } - - // 默认是300秒 - public function validatePhoneCode($phone, $code, $vaTime = 300) - { - $pCode = $this->getPhoneCode($phone); - $cTime = time(); - if (empty($pCode)) { - return -3; - } - if ($cTime > ($pCode['create_time'] + $vaTime)) { - $this->unsetPhoneCode($phone); - return -1; - } - if($pCode['vCode'] == md5($phone.'_'.$code)){ - return 0; - }else{ - return -2; - } - } - - public function unsetPhoneCode($phone) - { - unset(Yii::$app->session['v_'.$phone]); - } - /** * 初始化web目录文件夹, 完成自动创建 */ diff --git a/app-wx/exts/User.php b/app-wx/exts/User.php deleted file mode 100644 index 80b8146..0000000 --- a/app-wx/exts/User.php +++ /dev/null @@ -1,112 +0,0 @@ -setIdentity($identity); - - if (!$this->enableSession) { - return; - } - - /* Ensure any existing identity cookies are removed. */ - if ($this->enableAutoLogin) { - Yii::$app->getResponse()->getCookies()->remove(new Cookie($this->identityCookie)); - } - - $session = Yii::$app->getSession(); - if (!YII_ENV_TEST) { - $session->regenerateID(true); - } - - $session->remove($this->idParam); - $session->remove($this->authTimeoutParam); - - if ($identity) { - $session->set($this->idParam, $identity->getId()); - - if ($this->authTimeout !== null) { - $session->set($this->authTimeoutParam, time() + $this->authTimeout); - } - if ($this->absoluteAuthTimeout !== null) { - $session->set($this->absoluteAuthTimeoutParam, time() + $this->absoluteAuthTimeout); - } - if ($duration > 0 && $this->enableAutoLogin) { - $this->sendIdentityCookie($identity, $duration); - } - } - } - - /** - * @inheritdoc - */ - protected function renewAuthStatus() - { - $session = Yii::$app->getSession(); - $id = $session->getHasSessionId() || $session->getIsActive() ? $session->get($this->idParam) : null; - - if ($id === null) { - $identity = null; - } else { - $class = 'domain\user\models\User'; - $identity = $class::findIdentity($id); - } - - $this->setIdentity($identity); - - if ($identity !== null && ($this->authTimeout !== null || $this->absoluteAuthTimeout !== null)) { - $expire = $this->authTimeout !== null ? $session->get($this->authTimeoutParam) : null; - $expireAbsolute = $this->absoluteAuthTimeout !== null ? $session->get($this->absoluteAuthTimeoutParam) : null; - if ($expire !== null && $expire < time() || $expireAbsolute !== null && $expireAbsolute < time()) { - $this->logout(false); - } elseif ($this->authTimeout !== null) { - $session->set($this->authTimeoutParam, time() + $this->authTimeout); - } - } - - if ($this->enableAutoLogin) { - if ($this->getIsGuest()) { - $this->loginByCookie(); - } elseif ($this->autoRenewCookie) { - $this->renewIdentityCookie(); - } - } - } - - - /** - * @return int - */ - public function getId() - { - if(null === $this->_id){ - $session = Yii::$app->getSession(); - $this->_id = $session->getHasSessionId() || $session->getIsActive() ? $session->get($this->idParam) : null; - } - return (int)$this->_id; - } -} diff --git a/app-wx/models/User.php b/app-wx/models/User.php index c43ffd5..c1b319c 100644 --- a/app-wx/models/User.php +++ b/app-wx/models/User.php @@ -3,16 +3,17 @@ namespace app\wx\models; use Yii; -use yii\log\Logger; +use yii\web\IdentityInterface; use domain\user\models\User as UserModel; /** * Class User * @package app\wx\models */ -class User extends UserModel +class User extends UserModel implements IdentityInterface { + static $id = null; public function register() { @@ -30,5 +31,110 @@ class User extends UserModel } + /** + * Finds an identity by the given ID. + * + * @param string|int $id the ID to be looked for + * @return IdentityInterface|null the identity object that matches the given ID. + */ + public static function findIdentity($id) + { + return static::findOne($id); + } + + /** + * Finds an identity by the given token. + * + * @param string $token the token to be looked for + * @return IdentityInterface|null the identity object that matches the given token. + */ + public static function findIdentityByAccessToken($token, $type = null) + { + return static::findOne(['access_token' => $token]); + } + + /** + * @inheritdoc + */ + public function getId() + { + return self::getIdFromSession(); + } + + /** + * @inheritdoc + */ + public function getAuthKey() + { + return ''; + } + + /** + * @inheritdoc + */ + public function validateAuthKey($authKey) + { + return true; + } + + /** + * Validates password + * + * @param string $password password to validate + * @return bool if password provided is valid for current user + */ + public function validatePassword($password) + { + return true ;//Yii::$app->security->validatePassword($password, $this->password_hash); + } + + /** + * Generates password hash from password and sets it to the model + * + * @param string $password + */ + public function setPassword($password) + { + $this->password_hash = Yii::$app->security->generatePasswordHash($password); + } + + /** + * Generates "remember me" authentication key + */ + public function generateAuthKey() + { + $this->auth_key = Yii::$app->security->generateRandomString(); + } + + /** + * Generates new password reset token + */ + public function generatePasswordResetToken() + { + $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time(); + } + + /** + * Removes password reset token + */ + public function removePasswordResetToken() + { + $this->password_reset_token = null; + } + + /** + * @return mixed|null + */ + protected static function getIdFromSession() + { + if (null === self::$id){ + $user = Yii::$app->getUser(); + $session = Yii::$app->getSession(); + $id = $session->getHasSessionId() || $session->getIsActive() ? $session->get($user->idParam) : null; + self::$id = $id; + } + + return self::$id; + } } diff --git a/app-wx/modules/order/controllers/BaseController.php b/app-wx/modules/order/controllers/BaseController.php index b8a011c..98982e7 100644 --- a/app-wx/modules/order/controllers/BaseController.php +++ b/app-wx/modules/order/controllers/BaseController.php @@ -7,7 +7,7 @@ use app\wx\controllers\BaseController as AppBaseController; /** * Class BaseController - * @package app\wx\modules\toutiao\controllers + * @package app\wx\modules\order\controllers */ class BaseController extends AppBaseController { @@ -19,6 +19,6 @@ class BaseController extends AppBaseController public function init() { parent::init(); // TODO: Change the autogenerated stub - //$this->handleMallAccessCtrl(); + $this->handleMallAccessCtrl(); } } \ No newline at end of file diff --git a/app-wx/modules/order/controllers/CustomerBaseController.php b/app-wx/modules/order/controllers/CustomerBaseController.php new file mode 100644 index 0000000..92ea3d1 --- /dev/null +++ b/app-wx/modules/order/controllers/CustomerBaseController.php @@ -0,0 +1,24 @@ +render('/default/cindex'); + } + + /** + * @return string + */ + public function actionOrderDetails() + { + $e = new stdClass(); + $e->success = false; + $e->message = 'ok'; + $orderUUId = $this->request->post('id'); + $md5Mobile = $this->request->post('sn'); + + $orderModel = RepairOrderRepository::findOne(['uuid' => $orderUUId]); + if (empty($orderModel)) { + $e->message = '找不到该订单'; + return $this->renderJson($e); + } + $brokenImageModels = RepairOrderRepository::findOrderImageAll(['repair_order_id' => $orderModel->id]); + $brokenImages = []; + $baseURL = Yii::$app->request->getHostInfo(); + foreach($brokenImageModels as $k => $v) { + $brokenImages[] = $baseURL.'/'.$v->image_path; + } + $totalPrice = $orderModel->order_price; + $rPlans = RepairOrderRepository::findOrderPlansAll(['repair_order_id' => $orderModel->id]); + $repairPlans = []; + foreach($rPlans as $k => $plan) { + $repairPlans[] = ['plan' => $plan['repair_plan'] ,'price' => $plan['price']]; + } + $fImages = RepairOrderRepository::findOrderFinishImageAll(['repair_order_id' => $orderModel->id]); + $finishImages = []; + foreach($fImages as $k => $image) { + $finishImages[] = $baseURL.'/'.$image['image_path']; + } + $hasComment = false; + + $e->success = true; + $e->item = [ + 'carNo' => $orderModel->car_no, + 'carModel' => $orderModel->car_model, + 'customer' => $orderModel->customer, + 'mobile' => '1*****'.substr($orderModel->contact_mobile,7,4), + 'preRepair' => $orderModel->predict_fault, + 'repairPrice' => $orderModel->predict_price.'元', + 'preFinishDate' => date('Y-m-d H:00', $orderModel->predict_finish_time), + 'orderDateTime' => date('Y-m-d H:00', $orderModel->created_at), + 'status' => RepairOrderStatus::getEnLabel($orderModel->status), + 'hasComment' => $hasComment, + 'brokenImages' => $brokenImages, + 'repairPlans' => $repairPlans, + 'totalPrice' => $totalPrice, + 'finishImages' => $finishImages + ]; + + return $this->renderJson($e); + } + + /** + * @return string + */ + public function actionSubmitRate() + { + $e = new stdClass(); + $e->success = false; + $e->message = 'ok'; + $star = $this->request->post('star'); + $comment = $this->request->post('comment'); + + //echo $star.'_'.$comment; + $e->success = true; + return $this->renderJson($e); + } + +} \ No newline at end of file diff --git a/app-wx/modules/order/controllers/DefaultController.php b/app-wx/modules/order/controllers/DefaultController.php index 1cd824b..5d7d3c8 100644 --- a/app-wx/modules/order/controllers/DefaultController.php +++ b/app-wx/modules/order/controllers/DefaultController.php @@ -3,8 +3,17 @@ namespace app\wx\modules\order\controllers; use Yii; -use stdClass; use yii\helpers\HtmlPurifier; +use yii\base\Exception; + +use domain\order\RepairOrder; +use domain\order\RepairOrderImages; +use domain\order\RepairOrderRepository; +use domain\order\RepairOrderStatus; +use domain\order\RepairFinishImages; +use domain\order\RepairOrderRepairPlan; + +use stdClass; /** * 控制器 @@ -27,19 +36,58 @@ class DefaultController extends BaseController $e = new stdClass(); $e->success = false; $e->message = 'ok'; - $userId = 0; - $req = Yii::$app->request; - $carNo = HtmlPurifier::process($req->post('carNo'), ['HTML.Allowed' => '']); - $carModel = HtmlPurifier::process($req->post('carModel'), ['HTML.Allowed' => '']); - $customer = HtmlPurifier::process($req->post('customer'), ['HTML.Allowed' => '']); - $phone = HtmlPurifier::process($req->post('phone'), ['HTML.Allowed' => '']); - $preRepair = HtmlPurifier::process($req->post('preRepair'), ['HTML.Allowed' => '']); - $repairPrice = HtmlPurifier::process($req->post('repairPrice'), ['HTML.Allowed' => '']); - $finishDate = HtmlPurifier::process($req->post('finishDate'), ['HTML.Allowed' => '']); - $images = $req->post('images'); - - //echo $carNo.'_'.$carModel.'_'.$customer.'_'.$phone.'_'.$preRepair.'_'.$repairPrice.'_'.$finishDate.'_'.json_encode($images); - $e->success = true; + $userId = $this->getUserId(); + $req = Yii::$app->request; + $carNo = HtmlPurifier::process($req->post('carNo'), ['HTML.Allowed' => '']); + $carModel = HtmlPurifier::process($req->post('carModel'), ['HTML.Allowed' => '']); + $customer = HtmlPurifier::process($req->post('customer'), ['HTML.Allowed' => '']); + $phone = HtmlPurifier::process($req->post('phone'), ['HTML.Allowed' => '']); + $preRepair = HtmlPurifier::process($req->post('preRepair'), ['HTML.Allowed' => '']); + $predictPrice = HtmlPurifier::process($req->post('repairPrice'), ['HTML.Allowed' => '']); + $finishDate = HtmlPurifier::process($req->post('finishDate'), ['HTML.Allowed' => '']); + $images = $req->post('images'); + + if (empty($carNo)) { + $e->message = '车牌号码未填'; + return $this->renderJson($e); + } + + if (empty($carModel)) { + $e->message = '车辆型号未填'; + return $this->renderJson($e); + } + + if (empty($phone)) { + $e->message = '联系电话未填'; + return $this->renderJson($e); + } + + $data = [ + 'user_id' => $userId, + 'car_no' => $carNo, + 'car_model' => $carModel, + 'customer' => $customer, + 'contact_mobile' => $phone, + 'predict_fault' => $preRepair, + 'predict_price' => $predictPrice, + 'predict_finish_time' => strtotime($finishDate.':00:00'), + 'status' => RepairOrderStatus::REPAIRING, + ]; + $tran = Yii::$app->db->beginTransaction(); + try { + $repairOrder = RepairOrder::create($data); + $uuid = $repairOrder->uuid; + RepairOrderImages::createBrokenImages($repairOrder->id, $uuid, $images); + $tran->commit(); + RepairOrderImages::mvBrokenImages($uuid, $images); + $e->orderId = $uuid; + $e->success = true; + } catch(Exception $ex) { + $tran->rollBack(); + $e->orderId = ''; + $e->message = '提交失败'; + } + return $this->renderJson($e); } @@ -106,34 +154,48 @@ class DefaultController extends BaseController $e = new stdClass(); $e->success = false; $e->message = 'ok'; + $orderUUId = $this->request->post('id'); + $userId = $this->getUserId(); + $orderModel = RepairOrderRepository::findOne(['uuid' => $orderUUId, 'user_id' => $userId]); + if (empty($orderModel)) { + $e->message = '找不到该订单'; + return $this->renderJson($e); + } + $brokenImageModels = RepairOrderRepository::findOrderImageAll(['repair_order_id' => $orderModel->id]); + $brokenImages = []; + $baseURL = Yii::$app->request->getHostInfo(); + foreach($brokenImageModels as $k => $v) { + $brokenImages[] = $baseURL.'/'.$v->image_path; + } + $totalPrice = $orderModel->order_price; + $rPlans = RepairOrderRepository::findOrderPlansAll(['repair_order_id' => $orderModel->id]); + $repairPlans = []; + foreach($rPlans as $k => $plan) { + $repairPlans[] = ['plan' => $plan['repair_plan'] ,'price' => $plan['price']]; + } + $fImages = RepairOrderRepository::findOrderFinishImageAll(['repair_order_id' => $orderModel->id]); + $finishImages = []; + foreach($fImages as $k => $image) { + $finishImages[] = $baseURL.'/'.$image['image_path']; + } + $hasComment = false; $e->success = true; $e->item = [ - 'carNo' => 'XX12345', - 'carModel' => '宝马X3', - 'customer' => '李先生', - 'mobile' => '13900139001', - 'preRepair' => '更换轮胎', - 'repairPrice' => '300元', - 'preFinishDate' => '2019-12-15 15:00', - 'orderDateTime' => '2019-12-14 15:00', - 'status' => 'finish', - 'hasComment' => false, - 'brokenImages' => [ - Yii::$app->request->baseUrl.'/i/order/demo.jpg', Yii::$app->request->baseUrl.'/i/order/demo.jpg', Yii::$app->request->baseUrl.'/i/order/demo.jpg' - ], - 'repairPlans' => [ - ['content' => '更换车胎', - 'price' => 450], - ['content' => '更换车胎', - 'price' => 450], - ['content' => '更换车胎', - 'price' => 450], - ], - 'totalPrice' => 1350, - 'finishImages' => [ - Yii::$app->request->baseUrl.'/i/order/demo.jpg', Yii::$app->request->baseUrl.'/i/order/demo.jpg', Yii::$app->request->baseUrl.'/i/order/demo.jpg' - ] + 'carNo' => $orderModel->car_no, + 'carModel' => $orderModel->car_model, + 'customer' => $orderModel->customer, + 'mobile' => $orderModel->contact_mobile, + 'preRepair' => $orderModel->predict_fault, + 'repairPrice' => $orderModel->predict_price.'元', + 'preFinishDate' => date('Y-m-d H:00', $orderModel->predict_finish_time), + 'orderDateTime' => date('Y-m-d H:00', $orderModel->created_at), + 'status' => RepairOrderStatus::getEnLabel($orderModel->status), + 'hasComment' => $hasComment, + 'brokenImages' => $brokenImages, + 'repairPlans' => $repairPlans, + 'totalPrice' => $totalPrice, + 'finishImages' => $finishImages ]; return $this->renderJson($e); @@ -149,23 +211,38 @@ class DefaultController extends BaseController $e->message = 'ok'; $repairPlans = $this->request->post('plans'); $images = $this->request->post('images'); + $orderUUId = $this->request->post('id'); + $userId = $this->getUserId(); + $orderModel = RepairOrderRepository::findOne(['uuid' => $orderUUId, 'user_id' => $userId]); - //print_r($images); - //print_r($repairPlans); - $e->success = true; - return $this->renderJson($e); - } + if (empty($orderModel)) { + $e->message = '找不到订单'; + return $this->renderJson($e); + } - public function actionSubmitRate() - { - $e = new stdClass(); - $e->success = false; - $e->message = 'ok'; - $star = $this->request->post('star'); - $comment = $this->request->post('comment'); + if (RepairOrderStatus::FINISH == $orderModel->status) { + $e->message = '订单已完成,不能编辑'; + return $this->renderJson($e); + } + $orderId = $orderModel->id; + $tran = Yii::$app->db->beginTransaction(); + try { + $totalPrice = RepairOrderRepairPlan::batchCreate($orderId, $repairPlans); + RepairFinishImages::createFinishImages($orderId, $orderModel->uuid, $images); + $orderModel->status = RepairOrderStatus::FINISH; + $orderModel->finish_at = time(); + $orderModel->order_price = $totalPrice; + $orderModel->save(); + $tran->commit(); + RepairFinishImages::mvFinishImages($orderModel->uuid, $images); + $e->success = true; + } catch (Exception $ex) { + $tran->rollBack(); + $e->success = false; + $e->message = '提交失败'; + $e->innerMEssage = $ex->getMessage(); + } - echo $star.'_'.$comment; - $e->success = true; return $this->renderJson($e); } diff --git a/app-wx/modules/order/views/default/cindex.php b/app-wx/modules/order/views/default/cindex.php new file mode 100644 index 0000000..5f87632 --- /dev/null +++ b/app-wx/modules/order/views/default/cindex.php @@ -0,0 +1,40 @@ +getAssetManager(); +$asset = $assets->getBundle('app\wx\assets\AppAsset'); + +function img($file, $path = '/i/') +{ + return \Yii::$app->request->baseUrl . $path.$file; +} +?> + +
+
+ render("@app/views/widgets/ui-loading")?> +
+
+
+ +
+render('pages/rate-template', ['asset' => $asset])?> +render('pages/customer-order-template', ['asset' => $asset])?> + + + +render("@app/views/widgets/stat-code")?> diff --git a/app-wx/modules/order/views/default/index.php b/app-wx/modules/order/views/default/index.php index 6674249..2378c9c 100644 --- a/app-wx/modules/order/views/default/index.php +++ b/app-wx/modules/order/views/default/index.php @@ -21,10 +21,10 @@ function img($file, $path = '/i/') render('pages/index-template', ['asset' => $asset])?> -render('pages/rate-template', ['asset' => $asset])?> render('pages/submit-template', ['asset' => $asset])?> render('pages/cost-list-template', ['asset' => $asset])?> render('pages/order-details-template', ['asset' => $asset])?> +render('pages/customer-order-template', ['asset' => $asset])?> diff --git a/app-wx/modules/order/views/default/pages/order-details-template.php b/app-wx/modules/order/views/default/pages/order-details-template.php index e75cb7d..612aab6 100644 --- a/app-wx/modules/order/views/default/pages/order-details-template.php +++ b/app-wx/modules/order/views/default/pages/order-details-template.php @@ -152,7 +152,7 @@ $baseUrl = Url::base(true);
  • {{@index+1}}
    -

    {{content}}

    +

    {{plan}}

    金额: ¥{{price}}

  • @@ -185,9 +185,12 @@ $baseUrl = Url::base(true);
    服务评价:超赞
    这次修车体验很好,服务满意!
    {{else}} +
    车主暂未评价
    + {{/js_compare}} {{/js_compare}} diff --git a/app-wx/modules/order/views/default/pages/submit-template.php b/app-wx/modules/order/views/default/pages/submit-template.php index 4c63040..8511e1c 100644 --- a/app-wx/modules/order/views/default/pages/submit-template.php +++ b/app-wx/modules/order/views/default/pages/submit-template.php @@ -94,8 +94,8 @@ $baseUrl = Url::base(true);
  • -
    - +
    +
  • diff --git a/app-wx/modules/user/controllers/DefaultController.php b/app-wx/modules/user/controllers/DefaultController.php index dbdb806..bd0ce26 100644 --- a/app-wx/modules/user/controllers/DefaultController.php +++ b/app-wx/modules/user/controllers/DefaultController.php @@ -2,14 +2,9 @@ namespace app\wx\modules\user\controllers; -use common\helpers\ImageManager; -use common\helpers\ImageUtils; -use common\models\EngineerProfile; -use domain\toutiao\TtDefaultImageRepository; -use domain\toutiao\TtNewsImageRepository; -use domain\toutiao\TtNewsRepository; -use domain\toutiao\TtType; + use Yii; +use common\helpers\ImageManager; use stdClass; /** @@ -23,7 +18,8 @@ class DefaultController extends BaseController */ public function actionIndex() { - return $this->render('index'); + $params = ['isGuest' => Yii::$app->getUser()->isGuest]; + return $this->render('index', $params); } /** @@ -52,19 +48,10 @@ class DefaultController extends BaseController return $this->renderJson($e); } - $dir = Yii::getAlias('@site') . "/tmp"; - $fileArr = explode('.', $_FILES["file"]['name']); - $tt = time(); - $filename = 'auto_'.$tt.md5($_FILES["file"]['name']).'.'.end($fileArr); - $minFileName = 'auto_'.$tt.md5($_FILES["file"]['name']).'_min'.'.'.end($fileArr); - $saveFilePath = $dir.'/'.$filename; - move_uploaded_file($_FILES["file"]['tmp_name'], $saveFilePath); - $tmpUrl = $tmpMinFile= $this->site->base_url.'/tmp/'.$filename; - $imgSource = $this->_imageCreateFromPath($saveFilePath); - if ($imgSource) { - ImageUtils::resizeImage($imgSource, 100, 100, $dir.'/'.$minFileName); - $tmpMinFile = $this->site->base_url.'/tmp/'.$minFileName; - } + $uploadInfo = ImageManager::uploadImg($_FILES["file"]); + $filename = $uploadInfo[0]; + $tmpUrl = $this->site->base_url.'/'.$uploadInfo[2]; + $tmpMinFile = $this->site->base_url.'/'.$uploadInfo[3]; $e->success = true; $e->tmpFile = $filename; @@ -75,20 +62,4 @@ class DefaultController extends BaseController return $this->renderJson($e); } - /** - * @param $imgPath - * @return null|resource - */ - private function _imageCreateFromPath($imgPath) - { - list($width, $height, $type, $attr) = getimagesize($imgPath); - switch ($type) { - case 3: // png - return imagecreatefrompng($imgPath); - case 2: // jpeg - return imagecreatefromjpeg($imgPath); - default: - return null; - } - } } \ No newline at end of file diff --git a/app-wx/modules/user/controllers/LoginController.php b/app-wx/modules/user/controllers/LoginController.php index 56d9968..5e9983b 100644 --- a/app-wx/modules/user/controllers/LoginController.php +++ b/app-wx/modules/user/controllers/LoginController.php @@ -2,17 +2,13 @@ namespace app\wx\modules\user\controllers; -use common\helpers\ImageManager; -use common\helpers\ImageUtils; +use Yii; +use domain\user\User; use common\helpers\Utils; -use common\models\EngineerProfile; -use app\wx\models\User; use common\helpers\Log as AppLog; -use domain\toutiao\TtDefaultImageRepository; -use domain\toutiao\TtNewsImageRepository; -use domain\toutiao\TtNewsRepository; -use domain\toutiao\TtType; -use Yii; +use domain\user\UserRepository; +use common\helpers\ImageManager; +use domain\user\PhoneCode; use stdClass; /** @@ -20,7 +16,7 @@ use stdClass; */ class LoginController extends BaseController { - + const CODE_EXPIRE = 120; /** * @return string */ @@ -29,19 +25,143 @@ class LoginController extends BaseController $e = new stdClass(); $e->success = false; $e->message = 'ok'; - $e->codeDuration = 70; + $e->codeDuration = self::CODE_EXPIRE; $action = $this->request->get('action'); + $mobile = $this->request->get('mobile'); + if (!Utils::isPhone($mobile)) { + $e->message = '请输入合格手机号码'; + return $this->renderJson($e); + } + $tt = time(); if ('login' == $action) { + $userInfo = UserRepository::findOne(['mobile' => $mobile]); + if (empty($userInfo)) { + $e->message = '登录失败,该手机未注册'; + return $this->renderJson($e); + } + $code = $this->getLoginCode($mobile); + if ($code) { + // 发送短信 + } else { + $code = $this->setLoginCode($mobile); + // 发送短信 + } } else { + $userModel = UserRepository::findOne(['mobile' => $mobile]); + if ($userModel) { + $e->message = '该手机号码已经注册过'; + return $this->renderJson($e); + } + $phoneCode = $this->getRegisterCode($mobile); + if ($phoneCode) { + $code = $phoneCode; + //发送短信 + } else { + $code = $this->setRegisterCode($mobile); + //发送短信 + } } $e->success = true; + $e->testCode = $code; + return $this->renderJson($e); } /** + * @param $mobile + * @return string + */ + private function setRegisterCode($mobile) + { + $session = Yii::$app->session; + $code = Utils::randRegCode(6); + $codeKey = $mobile."_".PhoneCode::REGISTER_TYPE; + $sessionStr = json_encode(['content' => $code, 'expire_at' => time() + self::CODE_EXPIRE]); + $session->set($codeKey, $sessionStr); + + return $code; + } + + /** + * @param $mobile + * @return bool + */ + private function removeRegisterCode($mobile) + { + $session = Yii::$app->session; + $codeKey = $mobile."_".PhoneCode::REGISTER_TYPE; + return $session->remove($codeKey); + } + + /** + * @param $mobile + * @return mixed + */ + private function getRegisterCode($mobile) + { + $session = Yii::$app->session; + $codeKey = $mobile."_".PhoneCode::REGISTER_TYPE; + $sessionContent = $session->get($codeKey); + if (!$sessionContent) { + return null; + } + + $sessionContent = json_decode($sessionContent, true); + if ($sessionContent && isset($sessionContent['expire_at']) && $sessionContent['expire_at'] > time()) { + return $sessionContent['content']; + } else { + $session->remove($codeKey); + return null; + } + } + + /** + * @param $mobile + * @return mixed + */ + private function getLoginCode($mobile) + { + $session = Yii::$app->session; + $codeKey = $mobile."_".PhoneCode::LOGIN_TYPE; + $sessionContent = $session->get($codeKey); + if (!$sessionContent) { + return null; + } + $sessionContent = json_decode($sessionContent, true); + if ($sessionContent && isset($sessionContent['expire_at']) && $sessionContent['expire_at'] > time()) { + return $sessionContent['content']; + } else { + $session->remove($codeKey); + return null; + } + } + + /** + * @param $mobile + * @return string + */ + private function setLoginCode($mobile) + { + $session = Yii::$app->session; + $code = Utils::randRegCode(6); + $codeKey = $mobile."_".PhoneCode::LOGIN_TYPE; + $sessionStr = json_encode(['content' => $code, 'expire_at' => time() + self::CODE_EXPIRE]); + $session->set($codeKey, $sessionStr); + + return $code; + } + + private function removeLoginCode($mobile) + { + $session = Yii::$app->session; + $codeKey = $mobile."_".PhoneCode::LOGIN_TYPE; + $session->remove($codeKey); + } + + /** * 注册界面 * @return string */ @@ -53,7 +173,7 @@ class LoginController extends BaseController $name = $this->request->post('name'); $mobile = $this->request->post('mobile'); $code = $this->request->post('code'); - $img = $this->request->post('img'); + $licensePic = $this->request->post('licensePic'); if (empty($name)) { $e->message = '车厂名称必填'; return $this->renderJson($e); @@ -68,15 +188,43 @@ class LoginController extends BaseController $e->message = '验证码必填'; return $this->renderJson($e); } - if (empty($img)) { + if (empty($licensePic)) { $e->message = '请上传营业执照'; return $this->renderJson($e); } // 校验验证码 + $vcode = $this->getRegisterCode($mobile); + if (empty($vcode)) { + $e->message = '验证码已经超时请重新发送'; + return $this->renderJson($e); + } + if ($vcode !== $code) { + $e->message = '验证码不对'; + return $this->renderJson($e); + } // 检查车厂名称是否注册了 // 检查手机号码是否注册了 - echo $name.'_'.$mobile.'_'.$code.'_'.$img; - $e->success = true; + $userMobile = UserRepository::findOne(['mobile' => $mobile]); + if ($userMobile) { + $e->message = '该手机号已经注册过维修厂,请更换其他手机号'; + return $this->renderJson($e); + } + + $uData = [ + 'mobile' => $mobile, + 'name' => $name, + 'user_name' => $mobile + ]; + $userEntity = User::create($uData); + $this->removeRegisterCode($mobile); + $saveImageInfo = ImageManager::mvUploadImage($licensePic, $userEntity->uuid); + $userEntity->license_pic = $saveImageInfo[0].$saveImageInfo[1]; + $userEntity->save(); + if ($this->processLogin($userEntity)) { + $e->success = true; + } else { + $e->message = '注册成功但是登录失败'; + } return $this->renderJson($e); } @@ -93,7 +241,6 @@ class LoginController extends BaseController $mobile = $this->request->post('mobile'); $code = $this->request->post('code'); - if (!Utils::isPhone($mobile)) { $e->message = '手机号码格式不对'; return $this->renderJson($e); @@ -105,11 +252,29 @@ class LoginController extends BaseController } // 校验验证码 - // 检查车厂名称是否注册了 - // 检查手机号码是否注册了 - $e->success = true; - $userInfo = \domain\user\models\User::findOne(1); - $this->processLogin($userInfo); + $logVcode = $this->getLoginCode($mobile); + if (empty($logVcode)) { + $e->message = '该手机登录码过期'; + return $this->renderJson($e); + } + if ($code != $logVcode ) { + $e->message = '验证码有误,请确认!'; + return $this->renderJson($e); + } + + $where = ['mobile' => $mobile]; + $userInfo = UserRepository::findOne($where); + if (empty($userInfo)) { + $e->message = '登录失败,该手机未注册'; + return $this->renderJson($e); + } + if($this->processLogin($userInfo)) { + $this->removeLoginCode($mobile); + $e->success = true; + } else { + $e->message = '登录失败'; + } + return $this->renderJson($e); } @@ -121,10 +286,6 @@ class LoginController extends BaseController */ protected function processLogin($userEntity) { - if(!($userEntity instanceof User)) { - AppLog::debug("processLogin: 返回 UserEntity 失败"); - return false; - } /** * 登陆时间为7000秒,目前微信API的access token 的 expires_in 为 7200秒 */ diff --git a/app-wx/modules/user/views/default/index.php b/app-wx/modules/user/views/default/index.php index f270090..9eb9661 100644 --- a/app-wx/modules/user/views/default/index.php +++ b/app-wx/modules/user/views/default/index.php @@ -10,6 +10,11 @@ function img($file, $path = '/i/') { return \Yii::$app->request->baseUrl . $path.$file; } +if ($isGuest) { + $isGuest = true; +} else { + $isGuest = 0; +} ?>