feat: add article and production modules

This commit is contained in:
2026-08-31 13:16:46 +08:00
parent ac3da246b2
commit 5c586a1a95
334 changed files with 34419 additions and 1 deletions
@@ -0,0 +1,66 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class ExceptionRecordValidate extends BaseValidate
{
public function rules(): array
{
return [
'order_no' => ['required', 'max:100'],
'user_code' => ['nullable', 'max:50'],
'reporter' => ['nullable', 'max:100'],
'type_id' => ['nullable', 'integer'],
'type_code' => ['required', 'max:64'],
'type_name' => ['required', 'max:100'],
'reason_id' => ['nullable', 'integer'],
'reason_code' => ['required', 'max:64'],
'reason_name' => ['required', 'max:100'],
'issue_id' => ['nullable', 'integer'],
'issue_code' => ['nullable', 'max:64'],
'issue_name' => ['nullable', 'max:100'],
'images' => ['nullable'],
'remark' => ['nullable', 'max:65535'],
'status' => ['nullable', 'integer', 'in:0,1,2'],
'handler' => ['nullable', 'max:100'],
'handler_id' => ['nullable', 'integer'],
'handled_at' => ['nullable', 'integer'],
'reported_at' => ['nullable', 'integer'],
];
}
protected array $message = [
'order_no.required' => '单号或条码不能为空',
'order_no.max' => '单号或条码不能超过100个字符',
'user_code.max' => '提报人工号不能超过50个字符',
'reporter.max' => '提报人不能超过100个字符',
'type_id.integer' => '处理类型格式不正确',
'type_code.required' => '处理类型编码不能为空',
'type_code.max' => '处理类型编码不能超过64个字符',
'type_name.required' => '处理类型名称不能为空',
'type_name.max' => '处理类型名称不能超过100个字符',
'reason_id.integer' => '异常原因格式不正确',
'reason_code.required' => '异常原因编码不能为空',
'reason_code.max' => '异常原因编码不能超过64个字符',
'reason_name.required' => '异常原因名称不能为空',
'reason_name.max' => '异常原因名称不能超过100个字符',
'issue_id.integer' => '具体问题格式不正确',
'issue_code.max' => '具体问题编码不能超过64个字符',
'issue_name.max' => '具体问题名称不能超过100个字符',
'status.integer' => '处理状态格式不正确',
'status.in' => '处理状态值不正确',
'handler.max' => '处理人不能超过100个字符',
'handler_id.integer' => '处理人ID格式不正确',
'handled_at.integer' => '处理时间格式不正确',
'reported_at.integer' => '提报时间格式不正确',
];
protected array $scene = [
'store' => ['order_no', 'user_code', 'reporter', 'type_id', 'type_code', 'type_name', 'reason_id', 'reason_code', 'reason_name', 'issue_id', 'issue_code', 'issue_name', 'images', 'remark', 'status', 'handler', 'handler_id', 'handled_at', 'reported_at'],
'update' => ['order_no', 'user_code', 'reporter', 'type_id', 'type_code', 'type_name', 'reason_id', 'reason_code', 'reason_name', 'issue_id', 'issue_code', 'issue_name', 'images', 'remark', 'status', 'handler', 'handler_id', 'handled_at', 'reported_at'],
];
}
@@ -0,0 +1,43 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class ExceptionSettingValidate extends BaseValidate
{
public function rules(): array
{
return [
'parent_id' => ['nullable', 'integer'],
'setting_type' => ['required', 'in:type,reason,issue'],
'code' => ['required', 'max:64'],
'name' => ['required', 'max:100'],
'sort' => ['nullable', 'integer', 'min:0'],
'is_enabled' => ['nullable', 'integer', 'in:0,1'],
'remark' => ['nullable', 'max:65535'],
];
}
protected array $message = [
'parent_id.integer' => '父级设置格式不正确',
'setting_type.required' => '设置类型不能为空',
'setting_type.in' => '设置类型值不正确',
'code.required' => '设置编码不能为空',
'code.max' => '设置编码不能超过64个字符',
'name.required' => '设置名称不能为空',
'name.max' => '设置名称不能超过100个字符',
'sort.integer' => '排序必须为整数',
'sort.min' => '排序不能小于0',
'is_enabled.integer' => '启用状态格式不正确',
'is_enabled.in' => '启用状态值不正确',
'remark.max' => '备注内容过长',
];
protected array $scene = [
'store' => ['parent_id', 'setting_type', 'code', 'name', 'sort', 'is_enabled', 'remark'],
'update' => ['parent_id', 'setting_type', 'code', 'name', 'sort', 'is_enabled', 'remark'],
];
}
@@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class HardwareFaultDescriptionValidate extends BaseValidate
{
public function rules(): array
{
return [
'category_id' => ['required', 'integer'],
'description' => ['required', 'max:500'],
'is_enabled' => ['integer', 'in:0,1'],
'remark' => ['max:500'],
];
}
protected array $message = [
'category_id.required' => '请选择物料分类',
'category_id.integer' => '物料分类不正确',
'description.required' => '硬件故障描述不能为空',
'description.max' => '硬件故障描述不能超过500个字符',
'is_enabled.in' => '启用状态不正确',
'remark.max' => '备注不能超过500个字符',
];
protected array $scene = [
'store' => ['category_id', 'description', 'is_enabled', 'remark'],
'update' => ['category_id', 'description', 'is_enabled', 'remark'],
];
}
@@ -0,0 +1,25 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class MaterialCategoryValidate extends BaseValidate
{
public function rules(): array
{
return ['category_name' => ['required', 'max:100']];
}
protected array $message = [
'category_name.required' => '分类名称不能为空',
'category_name.max' => '分类名称不能超过100个字符',
];
protected array $scene = [
'store' => ['category_name'],
'update' => ['category_name'],
];
}
@@ -0,0 +1,32 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class MaterialValidate extends BaseValidate
{
public function rules(): array
{
return [
'category_id' => ['required'],
'product_code' => ['required', 'max:100'],
'product_name' => ['required', 'max:200'],
];
}
protected array $message = [
'category_id.required' => '请选择分类',
'product_code.required' => '商品编码不能为空',
'product_code.max' => '商品编码不能超过100个字符',
'product_name.required' => '商品名称不能为空',
'product_name.max' => '商品名称不能超过200个字符',
];
protected array $scene = [
'store' => ['category_id', 'product_code', 'product_name'],
'update' => ['category_id', 'product_code', 'product_name'],
];
}
@@ -0,0 +1,63 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
use Illuminate\Validation\Rule;
use plugin\produce\app\model\ProcessStep;
class ProcessStepValidate extends BaseValidate
{
public function rules(): array
{
$id = request()->route?->param('id');
$processId = (string) (request()->input('process_id') ?? '');
return [
'process_id' => ['required', 'integer'],
'step_code' => [
'required',
'max:50',
Rule::unique(ProcessStep::class, 'step_code')
->where(fn ($query) => $query->where('process_id', $processId))
->ignore($id, 'id')
],
'step_name' => ['required', 'max:100'],
'description' => ['nullable', 'max:65535'],
'sort' => ['nullable', 'integer', 'min:0'],
'status' => ['nullable', 'integer', 'in:0,1'],
'prerequisite_steps' => ['nullable'],
'prerequisite_mode' => ['nullable', 'in:all,any,none'],
'prerequisite_require_final' => ['nullable', 'integer', 'in:0,1'],
'allow_repeat_scan' => ['nullable', 'integer', 'in:0,1'],
'repeat_scan_statuses' => ['nullable'],
];
}
protected array $message = [
'process_id.required' => '所属工序不能为空',
'process_id.integer' => '所属工序格式不正确',
'step_code.required' => '步骤编码不能为空',
'step_code.max' => '步骤编码不能超过50个字符',
'step_code.unique' => '步骤编码已存在',
'step_name.required' => '步骤名称不能为空',
'step_name.max' => '步骤名称不能超过100个字符',
'description.max' => '步骤描述内容过长',
'sort.integer' => '排序必须为整数',
'sort.min' => '排序不能小于0',
'status.integer' => '状态格式不正确',
'status.in' => '状态值不正确',
'prerequisite_mode.in' => '前置步骤验证模式值不正确',
'prerequisite_require_final.integer' => '前置步骤终态要求格式不正确',
'prerequisite_require_final.in' => '前置步骤终态要求值不正确',
'allow_repeat_scan.integer' => '允许重复扫码格式不正确',
'allow_repeat_scan.in' => '允许重复扫码值不正确',
];
protected array $scene = [
'store' => ['process_id', 'step_code', 'step_name', 'description', 'sort', 'status', 'prerequisite_steps', 'prerequisite_mode', 'prerequisite_require_final', 'allow_repeat_scan', 'repeat_scan_statuses'],
'update' => ['process_id', 'step_code', 'step_name', 'description', 'sort', 'status', 'prerequisite_steps', 'prerequisite_mode', 'prerequisite_require_final', 'allow_repeat_scan', 'repeat_scan_statuses'],
];
}
@@ -0,0 +1,43 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
use Illuminate\Validation\Rule;
use plugin\produce\app\model\Process;
class ProcessValidate extends BaseValidate
{
public function rules(): array
{
$id = request()->route?->param('id');
return [
'process_code' => ['required', 'max:50', Rule::unique(Process::class, 'process_code')->ignore($id, 'id')],
'process_name' => ['required', 'max:100'],
'description' => ['nullable', 'max:65535'],
'sort' => ['nullable', 'integer', 'min:0'],
'status' => ['nullable', 'integer', 'in:0,1'],
];
}
protected array $message = [
'process_code.required' => '工序编码不能为空',
'process_code.max' => '工序编码不能超过50个字符',
'process_code.unique' => '工序编码已存在',
'process_name.required' => '工序名称不能为空',
'process_name.max' => '工序名称不能超过100个字符',
'description.max' => '工序描述内容过长',
'sort.integer' => '排序必须为整数',
'sort.min' => '排序不能小于0',
'status.integer' => '状态格式不正确',
'status.in' => '状态值不正确',
];
protected array $scene = [
'store' => ['process_code', 'process_name', 'description', 'sort', 'status'],
'update' => ['process_code', 'process_name', 'description', 'sort', 'status'],
];
}
@@ -0,0 +1,51 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class ProductRecordValidate extends BaseValidate
{
public function rules(): array
{
return [
'process_order_no' => ['required', 'max:100'],
'product_code' => ['required', 'max:100'],
'quantity' => ['required', 'integer', 'min:1'],
'user_code' => ['required', 'max:50'],
'operator' => ['nullable', 'max:100'],
'process_id' => ['nullable', 'integer'],
'step_id' => ['nullable', 'integer'],
'status_id' => ['nullable', 'integer'],
'scan_result' => ['required', 'integer', 'in:0,1'],
'remark' => ['nullable', 'max:65535'],
];
}
protected array $message = [
'process_order_no.required' => '加工单号不能为空',
'process_order_no.max' => '加工单号不能超过100个字符',
'product_code.required' => '商品编码不能为空',
'product_code.max' => '商品编码不能超过100个字符',
'quantity.required' => '数量不能为空',
'quantity.integer' => '数量格式不正确',
'quantity.min' => '数量必须大于0',
'user_code.required' => '用户编码不能为空',
'user_code.max' => '用户编码不能超过50个字符',
'operator.max' => '操作人员不能超过100个字符',
'process_id.integer' => '工序格式不正确',
'step_id.integer' => '步骤格式不正确',
'status_id.integer' => '状态格式不正确',
'scan_result.required' => '扫码结果不能为空',
'scan_result.integer' => '扫码结果格式不正确',
'scan_result.in' => '扫码结果值不正确',
'remark.max' => '备注内容过长',
];
protected array $scene = [
'store' => ['process_order_no', 'product_code', 'quantity', 'user_code', 'operator', 'process_id', 'step_id', 'status_id', 'scan_result', 'remark'],
'update' => ['process_order_no', 'product_code', 'quantity', 'user_code', 'operator', 'process_id', 'step_id', 'status_id', 'scan_result', 'remark'],
];
}
@@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class RepairRecordValidate extends BaseValidate
{
public function rules(): array
{
return [
'repair_no' => ['required', 'max:100'],
'order_no' => ['max:100'],
'product_code' => ['max:100'],
'product_name' => ['max:200'],
'category_id' => ['integer'],
'category_ids' => ['array'],
'category_ids.*' => ['integer'],
'fault_description_id' => ['integer'],
'repair_result' => ['max:50'],
'operator' => ['max:100'],
'repaired_at' => ['integer'],
'remark' => ['max:1000'],
];
}
protected array $message = [
'repair_no.required' => '维修单号不能为空',
'repair_no.max' => '维修单号不能超过100个字符',
'order_no.max' => '订单号不能超过100个字符',
'product_code.max' => '商品编码不能超过100个字符',
'product_name.max' => '商品名称不能超过200个字符',
'category_id.integer' => '物料分类不正确',
'category_ids.array' => '物料分类集合格式不正确',
'category_ids.*.integer' => '物料分类不正确',
'fault_description_id.integer' => '硬件故障描述不正确',
'repair_result.max' => '维修判定不能超过50个字符',
'operator.max' => '维修人员不能超过100个字符',
'repaired_at.integer' => '维修时间不正确',
'remark.max' => '备注不能超过1000个字符',
];
protected array $scene = [
'store' => ['repair_no', 'order_no', 'product_code', 'product_name', 'category_id', 'category_ids', 'fault_description_id', 'repair_result', 'parts', 'operator', 'repaired_at', 'remark'],
'update' => ['repair_no', 'order_no', 'product_code', 'product_name', 'category_id', 'category_ids', 'fault_description_id', 'repair_result', 'parts', 'operator', 'repaired_at', 'remark'],
];
}
@@ -0,0 +1,43 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class RepairSettingValidate extends BaseValidate
{
public function rules(): array
{
return [
'parent_id' => ['nullable', 'integer'],
'setting_type' => ['required', 'in:type,reason,issue'],
'code' => ['required', 'max:64'],
'name' => ['required', 'max:100'],
'sort' => ['nullable', 'integer', 'min:0'],
'is_enabled' => ['nullable', 'integer', 'in:0,1'],
'remark' => ['nullable', 'max:65535'],
];
}
protected array $message = [
'parent_id.integer' => '父级设置格式不正确',
'setting_type.required' => '设置类型不能为空',
'setting_type.in' => '设置类型值不正确',
'code.required' => '设置编码不能为空',
'code.max' => '设置编码不能超过64个字符',
'name.required' => '设置名称不能为空',
'name.max' => '设置名称不能超过100个字符',
'sort.integer' => '排序必须为整数',
'sort.min' => '排序不能小于0',
'is_enabled.integer' => '启用状态格式不正确',
'is_enabled.in' => '启用状态值不正确',
'remark.max' => '备注内容过长',
];
protected array $scene = [
'store' => ['parent_id', 'setting_type', 'code', 'name', 'sort', 'is_enabled', 'remark'],
'update' => ['parent_id', 'setting_type', 'code', 'name', 'sort', 'is_enabled', 'remark'],
];
}
@@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class ScanDataValidate extends BaseValidate
{
public function rules(): array
{
return [
'order_no' => ['required', 'max:100'],
'quantity' => ['nullable', 'integer', 'min:1'],
'user_code' => ['required', 'max:50'],
'operator' => ['nullable', 'max:100'],
'process_id' => ['required', 'integer'],
'step_id' => ['required', 'integer'],
'status_id' => ['nullable', 'integer'],
'scan_result' => ['required', 'integer', 'in:0,1'],
'remark' => ['nullable', 'max:65535'],
];
}
protected array $message = [
'order_no.required' => '订单号不能为空',
'order_no.max' => '订单号不能超过100个字符',
'quantity.integer' => '本次数量格式不正确',
'quantity.min' => '本次数量必须大于0',
'user_code.required' => '用户编码不能为空',
'user_code.max' => '用户编码不能超过50个字符',
'operator.max' => '操作人员不能超过100个字符',
'process_id.required' => '工序不能为空',
'process_id.integer' => '工序格式不正确',
'step_id.required' => '步骤不能为空',
'step_id.integer' => '步骤格式不正确',
'status_id.integer' => '状态格式不正确',
'scan_result.required' => '扫码结果不能为空',
'scan_result.integer' => '扫码结果格式不正确',
'scan_result.in' => '扫码结果值不正确',
'remark.max' => '备注内容过长',
];
protected array $scene = [
'store' => ['order_no', 'quantity', 'user_code', 'operator', 'process_id', 'step_id', 'status_id', 'scan_result', 'remark'],
'update' => ['order_no', 'quantity', 'user_code', 'operator', 'process_id', 'step_id', 'status_id', 'scan_result', 'remark'],
];
}
@@ -0,0 +1,47 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
class SpecificRuleValidate extends BaseValidate
{
public function rules(): array
{
return [
'rule_name' => ['required', 'max:255'],
'rule_pattern' => ['required'],
'rule_type' => ['required', 'integer'],
'apply_mode' => ['required', 'in:order,machine,both'],
'match_field' => ['required', 'in:order_no,process_order_no,product_code,user_code'],
'is_enabled' => ['nullable', 'integer', 'in:0,1'],
'step_ids' => ['nullable'],
'sort' => ['nullable', 'integer', 'min:0'],
'remark' => ['nullable', 'max:65535'],
];
}
protected array $message = [
'rule_name.required' => '规则名称不能为空',
'rule_name.max' => '规则名称不能超过255个字符',
'rule_pattern.required' => '规则表达式不能为空',
'rule_type.required' => '规则类型不能为空',
'rule_type.integer' => '规则类型格式不正确',
'apply_mode.required' => '适用模式不能为空',
'apply_mode.in' => '适用模式值不正确',
'match_field.required' => '匹配字段不能为空',
'match_field.in' => '匹配字段值不正确',
'is_enabled.integer' => '启用状态格式不正确',
'is_enabled.in' => '启用状态值不正确',
'sort.integer' => '排序必须为整数',
'sort.min' => '排序不能小于0',
'remark.max' => '备注内容过长',
];
protected array $scene = [
'store' => ['rule_name', 'rule_pattern', 'rule_type', 'apply_mode', 'match_field', 'is_enabled', 'step_ids', 'sort', 'remark'],
'update' => ['rule_name', 'rule_pattern', 'rule_type', 'apply_mode', 'match_field', 'is_enabled', 'step_ids', 'sort', 'remark'],
];
}
@@ -0,0 +1,103 @@
<?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'],
];
}
@@ -0,0 +1,86 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
use Illuminate\Validation\Rule;
use plugin\produce\app\model\StepRelation;
class StepRelationValidate extends BaseValidate
{
public function rules(): array
{
$id = request()->route?->param('id');
$fromStepId = (string) (request()->input('from_step_id') ?? '');
$toStepId = (string) (request()->input('to_step_id') ?? '');
$relationType = (string) (request()->input('relation_type') ?? 'normal');
return [
'from_step_id' => ['required', 'integer'],
'to_step_id' => ['required', 'integer', 'different:from_step_id'],
'relation_type' => [
'required',
'max:20',
Rule::in(['normal', 'exception']),
Rule::unique(StepRelation::class, 'relation_type')
->where(fn ($query) => $query
->where('from_step_id', $fromStepId)
->where('to_step_id', $toStepId)
)
->ignore($id, 'id')
],
'flow_condition' => [
'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字符串');
}
}
],
'priority' => ['nullable', 'integer', 'min:0'],
'description' => ['nullable', 'max:65535'],
'sort' => ['nullable', 'integer', 'min:0'],
'status' => ['nullable', 'integer', 'in:0,1'],
];
}
protected array $message = [
'from_step_id.required' => '源步骤不能为空',
'from_step_id.integer' => '源步骤格式不正确',
'to_step_id.required' => '目标步骤不能为空',
'to_step_id.integer' => '目标步骤格式不正确',
'to_step_id.different' => '目标步骤不能与源步骤相同',
'relation_type.required' => '关系类型不能为空',
'relation_type.max' => '关系类型长度不能超过20个字符',
'relation_type.in' => '关系类型值不正确',
'relation_type.unique' => '该步骤关系已存在',
'priority.integer' => '优先级必须为整数',
'priority.min' => '优先级不能小于0',
'description.max' => '描述内容过长',
'sort.integer' => '排序必须为整数',
'sort.min' => '排序不能小于0',
'status.integer' => '状态格式不正确',
'status.in' => '状态值不正确',
];
protected array $scene = [
'store' => ['from_step_id', 'to_step_id', 'relation_type', 'flow_condition', 'priority', 'description', 'sort', 'status'],
'update' => ['from_step_id', 'to_step_id', 'relation_type', 'flow_condition', 'priority', 'description', 'sort', 'status'],
];
}
@@ -0,0 +1,59 @@
<?php
declare(strict_types=1);
namespace plugin\produce\app\validate;
use core\base\BaseValidate;
use Illuminate\Validation\Rule;
use plugin\produce\app\model\StepStatus;
class StepStatusValidate extends BaseValidate
{
public function rules(): array
{
$id = request()->route?->param('id');
$stepId = (string) (request()->input('step_id') ?? '');
return [
'step_id' => ['required', 'integer'],
'status_code' => [
'required',
'max:50',
Rule::unique(StepStatus::class, 'status_code')
->where(fn ($query) => $query->where('step_id', $stepId))
->ignore($id, 'id')
],
'status_name' => ['required', 'max:100'],
'is_initial' => ['nullable', 'integer', 'in:0,1'],
'is_final' => ['nullable', 'integer', 'in:0,1'],
'description' => ['nullable', 'max:65535'],
'sort' => ['nullable', 'integer', 'min:0'],
'status' => ['nullable', 'integer', 'in:0,1'],
];
}
protected array $message = [
'step_id.required' => '所属步骤不能为空',
'step_id.integer' => '所属步骤格式不正确',
'status_code.required' => '状态编码不能为空',
'status_code.max' => '状态编码不能超过50个字符',
'status_code.unique' => '状态编码已存在',
'status_name.required' => '状态名称不能为空',
'status_name.max' => '状态名称不能超过100个字符',
'is_initial.integer' => '初始状态格式不正确',
'is_initial.in' => '初始状态值不正确',
'is_final.integer' => '终态格式不正确',
'is_final.in' => '终态值不正确',
'description.max' => '状态描述内容过长',
'sort.integer' => '排序必须为整数',
'sort.min' => '排序不能小于0',
'status.integer' => '状态格式不正确',
'status.in' => '状态值不正确',
];
protected array $scene = [
'store' => ['step_id', 'status_code', 'status_name', 'is_initial', 'is_final', 'description', 'sort', 'status'],
'update' => ['step_id', 'status_code', 'status_name', 'is_initial', 'is_final', 'description', 'sort', 'status'],
];
}