From f694e9fe71f49195569561872877fce2ace47984 Mon Sep 17 00:00:00 2001 From: dongpd Date: Tue, 8 Dec 2020 16:06:19 +0700 Subject: [PATCH] =?UTF-8?q?update=20l=E1=BA=A5y=20features=20t=E1=BB=AB=20?= =?UTF-8?q?=E1=BA=A3nh=20upload?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/ApiController.php | 13 +---- controllers/ListManagementController.php | 64 +++++++++++++++++++----- models/common.php | 10 ++++ views/list-management/index.tpl | 8 +-- web/js/list-management.js | 53 ++++++++++++++++++-- 5 files changed, 116 insertions(+), 32 deletions(-) diff --git a/controllers/ApiController.php b/controllers/ApiController.php index 5dc5db8b..d5238506 100644 --- a/controllers/ApiController.php +++ b/controllers/ApiController.php @@ -8,6 +8,7 @@ use yii\filters\VerbFilter; use yii\helpers\FileHelper; use app\models\CaptureLogs; use app\models\ListManagement; +use app\models\common; /** * CardController implements the CRUD actions for Card model. @@ -58,7 +59,7 @@ class ApiController extends Controller { if (Yii::$app->request->post()) { $post = Yii::$app->request->bodyParams; $time = date_format(date_create_from_format('Y-m-d H:i:s', $post['time']), 'U'); - $key = $this->generateRandomString(); + $key = common::generateRandomString(); $RootFolder = Yii::getAlias('@webroot') . "/data/uploads"; $targetPath = $RootFolder . "/face"; $fileName = "face_" . $key . "_" . $time . ".png"; @@ -95,14 +96,4 @@ class ApiController extends Controller { return $allFeatures; } - public function generateRandomString($length = 10) { - $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; - $charactersLength = strlen($characters); - $randomString = ''; - for ($i = 0; $i < $length; $i++) { - $randomString .= $characters[rand(0, $charactersLength - 1)]; - } - return $randomString; - } - } diff --git a/controllers/ListManagementController.php b/controllers/ListManagementController.php index be926383..ee9ee86b 100644 --- a/controllers/ListManagementController.php +++ b/controllers/ListManagementController.php @@ -10,6 +10,7 @@ use yii\web\NotFoundHttpException; use yii\filters\VerbFilter; use app\models\CaptureLogs; use app\models\common; +use yii\helpers\FileHelper; /** * ListMamagementController implements the CRUD actions for ListMamagement model. @@ -33,14 +34,14 @@ class ListManagementController extends Controller { public function actionIndex($from = "", $to = "", $name = "", $type = "all", $gender = "all") { $f = date_format(date_create_from_format('H:i d/m/Y', "00:00 " . date("d/m/Y")), 'U'); $t = date_format(date_create_from_format('H:i d/m/Y', "23:59 " . date("d/m/Y")), 'U'); - if ($from !== "" && $to !== "") { - $f = date_format(date_create_from_format('H:i d/m/Y', $from), 'U'); - $t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U'); - } $this->view->title = "List management"; $searchModel = new ListManagementSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); - $dataProvider->query->andWhere(["BETWEEN", "time", $f, $t]); + if ($from !== "" && $to !== "") { + $f = date_format(date_create_from_format('H:i d/m/Y', $from), 'U'); + $t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U'); + $dataProvider->query->andWhere(["BETWEEN", "time", $f, $t]); + } if ($name !== "") $dataProvider->query->andWhere(["LIKE", "name", $name]); if ($type !== "all") @@ -58,10 +59,23 @@ class ListManagementController extends Controller { ]); } - public function actionView($id) { - return $this->render('view', [ - 'model' => $this->findModel($id), - ]); + public function actionAdd() { + $model = new ListManagement(); + Yii::$app->response->format = "json"; + if (Yii::$app->request->post()) { + $data = Yii::$app->request->post(); + $features = json_decode(common::requestToEngine("/get-feature", [ + "image_paths" => [ + ["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $data['image'], "type" => "raw"] + ] + ]), true); + $data['image'] = json_encode([ + ["url" => $data['image'], "features" => $features['results'][0]['feature']] + ]); + $model->create($data); + file_get_contents("http://localhost:2305/update-feature"); + return ["status" => true]; + } } public function actionCreate() { @@ -129,6 +143,16 @@ class ListManagementController extends Controller { if (Yii::$app->request->post()) { $data = Yii::$app->request->post(); $model = $this->findModel($data['id']); + if ($data['image'] !== "") { + $features = json_decode(common::requestToEngine("/get-feature", [ + "image_paths" => [ + ["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $data['image'], "type" => "raw"] + ] + ]), true); + $images = json_decode($model->image, true); + $images[] = ["url" => $data['image'], "features" => $features['results'][0]['feature']]; + $model->image = json_encode($images); + } $model->type = $data['type']; $model->name = $data['name']; $model->gender = $data['gender']; @@ -188,10 +212,24 @@ class ListManagementController extends Controller { if (Yii::$app->request->post()) { $model = new common(); Yii::$app->response->format = "json"; - return [ - "dataPath" => "BiFace/", - "url" => $model->UploadFile("AnhNhanVien", ["PNG", "JPG", "JPEG", "GIF"], "temp") - ]; + $url = $model->UploadFile("AnhNhanVien", ["PNG", "JPG", "JPEG", "GIF"], "temp"); + $features = json_decode(common::requestToEngine("/get-feature", [ + "image_paths" => [ + ["url" => "/var/www/html/BiFace_Server_Lite/web/" . $url, "type" => "crop"] + ] + ]), true); + unlink("/var/www/html/BiFace_Server_Lite/web/" . $url); + if ($features['results'][0]['crop'] === "") { + return ["status" => false]; + } else { + $key = common::generateRandomString(); + $RootFolder = Yii::getAlias('@webroot') . "/data/uploads"; + $targetPath = $RootFolder . "/face"; + $fileName = "face_" . $key . "_" . time() . ".png"; + FileHelper::createDirectory($targetPath, 0777); + file_put_contents($targetPath . "/" . $fileName, base64_decode($features['results'][0]['crop'])); + return ["status" => true, "url" => $fileName, "dataPath" => "data/uploads/face/"]; + } } } diff --git a/models/common.php b/models/common.php index 19f6f055..1147de0b 100644 --- a/models/common.php +++ b/models/common.php @@ -181,4 +181,14 @@ class common extends \yii\db\ActiveRecord { ])); } + public static function generateRandomString($length = 10) { + $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + $charactersLength = strlen($characters); + $randomString = ''; + for ($i = 0; $i < $length; $i++) { + $randomString .= $characters[rand(0, $charactersLength - 1)]; + } + return $randomString; + } + } diff --git a/views/list-management/index.tpl b/views/list-management/index.tpl index 5111d4b5..cd84e01a 100644 --- a/views/list-management/index.tpl +++ b/views/list-management/index.tpl @@ -26,6 +26,8 @@ color: #fff; } + +
{GridView::widget([ @@ -136,12 +138,12 @@
- {*
+
-
*} +
- +
diff --git a/web/js/list-management.js b/web/js/list-management.js index 8c4f8b91..8f43dddc 100644 --- a/web/js/list-management.js +++ b/web/js/list-management.js @@ -59,7 +59,6 @@ function _formModified(e) { }, success: function (data) { common.modalBlock(false); - $("#upload-btn").addClass("hidden"); $("select[name='Type']").val(data.type); $("input[name='Name']").val(data.name); $("select[name='Gender']").val(data.gender); @@ -67,6 +66,8 @@ function _formModified(e) { $("input[name='Telephone']").val(data.telephone); $("input[name='Address']").val(data.address); $("#FaceImage").attr("src", data.image); + $("#save-btn").attr("onclick", "_update(this);"); + $("#save-btn").attr("data-href", $("input[name='update_url']").val()); }, error: function (jqXHR, textStatus, errorThrown) { common.modalBlock(false); @@ -92,7 +93,8 @@ function _update(e) { birthday: $("input[name='Birthday']").val(), telephone: $("input[name='Telephone']").val(), address: $("input[name='Address']").val(), - id: $("input[name='ListManagementID']").val() + id: $("input[name='ListManagementID']").val(), + image: $("input[name='AnhNhanVienUrl']").val() }, success: function (data) { alert("Cập nhật dữ liệu thành công!"); @@ -189,6 +191,8 @@ function _form() { $("#form").removeClass("hidden"); $("#upload-btn").removeClass("hidden"); $("#FaceImage").attr("src", "/images/user2-160x160.jpg"); + $("#save-btn").attr("onclick", "_create(this);"); + $("#save-btn").attr("data-href", $("input[name='create_url']").val()); } function btnImage() { @@ -209,9 +213,48 @@ function btnImage() { fakeInputContent: ' Chọn hình ảnh', onUploaded: function (data) { var res = JSON.parse(data); - $("#FaceImage").attr("src", "/" + res.dataPath + res.url); - $("input[name='AnhNhanVienUrl']").val(res.url); - common.uploadBlock(false); + if (res.status) { + $("#FaceImage").attr("src", "/" + res.dataPath + res.url); + $("input[name='AnhNhanVienUrl']").val(res.url); + common.uploadBlock(false); + } else { + alert("Hình ảnh không nhận diện được khuôn mặt"); + } } }).addInstance('AnhNhanVien'); +} + +function _create(e) { + var name = $("input[name='Name']").val(); + if (name === "") { + alert("Hãy nhập tên!"); + return; + } + var image = $("input[name='AnhNhanVienUrl']").val(); + if (image === "") { + alert("Hãy tải lên hình ảnh"); + return; + } + common.modalBlock(true); + $.ajax({ + url: $(e).attr("data-href"), + type: 'POST', + data: { + name: name, + type: $("select[name='Type']").val(), + gender: $("select[name='Gender']").val(), + birthday: $("input[name='Birthday']").val(), + telephone: $("input[name='Telephone']").val(), + address: $("input[name='Address']").val(), + image: image + }, + success: function (data) { + alert("Cập nhật dữ liệu thành công!"); + window.location.reload(true); + }, + error: function (jqXHR, textStatus, errorThrown) { + common.modalBlock(false); + common.ajaxError(); + } + }); } \ No newline at end of file