| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675 |
- <?php
- /**
- * 订单相关
- * @author x.b
- *
- */
- declare (strict_types=1);
- namespace Modules\Manage\Controllers;
- use App\Constants\ChangeLogConstant;
- use App\Constants\CommonConstant;
- use App\Constants\OrderConstrant;
- use App\Model\CoinsOrderModel;
- use App\Model\PaymentModel;
- use App\Model\VipCardModel;
- use App\Model\VipOrderModel;
- use App\Repositories\ChangeLogRepository;
- use App\Repositories\Criterias\ChangeLogCriteria;
- use App\Repositories\Criterias\OrderLimitCriteria;
- use App\Repositories\OrderRepository as OrderRepository;
- use App\Model\UserModel;
- use App\Model\VipOrderModel as Model;
- use App\Repositories\Service\CommonService;
- use App\Repositories\Service\QueueService;
- use Carbon\Carbon;
- use Hyperf\DbConnection\Db;
- use Hyperf\Validation\Contract\ValidatorFactoryInterface;
- use Modules\Manage\Responses\OrderChangeListResponse;
- class OrderController extends BaseController
- {
- use \Hyperf\Di\Aop\ProxyTrait;
- use \Hyperf\Di\Aop\PropertyHandlerTrait;
- function __construct()
- {
- if (method_exists(parent::class, '__construct')) {
- parent::__construct(...func_get_args());
- }
- $this->__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);
- }
- }
|