Files
cunkebao_v3/Server/application/backend/controller/TaskController.php
2025-03-12 12:18:06 +08:00

228 lines
7.0 KiB
PHP

<?php
namespace app\backend\controller;
use app\common\model\DeviceModel;
use app\common\model\LogModel;
use app\common\model\TaskDetailModel;
use app\common\model\TaskModel;
class TaskController extends BaseLoginController {
/**
* 获取列表
*
* @return \think\response\Json
*/
public function index() {
$deviceId = intval($this->request->param('device_id'));
$type = trim($this->request->param('type'));
$runType = trim($this->request->param('run_type'));
$status = trim($this->request->param('status'));
$keywords = trim($this->request->param('keywords'));
$pageNo = intval($this->request->param('page'));
$pageSize = intval($this->request->param('pageSize'));
if ($pageNo <= 0) {
$pageNo = 1;
}
if ($pageSize <= 0) {
$pageSize = 30;
}
$query = TaskModel::where(1)
->alias('t1')
->field('t1.*')
->leftJoin(
DeviceModel::where(1)->getTable() . ' t2',
't2.id = t1.device_id')
->where('t1.is_deleted', TaskModel::IS_DELETED_NO);
if (!empty($deviceId)) {
$query->where('t1.device_id', $deviceId);
}
if (isset(TaskModel::typeAssoc()[$type])) {
$query->where('t1.type', $type);
}
if (isset(TaskModel::statusAssoc()[$status])) {
$query->where('t1.status', $status);
}
if (isset(TaskModel::runTypeAssoc()[$runType])) {
$query->where('t1.run_type', $runType);
}
if (!empty($keywords)) {
$query->whereLike('t2.number', '%' . $keywords . '%');
}
$totalCount = $query->count();
$pageCount = $totalCount > 0 ? ceil($totalCount / $pageSize) : 1;
if ($pageNo > $pageCount) {
$pageNo = $pageCount;
}
$query->order('t1.id', 'DESC');
$query->limit(($pageNo - 1) * $pageSize, $pageSize);
$list = [];
foreach ($query->select() as $model) {
$device = $model->device();
$list[] = array_merge($model->toArray(), [
'device_number' => $device ? $device->number : '',
'device_name' => $device ? $device->name : '',
'device_online' => ($device AND $device->isOnline()) ? '在线' : '离线',
'type_name' => TaskModel::typeAssoc()[$model->type],
'run_type_name' => TaskModel::runTypeAssoc()[$model->run_type],
'status_name' => TaskModel::statusAssoc()[$model->status],
]);
}
return $this->jsonSucc([
'list' => $list,
'page' => $pageNo,
'pageCount' => $pageCount,
'totalCount' => $totalCount,
'platforms' => $this->assocToList(TaskModel::platformAssoc()),
'types' => $this->assocToList(TaskModel::typeAssoc()),
'runTypes' => $this->assocToList(TaskModel::runTypeAssoc()),
'statuses' => $this->assocToList(TaskModel::statusAssoc()),
]);
}
/**
* 日志
*
* @return \think\response\Json
*/
public function log() {
$id = intval($this->request->param('id'));
if (empty($id)) {
return $this->jsonFail('参数错误');
}
$detail = TaskDetailModel::where(1)
->where('task_id', $id)
->order('id', 'DESC')
->find();
if (empty($detail)) {
return $this->jsonSucc([]);
}
$list = [];
foreach (LogModel::where(1)
->where('task_id', $detail->id)
->order('id', 'ASC')
->select() as $model) {
$list[] = [
'id' => $model->id,
'type' => $model->type,
'message' => $model->message,
'create_time' => $model->create_time,
];
}
return $this->jsonSucc($list);
}
/**
* 保存
*
* @return \think\response\Json
*/
public function save() {
$devices = $this->request->param('devices');
$platform = trim($this->request->param('platform'));
$type = trim($this->request->param('type'));
$runType = trim($this->request->param('run_type'));
$runTime = trim($this->request->param('run_time'));
if (empty($devices)
OR !is_array($devices)
OR !isset(TaskModel::platformAssoc()[$platform])
OR !isset(TaskModel::typeAssoc()[$type])
OR !isset(TaskModel::runTypeAssoc()[$runType])) {
return $this->jsonFail('参数错误');
}
$timeTypes = [TaskModel::RUN_TYPE_TIMER, TaskModel::RUN_TYPE_DAILY];
if (in_array($runType, $timeTypes)
AND empty($runTime)) {
return $this->jsonFail('参数错误');
}
$params = call_user_func_array(TaskModel::taskClasses()[$type] . '::params', [$this->request]);
if (is_null($params)) {
return $this->jsonFail('参数错误');
}
foreach ($devices as $deviceId) {
$model = new TaskModel();
$model->platform = $platform;
$model->type = $type;
$model->device_id = $deviceId;
$model->params = $params;
$model->run_type = $runType;
$model->run_time = in_array($runType, $timeTypes) ? $runTime : '';
$model->save();
}
return $this->jsonSucc();
}
/**
* 删除
*
* @return \think\response\Json
*/
public function delete() {
$id = intval($this->request->param('id'));
if (empty($id)) {
return $this->jsonFail('参数错误');
}
$model = TaskModel::get($id);
if (empty($model)) {
return $this->jsonFail('对象未找到');
}
TaskDetailModel::where(1)
->where('task_id', $model->id)
->update([
'is_deleted' => TaskModel::IS_DELETED_YES,
]);
$model->is_deleted = TaskModel::IS_DELETED_YES;
$model->save();
return $this->jsonSucc();
}
/**
* 批量删除
*
* @return \think\response\Json
*/
public function batchDelete() {
$ids = $this->request->param('ids');
if (empty($ids) OR !is_array($ids)) {
return $this->jsonFail('参数错误');
}
TaskDetailModel::where(1)
->whereIn('task_id', $ids)
->update([
'is_deleted' => TaskModel::IS_DELETED_YES,
]);
TaskModel::where(1)
->whereIn('id', $ids)
->update([
'is_deleted' => TaskModel::IS_DELETED_YES,
]);
return $this->jsonSucc();
}
/**
* 获取执行方式
*
* @return \think\response\Json
*/
public function runTypeAssoc() {
return $this->jsonSucc($this->assocToList(TaskModel::runTypeAssoc()));
}
}