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\Services\Plan\PlanService;
|
||||
use App\Enums\PlanStatus;
|
||||
use App\Enums\TaskStatus;
|
||||
use Illuminate\Support\Arr;
|
||||
use Slowlyo\OwlAdmin\Admin;
|
||||
use Slowlyo\OwlAdmin\Renderers\Form;
|
||||
|
|
@ -161,6 +162,28 @@ class PlanController extends AdminController
|
|||
public function detail(): Form
|
||||
{
|
||||
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\SignRepairController;
|
||||
use App\Admin\Controllers\Plan\PlanController;
|
||||
use App\Admin\Controllers\Plan\TaskController;
|
||||
use App\Admin\Controllers\Store\DeviceController;
|
||||
use App\Admin\Controllers\Store\EmployeeController as StoreEmployeeController;
|
||||
use App\Admin\Controllers\Store\StoreController;
|
||||
|
|
@ -225,5 +226,7 @@ Route::group([
|
|||
$router->post('workflow/success', [WorkflowController::class, 'success']);
|
||||
$router->post('workflow/fail', [WorkflowController::class, 'fail']);
|
||||
$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 */
|
||||
$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;
|
||||
}
|
||||
|
||||
/** @var \App\Models\PlanLedger */
|
||||
$planable = PlanLedger::create(['date' => $date]);
|
||||
$planable->save();
|
||||
|
||||
$plan = $planable->plan()->create([
|
||||
'name' => "{$date} 总账录入",
|
||||
'name' => "{$planable->date} 总账录入",
|
||||
'plan_status' => PlanStatus::Published,
|
||||
]);
|
||||
|
||||
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) {
|
||||
$taskable = TaskLedger::firstOrNew([
|
||||
'store_id' => $store->id,
|
||||
'date' => $planable->date->format('Y-m-d'),
|
||||
'date' => $planable->date,
|
||||
]);
|
||||
|
||||
if ($taskable->exists) {
|
||||
|
|
@ -75,18 +80,20 @@ class TaskLedgerGenerateCommand extends Command
|
|||
$taskable->save();
|
||||
|
||||
$ledger = Ledger::where('store_id', $store->id)
|
||||
->where('date', $planable->date->format('Y-m-d'))
|
||||
->where('date', $planable->date)
|
||||
->first();
|
||||
|
||||
$date = Carbon::parse($planable->date);
|
||||
|
||||
$taskable->task()->create([
|
||||
'plan_id' => $planable->plan->id,
|
||||
'name' => '总账录入',
|
||||
'start_at' => $planable->date->copy()->startOfDay(),
|
||||
'end_at' => $planable->date->copy()->endOfDay(),
|
||||
'start_at' => $date->copy()->startOfDay(),
|
||||
'end_at' => $date->copy()->endOfDay(),
|
||||
'task_status' => $ledger ? TaskStatus::Success : TaskStatus::Pending,
|
||||
'completed_at' => $ledger?->created_at,
|
||||
]);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,10 +11,6 @@ class PlanLedger extends Model
|
|||
{
|
||||
use HasFactory, HasDateTimeFormatter;
|
||||
|
||||
protected $casts = [
|
||||
'date' => 'date',
|
||||
];
|
||||
|
||||
protected $fillable = [
|
||||
'date',
|
||||
];
|
||||
|
|
|
|||
|
|
@ -3,13 +3,15 @@
|
|||
namespace App\Models;
|
||||
|
||||
use App\Enums\TaskStatus;
|
||||
use App\Traits\HasDateTimeFormatter;
|
||||
use EloquentFilter\Filterable;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphTo;
|
||||
|
||||
class Task extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
use Filterable, HasFactory, HasDateTimeFormatter;
|
||||
|
||||
protected $attributes = [
|
||||
'task_status' => TaskStatus::Pending,
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
namespace App\Models;
|
||||
|
||||
use App\Traits\HasDateTimeFormatter;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
|
@ -9,11 +10,7 @@ use Illuminate\Database\Eloquent\Relations\MorphOne;
|
|||
|
||||
class TaskLedger extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $casts = [
|
||||
'date' => 'date',
|
||||
];
|
||||
use HasFactory, HasDateTimeFormatter;
|
||||
|
||||
protected $fillable = [
|
||||
'store_id',
|
||||
|
|
|
|||
|
|
@ -14,4 +14,18 @@ return [
|
|||
'store_level' => '门店等级',
|
||||
'performance' => '业绩',
|
||||
],
|
||||
|
||||
'task' => [
|
||||
'id' => 'ID',
|
||||
'name' => '任务名称',
|
||||
'status' => '状态',
|
||||
'completed_at' => '完成时间',
|
||||
'created_at' => '创建时间',
|
||||
],
|
||||
|
||||
'task_ledger' => [
|
||||
'date' => '日期',
|
||||
'store' => '门店',
|
||||
'store_master' => '店长',
|
||||
],
|
||||
];
|
||||
|
|
|
|||
Loading…
Reference in New Issue