123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- <?php
- namespace App\Http\Admin;
- use App\Http\Admin\Requests\AssembleForm;
- use Txj\Elastic\Table\Assemble;
- use Illuminate\Database\Schema\Blueprint;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Schema;
- class AssembleController extends AdminBaseController
- {
- public function __construct()
- {
- parent::__construct();
- if (PHP_SAPI != 'cli') {
- $this->setWebsite(__NAMESPACE__);
- $this->isLoginJson();
- }
- }
- /**
- * 集合列表
- */
- public function showList(Request $request)
- {
- $currentPage = $request->post('page', 1);
- $size = $request->post('size', 20);
- $title = $request->post('title');
- $find = DB::table('sys_assemble');
- $find->where('is_delete', 0);
- $find->orderBy('id', 'desc');
- if ($title) {
- // 转义特殊字符
- $title = str_replace("_", "\_", $title);
- $title = str_replace("*", "\*", $title);
- $find->where('title', 'like', '%' . $title . '%');
- $find->orWhere('schema', 'like', '%' . $title . '%');
- }
- // dd($find->toSql());
- $total = $find->count();
- $list = $find->offset(($currentPage - 1) * $size)->limit($size)->get();
- return responseMessage(1002, 'success', ['list' => $list, 'total' => $total]);
- }
- public function info(Request $request)
- {
- $mid = $request->post('mid');
- if (empty($mid)) {
- return responseMessage(2001, '参数错误!');
- }
- $info = DB::table('sys_assemble')->where('mid', $mid)->first();
- if ($info) {
- return responseMessage(1002, '', get_object_vars($info));
- } else {
- return responseMessage(2001, '数据不存在,请重试!');
- }
- }
- /**
- * 通过id获取信息
- * @param Request $request
- * @return JsonResponse
- */
- public function infoById(Request $request)
- {
- $id = $request->post('id');
- if (empty($id)) {
- return responseMessage(2001, '参数错误!');
- }
- $info = DB::table('sys_assemble')->find($id);
- if ($info) {
- return responseMessage(1002, '', $info);
- } else {
- return responseMessage(2001, '数据不存在,请重试!');
- }
- }
- /**
- * @param AssembleForm $request
- * @return JsonResponse
- */
- public function save(AssembleForm $request)
- {
- $isUpdate = false;
- $table = 'sys_assemble';
- $schema = strtolower($request->post('schema'));
- $data = [
- 'title' => $request->post('title'),
- 'schema' => $schema,
- 'connect_db_id' => $request->post('connect_db_id'),
- 'remark' => $request->post('remark'),
- 'updated_at' => time()
- ];
- if ($id = $request->post('id')) {
- // 获取信息
- $info = DB::table($table)->find($id);
- if ($info) {
- if ($info->schema != $schema) {
- $isUpdate = true;
- }
- $isSuccess = DB::table($table)->where('id', $id)->update($data);
- } else {
- return responseMessage(2001, '数据不存在,请重试!');
- }
- } else {
- // 判断名称是否唯一
- $isExist = DB::table($table)->where('schema', $schema)->count();
- if ($isExist) {
- return responseMessage(2002, '该集合名称已经存在!');
- }
- $data['mid'] = getRandNumber();
- $data['created_at'] = time();
- $isSuccess = DB::table($table)->insertGetId($data);
- }
- // 清除旧索引的缓存
- $assemble = new Assemble($schema);
- $assemble->clearColumnsCache();
- if ($isSuccess) {
- if ($isUpdate) {
- // 其他扩展表的表名,也需要修改
- $columnList = DB::table('sys_assemble_column')->where('assemble_id', $id)->get();
- foreach ($columnList as $row) {
- $table = preg_replace('/^' . $info->schema . '/', $data['schema'], $row->table);
- DB::table('sys_assemble_column')->where('id', $row->id)->update(['table' => $table]);
- }
- $tableArr = array_map('get_object_vars', $columnList->toArray());
- $tableArr = array_column($tableArr, 'table');
- $tableArr = array_unique($tableArr);
- foreach ($tableArr as $row) {
- $table = preg_replace('/^' . $info->schema . '/', $data['schema'], $row);
- Schema::rename($row, $table);
- }
- } else {
- if (!Schema::hasTable($data['schema'])) {
- Schema::create($data['schema'], function (Blueprint $table) {
- $table->id('id')->comment('编号');
- $table->string('mid', 16)->comment('唯一标识符'); // 随机
- $table->decimal('weight')->default(0)->comment('排序,权重');
- $table->tinyInteger('is_delete')->unsigned()->default(0)->comment('是否删除 1 删除');
- $table->unsignedBigInteger('created_at', false)->unsigned()->comment('创建时间,时间戳');
- $table->unsignedBigInteger('updated_at', false)->unsigned()->comment('更新时间,时间戳');
- });
- // 插入默认的系统字段
- $this->initData($isSuccess);
- }
- }
- return responseMessage(1001, '操作成功!');
- } else {
- return responseMessage(2001, '操作失败!');
- }
- }
- /**
- * 保存es索引信息
- *
- * @param Request $request
- * @return JsonResponse
- */
- public function saveEsIndex(Request $request)
- {
- $esIndex = $request->post('es_index');
- $id = $request->post('id');
- if (empty($id)) {
- return responseMessage(2001, '参数错误!');
- }
- if (empty($esIndex)) {
- return responseMessage(2002, '参数错误!');
- }
- $existInfo = DB::table('sys_assemble')->find($id);
- if (empty($existInfo)) {
- return responseMessage(2003, '参数错误!');
- }
- // 清除旧索引的缓存
- $assemble = new Assemble($existInfo->schema);
- $assemble->clearColumnsCache();
- $info = DB::table('sys_assemble')->where('id', $id)->update(['es_index' => $esIndex, 'updated_at' => time()]);
- if ($info) {
- return responseMessage(1001, '保存成功!');
- } else {
- return responseMessage(2001, '数据不存在,请重试!');
- }
- }
- /**
- * 删除集合
- */
- public function deleteItem()
- {
- $id = $this->requestData['id'] ?? '';
- if (empty($id)) {
- return responseMessage(2001, '参数错误!');
- }
- return $this->fakeDeleteData('sys_assemble', [['id', '=', $id]]);
- }
- private function initData(int $assembleId)
- {
- $data = [
- [
- 'mid' => getRandNumber(12),
- 'assemble_id' => $assembleId,
- 'title' => '编号',
- 'code' => 'id',
- 'type' => 'uBigint',
- 'length' => 20,
- 'decimal' => 0,
- 'is_null' => 0, //是否可以为空 1是 0否
- 'is_unsigned' => 1, //是否为无符号类型 1是 0否
- 'default' => '',
- 'remark' => '',
- 'weight' => 0,
- 'is_delete' => 0,
- 'created_at' => time(),
- 'updated_at' => time(),
- ],
- [
- 'mid' => getRandNumber(12),
- 'assemble_id' => $assembleId,
- 'title' => '唯一标识符',
- 'code' => 'mid',
- 'type' => 'varchar',
- 'length' => 255,
- 'decimal' => 0,
- 'is_null' => 0, //是否可以为空 1是 0否
- 'is_unsigned' => 0, //是否为无符号类型 1是 0否
- 'default' => '',
- 'remark' => '',
- 'weight' => 0,
- 'is_delete' => 0,
- 'created_at' => time(),
- 'updated_at' => time(),
- ],
- [
- 'mid' => getRandNumber(12),
- 'assemble_id' => $assembleId,
- 'title' => '权重',
- 'code' => 'weight',
- 'type' => 'decimal',
- 'length' => 8,
- 'decimal' => 2,
- 'is_null' => 0, //是否可以为空 1是 0否
- 'is_unsigned' => 1, //是否为无符号类型 1是 0否
- 'default' => 0,
- 'remark' => '',
- 'weight' => 0,
- 'is_delete' => 0,
- 'created_at' => time(),
- 'updated_at' => time(),
- ],
- [
- 'mid' => getRandNumber(12),
- 'assemble_id' => $assembleId,
- 'title' => '是否删除',
- 'code' => 'is_delete',
- 'type' => 'tinyint',
- 'length' => 3,
- 'decimal' => 0,
- 'is_null' => 0, //是否可以为空 1是 0否
- 'is_unsigned' => 1, //是否为无符号类型 1是 0否
- 'default' => 0,
- 'remark' => '',
- 'weight' => 0,
- 'is_delete' => 0,
- 'created_at' => time(),
- 'updated_at' => time(),
- ],
- [
- 'mid' => getRandNumber(12),
- 'assemble_id' => $assembleId,
- 'title' => '添加时间',
- 'code' => 'created_at',
- 'type' => 'date_es',
- 'length' => 10,
- 'decimal' => 0,
- 'is_null' => 0, //是否可以为空 1是 0否
- 'is_unsigned' => 1, //是否为无符号类型 1是 0否
- 'default' => '',
- 'remark' => '',
- 'weight' => 0,
- 'is_delete' => 0,
- 'created_at' => time(),
- 'updated_at' => time(),
- ],
- [
- 'mid' => getRandNumber(12),
- 'assemble_id' => $assembleId,
- 'title' => '修改时间',
- 'code' => 'updated_at',
- 'type' => 'date_es',
- 'length' => 10,
- 'decimal' => 0,
- 'is_null' => 0, //是否可以为空 1是 0否
- 'is_unsigned' => 1, //是否为无符号类型 1是 0否
- 'default' => '',
- 'remark' => '',
- 'weight' => 0,
- 'is_delete' => 0,
- 'created_at' => time(),
- 'updated_at' => time(),
- ],
- ];
- DB::table('sys_assemble_column')->insert($data);
- }
- }
|