__handlePropertyHandler(__CLASS__); } // 临时-写死,急上线,后续配置为动态的 public $payment_data = ['white_shark' => '大白鲨']; /** * 订单列表 * @return mixed * @example param_json_data string: * {"handshake":"","data":{"page":1,"page_size":5,"search":{"order_sn":"","nick":"","user_id":"","user_code":"","device_type":"","status":"","pay_gate_way":"","is_admin_action":"","vip_title":"","stime":"","otime":"","stime_pay":"","otime_pay":""},"order":"created_at","order_sort":"desc"}} * @deprecated 目前,从 支付方式id 等价于 查询出支付通道! pay_gate_way */ public function list() { $inputData = $this->getJsonData(); $page = isset($inputData['page']) ? (int) $inputData['page'] : 1; $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20; $select = ['vip_order.*', 'user.nick', 'user.id AS user_id', 'user.code AS user_code', 'user.device_type']; $model = Model::query(); $order_key = isset($inputData['order']) ? $inputData['order'] : 'id'; $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'desc'; if (!$order_key) { $order_key = 'id'; //不要信任前端,他可能会传个空字符串过来! } if (!$order_value) { $order_value = 'desc'; } // order_sn订单号,status 订单状态, pay_gate_way 支付方式ID(支付方式/支付通道), device_type设备类型,stime 订单创建时间-开始, otime 订单创建时间-结束, stime_pay 订单支付时间-开始, otime_pay 订单支付时间结束 is_admin_action 后台是否查到处理 // nick 用户表-用户名,user_id 用户表-用户ID, user_code 用户表-用户邀请码, $search = isset($inputData['search']) ? $inputData['search'] : array(); if ($search) { foreach ($search as $k => $v) { if (!strlen((string) $v)) { continue; } switch ($k) { case "nick": // 用户表-昵称 $model->where('user.' . $k, 'like', "{$v}%"); break; case "user_code": // 用户表-邀请码 $model->where('user.' . $k, $v); break; case "order_sn": // 订单号 $model->where('vip_order.' . $k, 'like', "{$v}%"); break; case "stime": // 自定义-订单开始日期 $model->where('vip_order.created_at', '>=', $v); break; case "otime": // 自定义-订单结束日期 $model->where('vip_order.created_at', '<=', Carbon::parse($v)->endOfDay()->toDateTimeString()); break; case "stime_pay": // 自定义-订单支付开始日期 $model->where('vip_order.pay_time', '>=', $v); break; case "otime_pay": // 自定义-订单支付结束日期 $model->where('vip_order.pay_time', '<=', $v); break; default: $model->where('vip_order.' . $k, $v); } } } $result = $model->select($select)->leftJoin('user', 'vip_order.user_id', '=', 'user.id')->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page); $payment = make(OrderRepository::class)->all(['name', 'pay_code'])->keyBy('pay_code'); return json_success($result); } /** * 订单列表 - 支付方式/支付通道列表(下拉选项) * @return object * @example param_json_data string nobody */ public function paymentData() { //return json_success(make(OrderRepository::class)->getPaymentData()); $data = ['pay_gate_way' => []]; $items = PaymentModel::query()->orderBy('id', 'DESC')->get(); if ($items->count()) { foreach ($items as $item) { $data['pay_gate_way'][] = ['id' => $item->id, 'name' => $item->name]; } } // 特殊处理,兼容目前前端的对接数据 // $r = $this->payment_data; // $data = array(); // foreach ($r as $k => $v) { // $data[] = [ // 'id' => $k, // 'name' => $v, // ]; // } return json_success($data); } /** * 订单列表 - 购买内容(下拉选项) * @return object * @example param_json_data string nobody */ public function vipTitleData() { $data = []; $items = VipCardModel::query()->orderBy('sort', 'DESC')->get(['id', 'title']); if ($items->count()) { foreach ($items as $item) { $data[] = ['id' => $item->id, 'name' => $item->title]; } } /*$select = ['vip_title']; $r = Model::query() ->select($select) ->groupBy('vip_title') ->get(); $data = array(); foreach ($r as $k => $v) { $data[] = [ 'id' => $k, 'name' => $v->vip_title, ]; }*/ return json_success($data); } /** * 补单 * @param ValidatorFactoryInterface $validatorFactory * @return mixed * @example param_json_data string: {"handshake":"","data":{"order_sn":"YV202002242305189073","trade_no":"xx支付单号","repair_remark":"xx补单备注"}} * 处理逻辑:vip_order 订单表标示已付款和付款日期; collections 表创建收款单记录, user表添加会员日期, * 成功之后,在mongodb中创建一个 补单记录。 * 备注: 不需要去内调回调接口,不要验签! */ public function again(ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $rules = [ 'order_sn' => 'required|string', 'trade_no' => 'required|string', //支付单号 'repair_remark' => 'required|string', ]; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { return json_fail($validator->errors()->first()); } $order_sn = $inputData['order_sn']; $trade_no = $inputData['trade_no']; $repair_remark = isset($inputData['repair_remark']) ? $inputData['repair_remark'] : ''; $order_info = make(OrderRepository::class)->getOrderInfo($order_sn); if (!$order_info) { return json_fail('订单不存在'); } // if ($order_info['pay_time']) { // return json_fail('此订单已处理,请勿重复操作!'); // } if ($order_info['status'] == 1) { return json_fail('此订单已处理,请勿重复操作!!'); } $user_info = UserModel::query()->where('id', $order_info['user_id'])->first(); //处理补单 if (!make(OrderRepository::class)->again($order_sn, $trade_no, $repair_remark)) { return json_fail('处理失败'); } // 创建管理员日志 $oldItem = clone $user_info; $newitem = UserModel::query()->where('id', $order_info['user_id'])->first(); $oldItem2 = clone $order_info; $newitem2 = make(OrderRepository::class)->getOrderInfo($order_sn); //返佣计算 异步 make(QueueService::class)->rebateTwoUserJob(['user_id' => $newitem2->user_code, 'amount' => $newitem2->real_amount]); $logSubject = "补单,用户id:{$user_info['id']},来源订单号:{$order_sn}"; $logSvalue = $oldItem->id; $logDbData = ['after_items' => [$newitem->toArray(), $newitem2->toArray()], 'before_items' => [$oldItem->toArray(), $oldItem2->toArray()]]; $this->log($logSubject, $logSvalue, $logDbData); return json_success('', '处理成功'); } /** * 每日充值(统计列表) ( v1 版本, 后续项目空闲 v2优化-会单独新设一个表,然后服务器定时任务去查一次,再往新表存下统计数据 ) * @param ValidatorFactoryInterface $validatorFactory * @return mixed * @example param_json_data string: * {"handshake":"","data":{"search":{"pay_gate_way":"","stime":"","otime":""}}} * * {"handshake":"","data":{"search":{"pay_gate_way":"","stime":"2020-02-01","otime":"2020-02-28"}}} * * {"handshake":"","data":{"search":{"pay_gate_way":"","stime":"2020-02-01","otime":"2020-02-28"}}} */ public function dayList() { $inputData = $this->getJsonData(); $search = isset($inputData['search']) ? $inputData['search'] : array(); $stime = isset($search['stime']) ? $search['stime'] : ''; // 传参如: 2020-2-20 if (!$stime) { //$stime = date('Y-m-d'); // 今天日期 $stime = date('Y-m-1'); // 此月1号 } $otime = isset($search['otime']) ? Carbon::parse($search['otime'])->endOfDay()->toDateTimeString() : ''; // 传参如: 2020-2-22 if (!$otime) { $otime = date('Y-m-d', strtotime("+1 day")); //明天日期 } $pay_gate_way = isset($search['pay_gate_way']) ? $search['pay_gate_way'] : ''; // 查询所有数据统计 if ($pay_gate_way) { $sql = "SELECT LEFT (created_at,10) AS created_date,count(*) AS order_all,sum(order_amount) AS order_amount_all,sum(real_amount) AS real_amount_all,pay_gate_way FROM vip_order WHERE pay_gate_way=? AND created_at>=? AND created_at<=? GROUP BY pay_gate_way,created_date ORDER BY created_date DESC,pay_gate_way ASC"; $order_data_all = Db::select($sql, [$pay_gate_way, $stime, $otime]); } else { $sql = "SELECT LEFT (created_at,10) AS created_date,count(*) AS order_all,sum(order_amount) AS order_amount_all,sum(real_amount) AS real_amount_all,pay_gate_way FROM vip_order WHERE created_at>=? AND created_at<=? GROUP BY pay_gate_way,created_date ORDER BY created_date DESC,pay_gate_way ASC"; $order_data_all = Db::select($sql, [$stime, $otime]); } if (!$order_data_all) { $order_data_all = array(); } else { $order_data_all = json_decode(json_encode($order_data_all), true); } // 仅查支付成功的数据统计 if ($pay_gate_way) { $sql = "SELECT LEFT (created_at,10) AS created_date,count(*) AS order_all,sum(order_amount) AS order_amount_all,sum(real_amount) AS real_amount_all,pay_gate_way FROM vip_order WHERE pay_gate_way=? AND status=1 AND created_at>=? AND created_at<=? GROUP BY pay_gate_way,created_date ORDER BY created_date DESC,pay_gate_way ASC"; $order_data_pay = Db::select($sql, [$pay_gate_way, $stime, $otime]); } else { $sql = "SELECT LEFT (created_at,10) AS created_date,count(*) AS order_all,sum(order_amount) AS order_amount_all,sum(real_amount) AS real_amount_all,pay_gate_way FROM vip_order WHERE status=1 AND created_at>=? AND created_at<=? GROUP BY pay_gate_way,created_date ORDER BY created_date DESC,pay_gate_way ASC"; $order_data_pay = Db::select($sql, [$stime, $otime]); } if (!$order_data_pay) { $order_data_pay = array(); } else { $order_data_pay = json_decode(json_encode($order_data_pay), true); } // 开始业务处理和统计 ( 当前是v1版(不提供分页,便于统计),后续 优化时 由 服务器做个定时任务,比如早上1点,定时去查询统计昨日的数据后 往 指定的新表 记录统计后的数据;后台在直接从新表中原样展示数据(可提供分页) ) $order_data_pay_action = array(); if ($order_data_pay) { foreach ($order_data_pay as $v) { $order_data_pay_action[$v['pay_gate_way']][] = $v; } } // 组装数据: (日期,支付方式ID,支付通道,创建订单数,成功订单量,订单金额,成功金额,成功率% ) $data = array(); foreach ($order_data_all as $v) { $action_order_data_pay_info = self::actionOrderDataPayInfo($v['pay_gate_way'], $v['created_date'], $order_data_pay_action); $order_all_pay = isset($action_order_data_pay_info['order_all']) ? $action_order_data_pay_info['order_all'] : 0; $real_amount_all_pay = isset($action_order_data_pay_info['real_amount_all']) ? $action_order_data_pay_info['real_amount_all'] : 0; $conversion = round(round($order_all_pay / $v['order_all'], 4) * 100, 2); $data[] = array( 'created_date' => $v['created_date'], 'pay_gate_way' => $v['pay_gate_way'], 'order_all' => $v['order_all'], //创建订单数 'order_all_pay' => $order_all_pay, //成功订单量 'real_amount_all' => $v['real_amount_all'], //订单金额(以实付金额为准,咨询过 田七 ), order_amount_all 为订单原始金额 'real_amount_all_pay' => $real_amount_all_pay, //真实支付的金额(以实付金额为准,咨询过 田七 )-用户已付款的 'conversion' => $conversion, ); } return json_success($data); } /** * @param $pay_gate_way * @param $created_date * @param $order_data_pay_action * @return array */ protected function actionOrderDataPayInfo($pay_gate_way = '', $created_date = '', $order_data_pay_action = array()) { if (isset($order_data_pay_action[$pay_gate_way])) { foreach ($order_data_pay_action[$pay_gate_way] as $kk => $vv) { if ($vv['created_date'] == $created_date) { return $vv; break; } } return array(); } else { return array(); } } /** * 每日用户成功率(统计列表) ( v1 版本, 后续项目空闲 v2优化-会单独新设一个表,然后服务器定时任务去查一次,再往新表存下统计数据 ) * @param ValidatorFactoryInterface $validatorFactory * @return mixed * @example param_json_data string: * {"handshake":"","data":{"search":{"stime":"","otime":""}}} * * {"handshake":"","data":{"search":{"stime":"2020-02-01","otime":"2020-02-28"}}} * * {"handshake":"","data":{"search":{"stime":"2020-02-01","otime":"2020-02-28"}}} */ public function dayListUser() { set_time_limit(0); $inputData = $this->getJsonData(); $search = isset($inputData['search']) ? $inputData['search'] : array(); $stime = isset($search['stime']) ? $search['stime'] : ''; // 传参如: 2020-2-20 if (!$stime) { $stime = date('Y-m-1'); // 此月1号 } $otime = isset($search['otime']) ? Carbon::parse($search['otime'])->endOfDay()->toDateTimeString() : ''; // 传参如: 2020-2-22 if (!$otime) { $otime = Carbon::tomorrow()->endOfDay()->toDateTimeString(); //明天日期 } $select = [ Db::raw('LEFT (created_at,10) AS created_date'), //创建时间,转xxxx-xx-xx 'order_sn', 'user_id', // 用户id 'order_amount', // 订单金额 'real_amount', // 实付金额 'status', // 0待支付1已支付2已取消 'pay_time', // 付款时间 'trade_no', ]; // 查询所有数据 $result = VipOrderModel::query()->select($select)->where('created_at', '>=', $stime)->where('created_at', '<=', $otime)->orderByRaw('created_date desc')->get()->toArray(); // 业务处理统计开始: $data_default 为容器变量,勿赋值,切记! $data_default = [ 'created_date' => '', // 2020-02-21 'order_all' => 0, // 100 创建订单数 'order_all_pay' => 0, // 50 支付订单数 'user_all' => 0, // 30 下单用户量 'user_all_pay' => 0, // 10 支付用户量 'amount_all' => 0, // 订单金额(以实付金额为准,咨询过 田七 ), order_amount_all 为订单原始金额 'amount_all_pay' => 0, // 真实支付的金额(以实付金额为准,咨询过 田七 )-用户已付款的 'user_all_uid_data' => [], // 用户ID集合 - 便于统计用户量 'user_all_pay_uid_data' => [], // 付款的用户ID集合 - 便于统计用户量 'real_order' => 0, // 订单成功率 = 支付订单/创建订单 (单位%) 'real_user' => 0, // 用户成功率 = 支付用户/下单用户 (单位%) 'real_other' => 0, ]; $data = []; if (!$result) { return json_success($data); } $_now_created_date = ''; $k_max = count($result) - 1; // 下标 foreach ($result as $k => $v) { if (!$_now_created_date) { // 初始 $_now_created_date = $v['created_date']; $i = 0; $data[$i] = $data_default; $data[$i]['created_date'] = $_now_created_date; } if ($_now_created_date != $v['created_date']) { $_now_created_date = $v['created_date']; //第2日时 $y = $i; $i++; $data[$i] = $data_default; $data[$i]['created_date'] = $_now_created_date; // 计算各成功率(上一天数据) $data[$y] = self::actionReal($data[$y]); } $data[$i]['order_all']++; $data[$i]['amount_all'] += $v['real_amount']; if (!in_array($v['user_id'], $data[$i]['user_all_uid_data'])) { $data[$i]['user_all_uid_data'][] = $v['user_id']; //同个ID用户仅算1个用户 } if ($v['status'] == 1) { // 付款成功的 $data[$i]['order_all_pay']++; $data[$i]['amount_all_pay'] += $v['real_amount']; if (!in_array($v['user_id'], $data[$i]['user_all_pay_uid_data'])) { $data[$i]['user_all_pay_uid_data'][] = $v['user_id']; //同个ID用户仅算1个用户 } } //处理特殊情况-最后条数据时 if ($k == $k_max) { $y = $i; $data[$y] = self::actionReal($data[$y]); } } return json_success($data); } /** * 内用 - 业务计算各种成功率 ( 已封装好,勿动 ) * @author x.b * @example self::dayListUser()方法在内调这里,业务统计处理 */ private function actionReal($data = array()) { if (!$data) { return $data; } $data['user_all'] = count($data['user_all_uid_data']); $data['user_all_pay'] = count($data['user_all_pay_uid_data']); $data['real_order'] = round(round($data['order_all_pay'] / $data['order_all'], 4) * 100, 2); $data['real_user'] = round(round($data['user_all_pay'] / $data['user_all'], 4) * 100, 2); $data['real_other'] = round($data['order_all_pay'] / $data['user_all'], 2); // 单位:个,表示平均1个人实付多少单 // 测试OK-清除业务用户ID集合,此字段不需要返回给H5 unset($data['user_all_uid_data']); unset($data['user_all_pay_uid_data']); return $data; } /** * 用户查单列表 ( 返回结构 与 订单列表 一致, 唯一区别: 这里是强制过滤用户已上传支付凭证的) * @param ValidatorFactoryInterface $validatorFactory * @return mixed * @example param_json_data string: * {"handshake":"","data":{"page":1,"page_size":5,"search":{"order_sn":"","nick":"","user_id":"","user_code":"","device_type":"","status":"","pay_gate_way":"","is_admin_action":"","stime":"","otime":"","stime_pay":"","otime_pay":""},"order":"created_at","order_sort":"desc"}} * @deprecated 目前,从 支付方式id 等价于 查询出支付通道! pay_gate_way */ public function userOrderList(ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $page = isset($inputData['page']) ? (int) $inputData['page'] : 1; $page_size = isset($inputData['page_size']) ? (int) $inputData['page_size'] : 20; $select = ['vip_order.*', 'user.nick', 'user.id AS user_id', 'user.code AS user_code', 'user.device_type']; $model = Model::query(); $order_key = isset($inputData['order']) ? $inputData['order'] : 'id'; $order_value = isset($inputData['order_sort']) ? $inputData['order_sort'] : 'desc'; if (!$order_key) { $order_key = 'id'; //不要信任前端,他可能会传个空字符串过来! } if (!$order_value) { $order_value = 'desc'; } // order_sn订单号,status 订单状态, pay_gate_way (支付方式/支付通道), stime 订单创建时间-开始, otime 订单创建时间-结束, stime_pay 订单支付时间-开始, otime_pay 订单支付时间结束 is_admin_action 后台是否查到处理 // nick 用户表-用户名,user_id 用户表-用户ID, user_code 用户表-用户邀请码, $search = isset($inputData['search']) ? $inputData['search'] : array(); if ($search) { foreach ($search as $k => $v) { if (!strlen((string) $v)) { continue; } $operator = '='; if ($k == 'user_channel_id' && $v == 'official') { $v = ''; } switch ($k) { case "nick": // 用户表-用户名 case "user_code": // 用户表-用户邀请码 $model->where('user.' . $k, 'like', "{$v}%"); break; case "user_id": // 用户表-用户ID $model->where('user.id', 'like', "{$v}%"); break; case "stime": // 自定义-订单开始日期 $model->where('vip_card.created_at', '>=', $v); break; case "otime": // 自定义-订单结束日期 $model->where('vip_card.created_at', '<=', Carbon::parse($v)->endOfDay()->toDateTimeString()); break; case "stime_pay": // 自定义-订单支付开始日期 $model->where('vip_card.pay_time', '>=', $v); break; case "otime_pay": // 自定义-订单支付结束日期 $model->where('vip_card.pay_time', '<=', $v); break; default: $model->where('vip_order.' . $k, $operator, $v); } } } $model->where('vip_order.is_user_proof', '1'); // 强制过滤,用户已经上传支付凭证的数据 $result = $model->select($select)->leftJoin('user', 'vip_order.user_id', '=', 'user.id')->orderBy((string) $order_key, (string) $order_value)->paginate($page_size, ['*'], 'page', $page); //处理图片路径 foreach ($result as $v) { $payproof_imgs_lists = array(); $img = explode(',', $v->payproof_imgs); $payproof_imgs_lists = $img; // foreach ($img as $i) { // $payproof_imgs_lists[] = make(CommonService::class)->getImageUrl($i, true); // } $v->payproof_imgs_list = $payproof_imgs_lists; $v->pay_type = OrderConstrant::$messages[$v->pay_type]; $v->pay_gate_way = $v->pay_gate_way; } return json_success($result); } /** * 用户查单列表-标记为 已查单 * @param ValidatorFactoryInterface $validatorFactory * @return mixed * @example param_json_data string: {"handshake":"","data":{"order_sn":"YV202002242305189073"}} */ public function setUserOrder(ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $rules = ['order_sn' => 'required']; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { return json_fail($validator->errors()->first()); } $order_sn = $inputData['order_sn']; $order_info = make(OrderRepository::class)->getOrderInfo($order_sn); if (!$order_info) { return json_fail('订单不存在'); } if ($order_info['is_admin_action']) { return json_fail('此订单已标示为已查单,请勿重复操作'); } $r = make(OrderRepository::class)->setAdminAction($order_sn, 1); if (!$r) { return json_fail('处理失败'); } // 创建管理员日志 $oldItem = clone $order_info; $newitem = make(OrderRepository::class)->getOrderInfo($order_sn); $logSubject = "将订单标记为已查单,订单号为:{$order_sn}"; $logSvalue = $oldItem->id; $logDbData = ['after_items' => [$newitem->toArray()], 'before_items' => [$oldItem->toArray()]]; $this->log($logSubject, $logSvalue, $logDbData); return json_success('', '处理成功'); } /** * 支付金币 * @param ValidatorFactoryInterface $validatorFactory */ public function coinsOrder(ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $rules = ['page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'order_sn' => 'nullable', 'user_uid' => 'nullable', 'status' => 'nullable|integer', 'stime' => 'nullable', 'otime' => 'nullable', 'otime_pay' => 'nullable', 'stime_pay' => 'nullable']; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { return json_fail($validator->errors()->first()); } $result = CoinsOrderModel::query()->orderByDesc('id')->where(function ($q) use($inputData) { if ($inputData['order_sn']) { $q->where('order_sn', $inputData['order_sn']); } if ($inputData['user_uid']) { $q->where('user_code', $inputData['user_uid']); } if ($inputData['status']) { $q->where('status', $inputData['status']); } if ($inputData['stime'] && $inputData['otime']) { $q->whereBetween('created_at', [Carbon::parse($inputData['stime'])->toDateString(), Carbon::parse($inputData['otime'])->toDateString()]); } if ($inputData['stime_pay'] && $inputData['otime_pay']) { $q->whereBetween('pay_time', [Carbon::parse($inputData['stime_pay'])->toDateString(), Carbon::parse($inputData['otime_pay'])->toDateString()]); } })->paginate((int) $inputData['page_size'], ['*'], 'page', (int) $inputData['page']); return json_success($result); } /** * 金币订单补单 * * @param ValidatorFactoryInterface $validatorFactory * @return mixed */ public function coinsAgain(ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $rules = [ 'order_sn' => 'required|string', //支付单号 'repair_remark' => 'nullable|string', ]; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { return json_fail($validator->errors()->first()); } $orderInfo = make(OrderRepository::class)->getCoinsOrderInfo($inputData['order_sn']); if (empty($orderInfo)) { return json_fail('订单不存在'); } if ($orderInfo['status'] == 1) { return json_fail('此订单已处理,请勿重复操作!'); } $res = make(OrderRepository::class)->coinsAgain($inputData['order_sn'], $inputData['repair_remark'], $orderInfo['user_id'], $orderInfo['coins']); if (!$res) { return json_fail('补单失败'); } $logSubject = "给用户{$orderInfo['user_id']}加金币" . $orderInfo['coins']; $logSvalue = $orderInfo['user_id']; $logDbData = ['after_items' => [], 'before_items' => []]; $this->log($logSubject, $logSvalue, $logDbData); return json_success('', '操作成功'); } /** * 帐变列表 * * @param ValidatorFactoryInterface $validatorFactory * @return mixed|OrderChangeListResponse */ public function changeList(ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'uid' => 'nullable|string', 'username' => 'nullable|string', 'user_uid' => 'nullable|string', 'type' => 'nullable|integer', 'way' => 'nullable|integer']; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $orders = [['created_at', 'DESC']]; $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE; if ($pageSize > 500) { $pageSize = CommonConstant::PAGE_SIZE; } $page = format_page($inputData['page']); $res = make(ChangeLogRepository::class)->pushCriteria(new ChangeLogCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page); return new OrderChangeListResponse($res); } }