This commit is contained in:
Your Name
2026-08-11 17:39:41 +08:00
parent cfe4c82c90
commit 25467b9d91
350 changed files with 201115 additions and 132208 deletions
@@ -1,159 +1,159 @@
<?php
namespace app\adminapi\validate\doctor;
use app\common\validate\BaseValidate;
/**
* 医生预约验证器
* Class AppointmentValidate
* @package app\adminapi\validate\doctor
*/
class AppointmentValidate extends BaseValidate
{
/**
* 设置校验规则
* @var string[]
*/
protected $rule = [
'id' => 'require',
'patient_id' => 'require|integer',
'doctor_id' => 'require|integer',
'diagnosis_id' => 'require|integer',
'appointment_date' => 'require|date',
'appointment_time' => 'require',
'period' => 'in:morning,afternoon,all',
'appointment_type' => 'require|in:video,text,phone',
'status' => 'require|integer|between:1,4',
'remark' => 'max:500',
'channel_source' => 'require',
'channel_source_detail' => 'max:128',
'ids' => 'require|array',
'note_id' => 'require|integer',
'image_type' => 'require|in:tongue_images,report_files',
'image_path' => 'require',
];
/**
* 参数描述
* @var string[]
*/
protected $field = [
'id' => '预约ID',
'patient_id' => '患者ID',
'doctor_id' => '医生ID',
'diagnosis_id' => '诊单ID',
'appointment_date' => '预约日期',
'appointment_time' => '预约时间',
'period' => '时段',
'appointment_type' => '预约类型',
'status' => '状态',
'remark' => '备注',
'assistant_id' => '医助',
'channel_source' => '渠道来源',
'channel_source_detail' => '渠道补充说明',
'ids' => '预约ID列表',
];
/**
* @notes 创建预约场景
* @return AppointmentValidate
*/
public function sceneCreate()
{
return $this->only(['patient_id', 'doctor_id', 'appointment_date', 'period', 'appointment_time', 'appointment_type', 'channel_source', 'channel_source_detail']);
}
/**
* @notes 取消预约场景
* @return AppointmentValidate
*/
public function sceneCancel()
{
return $this->only(['id']);
}
/**
* @notes 预约详情场景
* @return AppointmentValidate
*/
public function sceneDetail()
{
return $this->only(['id']);
}
/**
* @notes 可用时间段场景
* @return AppointmentValidate
*/
public function sceneAvailableSlots()
{
return $this->only(['doctor_id', 'appointment_date', 'period']);
}
/**
* @notes 完成预约场景
* @return AppointmentValidate
*/
public function sceneComplete()
{
return $this->only(['id']);
}
/**
* @notes 接诊台聚合详情场景
* @return AppointmentValidate
*/
public function sceneReception()
{
return $this->only(['id']);
}
/**
* @notes 通知接诊医助场景
* @return AppointmentValidate
*/
public function sceneNotifyAssistant()
{
return $this->only(['id']);
}
public function sceneAddDoctorNote()
{
return $this->only(['diagnosis_id']);
}
public function sceneDoctorNotes()
{
return $this->only(['diagnosis_id']);
}
public function sceneDeleteDoctorNoteImage()
{
return $this->only(['note_id', 'image_type', 'image_path']);
}
/**
* 后台挂号编辑(消费者处方-挂号列表等)
*/
public function sceneAdminEdit()
{
return $this->only([
'id',
'appointment_date',
'appointment_time',
'period',
'appointment_type',
'status',
'remark',
'channel_source',
'channel_source_detail',
]);
}
/** 批量修改挂号渠道(权限同 doctor.appointment/edit */
public function sceneBatchEditChannel()
{
return $this->only(['ids', 'channel_source', 'channel_source_detail']);
}
}
<?php
namespace app\adminapi\validate\doctor;
use app\common\validate\BaseValidate;
/**
* 医生预约验证器
* Class AppointmentValidate
* @package app\adminapi\validate\doctor
*/
class AppointmentValidate extends BaseValidate
{
/**
* 设置校验规则
* @var string[]
*/
protected $rule = [
'id' => 'require',
'patient_id' => 'require|integer',
'doctor_id' => 'require|integer',
'diagnosis_id' => 'require|integer',
'appointment_date' => 'require|date',
'appointment_time' => 'require',
'period' => 'in:morning,afternoon,all',
'appointment_type' => 'require|in:video,text,phone',
'status' => 'require|integer|between:1,4',
'remark' => 'max:500',
'channel_source' => 'require',
'channel_source_detail' => 'max:128',
'ids' => 'require|array',
'note_id' => 'require|integer',
'image_type' => 'require|in:tongue_images,report_files',
'image_path' => 'require',
];
/**
* 参数描述
* @var string[]
*/
protected $field = [
'id' => '预约ID',
'patient_id' => '患者ID',
'doctor_id' => '医生ID',
'diagnosis_id' => '诊单ID',
'appointment_date' => '预约日期',
'appointment_time' => '预约时间',
'period' => '时段',
'appointment_type' => '预约类型',
'status' => '状态',
'remark' => '备注',
'assistant_id' => '医助',
'channel_source' => '渠道来源',
'channel_source_detail' => '渠道补充说明',
'ids' => '预约ID列表',
];
/**
* @notes 创建预约场景
* @return AppointmentValidate
*/
public function sceneCreate()
{
return $this->only(['patient_id', 'doctor_id', 'appointment_date', 'period', 'appointment_time', 'appointment_type', 'channel_source', 'channel_source_detail']);
}
/**
* @notes 取消预约场景
* @return AppointmentValidate
*/
public function sceneCancel()
{
return $this->only(['id']);
}
/**
* @notes 预约详情场景
* @return AppointmentValidate
*/
public function sceneDetail()
{
return $this->only(['id']);
}
/**
* @notes 可用时间段场景
* @return AppointmentValidate
*/
public function sceneAvailableSlots()
{
return $this->only(['doctor_id', 'appointment_date', 'period']);
}
/**
* @notes 完成预约场景
* @return AppointmentValidate
*/
public function sceneComplete()
{
return $this->only(['id']);
}
/**
* @notes 接诊台聚合详情场景
* @return AppointmentValidate
*/
public function sceneReception()
{
return $this->only(['id']);
}
/**
* @notes 通知接诊医助场景
* @return AppointmentValidate
*/
public function sceneNotifyAssistant()
{
return $this->only(['id']);
}
public function sceneAddDoctorNote()
{
return $this->only(['diagnosis_id']);
}
public function sceneDoctorNotes()
{
return $this->only(['diagnosis_id']);
}
public function sceneDeleteDoctorNoteImage()
{
return $this->only(['note_id', 'image_type', 'image_path']);
}
/**
* 后台挂号编辑(消费者处方-挂号列表等)
*/
public function sceneAdminEdit()
{
return $this->only([
'id',
'appointment_date',
'appointment_time',
'period',
'appointment_type',
'status',
'remark',
'channel_source',
'channel_source_detail',
]);
}
/** 批量修改挂号渠道(权限同 doctor.appointment/edit */
public function sceneBatchEditChannel()
{
return $this->only(['ids', 'channel_source', 'channel_source_detail']);
}
}
@@ -1,54 +1,54 @@
<?php
declare(strict_types=1);
namespace app\adminapi\validate\order;
use app\common\validate\BaseValidate;
/**
* 订单验证
* Class OrderValidate
* @package app\adminapi\validate\order
*/
class OrderValidate extends BaseValidate
{
protected $rule = [
'id' => 'require|integer',
'patient_id' => 'require|integer',
'patient_id_optional' => 'integer',
'order_type' => 'require|in:1,2,3,4,5,6,7,8',
'amount' => 'require|float',
'status' => 'require|in:1,2,3,4',
'payment_method' => 'in:alipay,wechat,wechat_work,fubei,manual',
'remark' => 'string|max:500',
'order_no' => 'string|max:50',
'is_supplement' => 'in:0,1',
'order_ids' => 'require|array',
'assistant_id' => 'require|integer|gt:0',
'amounts' => 'require|array',
'order_types' => 'require|array',
];
protected $message = [
'patient_id.require' => '患者ID必填',
'order_type.require' => '订单类型必填',
'order_type.in' => '订单类型不正确',
'amount.require' => '订单金额必填',
'status.require' => '订单状态必填',
'status.in' => '订单状态不正确',
'payment_method.in' => '支付方式不正确',
];
protected $scene = [
'create' => ['patient_id', 'order_type', 'amount'],
'edit' => ['id'],
'detail' => ['id'],
'pay' => ['payment_method'],
'cancel' => ['id'],
'refund' => ['id'],
'delete' => ['id'],
'assign_assistant' => ['order_ids', 'assistant_id'],
'split' => ['id', 'amounts', 'order_types'],
];
}
<?php
declare(strict_types=1);
namespace app\adminapi\validate\order;
use app\common\validate\BaseValidate;
/**
* 订单验证
* Class OrderValidate
* @package app\adminapi\validate\order
*/
class OrderValidate extends BaseValidate
{
protected $rule = [
'id' => 'require|integer',
'patient_id' => 'require|integer',
'patient_id_optional' => 'integer',
'order_type' => 'require|in:1,2,3,4,5,6,7,8',
'amount' => 'require|float',
'status' => 'require|in:1,2,3,4',
'payment_method' => 'in:alipay,wechat,wechat_work,fubei,manual',
'remark' => 'string|max:500',
'order_no' => 'string|max:50',
'is_supplement' => 'in:0,1',
'order_ids' => 'require|array',
'assistant_id' => 'require|integer|gt:0',
'amounts' => 'require|array',
'order_types' => 'require|array',
];
protected $message = [
'patient_id.require' => '患者ID必填',
'order_type.require' => '订单类型必填',
'order_type.in' => '订单类型不正确',
'amount.require' => '订单金额必填',
'status.require' => '订单状态必填',
'status.in' => '订单状态不正确',
'payment_method.in' => '支付方式不正确',
];
protected $scene = [
'create' => ['patient_id', 'order_type', 'amount'],
'edit' => ['id'],
'detail' => ['id'],
'pay' => ['payment_method'],
'cancel' => ['id'],
'refund' => ['id'],
'delete' => ['id'],
'assign_assistant' => ['order_ids', 'assistant_id'],
'split' => ['id', 'amounts', 'order_types'],
];
}
@@ -1,190 +1,193 @@
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台(PHP版)
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用,可去除界面版权logo
// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
// | github下载:https://github.com/likeshop-github/likeadmin
// | 访问官网:https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\adminapi\validate\tcm;
use app\common\model\tcm\Diagnosis;
use app\common\validate\BaseValidate;
/**
* 中医辨房病因诊单验证
* Class DiagnosisValidate
* @package app\adminapi\validate\tcm
*/
class DiagnosisValidate extends BaseValidate
{
protected $rule = [
'id' => 'require|checkDiagnosis',
'patient_name' => 'require|length:1,50',
'id_card' => 'length:15,18',
'phone' => 'require|mobile',
'gender' => 'require|in:0,1',
'age' => 'require|number|between:0,150',
'diagnosis_type' => 'require',
'local_hospital_name' => 'require|max:255',
'status' => 'in:0,1',
'show_card' => 'in:0,1',
'create_source' => 'max:32',
'current_medications' => 'max:2000',
'tongue_images' => 'array',
'report_files' => 'array',
'diabetes_discovery_year' => 'max:50',
'start_date' => 'date',
'end_date' => 'date|checkDateRange',
'diagnosis_id' => 'require|integer|checkDiagnosisId',
'tracking_content' => 'require|length:1,1000',
'revisit_slot_start_offset' => 'integer|between:0,20',
];
protected $message = [
'id.require' => '参数缺失',
'patient_name.require' => '请输入患者姓名',
'patient_name.length' => '患者姓名长度须在1-50位字符',
'id_card.length' => '身份证号长度不正确',
'id_card.require' => '请输入身份证号',
'phone.require' => '请输入手机号',
'phone.mobile' => '手机号格式不正确',
'gender.require' => '请选择性别',
'gender.in' => '性别参数错误',
'age.require' => '请输入年龄',
'age.number' => '年龄必须为数字',
'age.between' => '年龄范围0-150',
'diagnosis_type.require' => '请选择诊断类型',
'local_hospital_name.require' => '请输入当地就诊医院名称',
'local_hospital_name.max' => '当地就诊医院名称最多255个字符',
'status.in' => '状态参数错误',
'create_source.max' => '渠道来源长度不能超过32个字符',
'current_medications.max' => '在用药物最多2000个字符',
'diabetes_discovery_year.max' => '发现糖尿病患病史最多50个字符',
'start_date.date' => '开始日期格式不正确',
'end_date.date' => '结束日期格式不正确',
'diagnosis_id.require' => '诊单ID不能为空',
'tracking_content.require' => '跟踪备注内容不能为空',
'tracking_content.length' => '跟踪备注最多1000个字符',
];
public function sceneAdd()
{
// 全局规则中含 tracking 相关字段,新增诊单不应校验诊单 ID
return $this->remove('id', true)
->remove('diagnosis_id', true)
->remove('tracking_content', true);
}
public function sceneEdit()
{
return $this->only(['id', 'patient_name', 'id_card', 'phone', 'gender', 'age', 'diagnosis_date', 'diagnosis_type', 'syndrome_type', 'marital_status', 'height', 'weight', 'region', 'systolic_pressure', 'diastolic_pressure', 'fasting_blood_sugar', 'diabetes_discovery_year', 'local_hospital_diagnosis', 'local_hospital_name', 'past_history', 'symptoms', 'tongue_coating', 'pulse', 'treatment_principle', 'prescription', 'doctor_advice', 'remark', 'current_medications', 'status', 'show_card', 'create_source']);
}
public function sceneId()
{
return $this->only(['id']);
}
public function sceneReadonlyDetail()
{
return $this->only(['id']);
}
public function sceneTrackingWindow()
{
return $this->only(['id', 'start_date', 'end_date']);
}
/** 新增跟踪备注:诊单ID + 备注内容 */
public function sceneAddTrackingNote()
{
return $this->only(['diagnosis_id', 'tracking_content']);
}
/** 拉取跟踪备注列表:诊单ID */
public function sceneTrackingNotes()
{
return $this->only(['diagnosis_id']);
}
<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台(PHP版)
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用,可去除界面版权logo
// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
// | github下载:https://github.com/likeshop-github/likeadmin
// | 访问官网:https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------
namespace app\adminapi\validate\tcm;
use app\common\model\tcm\Diagnosis;
use app\common\validate\BaseValidate;
/**
* 中医辨房病因诊单验证
* Class DiagnosisValidate
* @package app\adminapi\validate\tcm
*/
class DiagnosisValidate extends BaseValidate
{
protected $rule = [
'id' => 'require|checkDiagnosis',
'patient_name' => 'require|length:1,50',
'id_card' => 'length:15,18',
'phone' => 'require|mobile',
'gender' => 'require|in:0,1',
'age' => 'require|number|between:0,150',
'diagnosis_type' => 'require',
'local_hospital_name' => 'require|max:255',
'status' => 'in:0,1',
'show_card' => 'in:0,1',
'create_source' => 'max:32',
'current_medications' => 'max:2000',
'tongue_images' => 'array',
'report_files' => 'array',
'diabetes_discovery_year' => 'max:50',
'start_date' => 'date',
'end_date' => 'date|checkDateRange',
'diagnosis_id' => 'require|integer|checkDiagnosisId',
'tracking_content' => 'require|length:1,1000',
'revisit_slot_start_offset' => 'integer|between:0,20',
];
protected $message = [
'id.require' => '参数缺失',
'patient_name.require' => '请输入患者姓名',
'patient_name.length' => '患者姓名长度须在1-50位字符',
'id_card.length' => '身份证号长度不正确',
'id_card.require' => '请输入身份证号',
'phone.require' => '请输入手机号',
'phone.mobile' => '手机号格式不正确',
'gender.require' => '请选择性别',
'gender.in' => '性别参数错误',
'age.require' => '请输入年龄',
'age.number' => '年龄必须为数字',
'age.between' => '年龄范围0-150',
'diagnosis_type.require' => '请选择诊断类型',
'local_hospital_name.require' => '请输入当地就诊医院名称',
'local_hospital_name.max' => '当地就诊医院名称最多255个字符',
'status.in' => '状态参数错误',
'create_source.max' => '渠道来源长度不能超过32个字符',
'current_medications.max' => '在用药物最多2000个字符',
'diabetes_discovery_year.max' => '发现糖尿病患病史最多50个字符',
'start_date.date' => '开始日期格式不正确',
'end_date.date' => '结束日期格式不正确',
'diagnosis_id.require' => '诊单ID不能为空',
'tracking_content.require' => '跟踪备注内容不能为空',
'tracking_content.length' => '跟踪备注最多1000个字符',
];
public function sceneAdd()
{
// 全局规则中含 tracking 相关字段,新增诊单不应校验诊单 ID
return $this->remove('id', true)
->remove('diagnosis_id', true)
->remove('tracking_content', true);
}
public function sceneEdit()
{
return $this->only(['id', 'patient_name', 'id_card', 'phone', 'gender', 'age', 'diagnosis_date', 'diagnosis_type', 'syndrome_type', 'marital_status', 'height', 'weight', 'region', 'systolic_pressure', 'diastolic_pressure', 'fasting_blood_sugar', 'diabetes_discovery_year', 'local_hospital_diagnosis', 'local_hospital_name', 'past_history', 'symptoms', 'tongue_coating', 'pulse', 'treatment_principle', 'prescription', 'doctor_advice', 'remark', 'current_medications', 'status', 'show_card', 'create_source']);
}
public function sceneId()
{
return $this->only(['id']);
}
public function sceneReadonlyDetail()
{
return $this->only(['id']);
}
public function sceneTrackingWindow()
{
return $this->only(['id', 'start_date', 'end_date']);
}
/** 新增跟踪备注:诊单ID + 备注内容 */
public function sceneAddTrackingNote()
{
return $this->only(['diagnosis_id', 'tracking_content']);
}
/** 拉取跟踪备注列表:诊单ID */
public function sceneTrackingNotes()
{
return $this->only(['diagnosis_id']);
}
public function sceneGenerateQrcode()
{
return $this->only(['diagnosis_id', 'doctor_id', 'patient_id', 'share_user_id', 'mini_program_path'])
->append('patient_id', 'require')
->append('share_user_id', 'require')
->append('diagnosis_id', 'checkQrcodeIds')
->append('doctor_id', 'checkQrcodeIds');
// The global diagnosis_id rule is required for diagnosis APIs, but
// video QR codes identify the doctor instead. Keep diagnosis_id
// optional here while still validating it when it is supplied.
->remove('diagnosis_id', 'require')
->append('patient_id', 'require|integer|checkQrcodeIds')
->append('share_user_id', 'require|integer')
->append('doctor_id', 'integer');
}
public function sceneGenerateOrderQrcode()
{
return $this->only([]);
}
public function sceneFillIdCard()
{
return $this->only(['id', 'id_card'])
->append('id', 'require')
->append('id_card', 'require|length:15,18');
}
public function sceneGuahaoLogList()
{
return $this->only(['id']);
}
/** 业务订单 tab:设置复诊接诊率统计起始偏移 */
public function sceneSetRevisitSlotStartOffset()
{
return $this->only(['id', 'revisit_slot_start_offset'])
->append('revisit_slot_start_offset', 'require|integer|between:0,20');
}
protected function checkDiagnosis($value)
{
$diagnosis = Diagnosis::findOrEmpty($value);
if ($diagnosis->isEmpty()) {
return '诊单不存在';
}
return true;
}
/** 校验 diagnosis_id 字段(addTrackingNote 等场景使用,避开 id 字段) */
protected function checkDiagnosisId($value)
{
$diagnosis = Diagnosis::findOrEmpty($value);
if ($diagnosis->isEmpty()) {
return '诊单不存在';
}
return true;
}
/** end_date 不能早于 start_date */
protected function checkDateRange($value, $rule, $data = [])
{
$start = $data['start_date'] ?? '';
if ($start && $value && strtotime($value) < strtotime($start)) {
return '结束日期不能早于开始日期';
}
return true;
}
/** 视频场景需 doctor_id,确认诊单需 diagnosis_id */
protected function checkQrcodeIds($value, $rule, $data = [])
{
$page = $data['mini_program_path'] ?? '';
$hasDoctor = !empty($data['diagnosis_id']);
$hasDiagnosis = !empty($data['diagnosis_id']);
if ($page === 'pages/login/login') {
return $hasDoctor ? true : '视频二维码需传挂号医生ID';
}
return $hasDiagnosis ? true : '诊单ID不能为空';
}
}
public function sceneGenerateOrderQrcode()
{
return $this->only([]);
}
public function sceneFillIdCard()
{
return $this->only(['id', 'id_card'])
->append('id', 'require')
->append('id_card', 'require|length:15,18');
}
public function sceneGuahaoLogList()
{
return $this->only(['id']);
}
/** 业务订单 tab:设置复诊接诊率统计起始偏移 */
public function sceneSetRevisitSlotStartOffset()
{
return $this->only(['id', 'revisit_slot_start_offset'])
->append('revisit_slot_start_offset', 'require|integer|between:0,20');
}
protected function checkDiagnosis($value)
{
$diagnosis = Diagnosis::findOrEmpty($value);
if ($diagnosis->isEmpty()) {
return '诊单不存在';
}
return true;
}
/** 校验 diagnosis_id 字段(addTrackingNote 等场景使用,避开 id 字段) */
protected function checkDiagnosisId($value)
{
$diagnosis = Diagnosis::findOrEmpty($value);
if ($diagnosis->isEmpty()) {
return '诊单不存在';
}
return true;
}
/** end_date 不能早于 start_date */
protected function checkDateRange($value, $rule, $data = [])
{
$start = $data['start_date'] ?? '';
if ($start && $value && strtotime($value) < strtotime($start)) {
return '结束日期不能早于开始日期';
}
return true;
}
/** 视频场景需 doctor_id,确认诊单需 diagnosis_id */
protected function checkQrcodeIds($value, $rule, $data = [])
{
$page = $data['mini_program_path'] ?? '';
$hasDoctor = !empty($data['doctor_id']);
$hasDiagnosis = !empty($data['diagnosis_id']);
if ($page === 'pages/login/login') {
return $hasDoctor ? true : '视频二维码需传挂号医生ID';
}
return $hasDiagnosis ? true : '诊单ID不能为空';
}
}
@@ -17,7 +17,10 @@ class PrescriptionLibraryValidate extends BaseValidate
'formula_type' => 'in:主方,辅方',
'herbs' => 'require|array',
'is_public' => 'in:0,1',
'disable_edit' => 'in:0,1'
'disable_edit' => 'in:0,1',
'report_id' => 'require|number|gt:0',
'content' => 'require|max:12000',
'limit' => 'integer|between:1,500'
];
protected $message = [
@@ -29,7 +32,14 @@ class PrescriptionLibraryValidate extends BaseValidate
'herbs.require' => '药材列表不能为空',
'herbs.array' => '药材列表格式错误',
'is_public.in' => '是否公开参数错误',
'disable_edit.in' => '禁用修改参数错误'
'disable_edit.in' => '禁用修改参数错误',
'report_id.require' => '报告ID不能为空',
'report_id.number' => '报告ID必须为数字',
'report_id.gt' => '报告ID必须大于0',
'content.require' => '报告内容不能为空',
'content.max' => '报告内容最多12000个字符',
'limit.integer' => '数量限制必须为整数',
'limit.between' => '数量限制必须在1到500之间'
];
/**
@@ -63,4 +73,36 @@ class PrescriptionLibraryValidate extends BaseValidate
{
return $this->only(['id']);
}
/**
* @notes 读取已保存的处方 AI 解释
*/
public function sceneAiReports()
{
return $this->only(['id']);
}
/**
* @notes 查询尚无任何 AI 报告的处方
*/
public function sceneMissingAiReports()
{
return $this->only(['limit']);
}
/**
* @notes 重新生成全部固定模型的处方 AI 解释
*/
public function sceneGenerateAiReports()
{
return $this->only(['id']);
}
/**
* @notes 编辑一份已保存的处方 AI 解释
*/
public function sceneEditAiReport()
{
return $this->only(['id', 'report_id', 'content']);
}
}
@@ -1,129 +1,129 @@
<?php
declare(strict_types=1);
namespace app\adminapi\validate\tcm;
use app\common\validate\BaseValidate;
class PrescriptionOrderValidate extends BaseValidate
{
protected $rule = [
'id' => 'require|integer',
'diagnosis_id' => 'require|integer|gt:0',
'prescription_id' => 'require|integer',
'pay_order_ids' => 'array',
'recipient_name' => 'require|max:50',
'recipient_phone' => 'require|max:20',
'shipping_address' => 'require|max:500',
'is_follow_up' => 'in:0,1',
'prev_staff' => 'max:100',
'service_channel' => 'max:100',
'service_package' => 'max:100',
'tracking_number' => 'max:80',
'express_company' => 'max:20',
'ship_mode' => 'in:gancao,direct',
'resolution' => 'require|in:CONFIRM_SUCCESS,CONFIRM_NOT_CREATED',
'remote_order_no' => 'max:64',
'note' => 'require|max:1000',
'fee_type' => 'require|in:1,2,3,4,5,6,7,8',
'amount' => 'require|float',
'order_type' => 'require|in:1,2,3,4,5,6,7,8',
'pay_amount' => 'require|float|egt:0',
'pay_remark' => 'max:200',
'remark_extra' => 'max:500',
'remark_assistant' => 'max:500',
'action' => 'require|in:approve,reject',
'remark' => 'max:500',
'summary' => 'require|max:500',
'prescription_audit_status' => 'in:0,1,2',
'payment_slip_audit_status' => 'in:0,1,2',
'prescription_audit_remark' => 'max:500',
'payment_slip_audit_remark' => 'max:500',
'fulfillment_status' => 'require|integer|in:3,7,8,9,11,12',
'reason' => 'require|max:500',
'refund_amount' => 'float|egt:0',
'patient_name' => 'require|max:50',
'phone' => 'require|max:20',
'phone_tail' => 'max:20|regex:/^\\d*$/',
];
protected $message = [
'prescription_id.require' => '请选择处方',
'diagnosis_id.require' => '请选择诊单',
'recipient_name.require' => '请输入收货人',
'recipient_phone.require' => '请输入收货手机',
'shipping_address.require' => '请输入收货地址',
'fee_type.require' => '请选择费用类别',
'amount.require' => '请输入订单金额',
'action.require' => '请选择审核操作',
'patient_name.require' => '请输入患者姓名',
'phone.require' => '请输入手机号',
'tracking_number.require' => '请输入快递单号',
'phone_tail.regex' => '手机后四位仅支持数字',
'reason.require' => '请填写退款原因',
];
protected $scene = [
'create' => [
'prescription_id', 'diagnosis_id', 'recipient_name', 'recipient_phone', 'shipping_address',
'is_follow_up', 'prev_staff', 'service_channel', 'service_package',
'tracking_number', 'express_company', 'ship_mode', 'fee_type', 'amount', 'remark_extra', 'remark_assistant', 'pay_order_ids',
],
'detail' => ['id'],
'edit' => [
'id', 'recipient_name', 'recipient_phone', 'shipping_address',
'is_follow_up', 'prev_staff', 'service_channel', 'service_package',
'tracking_number', 'express_company', 'fee_type', 'amount', 'remark_extra', 'remark_assistant', 'pay_order_ids',
],
'ddcode' => ['id', 'tracking_number', 'express_company'],
'logisticsTrace' => ['id', 'phone_tail'],
'logisticsJdUpdate' => ['id'],
'auditPrescription' => ['id', 'action', 'remark'],
'auditPayment' => ['id', 'action', 'remark'],
'withdraw' => ['id'],
'ship' => ['id', 'tracking_number', 'express_company', 'ship_mode'],
'logs' => ['id'],
'addLog' => ['id', 'summary'],
'paidPayOrders' => ['diagnosis_id'],
'addPayOrder' => ['id', 'order_type', 'pay_amount', 'pay_remark'],
'linkPayOrder' => ['id', 'pay_order_id'],
'requestCompletion' => ['id'],
'complete' => ['id', 'fulfillment_status'],
'refund' => ['id', 'reason', 'refund_amount'],
'submitGancaoRecipel' => ['id'],
'uploadToPharmacy' => ['id'],
'previewGancaoRecipel' => ['id'],
'patchPrescriptionPatient' => ['id', 'patient_name', 'phone'],
'patchPrescriptionUsage' => ['id', 'times_per_day', 'usage_days', 'medication_days', 'aux_times_per_day', 'aux_usage_days'],
'updateAmount' => ['id', 'amount'],
'setShipMode' => ['id', 'ship_mode'],
'confirmGancaoSubmission' => ['id', 'resolution', 'remote_order_no', 'note'],
];
public function updateAmount(): PrescriptionOrderValidate
{
return $this->only(['id', 'amount'])
->append('id', 'require|integer|gt:0')
->append('amount', 'require|float|egt:0');
}
public function ddcode(): PrescriptionOrderValidate
{
return $this->only(['id', 'tracking_number', 'express_company'])
->append('id', 'require|integer|gt:0')
->append('tracking_number', 'require|max:80')
->append('express_company', 'max:20');
}
public function patchPrescriptionUsage(): PrescriptionOrderValidate
{
return $this->only(['id', 'times_per_day', 'usage_days', 'medication_days', 'aux_times_per_day', 'aux_usage_days'])
->append('id', 'require|integer|gt:0')
->append('times_per_day', 'require|integer|between:1,6')
->append('usage_days', 'require|integer|between:1,999')
->append('medication_days', 'require|integer|between:1,999')
->append('aux_times_per_day', 'integer|between:1,6')
->append('aux_usage_days', 'integer|between:1,999');
}
}
<?php
declare(strict_types=1);
namespace app\adminapi\validate\tcm;
use app\common\validate\BaseValidate;
class PrescriptionOrderValidate extends BaseValidate
{
protected $rule = [
'id' => 'require|integer',
'diagnosis_id' => 'require|integer|gt:0',
'prescription_id' => 'require|integer',
'pay_order_ids' => 'array',
'recipient_name' => 'require|max:50',
'recipient_phone' => 'require|max:20',
'shipping_address' => 'require|max:500',
'is_follow_up' => 'in:0,1',
'prev_staff' => 'max:100',
'service_channel' => 'max:100',
'service_package' => 'max:100',
'tracking_number' => 'max:80',
'express_company' => 'max:20',
'ship_mode' => 'in:gancao,direct',
'resolution' => 'require|in:CONFIRM_SUCCESS,CONFIRM_NOT_CREATED',
'remote_order_no' => 'max:64',
'note' => 'require|max:1000',
'fee_type' => 'require|in:1,2,3,4,5,6,7,8',
'amount' => 'require|float',
'order_type' => 'require|in:1,2,3,4,5,6,7,8',
'pay_amount' => 'require|float|egt:0',
'pay_remark' => 'max:200',
'remark_extra' => 'max:500',
'remark_assistant' => 'max:500',
'action' => 'require|in:approve,reject',
'remark' => 'max:500',
'summary' => 'require|max:500',
'prescription_audit_status' => 'in:0,1,2',
'payment_slip_audit_status' => 'in:0,1,2',
'prescription_audit_remark' => 'max:500',
'payment_slip_audit_remark' => 'max:500',
'fulfillment_status' => 'require|integer|in:3,7,8,9,11,12',
'reason' => 'require|max:500',
'refund_amount' => 'float|egt:0',
'patient_name' => 'require|max:50',
'phone' => 'require|max:20',
'phone_tail' => 'max:20|regex:/^\\d*$/',
];
protected $message = [
'prescription_id.require' => '请选择处方',
'diagnosis_id.require' => '请选择诊单',
'recipient_name.require' => '请输入收货人',
'recipient_phone.require' => '请输入收货手机',
'shipping_address.require' => '请输入收货地址',
'fee_type.require' => '请选择费用类别',
'amount.require' => '请输入订单金额',
'action.require' => '请选择审核操作',
'patient_name.require' => '请输入患者姓名',
'phone.require' => '请输入手机号',
'tracking_number.require' => '请输入快递单号',
'phone_tail.regex' => '手机后四位仅支持数字',
'reason.require' => '请填写退款原因',
];
protected $scene = [
'create' => [
'prescription_id', 'diagnosis_id', 'recipient_name', 'recipient_phone', 'shipping_address',
'is_follow_up', 'prev_staff', 'service_channel', 'service_package',
'tracking_number', 'express_company', 'ship_mode', 'fee_type', 'amount', 'remark_extra', 'remark_assistant', 'pay_order_ids',
],
'detail' => ['id'],
'edit' => [
'id', 'recipient_name', 'recipient_phone', 'shipping_address',
'is_follow_up', 'prev_staff', 'service_channel', 'service_package',
'tracking_number', 'express_company', 'fee_type', 'amount', 'remark_extra', 'remark_assistant', 'pay_order_ids',
],
'ddcode' => ['id', 'tracking_number', 'express_company'],
'logisticsTrace' => ['id', 'phone_tail'],
'logisticsJdUpdate' => ['id'],
'auditPrescription' => ['id', 'action', 'remark'],
'auditPayment' => ['id', 'action', 'remark'],
'withdraw' => ['id'],
'ship' => ['id', 'tracking_number', 'express_company', 'ship_mode'],
'logs' => ['id'],
'addLog' => ['id', 'summary'],
'paidPayOrders' => ['diagnosis_id'],
'addPayOrder' => ['id', 'order_type', 'pay_amount', 'pay_remark'],
'linkPayOrder' => ['id', 'pay_order_id'],
'requestCompletion' => ['id'],
'complete' => ['id', 'fulfillment_status'],
'refund' => ['id', 'reason', 'refund_amount'],
'submitGancaoRecipel' => ['id'],
'uploadToPharmacy' => ['id'],
'previewGancaoRecipel' => ['id'],
'patchPrescriptionPatient' => ['id', 'patient_name', 'phone'],
'patchPrescriptionUsage' => ['id', 'times_per_day', 'usage_days', 'medication_days', 'aux_times_per_day', 'aux_usage_days'],
'updateAmount' => ['id', 'amount'],
'setShipMode' => ['id', 'ship_mode'],
'confirmGancaoSubmission' => ['id', 'resolution', 'remote_order_no', 'note'],
];
public function updateAmount(): PrescriptionOrderValidate
{
return $this->only(['id', 'amount'])
->append('id', 'require|integer|gt:0')
->append('amount', 'require|float|egt:0');
}
public function ddcode(): PrescriptionOrderValidate
{
return $this->only(['id', 'tracking_number', 'express_company'])
->append('id', 'require|integer|gt:0')
->append('tracking_number', 'require|max:80')
->append('express_company', 'max:20');
}
public function patchPrescriptionUsage(): PrescriptionOrderValidate
{
return $this->only(['id', 'times_per_day', 'usage_days', 'medication_days', 'aux_times_per_day', 'aux_usage_days'])
->append('id', 'require|integer|gt:0')
->append('times_per_day', 'require|integer|between:1,6')
->append('usage_days', 'require|integer|between:1,999')
->append('medication_days', 'require|integer|between:1,999')
->append('aux_times_per_day', 'integer|between:1,6')
->append('aux_usage_days', 'integer|between:1,999');
}
}