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); } }