931 lines
41 KiB
PHP
931 lines
41 KiB
PHP
<?php
|
|
|
|
namespace app\controllers;
|
|
|
|
use Yii;
|
|
use app\models\ListManagement;
|
|
use app\models\ListManagementSearch;
|
|
use yii\web\Controller;
|
|
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.
|
|
*/
|
|
class ListManagementController extends Controller {
|
|
|
|
public function init() {
|
|
parent::init();
|
|
Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : Yii::$app->language;
|
|
if (Yii::$app->user->isGuest)
|
|
return $this->redirect(['/site/login']);
|
|
}
|
|
|
|
public function behaviors() {
|
|
return [
|
|
'verbs' => [
|
|
'class' => VerbFilter::className(),
|
|
'actions' => [
|
|
'delete' => ['POST'],
|
|
],
|
|
],
|
|
];
|
|
}
|
|
|
|
public function actionIndex($from = "", $to = "", $name = "", $type = "all", $gender = "all", $id = "") {
|
|
$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');
|
|
$this->view->title = Yii::t("app", "QUAN_LY_MAU");
|
|
$searchModel = new ListManagementSearch();
|
|
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
|
|
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 ($id !== "")
|
|
$dataProvider->query->andWhere(["LIKE", "code", $id]);
|
|
if ($name !== "")
|
|
$dataProvider->query->andWhere(["LIKE", "name", $name]);
|
|
if ($type !== "all")
|
|
$dataProvider->query->andWhere(["type" => $type]);
|
|
if ($gender !== "all")
|
|
$dataProvider->query->andWhere(["gender" => $gender]);
|
|
$dataProvider->query->orderBy(["time" => SORT_DESC]);
|
|
|
|
// $tempConfig = json_decode(file_get_contents("http://localhost:4004/ReadEngineConfig", false, stream_context_create([
|
|
// 'http' => [
|
|
// 'header' => "Content-Type: application/json",
|
|
// 'method' => "POST"
|
|
// ]
|
|
// ])), true);
|
|
// $data = json_decode($tempConfig['data'], true);
|
|
// $last = \app\models\ListManagement::find()->orderBy(['id' => SORT_DESC])->limit(1)->one();
|
|
// if (!is_object($last))
|
|
// $last = (object) ['id' => 0];
|
|
// $idAuto = $data['data']['box_id'] . "_" . ($last->id + 1);
|
|
$updating = \app\models\SyncUrl::findOne(['key_config' => 'updating']);
|
|
if (!$updating) {
|
|
$model = new \app\models\SyncUrl();
|
|
$model->create([
|
|
'key_config' => "updating",
|
|
'data' => "false"
|
|
]);
|
|
$updating = \app\models\SyncUrl::findOne(['key_config' => 'updating']);
|
|
}
|
|
|
|
$dataProvider->pagination->pageSize = 20;
|
|
if (Yii::$app->request->get("per-page"))
|
|
$dataProvider->pagination->pageSize = Yii::$app->request->get("per-page");
|
|
return $this->render('index', [
|
|
'searchModel' => $searchModel,
|
|
'dataProvider' => $dataProvider,
|
|
'f' => $f,
|
|
't' => $t,
|
|
'typeArray' => ListManagement::typeArray(),
|
|
'genderArray' => ListManagement::genderArray(),
|
|
// 'idAuto' => $idAuto,
|
|
"staffArray" => ListManagement::staffArray(),
|
|
"updating" => $updating
|
|
]);
|
|
}
|
|
|
|
public function actionAdd() {
|
|
$model = new ListManagement();
|
|
Yii::$app->response->format = "json";
|
|
if (Yii::$app->request->post()) {
|
|
$data = Yii::$app->request->post();
|
|
$check = ListManagement::findOne(['id' => $data['code']]);
|
|
if ($check)
|
|
return ["status" => false];
|
|
$features = common::requestToEngine("/get-feature", [
|
|
"image_paths" => [
|
|
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $data['image'], "type" => "raw"]
|
|
]
|
|
]);
|
|
if (!$features['status'])
|
|
return ["status" => false];
|
|
$features = json_decode($features['data'], true);
|
|
$data['image'] = json_encode([
|
|
[
|
|
"url" => $data['image'],
|
|
"features" => $features['results'][0]['feature'],
|
|
"features512" => isset($features['results'][0]['feature512']) ? $features['results'][0]['feature512'] : []
|
|
]
|
|
]);
|
|
$model->create($data);
|
|
file_get_contents("http://localhost:2305/update-feature");
|
|
return ["status" => true];
|
|
}
|
|
}
|
|
|
|
public function actionCreate() {
|
|
$model = new ListManagement();
|
|
Yii::$app->response->format = "json";
|
|
if (Yii::$app->request->post()) {
|
|
$data = Yii::$app->request->post();
|
|
$listManagement = ListManagement::findOne(['id' => $data['code']]);
|
|
$url = CaptureLogs::findOne($data['id'])->image;
|
|
if ($listManagement) {
|
|
$images = json_decode($listManagement->image, true);
|
|
if (count($images) >= \Yii::$app->params['maxPicture'])
|
|
return ["status" => false, "text" => Yii::t("app", "SO_ANH_MAU_TOI_DA", ["maxPicture" => \Yii::$app->params['maxPicture']])];
|
|
$add = true;
|
|
foreach ($images as $key => $value) {
|
|
if (isset($value['urlOld']) && $value['urlOld'] === $url)
|
|
$add = false;
|
|
}
|
|
if ($add) {
|
|
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
|
|
$targetPath = $RootFolder . "/face";
|
|
FileHelper::createDirectory($targetPath, 0777);
|
|
$fileName = "face_" . common::generateRandomString() . "_" . time() . ".png";
|
|
$img = file_get_contents("http://localhost/data/uploads/face/" . $url);
|
|
$fileTarget = $targetPath . "/" . $fileName;
|
|
if (!$this->resizeImg($img, $fileTarget))
|
|
$fileName = $url;
|
|
|
|
$features = common::requestToEngine("/get-feature", [
|
|
"image_paths" => [
|
|
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
|
|
]
|
|
]);
|
|
if (!$features['status'])
|
|
return ["status" => false, "text" => Yii::t("app", "ENGINE_KHONG_HOAT_DONG")];
|
|
$features = json_decode($features['data'], true);
|
|
$images[] = [
|
|
"url" => $fileName,
|
|
"urlOld" => $url,
|
|
"features" => $features['results'][0]['feature'],
|
|
"features512" => isset($features['results'][0]['feature512']) ? $features['results'][0]['feature512'] : []
|
|
];
|
|
$listManagement->type = $data['type'];
|
|
$listManagement->name = $data['name'];
|
|
$listManagement->abbreviated_name = $data['abbreviated_name'];
|
|
$listManagement->gender = $data['gender'];
|
|
$listManagement->birthday = $data['birthday'] === "" ? 0 : date_format(date_create_from_format('d/m/Y', $data['birthday']), 'U');
|
|
$listManagement->telephone = $data['telephone'];
|
|
$listManagement->address = $data['address'];
|
|
$listManagement->image = json_encode($images);
|
|
$listManagement->last_modified = time();
|
|
$listManagement->save();
|
|
common::updateFeature([
|
|
"cmd" => "update",
|
|
"id" => $listManagement->id,
|
|
"object_id" => $listManagement->staff_id,
|
|
"name" => common::convert_vi_to_en($listManagement->name),
|
|
"features" => $listManagement->allFeatures
|
|
]);
|
|
return ["status" => true];
|
|
}
|
|
return ["status" => false, "text" => Yii::t("app", "ANH_MAU_DA_DUOC_CHON")];
|
|
} else {
|
|
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
|
|
$targetPath = $RootFolder . "/face";
|
|
FileHelper::createDirectory($targetPath, 0777);
|
|
$fileName = "face_" . common::generateRandomString() . "_" . time() . ".png";
|
|
$img = file_get_contents("http://localhost/data/uploads/face/" . $url);
|
|
$fileTarget = $targetPath . "/" . $fileName;
|
|
if (!$this->resizeImg($img, $fileTarget))
|
|
$fileName = $url;
|
|
|
|
$features = common::requestToEngine("/get-feature", [
|
|
"image_paths" => [
|
|
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
|
|
]
|
|
]);
|
|
if (!$features['status'])
|
|
return ["status" => false, "text" => Yii::t("app", "ENGINE_KHONG_HOAT_DONG")];
|
|
$features = json_decode($features['data'], true);
|
|
$data['image'] = json_encode([
|
|
[
|
|
"url" => $fileName,
|
|
"urlOld" => $url,
|
|
"features" => $features['results'][0]['feature'],
|
|
"features512" => isset($features['results'][0]['feature512']) ? $features['results'][0]['feature512'] : []
|
|
]
|
|
]);
|
|
$model->create($data);
|
|
file_get_contents("http://localhost:2305/update-feature");
|
|
return ["status" => true];
|
|
}
|
|
}
|
|
}
|
|
|
|
public function actionFormUpdate() {
|
|
if (Yii::$app->request->post()) {
|
|
$data = Yii::$app->request->post();
|
|
$ListManagement = $this->findModel($data['id']);
|
|
$images = json_decode($ListManagement->image, true);
|
|
Yii::$app->response->format = "json";
|
|
return [
|
|
"type" => $ListManagement->type,
|
|
"code" => $ListManagement->code,
|
|
"name" => $ListManagement->name,
|
|
"abbreviated_name" => $ListManagement->abbreviated_name,
|
|
"gender" => $ListManagement->gender,
|
|
"birthday" => date("d/m/Y", $ListManagement->birthday),
|
|
"telephone" => $ListManagement->telephone,
|
|
"address" => $ListManagement->address,
|
|
"image" => count($images) > 0 ? "/data/uploads/face/" . $images[0]['url'] : "/images/user2-160x160.jpg",
|
|
"canUpload" => count($images) >= Yii::$app->params['maxPicture'] ? false : true
|
|
];
|
|
}
|
|
}
|
|
|
|
public function actionUpdate() {
|
|
if (Yii::$app->request->post()) {
|
|
$data = Yii::$app->request->post();
|
|
$model = $this->findModel($data['id']);
|
|
$check = ListManagement::findOne(['code' => $data['code']]);
|
|
if ($check && $check->id != $model->id)
|
|
return false;
|
|
if ($data['image'] !== "") {
|
|
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
|
|
$targetPath = $RootFolder . "/face";
|
|
FileHelper::createDirectory($targetPath, 0777);
|
|
$fileName = "face_" . common::generateRandomString() . "_" . time() . ".png";
|
|
$img = file_get_contents("http://localhost/data/uploads/face/" . $data['image']);
|
|
$fileTarget = $targetPath . "/" . $fileName;
|
|
if (!$this->resizeImg($img, $fileTarget))
|
|
$fileName = $data['image'];
|
|
|
|
$features = common::requestToEngine("/get-feature", [
|
|
"image_paths" => [
|
|
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
|
|
]
|
|
]);
|
|
if (!$features['status'])
|
|
return ["status" => false, "text" => Yii::t("app", "ENGINE_KHONG_HOAT_DONG")];
|
|
$features = json_decode($features['data'], true);
|
|
$images = json_decode($model->image, true);
|
|
$images[] = [
|
|
"url" => $fileName,
|
|
"urlOld" => $data['image'],
|
|
"features" => $features['results'][0]['feature'],
|
|
"features512" => isset($features['results'][0]['feature512']) ? $features['results'][0]['feature512'] : []
|
|
];
|
|
$model->image = json_encode($images);
|
|
}
|
|
$model->code = $data['code'];
|
|
$model->type = $data['type'];
|
|
$model->name = $data['name'];
|
|
$model->abbreviated_name = $data['abbreviated_name'];
|
|
$model->gender = $data['gender'];
|
|
$model->birthday = $data['birthday'] === "" ? 0 : date_format(date_create_from_format('d/m/Y', $data['birthday']), 'U');
|
|
$model->telephone = $data['telephone'];
|
|
$model->address = $data['address'];
|
|
$model->last_modified = time();
|
|
$model->save();
|
|
common::updateFeature([
|
|
"cmd" => "update",
|
|
"id" => $model->id,
|
|
"object_id" => $model->staff_id,
|
|
"name" => common::convert_vi_to_en($model->name),
|
|
"features" => $model->allFeatures
|
|
]);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public function actionDelete() {
|
|
if (Yii::$app->request->post()) {
|
|
$data = Yii::$app->request->post();
|
|
$model = $this->findModel($data['id']);
|
|
$images = json_decode($model->image, true);
|
|
foreach ($images as $k => $v) {
|
|
unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $v['url']);
|
|
}
|
|
common::updateFeature([
|
|
"cmd" => "delete",
|
|
"id" => $model->id,
|
|
"object_id" => $model->staff_id,
|
|
"name" => common::convert_vi_to_en($model->name),
|
|
"features" => []
|
|
]);
|
|
$model->delete();
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public function actionDeleteFeature() {
|
|
if (Yii::$app->request->post()) {
|
|
$data = Yii::$app->request->post();
|
|
$model = $this->findModel($data['id']);
|
|
$images = json_decode($model->image, true);
|
|
$features = [];
|
|
foreach ($images as $key => $value) {
|
|
if ($value['url'] !== $data['image'])
|
|
$features[] = $value;
|
|
else {
|
|
unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value['url']);
|
|
}
|
|
}
|
|
$model->image = json_encode($features);
|
|
$model->save();
|
|
common::updateFeature([
|
|
"cmd" => "update",
|
|
"id" => $model->id,
|
|
"object_id" => $model->staff_id,
|
|
"name" => common::convert_vi_to_en($model->name),
|
|
"features" => $model->allFeatures
|
|
]);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
protected function findModel($id) {
|
|
if (($model = ListManagement::findOne($id)) !== null) {
|
|
return $model;
|
|
}
|
|
|
|
throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN"));
|
|
}
|
|
|
|
public function actionBatchDelete() {
|
|
if (Yii::$app->request->post()) {
|
|
$data = Yii::$app->request->post();
|
|
Yii::$app->response->format = "json";
|
|
foreach ($data['lists'] as $key => $value) {
|
|
$staff = ListManagement::findOne($value);
|
|
if ($staff) {
|
|
$images = json_decode($staff->image, true);
|
|
foreach ($images as $k => $v) {
|
|
unlink("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $v['url']);
|
|
}
|
|
if (count($data['lists']) <= 10)
|
|
common::updateFeature([
|
|
"cmd" => "delete",
|
|
"id" => $staff->id,
|
|
"object_id" => $staff->staff_id,
|
|
"name" => common::convert_vi_to_en($staff->name),
|
|
"features" => []
|
|
]);
|
|
$staff->delete();
|
|
}
|
|
}
|
|
if (count($data['lists']) > 10)
|
|
file_get_contents("http://localhost:2305/update-feature");
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public function actionUpload() {
|
|
if (Yii::$app->request->post()) {
|
|
$model = new common();
|
|
Yii::$app->response->format = "json";
|
|
$url = $model->UploadFile("AnhNhanVien", ["PNG", "JPG", "JPEG", "GIF"], "temp");
|
|
$features = common::requestToEngine("/get-feature", [
|
|
"image_paths" => [
|
|
["url" => "/var/www/html/BiFace_Server_Lite/web/" . $url, "type" => "crop"]
|
|
]
|
|
]);
|
|
if (!$features['status'])
|
|
return ["status" => false];
|
|
$features = json_decode($features['data'], 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/"];
|
|
}
|
|
}
|
|
}
|
|
|
|
public function actionFormSync() {
|
|
if (Yii::$app->request->post()) {
|
|
$data = Yii::$app->request->post();
|
|
$results = json_decode(file_get_contents("http://" . $data['ip'] . "/api/data", false, stream_context_create([
|
|
'http' => [
|
|
'header' => "Content-Type: application/json",
|
|
'method' => "POST",
|
|
'content' => json_encode(ListManagement::nameArray())
|
|
]
|
|
])), true);
|
|
$filters = [];
|
|
foreach ($results as $key => $value) {
|
|
$filters[$value['code']] = $value['code'] . " - " . $value['name'] . " - " . $value['address'];
|
|
}
|
|
Yii::$app->response->format = "json";
|
|
return [
|
|
"title" => $data['ip'],
|
|
"form" => $this->renderPartial("list", [
|
|
"results" => $results,
|
|
"typeArray" => ListManagement::typeArray(),
|
|
"filters" => $filters,
|
|
"ip" => $data['ip']
|
|
])
|
|
];
|
|
}
|
|
}
|
|
|
|
public function actionSyncFromServer() {
|
|
if (Yii::$app->request->isAjax) {
|
|
$server_ip = \app\models\SyncUrl::findOne(['key_config' => 'server_api']);
|
|
$ip = "https://dev-dc.beetai.com";
|
|
if ($server_ip)
|
|
$ip = $server_ip->data;
|
|
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
|
|
$id_camera = 0;
|
|
if ($device_id)
|
|
$id_camera = intval($device_id->data);
|
|
|
|
$datas = json_decode(file_get_contents($ip . "/api/oem/get_all_image", false, stream_context_create([
|
|
'http' => [
|
|
'header' => "Content-Type: application/json",
|
|
'method' => "POST",
|
|
'content' => json_encode([
|
|
"id_camera" => $id_camera,
|
|
"ids_staff" => [],
|
|
"objs_staff" => []
|
|
])
|
|
]
|
|
])), true);
|
|
$filters = [];
|
|
foreach ($datas['data'] as $key => $value) {
|
|
$filters[$value['id']] = $value['code'] . " - " . $value['name'] . " - " . $value['department'];
|
|
}
|
|
$deviceDatas = ListManagement::getAllID();
|
|
Yii::$app->response->format = "json";
|
|
return [
|
|
"title" => "<i class='fa fa-download'></i> " . Yii::t("app", "DONG_BO_TU_MAY_CHU"),
|
|
"form" => $this->renderPartial("list-server", [
|
|
"datas" => $datas['data'],
|
|
"filters" => $filters,
|
|
"personImage" => $deviceDatas["imgCountArr"],
|
|
"allID" => $deviceDatas["idArr"]
|
|
])
|
|
];
|
|
}
|
|
}
|
|
|
|
public function getCurrentTime() {
|
|
$time = microtime();
|
|
$time = explode(' ', $time);
|
|
return $time[1] + $time[0];
|
|
}
|
|
|
|
public function extractFeature($images, $files_name, $staff_id, $currentImg = false) {
|
|
$RootFolder = Yii::getAlias('@webroot') . "/data/uploads";
|
|
$targetPath = $RootFolder . "/face";
|
|
FileHelper::createDirectory($targetPath, 0777);
|
|
$extractFeature = [];
|
|
$ft = [];
|
|
$currentArr = [];
|
|
if ($currentImg) {
|
|
foreach ($currentImg as $key => $value) {
|
|
if (isset($value['serverKey']))
|
|
$currentArr[] = $value['serverKey'];
|
|
}
|
|
$ft = $currentImg;
|
|
}
|
|
foreach ($images as $key => $value) {
|
|
if ($key < Yii::$app->params['maxPicture'] && !in_array($files_name[$key], $currentArr)) {
|
|
$fileName = "face_" . $staff_id . "_" . common::generateRandomString() . "_" . time() . ".png";
|
|
$start = $this->getCurrentTime();
|
|
$img = false;
|
|
try {
|
|
$img = file_get_contents(str_replace("&", "&", $value));
|
|
} catch (\Exception $e) {
|
|
|
|
}
|
|
$finish = $this->getCurrentTime();
|
|
$temp["getIMG"] = round(($finish - $start), 4);
|
|
if ($img && $img !== "null") {
|
|
$fileTarget = $targetPath . "/" . $fileName;
|
|
$start = $this->getCurrentTime();
|
|
if (!$this->resizeImg($img, $fileTarget)) {
|
|
file_put_contents($fileTarget, $img);
|
|
}
|
|
$finish = $this->getCurrentTime();
|
|
$temp["saveIMG"] = round(($finish - $start), 4);
|
|
$start = $this->getCurrentTime();
|
|
$features = common::requestToEngine("/get-feature", [
|
|
"image_paths" => [
|
|
["url" => "/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $fileName, "type" => "raw"]
|
|
],
|
|
"type" => "128"
|
|
]);
|
|
if (!$features['status'])
|
|
return false;
|
|
$features = json_decode($features['data'], true);
|
|
$finish = $this->getCurrentTime();
|
|
$temp["extract"] = round(($finish - $start), 4);
|
|
$ft[] = [
|
|
"serverKey" => $files_name[$key],
|
|
"url" => $fileName,
|
|
"urlOld" => $fileName,
|
|
"features" => $features['results'][0]['feature'],
|
|
"features512" => []//isset($features['results'][0]['feature512']) ? $features['results'][0]['feature512'] : []
|
|
];
|
|
}
|
|
$extractFeature[] = $temp;
|
|
}
|
|
}
|
|
return [
|
|
"time" => $extractFeature,
|
|
"features" => $ft
|
|
];
|
|
}
|
|
|
|
public function actionSyncFeature() {
|
|
if (Yii::$app->request->post()) {
|
|
Yii::$app->response->format = "json";
|
|
$processTime = [];
|
|
$totalStart = $this->getCurrentTime();
|
|
$totals = intval(Yii::$app->request->post("totals"));
|
|
|
|
$data = Yii::$app->request->post("id"); //$res['data'][0];
|
|
|
|
$start = $this->getCurrentTime();
|
|
$model = ListManagement::findOne(['staff_id' => $data['id']]);
|
|
$finish = $this->getCurrentTime();
|
|
$processTime["getLM"] = round(($finish - $start), 4);
|
|
$ft = [];
|
|
if ($model) {
|
|
if (isset($data['images'])) {
|
|
$extractFeature = $this->extractFeature($data['images'], $data['files_name'], $data['id'], json_decode($model->image, true));
|
|
if (!$extractFeature)
|
|
return false;
|
|
$processTime["extractFeature"] = $extractFeature['time'];
|
|
$ft = $extractFeature['features'];
|
|
}
|
|
$model->abbreviated_name = $data['abbreviated_name'];
|
|
$model->code = $data['code'];
|
|
$model->name = $data['name'];
|
|
$model->address = $data['department'];
|
|
$model->image = json_encode($ft);
|
|
$model->last_modified = time();
|
|
$model->save();
|
|
if ($totals <= 10)
|
|
common::updateFeature([
|
|
"cmd" => "update",
|
|
"id" => $model->id,
|
|
"object_id" => $model->staff_id,
|
|
"name" => common::convert_vi_to_en($model->name),
|
|
"features" => $model->allFeatures
|
|
]);
|
|
} else {
|
|
if (isset($data['images'])) {
|
|
$extractFeature = $this->extractFeature($data['images'], $data['files_name'], $data['id']);
|
|
if (!$extractFeature)
|
|
return false;
|
|
$processTime["extractFeature"] = $extractFeature['time'];
|
|
$ft = $extractFeature['features'];
|
|
}
|
|
|
|
$start = $this->getCurrentTime();
|
|
$model = new ListManagement();
|
|
$model->create([
|
|
'code' => strval($data['code']),
|
|
'type' => "wl",
|
|
'name' => $data['name'],
|
|
'abbreviated_name' => $data['abbreviated_name'],
|
|
'staff_id' => $data['id'],
|
|
'image' => json_encode($ft),
|
|
'gender' => "Male",
|
|
'birthday' => "",
|
|
'telephone' => "",
|
|
'address' => $data['department']
|
|
]);
|
|
$finish = $this->getCurrentTime();
|
|
$processTime["insertDB"] = round(($finish - $start), 4);
|
|
if ($totals <= 10)
|
|
common::updateFeature([
|
|
"cmd" => "create",
|
|
"id" => $model->id,
|
|
"object_id" => $model->staff_id,
|
|
"name" => common::convert_vi_to_en($model->name),
|
|
"features" => $model->allFeatures
|
|
]);
|
|
}
|
|
$totalFinish = $this->getCurrentTime();
|
|
$processTime["total"] = round(($totalFinish - $totalStart), 4);
|
|
$processTime["id"] = strval($data['code']);
|
|
return $processTime; //["status" => true];
|
|
}
|
|
}
|
|
|
|
public function actionSyncFeatureFromDevice() {
|
|
if (Yii::$app->request->post()) {
|
|
Yii::$app->response->format = "json";
|
|
$data = Yii::$app->request->post();
|
|
$totals = intval($data['totals']);
|
|
$results = json_decode(file_get_contents("http://" . $data['ip'] . "/api/full-data", false, stream_context_create([
|
|
'http' => [
|
|
'header' => "Content-Type: application/json",
|
|
'method' => "POST",
|
|
'content' => json_encode([$data['id']])
|
|
]
|
|
])), true);
|
|
foreach ($results as $key => $value) {
|
|
$images = [];
|
|
$imagesReverse = array_reverse($value['images']);
|
|
foreach ($imagesReverse as $k => $v) {
|
|
if ($k < Yii::$app->params['maxPicture']) {
|
|
$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($v['url']));
|
|
$images[] = [
|
|
"url" => $fileName,
|
|
"urlOld" => $fileName,
|
|
"features" => $v['features'],
|
|
"features512" => isset($v['features512']) ? $v['features512'] : []
|
|
];
|
|
}
|
|
}
|
|
$model = ListManagement::findOne(['code' => $value['code']]);
|
|
if ($model) {
|
|
$model->type = $value['type'];
|
|
$model->name = $value['name'];
|
|
$model->image = json_encode($images);
|
|
$model->gender = $value['gender'];
|
|
$model->birthday = $value['birthday'];
|
|
$model->telephone = $value['telephone'];
|
|
$model->address = $value['department'];
|
|
$model->save();
|
|
if ($totals <= 10)
|
|
common::updateFeature([
|
|
"cmd" => "update",
|
|
"id" => $model->id,
|
|
"object_id" => $model->staff_id,
|
|
"name" => common::convert_vi_to_en($model->name),
|
|
"features" => $model->allFeatures
|
|
]);
|
|
} else {
|
|
$model = new ListManagement();
|
|
$model->create([
|
|
'code' => $value['code'],
|
|
'type' => $value['type'],
|
|
'name' => $value['name'],
|
|
'image' => json_encode($images),
|
|
'gender' => $value['gender'],
|
|
'birthday' => date("d/m/Y", $value['birthday']),
|
|
'telephone' => $value['telephone'],
|
|
'address' => $value['department'],
|
|
'time' => $value['time']
|
|
]);
|
|
if ($totals <= 10)
|
|
common::updateFeature([
|
|
"cmd" => "create",
|
|
"id" => $model->id,
|
|
"object_id" => $model->staff_id,
|
|
"name" => common::convert_vi_to_en($model->name),
|
|
"features" => $model->allFeatures
|
|
]);
|
|
}
|
|
}
|
|
return ["status" => true];
|
|
}
|
|
}
|
|
|
|
public function actionUpdateFeature() {
|
|
if (Yii::$app->request->isAjax) {
|
|
Yii::$app->response->format = "json";
|
|
file_get_contents("http://localhost:2305/update-feature?total=" . ListManagement::find()->count());
|
|
return ["status" => true];
|
|
}
|
|
}
|
|
|
|
public function actionChooseStaff() {
|
|
if (Yii::$app->request->post()) {
|
|
$post = Yii::$app->request->post();
|
|
$staff = ListManagement::findOne(['id' => $post['code']]);
|
|
Yii::$app->response->format = "json";
|
|
return [
|
|
"name" => $staff->name,
|
|
"gender" => $staff->gender,
|
|
"birthday" => date("d/m/Y", $staff->birthday),
|
|
"telephone" => $staff->telephone,
|
|
"department" => $staff->address,
|
|
"abbreviated_name" => $staff->abbreviated_name
|
|
];
|
|
}
|
|
}
|
|
|
|
public function actionSyncToServer() {
|
|
if (Yii::$app->request->isAjax) {
|
|
Yii::$app->response->format = "json";
|
|
$datas = ListManagement::find()->orderBy(["code" => SORT_ASC])->all();
|
|
$filters = [];
|
|
foreach ($datas as $key => $value) {
|
|
$filters[$value->staff_id] = $value->code . " - " . $value->name . " - " . $value->address;
|
|
}
|
|
return [
|
|
"title" => "<i class='fa fa-upload'></i> " . Yii::t("app", "DONG_BO_LEN_MAY_CHU"),
|
|
"form" => $this->renderPartial("list-to-server", [
|
|
"datas" => $datas,
|
|
"filters" => $filters
|
|
])
|
|
];
|
|
}
|
|
}
|
|
|
|
public function actionSyncFeatureToServer() {
|
|
if (Yii::$app->request->post()) {
|
|
Yii::$app->response->format = "json";
|
|
$server_ip = \app\models\SyncUrl::findOne(['key_config' => 'server_api']);
|
|
$ip = "https://dev-dc.beetai.com";
|
|
if ($server_ip)
|
|
$ip = $server_ip->data;
|
|
$device_id = \app\models\SyncUrl::findOne(['key_config' => 'device_id']);
|
|
$id_camera = 0;
|
|
if ($device_id)
|
|
$id_camera = intval($device_id->data);
|
|
|
|
$StaffInfo = ListManagement::findOne(["staff_id" => Yii::$app->request->post("id")]);
|
|
$lsImgs = json_decode($StaffInfo->image, true);
|
|
$images = [];
|
|
foreach ($lsImgs as $key => $value) {
|
|
if (!isset($value['serverKey']) || (isset($value['serverKey']) && $value['serverKey'] == "")) {
|
|
try {
|
|
$images[] = base64_encode(file_get_contents("/var/www/html/BiFace_Server_Lite/web/data/uploads/face/" . $value['url']));
|
|
} catch (\Exception $e) {
|
|
|
|
}
|
|
}
|
|
}
|
|
if (count($images) == 0)
|
|
return ["status" => true, "text" => Yii::t("app", "DU_LIEU_KHONG_DOI")];
|
|
|
|
$items = [
|
|
"id" => $StaffInfo->staff_id,
|
|
"name" => $StaffInfo->name,
|
|
"abbreviated_name" => $StaffInfo->abbreviated_name,
|
|
"code" => $StaffInfo->code,
|
|
"department" => $StaffInfo->address,
|
|
"birthday" => date("Y-m-d", $StaffInfo->birthday),
|
|
"gender" => $StaffInfo == "Male" ? 1 : 0,
|
|
"telephone" => $StaffInfo->telephone,
|
|
"images" => $images
|
|
];
|
|
$start = $this->getCurrentTime();
|
|
try {
|
|
$res = json_decode(file_get_contents($ip . "/api/oem/data_sync_pro", false, stream_context_create([
|
|
'http' => [
|
|
'header' => "Content-Type: application/json",
|
|
'method' => "POST",
|
|
'content' => json_encode([
|
|
"id_camera" => $id_camera,
|
|
"items" => [$items]
|
|
])
|
|
]
|
|
])), true);
|
|
if ($res['status'] == 10000) {
|
|
$resData = $res['data'];
|
|
for ($i = 0; $i < count($lsImgs); $i++) {
|
|
$lsImgs[$i]['serverKey'] = isset($resData[$i]) ? $resData[$i] : "";
|
|
}
|
|
$StaffInfo->image = json_encode($lsImgs);
|
|
$StaffInfo->save();
|
|
}
|
|
} catch (\Exception $e) {
|
|
|
|
}
|
|
$finish = $this->getCurrentTime();
|
|
$processTime = round(($finish - $start), 4);
|
|
return $processTime; //$res; //["status" => true];
|
|
}
|
|
}
|
|
|
|
public function resizeImg($img, $fileTarget) {
|
|
$im = imagecreatefromstring($img);
|
|
$width = imagesx($im);
|
|
$height = imagesy($im);
|
|
$newwidth = 224;
|
|
$newheight = 224;
|
|
if ($width > $newwidth && $height > $newheight) {
|
|
$thumb = imagecreatetruecolor($newwidth, $newheight);
|
|
imagecopyresized($thumb, $im, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
|
|
imagejpeg($thumb, $fileTarget);
|
|
imagedestroy($thumb);
|
|
imagedestroy($im);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function actionTest() {
|
|
return file_get_contents("http://minio1.beetai.com/biface-school/origin/385/454_20201126101221879048.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minioadmin%2F20201230%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20201230T081350Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=df7586a01bb128c0585edd87d1024b1ddb33483fd335e81238103fd2467b4772");
|
|
}
|
|
|
|
public function actionSchedule() {
|
|
Yii::$app->response->format = "json";
|
|
if (Yii::$app->request->post()) {
|
|
$post = Yii::$app->request->post();
|
|
$model = new \app\models\Schedule();
|
|
$datas = [];
|
|
foreach ($post['lists'] as $key => $value) {
|
|
$datas[] = [$value, $post['fromTime'], $post['toTime'], $post['fromDate'], $post['toDate'], implode(",", $post['dateOfWeek'])];
|
|
}
|
|
$model->multiCreate($datas);
|
|
return ["status" => true];
|
|
} else {
|
|
return [
|
|
"title" => Yii::t("app", "GAN_LICH_TRINH"),
|
|
"form" => $this->renderPartial("schedule", ["type" => "create"])
|
|
];
|
|
}
|
|
}
|
|
|
|
public function actionEditSchedule($id) {
|
|
Yii::$app->response->format = "json";
|
|
$model = \app\models\Schedule::findOne($id);
|
|
if (Yii::$app->request->post()) {
|
|
$post = Yii::$app->request->post();
|
|
$dateOfWeek = implode(",", $post['dateOfWeek']);
|
|
if ($post['editAll'] == "true" && isset($post['lists'])) {
|
|
foreach ($post['lists'] as $key => $value) {
|
|
$schedule = \app\models\Schedule::findOne([
|
|
'from_time' => $model->from_time,
|
|
'to_time' => $model->to_time,
|
|
'from_date' => $model->from_date,
|
|
'to_date' => $model->to_date,
|
|
'date_of_week' => $model->date_of_week,
|
|
'staff_id' => $value
|
|
]);
|
|
if ($schedule) {
|
|
$schedule->from_time = $post['fromTime'];
|
|
$schedule->to_time = $post['toTime'];
|
|
$schedule->from_date = $post['fromDate'];
|
|
$schedule->to_date = $post['toDate'];
|
|
$schedule->date_of_week = $dateOfWeek;
|
|
$schedule->save();
|
|
} else {
|
|
$modelSchedule = new \app\models\Schedule();
|
|
$modelSchedule->create([
|
|
'staff_id' => $value,
|
|
'from_time' => $post['fromTime'],
|
|
'to_time' => $post['toTime'],
|
|
'from_date' => $post['fromDate'],
|
|
'to_date' => $post['toDate'],
|
|
'date_of_week' => $dateOfWeek
|
|
]);
|
|
}
|
|
}
|
|
} else {
|
|
$model->from_time = $post['fromTime'];
|
|
$model->to_time = $post['toTime'];
|
|
$model->from_date = $post['fromDate'];
|
|
$model->to_date = $post['toDate'];
|
|
$model->date_of_week = $dateOfWeek;
|
|
$model->save();
|
|
}
|
|
return ["status" => true];
|
|
} else {
|
|
return [
|
|
"title" => Yii::t("app", "SUA_LICH_TRINH"),
|
|
"form" => $this->renderPartial("schedule", [
|
|
"type" => "edit",
|
|
"model" => $model
|
|
])
|
|
];
|
|
}
|
|
}
|
|
|
|
public function actionDeleteSchedule($id) {
|
|
Yii::$app->response->format = "json";
|
|
$model = \app\models\Schedule::findOne($id);
|
|
if (Yii::$app->request->post()) {
|
|
$post = Yii::$app->request->post();
|
|
if ($post['editAll'] == "true" && isset($post['lists'])) {
|
|
foreach ($post['lists'] as $key => $value) {
|
|
$schedule = \app\models\Schedule::findOne([
|
|
'from_time' => $model->from_time,
|
|
'to_time' => $model->to_time,
|
|
'from_date' => $model->from_date,
|
|
'to_date' => $model->to_date,
|
|
'date_of_week' => $model->date_of_week,
|
|
'staff_id' => $value
|
|
]);
|
|
if ($schedule)
|
|
$schedule->delete();
|
|
}
|
|
} else
|
|
$model->delete();
|
|
|
|
return ["status" => true];
|
|
} else {
|
|
return [
|
|
"title" => Yii::t("app", "XOA_LICH_TRINH"),
|
|
"form" => $this->renderPartial("schedule-delete", [
|
|
"model" => $model
|
|
])
|
|
];
|
|
}
|
|
}
|
|
|
|
}
|