This commit is contained in:
parent
d3b1927b3e
commit
b902a5d65e
|
|
@ -14,4 +14,7 @@ vendor/
|
|||
.vscode/
|
||||
/phpstan.neon
|
||||
/phpunit.xml
|
||||
composer.lock
|
||||
composer.lock
|
||||
/static/export
|
||||
/static/super
|
||||
/static/upload
|
||||
|
|
@ -836,4 +836,13 @@ class System extends Base
|
|||
$res = amModel::where(['mess_id' => $param['id'], 'account_id' => $this->accountId()])->delete();
|
||||
return $this->toAjax($res);
|
||||
}
|
||||
|
||||
#[DeleteMapping(path: "message/clear")]
|
||||
#[Auth(needAuth: false)]
|
||||
public function messageClear()
|
||||
{
|
||||
$param = Param::only(['type' => '']);
|
||||
$param['account_id'] = $this->accountId();
|
||||
return $this->toAjax(amModel::clearAll($param));
|
||||
}
|
||||
}
|
||||
|
|
@ -272,12 +272,14 @@ class Tools extends Base
|
|||
}
|
||||
|
||||
#[GetMapping(path: "file/export")]
|
||||
#[Auth(auth: "file:export")]
|
||||
#[Auth(needAuth: false)]
|
||||
public function messageExport()
|
||||
{
|
||||
$param = Param::only(["module" => "demo", "name" => "数据导出", "params" => []]);
|
||||
$res = aModel::add([
|
||||
'account_id' => $this->accountId(),
|
||||
'account_type' => $this->account()['account_type'],
|
||||
'belong_id' => $this->account()['belong_id'],
|
||||
'name' => $param['name'],
|
||||
'module' => $param['module'],
|
||||
'params' => json_encode($param['params'], true),
|
||||
|
|
@ -285,7 +287,31 @@ class Tools extends Base
|
|||
'create_time' => date("Y-m-d H:i:s")
|
||||
]);
|
||||
if (!$res) return $this->error("导出任务创建失败");
|
||||
QueueClient::push("App\Job\FileExportJob", ['messageId' => $res, 'channels' => ['websocket', 'email']]);
|
||||
QueueClient::push("App\Job\FileExportJob", ['attachmentId' => $res]);
|
||||
return $this->success("导出任务创建成功");
|
||||
}
|
||||
|
||||
#[GetMapping(path: "attachment/list")]
|
||||
#[Auth(needAuth: false)]
|
||||
public function attachmentList()
|
||||
{
|
||||
$param = Param::only(["limit" => 10]);
|
||||
$param['account_id'] = $this->accountId();
|
||||
return $this->success("列表接口", aModel::list($param));
|
||||
}
|
||||
|
||||
#[DeleteMapping(path: "attachment/del")]
|
||||
#[Auth(needAuth: false)]
|
||||
public function attachmentDel()
|
||||
{
|
||||
$ids = $this->request->input("ids");
|
||||
return $this->toAjax(aModel::del($ids));
|
||||
}
|
||||
|
||||
#[DeleteMapping(path: "attachment/clear")]
|
||||
#[Auth(needAuth: false)]
|
||||
public function attachmentClear()
|
||||
{
|
||||
return $this->toAjax(aModel::where("account_id", $this->accountId())->delete());
|
||||
}
|
||||
}
|
||||
|
|
@ -2,9 +2,12 @@
|
|||
|
||||
namespace App\Job;
|
||||
|
||||
use App\Utils\Excel;
|
||||
use App\Utils\QueueClient;
|
||||
use Hyperf\AsyncQueue\Job;
|
||||
use App\Model\Attachment as aModel;
|
||||
use App\Model\Post as pModel;
|
||||
use App\Model\Message as mModel;
|
||||
|
||||
class FileExportJob extends Job
|
||||
{
|
||||
|
|
@ -19,21 +22,37 @@ class FileExportJob extends Job
|
|||
public function handle()
|
||||
{
|
||||
try {
|
||||
sleep(10);
|
||||
$attach = aModel::find($this->attachmentId);
|
||||
if (empty($attach)) return false;
|
||||
// 参数解析
|
||||
$params = $attach->params ? json_decode($attach->params, true) : [];
|
||||
// 导出类型 默认excel
|
||||
$type = "excel";
|
||||
switch ($attach->module) {
|
||||
case "post_export":
|
||||
$res = pModel::exportData($attach->params);
|
||||
$res = true;
|
||||
list($header, $data) = pModel::list($attach->belong_id, $attach->account_type, $params['post_name'] ?? "", true);
|
||||
$res = Excel::exportData($attach->name, $header, $data);
|
||||
break;
|
||||
default:
|
||||
throw new \Exception("导出模块不存在");
|
||||
}
|
||||
aModel::edit([
|
||||
'attachment_id' => $this->attachmentId,
|
||||
'status' => $res ? 1 : 2,
|
||||
'fail_reason' => $res ? "" : "导出失败"
|
||||
if (!$res) {
|
||||
return aModel::edit(['attachment_id' => $this->attachmentId, 'status' => 2, 'fail_reason' => "导出失败"]);
|
||||
}
|
||||
aModel::edit(['attachment_id' => $this->attachmentId, 'status' => 1, 'type' => $type, 'path' => $res]);
|
||||
// 导出成功,消息通知
|
||||
$data['type'] = 'system';
|
||||
$id = mModel::add([
|
||||
'type' => 'attach',
|
||||
'title' => $attach->name . " [执行成功]",
|
||||
'content' => '执行成功',
|
||||
'create_id' => $attach->account_id,
|
||||
]);
|
||||
if ($id) {
|
||||
QueueClient::push("App\Job\NotifyJob", ['messageId' => $id, 'channels' => ['websocket', 'email'], 'userIds' => [$attach->account_id]]);
|
||||
}
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
aModel::edit([
|
||||
'attachment_id' => $this->attachmentId,
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ class AccountMessage extends Model
|
|||
->orderBy("am.read_flag")
|
||||
->orderByDesc("am.mess_id")
|
||||
->select(['am.mess_id', 'am.read_flag', 'am.create_time', 'm.title', 'm.extra'])
|
||||
->paginate($param['limit']);
|
||||
->paginate((int)$param['limit']);
|
||||
}
|
||||
|
||||
public static function read(array $param)
|
||||
|
|
@ -79,4 +79,15 @@ class AccountMessage extends Model
|
|||
->select(['am.mess_id', 'am.create_time', 'm.title', 'm.content', 'm.extra', 'm.type', 'a.nickname'])
|
||||
->first();
|
||||
}
|
||||
|
||||
public static function clearAll(array $param)
|
||||
{
|
||||
return (new self())->setTable("am")
|
||||
->from("account_message as am")
|
||||
->leftJoin("message as m", "m.message_id", "=", "am.message_id")
|
||||
->where("am.read_flag", 1)
|
||||
->where("am.account_id", $param['account_id'])
|
||||
->where("m.type", $param['type'])
|
||||
->delete();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,18 +5,20 @@ declare(strict_types=1);
|
|||
namespace App\Model;
|
||||
|
||||
/**
|
||||
* @property int $attachment_id
|
||||
* @property int $account_id
|
||||
* @property string $name
|
||||
* @property string $module
|
||||
* @property string $params
|
||||
* @property string $type
|
||||
* @property string $path
|
||||
* @property int $status
|
||||
* @property string $fail_reason
|
||||
* @property string $deleted_at
|
||||
* @property string $create_time
|
||||
* @property string $update_time
|
||||
* @property int $attachment_id
|
||||
* @property int $account_type
|
||||
* @property int $belong_id
|
||||
* @property int $account_id
|
||||
* @property string $name
|
||||
* @property string $module
|
||||
* @property string $params
|
||||
* @property string $type
|
||||
* @property string $path
|
||||
* @property int $status
|
||||
* @property string $fail_reason
|
||||
* @property string $deleted_at
|
||||
* @property string $create_time
|
||||
* @property string $update_time
|
||||
*/
|
||||
class Attachment extends Model
|
||||
{
|
||||
|
|
@ -35,5 +37,28 @@ class Attachment extends Model
|
|||
/**
|
||||
* The attributes that should be cast to native types.
|
||||
*/
|
||||
protected array $casts = ['attachment_id' => 'integer', 'account_id' => 'integer', 'status' => 'integer'];
|
||||
protected array $casts = ['attachment_id' => 'integer', 'account_id' => 'integer', 'status' => 'integer', 'account_type' => 'integer', 'belong_id' => 'integer'];
|
||||
|
||||
public static function list(array $param)
|
||||
{
|
||||
$model = self::query();
|
||||
if (isset($param['account_id']) && $param['account_id'] != '') {
|
||||
$model = $model->where('account_id', $param['account_id']);
|
||||
}
|
||||
if (isset($param['name']) && $param['name'] != '') {
|
||||
$model = $model->where('name', "like", "%{$param['name']}%");
|
||||
}
|
||||
if (isset($param['module']) && $param['module'] != '') {
|
||||
$model = $model->where('module', $param['module']);
|
||||
}
|
||||
if (isset($param['type']) && $param['type'] != '') {
|
||||
$model = $model->where('type', $param['type']);
|
||||
}
|
||||
if (isset($param['status']) && $param['status'] != '') {
|
||||
$model = $model->where('status', $param['status']);
|
||||
}
|
||||
return $model->orderByDesc("attachment_id")
|
||||
->select(["attachment_id", "name", "type", "path", "status", "fail_reason", "create_time"])
|
||||
->paginate((int)$param['limit']);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,15 +5,15 @@ declare(strict_types=1);
|
|||
namespace App\Model;
|
||||
|
||||
/**
|
||||
* @property int $post_id
|
||||
* @property int $account_type
|
||||
* @property int $belong_id
|
||||
* @property int $post_id
|
||||
* @property int $account_type
|
||||
* @property int $belong_id
|
||||
* @property string $post_name
|
||||
* @property int $status
|
||||
* @property int $rank
|
||||
* @property string $create_time
|
||||
* @property string $update_time
|
||||
* @property string $deleted_at
|
||||
* @property string $create_time
|
||||
* @property string $update_time
|
||||
* @property string $deleted_at
|
||||
*/
|
||||
class Post extends Model
|
||||
{
|
||||
|
|
@ -34,23 +34,36 @@ class Post extends Model
|
|||
*/
|
||||
protected array $casts = ['post_id' => 'integer', 'account_type' => 'integer', 'belong_id' => 'integer', 'rank' => 'integer', 'status' => 'integer'];
|
||||
|
||||
public static function list(int $belong_id, int $account_type, string $post_name)
|
||||
public static function list(int $belong_id, int $account_type, string $post_name, bool $export = false): array
|
||||
{
|
||||
$model = self::where('belong_id', $belong_id)
|
||||
->where('account_type', $account_type);
|
||||
if ($post_name != '') {
|
||||
$model = $model->where('post_name', "like", "%$post_name%");
|
||||
}
|
||||
return $model->orderByDesc("rank")->orderByDesc("post_id")
|
||||
->select(["post_id", "post_name", "rank", "status", "create_time"])
|
||||
->get()->toArray();
|
||||
$model = $model->orderByDesc("rank")->orderByDesc("post_id")
|
||||
->select(["post_id", "post_name", "rank", "status", "create_time"]);
|
||||
if (!$export) {
|
||||
// 非导出数据
|
||||
return $model->get()->toArray();
|
||||
}
|
||||
$header = ['岗位名称', '状态', '创建时间'];
|
||||
$data = [];
|
||||
foreach ($model->get() as $row) {
|
||||
$data[] = [
|
||||
$row->post_name,
|
||||
$row->status ? '启用' : '禁用',
|
||||
$row->create_time->format('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
return [$header, $data];
|
||||
}
|
||||
|
||||
public static function options(int $belong_id, int $account_type)
|
||||
{
|
||||
return self::where('belong_id', $belong_id)
|
||||
->where('account_type', $account_type)
|
||||
->where("status",1)
|
||||
->where("status", 1)
|
||||
->orderByDesc("rank")->orderByDesc("post_id")
|
||||
->select(["post_id", "post_name"])
|
||||
->get()->toArray();
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ class Excel
|
|||
$sheet->fromArray($data, '', 'A2');
|
||||
$sheet->getDefaultColumnDimension()->setWidth(12);
|
||||
$date = date("Ymd");
|
||||
$saveDir = BASE_PATH . '/static' . "/export/{$date}/";
|
||||
$saveDir = BASE_PATH . '/static' . "/export/excel/{$date}/";
|
||||
if (!is_dir($saveDir)) {
|
||||
mkdir($saveDir, 0777, true);
|
||||
}
|
||||
|
|
@ -58,7 +58,7 @@ class Excel
|
|||
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
|
||||
$writer->save($saveFile);
|
||||
if (is_file($saveFile)) {
|
||||
return config("app.domain") . "xlsx/{$date}/{$name}.xlsx";
|
||||
return config("app.domain") . "/export/excel/{$date}/{$name}.xlsx";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue