generated from liutk/owl-admin-base
Update
parent
735b94ae26
commit
ac0e1c616f
|
|
@ -5,6 +5,7 @@ namespace App\Admin\Controllers\Plan;
|
||||||
use App\Admin\Controllers\AdminController;
|
use App\Admin\Controllers\AdminController;
|
||||||
use App\Admin\Services\Plan\PlanService;
|
use App\Admin\Services\Plan\PlanService;
|
||||||
use App\Enums\PlanStatus;
|
use App\Enums\PlanStatus;
|
||||||
|
use App\Enums\TaskStatus;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Slowlyo\OwlAdmin\Admin;
|
use Slowlyo\OwlAdmin\Admin;
|
||||||
use Slowlyo\OwlAdmin\Renderers\Form;
|
use Slowlyo\OwlAdmin\Renderers\Form;
|
||||||
|
|
@ -161,6 +162,28 @@ class PlanController extends AdminController
|
||||||
public function detail(): Form
|
public function detail(): Form
|
||||||
{
|
{
|
||||||
return $this->baseDetail()->title('')->body([
|
return $this->baseDetail()->title('')->body([
|
||||||
|
amis()->Property()->items([
|
||||||
|
['label' => __('plan.plan.name'), 'content' => '${name}'],
|
||||||
|
['label' => __('plan.plan.type'), 'content' => amis()->Mapping()->name('planable_type')->map($this->planableTypeLabelMap)],
|
||||||
|
['label' => __('plan.plan.status'), 'content' => amis()->Mapping()->name('plan_status')->map(PlanStatus::labelMap())],
|
||||||
|
]),
|
||||||
|
|
||||||
|
amis()->Divider(),
|
||||||
|
|
||||||
|
// 总账录入
|
||||||
|
amis()->CRUDTable()
|
||||||
|
->api(admin_url('api/tasks?plan_id=${id}'))
|
||||||
|
->columns([
|
||||||
|
amis()->TableColumn('id', __('plan.task.id')),
|
||||||
|
amis()->TableColumn('name', __('plan.task.name')),
|
||||||
|
amis()->TableColumn('taskable.date', __('plan.task_ledger.date')),
|
||||||
|
amis()->TableColumn('taskable.store.title', __('plan.task_ledger.store')),
|
||||||
|
amis()->TableColumn('taskable.store.master.name', __('plan.task_ledger.store_master')),
|
||||||
|
amis()->TableColumn('task_status', __('plan.task.status'))->type('mapping')->map(TaskStatus::labelMap()),
|
||||||
|
amis()->TableColumn('completed_at', __('plan.task.completed_at')),
|
||||||
|
amis()->TableColumn('created_at', __('plan.task.created_at')),
|
||||||
|
])
|
||||||
|
->visibleOn('${planable_type == "plan_ledgers"}'),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Controllers\Plan;
|
||||||
|
|
||||||
|
use App\Admin\Controllers\AdminController;
|
||||||
|
use App\Admin\Filters\TaskFilter;
|
||||||
|
use App\Admin\Services\Plan\TaskService;
|
||||||
|
use App\Models\Task;
|
||||||
|
use App\Models\TaskLedger;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @property TaskService $service
|
||||||
|
*/
|
||||||
|
class TaskController extends AdminController
|
||||||
|
{
|
||||||
|
protected string $serviceName = TaskService::class;
|
||||||
|
|
||||||
|
public function shareList(Request $request)
|
||||||
|
{
|
||||||
|
$tasks = Task::filter($request->input(), TaskFilter::class)
|
||||||
|
->with([
|
||||||
|
'taskable' => function (MorphTo $morphTo) {
|
||||||
|
$morphTo->morphWith([
|
||||||
|
TaskLedger::class => ['store.master'],
|
||||||
|
]);
|
||||||
|
},
|
||||||
|
])
|
||||||
|
->latest('id')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
return $this->response()->success($tasks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Filters;
|
||||||
|
|
||||||
|
use EloquentFilter\ModelFilter;
|
||||||
|
|
||||||
|
class TaskFilter extends ModelFilter
|
||||||
|
{
|
||||||
|
public function plan($id)
|
||||||
|
{
|
||||||
|
$this->where('plan_id', $id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin\Services\Plan;
|
||||||
|
|
||||||
|
use App\Admin\Filters\TaskFilter;
|
||||||
|
use App\Admin\Services\BaseService;
|
||||||
|
use App\Models\Task;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @method Task getModel()
|
||||||
|
* @method Task|Builder query()
|
||||||
|
*/
|
||||||
|
class TaskService extends BaseService
|
||||||
|
{
|
||||||
|
protected string $modelName = Task::class;
|
||||||
|
|
||||||
|
protected string $modelFilterName = TaskFilter::class;
|
||||||
|
}
|
||||||
|
|
@ -20,6 +20,7 @@ use App\Admin\Controllers\Hr\SignController;
|
||||||
use App\Admin\Controllers\Hr\SignLogController;
|
use App\Admin\Controllers\Hr\SignLogController;
|
||||||
use App\Admin\Controllers\Hr\SignRepairController;
|
use App\Admin\Controllers\Hr\SignRepairController;
|
||||||
use App\Admin\Controllers\Plan\PlanController;
|
use App\Admin\Controllers\Plan\PlanController;
|
||||||
|
use App\Admin\Controllers\Plan\TaskController;
|
||||||
use App\Admin\Controllers\Store\DeviceController;
|
use App\Admin\Controllers\Store\DeviceController;
|
||||||
use App\Admin\Controllers\Store\EmployeeController as StoreEmployeeController;
|
use App\Admin\Controllers\Store\EmployeeController as StoreEmployeeController;
|
||||||
use App\Admin\Controllers\Store\StoreController;
|
use App\Admin\Controllers\Store\StoreController;
|
||||||
|
|
@ -225,5 +226,7 @@ Route::group([
|
||||||
$router->post('workflow/success', [WorkflowController::class, 'success']);
|
$router->post('workflow/success', [WorkflowController::class, 'success']);
|
||||||
$router->post('workflow/fail', [WorkflowController::class, 'fail']);
|
$router->post('workflow/fail', [WorkflowController::class, 'fail']);
|
||||||
$router->get('workflow/logs', [WorkflowController::class, 'logs']);
|
$router->get('workflow/logs', [WorkflowController::class, 'logs']);
|
||||||
|
|
||||||
|
$router->get('tasks', [TaskController::class, 'shareList']);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -44,28 +44,33 @@ class TaskLedgerGenerateCommand extends Command
|
||||||
{
|
{
|
||||||
/** @var \App\Models\PlanLedger */
|
/** @var \App\Models\PlanLedger */
|
||||||
$planable = DB::transaction(function () use ($datetime) {
|
$planable = DB::transaction(function () use ($datetime) {
|
||||||
$date = $datetime->format('Y-m-d');
|
/** @var \App\Models\PlanLedger */
|
||||||
|
$planable = PlanLedger::firstOrNew([
|
||||||
|
'date' => $datetime->format('Y-m-d'),
|
||||||
|
]);
|
||||||
|
|
||||||
if (! is_null($planable = PlanLedger::where('date', $date)->first())) {
|
if ($planable->exists) {
|
||||||
return $planable;
|
return $planable;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @var \App\Models\PlanLedger */
|
$planable->save();
|
||||||
$planable = PlanLedger::create(['date' => $date]);
|
|
||||||
|
|
||||||
$plan = $planable->plan()->create([
|
$plan = $planable->plan()->create([
|
||||||
'name' => "{$date} 总账录入",
|
'name' => "{$planable->date} 总账录入",
|
||||||
'plan_status' => PlanStatus::Published,
|
'plan_status' => PlanStatus::Published,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return $planable->setRelation('plan', $plan);
|
return $planable->setRelation('plan', $plan);
|
||||||
});
|
});
|
||||||
|
|
||||||
Store::lazyById()->each(function (Store $store) use ($planable) {
|
$stores = Store::all();
|
||||||
|
|
||||||
|
/** @var \App\Models\Store */
|
||||||
|
foreach ($stores as $store) {
|
||||||
DB::transaction(function () use ($store, $planable) {
|
DB::transaction(function () use ($store, $planable) {
|
||||||
$taskable = TaskLedger::firstOrNew([
|
$taskable = TaskLedger::firstOrNew([
|
||||||
'store_id' => $store->id,
|
'store_id' => $store->id,
|
||||||
'date' => $planable->date->format('Y-m-d'),
|
'date' => $planable->date,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if ($taskable->exists) {
|
if ($taskable->exists) {
|
||||||
|
|
@ -75,18 +80,20 @@ class TaskLedgerGenerateCommand extends Command
|
||||||
$taskable->save();
|
$taskable->save();
|
||||||
|
|
||||||
$ledger = Ledger::where('store_id', $store->id)
|
$ledger = Ledger::where('store_id', $store->id)
|
||||||
->where('date', $planable->date->format('Y-m-d'))
|
->where('date', $planable->date)
|
||||||
->first();
|
->first();
|
||||||
|
|
||||||
|
$date = Carbon::parse($planable->date);
|
||||||
|
|
||||||
$taskable->task()->create([
|
$taskable->task()->create([
|
||||||
'plan_id' => $planable->plan->id,
|
'plan_id' => $planable->plan->id,
|
||||||
'name' => '总账录入',
|
'name' => '总账录入',
|
||||||
'start_at' => $planable->date->copy()->startOfDay(),
|
'start_at' => $date->copy()->startOfDay(),
|
||||||
'end_at' => $planable->date->copy()->endOfDay(),
|
'end_at' => $date->copy()->endOfDay(),
|
||||||
'task_status' => $ledger ? TaskStatus::Success : TaskStatus::Pending,
|
'task_status' => $ledger ? TaskStatus::Success : TaskStatus::Pending,
|
||||||
'completed_at' => $ledger?->created_at,
|
'completed_at' => $ledger?->created_at,
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,6 @@ class PlanLedger extends Model
|
||||||
{
|
{
|
||||||
use HasFactory, HasDateTimeFormatter;
|
use HasFactory, HasDateTimeFormatter;
|
||||||
|
|
||||||
protected $casts = [
|
|
||||||
'date' => 'date',
|
|
||||||
];
|
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'date',
|
'date',
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,15 @@
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use App\Enums\TaskStatus;
|
use App\Enums\TaskStatus;
|
||||||
|
use App\Traits\HasDateTimeFormatter;
|
||||||
|
use EloquentFilter\Filterable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||||
|
|
||||||
class Task extends Model
|
class Task extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use Filterable, HasFactory, HasDateTimeFormatter;
|
||||||
|
|
||||||
protected $attributes = [
|
protected $attributes = [
|
||||||
'task_status' => TaskStatus::Pending,
|
'task_status' => TaskStatus::Pending,
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Traits\HasDateTimeFormatter;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||||
|
|
@ -9,11 +10,7 @@ use Illuminate\Database\Eloquent\Relations\MorphOne;
|
||||||
|
|
||||||
class TaskLedger extends Model
|
class TaskLedger extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory, HasDateTimeFormatter;
|
||||||
|
|
||||||
protected $casts = [
|
|
||||||
'date' => 'date',
|
|
||||||
];
|
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'store_id',
|
'store_id',
|
||||||
|
|
|
||||||
|
|
@ -14,4 +14,18 @@ return [
|
||||||
'store_level' => '门店等级',
|
'store_level' => '门店等级',
|
||||||
'performance' => '业绩',
|
'performance' => '业绩',
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'task' => [
|
||||||
|
'id' => 'ID',
|
||||||
|
'name' => '任务名称',
|
||||||
|
'status' => '状态',
|
||||||
|
'completed_at' => '完成时间',
|
||||||
|
'created_at' => '创建时间',
|
||||||
|
],
|
||||||
|
|
||||||
|
'task_ledger' => [
|
||||||
|
'date' => '日期',
|
||||||
|
'store' => '门店',
|
||||||
|
'store_master' => '店长',
|
||||||
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue