Files
MrleeAdmin/backend/plugin/produce/app/validate/StatusTransitionValidate.php
T

104 lines
4.5 KiB
PHP

<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class StatusTransitionValidate extends BaseValidate
{
public function rules(): array
{
return [
'step_id' => ['required', 'integer'],
'from_status_id' => ['required', 'integer'],
'to_status_id' => ['required', 'integer', 'different:from_status_id'],
'trigger_event' => ['required', 'max:100', 'in:next_step_scan,scan_trigger,exception_trigger,manual_trigger,timer_trigger,complete_trigger'],
'event_config' => [
'nullable',
function (string $attribute, mixed $value, \Closure $fail) {
if ($value === null || $value === '') {
return;
}
if (is_array($value)) {
return;
}
if (!is_string($value)) {
$fail('事件配置必须为有效的JSON字符串');
return;
}
json_decode($value, true);
if (json_last_error() !== JSON_ERROR_NONE) {
$fail('事件配置必须为有效的JSON字符串');
}
}
],
'auto_trigger' => ['nullable', 'integer', 'in:0,1'],
'priority' => ['nullable', 'integer', 'min:0'],
'transition_type' => ['required', 'max:20', 'in:primary,side_effect'],
'side_effect_type' => ['nullable', 'max:50', 'in:log,notify,update_field,trigger_event'],
'side_effect_config' => [
'nullable',
function (string $attribute, mixed $value, \Closure $fail) {
if ($value === null || $value === '') {
return;
}
if (is_array($value)) {
return;
}
if (!is_string($value)) {
$fail('副作用配置必须为有效的JSON字符串');
return;
}
json_decode($value, true);
if (json_last_error() !== JSON_ERROR_NONE) {
$fail('副作用配置必须为有效的JSON字符串');
}
}
],
'description' => ['nullable', 'max:65535'],
'sort' => ['nullable', 'integer', 'min:0'],
'status' => ['nullable', 'integer', 'in:0,1'],
];
}
protected array $message = [
'step_id.required' => '所属步骤不能为空',
'step_id.integer' => '所属步骤格式不正确',
'from_status_id.required' => '源状态不能为空',
'from_status_id.integer' => '源状态格式不正确',
'to_status_id.required' => '目标状态不能为空',
'to_status_id.integer' => '目标状态格式不正确',
'to_status_id.different' => '目标状态不能与源状态相同',
'trigger_event.required' => '触发事件不能为空',
'trigger_event.max' => '触发事件长度不能超过100个字符',
'trigger_event.in' => '触发事件值不正确',
'auto_trigger.integer' => '自动触发格式不正确',
'auto_trigger.in' => '自动触发值不正确',
'priority.integer' => '优先级必须为整数',
'priority.min' => '优先级不能小于0',
'transition_type.required' => '转换类型不能为空',
'transition_type.max' => '转换类型长度不能超过20个字符',
'transition_type.in' => '转换类型值不正确',
'side_effect_type.max' => '副作用类型长度不能超过50个字符',
'side_effect_type.in' => '副作用类型值不正确',
'description.max' => '描述内容过长',
'sort.integer' => '排序必须为整数',
'sort.min' => '排序不能小于0',
'status.integer' => '状态格式不正确',
'status.in' => '状态值不正确',
];
protected array $scene = [
'store' => ['step_id', 'from_status_id', 'to_status_id', 'trigger_event', 'event_config', 'auto_trigger', 'priority', 'transition_type', 'side_effect_type', 'side_effect_config', 'description', 'sort', 'status'],
'update' => ['step_id', 'from_status_id', 'to_status_id', 'trigger_event', 'event_config', 'auto_trigger', 'priority', 'transition_type', 'side_effect_type', 'side_effect_config', 'description', 'sort', 'status'],
];
}