'require|in:' . UserTerminalEnum::WECHAT_MMP . ',' . UserTerminalEnum::WECHAT_OA . ',' // . UserTerminalEnum::H5 . ',' . UserTerminalEnum::PC . ',' . UserTerminalEnum::IOS . // ',' . UserTerminalEnum::ANDROID, 'action' => 'require',// 下单动作(结算/下单) 'goods' => 'require|array|checkGoods',// 下单服务 'trip_way' => 'requireIf:action,sumbit|in:'.OrderEnum::TRIP_WAY_TAXI.','.OrderEnum::TRIP_WAY_BUS, 'coach_id' => 'requireIf:action,sumbit|checkCoach', 'appoint_time' => 'requireIf:action,sumbit|checkAppoint',// 预约时间 'address_id' => 'requireIf:action,sumbit|checkAddress', // 'pay_way' => 'requireIf:action,sumbit', ]; protected $message = [ 'user_id.require' => '参数缺失', 'action.require' => '下单动作缺失', 'goods.require' => '缺失下单服务信息', 'goods.array' => '下单服务信息格式不正确', 'trip_way.requireIf' => '请选择出行方式', 'trip_way.in' => '出行方式错误', 'coach_id.requireIf' => '请选择技师', 'appoint_time.requireIf' => '请选择预约时间', 'address_id.requireIf' => '请选择地址', 'terminal.require' => '终端参数缺失', 'terminal.in' => '终端参数状态值不正确', 'pay_way.requireIf' => '请选择支付方式', // 'appoint_time_start.require' => '请选择预约上门开始时间', // 'appoint_time_end.require' => '请选择预约上门结束时间', ]; /** * @notes 验证下单服务信息 * @param $value * @param $rule * @param $data * @return bool|string * @author ljj * @date 2022/2/24 5:01 下午 */ public function checkGoods($value, $rule, $data) { foreach ($value as $goods){ if (!isset($goods['id']) || !isset($goods['goods_num'])) { return '下单服务参数缺失'; } $result = Goods::where(['id'=>$goods['id']])->findOrEmpty(); if ($result->isEmpty()) { return '下单服务不存在'; } if ($result['status'] == GoodsEnum::UNSHELVE) { return '服务已下架'; } return true; } } /** * @notes 获取预约时间 * @param $value * @param $rule * @param $data * @return string|true * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author cjhao * @date 2024/9/9 14:45 */ public function checkAppoint($value,$rule,$data) { if('sumbit' != $data['action']){ return true; } $dateMd = date('m-d',$value); $dateHi = date('H:i',$value); $coachOrderAppoint = CoachLogic::getCoachServerTime($data['coach_id']); $dateMdOrderAppoint = $coachOrderAppoint[$dateMd] ?? []; $dateMdOrderAppoint = array_column($dateMdOrderAppoint,null,'time'); $dateTime = $dateMdOrderAppoint[$dateHi] ?? []; if(empty($dateTime)){ return '预约时间段错误'; } if(3 == $dateTime['status']){ return '当前时段已被预约'; } if(2 == $dateTime['status']){ return '当前时段技师在休息'; } return true; } public function checkAddress($value,$rule,$data) { if(empty($value) && 'sumbit' == $data['action']){ return '请选择地址'; } return true; } /** * @notes 验证技师 * @param $value * @param $rule * @param $data * @return string|true * @author cjhao * @date 2024/9/9 15:00 */ public function checkCoach($value,$rule,$data) { if('sumbit' != $data['action']){ return true; } $coach = Coach::where(['id'=>$value])->findOrEmpty(); if($coach->isEmpty()){ return '技师不存在'; } if(0 == $coach->work_status){ return '技师休息中'; } if(0 == $coach->server_status){ return '技师已停止服务'; } return true; } }