| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- <?php
- /**
- * 各种分页记录
- * @author xiabian <xiabian666@gmail.com>
- * @date 2020-02-19 10:13:09
- */
- declare (strict_types=1);
- namespace Modules\Api\Controllers;
- use App\Constants\CommentConstant;
- use App\Constants\CommonConstant;
- use App\Constants\OrderConstrant;
- use App\Model\CoinsLogModel;
- use App\Model\InviteRuleModel;
- use App\Model\Mongo\MessageModel;
- use App\Repositories\ChangeLogRepository;
- use App\Repositories\Criterias\ChangeLogCriteria;
- use App\Repositories\Criterias\OrderLimitCriteria;
- use App\Repositories\Criterias\UserCriteria;
- use App\Repositories\UserRebateLevelRepoistory;
- use App\Repositories\UserRepository;
- use App\Repositories\Utils\M3u8CacheRepository;
- use Carbon\Carbon;
- use Hyperf\Validation\Contract\ValidatorFactoryInterface;
- use App\Model\CoinsOrderModel;
- use App\Model\VipOrderModel;
- use Modules\Api\Responses\LogChangeListResponse;
- use Psr\SimpleCache\CacheInterface;
- class LogController 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 function coinsList(ValidatorFactoryInterface $validatorFactory)
- {
- // 或 ->getUserId() 拿到到 都是非用户ID,仅用户到邀请码:user_code, 安全设计为此!
- $user_id = $this->getUserId();
- // 拿到客户端上传的json内容 {"data":{"page":1,"page_size":2,"moreparam":"vaule"}}
- $inputData = $this->getJsonData();
- $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
- $validator = $validatorFactory->make($inputData, $rules);
- if ($validator->fails()) {
- // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
- return json_fail($validator->errors()->first());
- }
- $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
- if ($pageSize > 100) {
- $pageSize = CommentConstant::PAGE_SIZE;
- }
- $page = format_page($inputData['page']);
- $pageSize = intval($pageSize);
- if ($pageSize <= 0) {
- $pageSize = CommentConstant::PAGE_SIZE;
- }
- $result = CoinsOrderModel::query()->where(['user_code' => $user_id])->orderByDesc('id')->paginate($pageSize, ['*'], 'page', $page);
- return json_success($result);
- }
- /**
- * 金币明细
- */
- public function coinsMore(ValidatorFactoryInterface $validatorFactory)
- {
- $user_id = $this->getUserId();
- $inputData = $this->getJsonData();
- $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
- $validator = $validatorFactory->make($inputData, $rules);
- if ($validator->fails()) {
- // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
- return json_fail($validator->errors()->first());
- }
- $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
- if ($pageSize > 100) {
- $pageSize = CommonConstant::PAGE_SIZE;
- }
- $page = format_page($inputData['page']);
- $pageSize = intval($pageSize);
- if ($pageSize <= 0) {
- $pageSize = CommonConstant::PAGE_SIZE;
- }
- $result = CoinsLogModel::query()->where(['user_code' => $user_id])->orderByDesc('id')->paginate($pageSize, ['*'], 'page', $page);
- return json_success($result);
- }
- /**
- * vip购买记录
- */
- public function vipOrderList(ValidatorFactoryInterface $validatorFactory)
- {
- $user_id = $this->getUserId();
- $inputData = $this->getJsonData();
- $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
- $validator = $validatorFactory->make($inputData, $rules);
- if ($validator->fails()) {
- // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
- return json_fail($validator->errors()->first());
- }
- $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
- if ($pageSize > 100) {
- $pageSize = CommonConstant::PAGE_SIZE;
- }
- $page = format_page($inputData['page']);
- $pageSize = intval($pageSize);
- if ($pageSize <= 0) {
- $pageSize = CommonConstant::PAGE_SIZE;
- }
- $where = ['user_code' => $user_id];
- $result = VipOrderModel::query()->where($where)->orderByDesc('vip_order.id')->paginate($pageSize, ['*'], 'page', $page);
- foreach ($result as $r) {
- $r->pay_type = OrderConstrant::$messages[$r->pay_type];
- }
- return json_success($result);
- }
- /**
- * 余额明细(暂缓-第一版暂不提供)
- */
- /**
- * 邀请记录
- *
- * 若不传别人的邀请码,则仅查看自己的邀请人记录; - code
- * 若传了邀请码,则表示查看别人的邀请人记录; - code
- * 表user
- */
- public function inviteList(ValidatorFactoryInterface $validatorFactory)
- {
- $inputData = $this->getJsonData();
- $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'doings_end_time' => 'nullable|string'];
- $validator = $validatorFactory->make($inputData, $rules);
- if ($validator->fails()) {
- return json_fail($validator->errors()->first());
- }
- $code = isset($inputData['code']) ? $inputData['code'] : '';
- if ($code) {
- //若传了则是请求别人的邀请列表
- $user_code = $code;
- } else {
- //反之仅查自己的邀请列表
- $user_code = $this->getUserId();
- }
- $user_info = make(UserRepository::class)->getUserInfoFromCache($user_code);
- if (!$user_info) {
- return json_fail('用户不存在');
- }
- $inputData['parent_uid'] = $user_info['code'];
- $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
- if ($pageSize > 100) {
- $pageSize = CommonConstant::PAGE_SIZE;
- }
- $page = format_page($inputData['page']);
- $pageSize = intval($pageSize);
- if ($pageSize <= 0) {
- $pageSize = CommonConstant::PAGE_SIZE;
- }
- $select = ['nick', 'created_at'];
- $result = make(UserRepository::class)->pushCriteria(new UserCriteria($inputData))->pushCriteria(new OrderLimitCriteria([['id', 'desc']]))->paginate($pageSize, $select, $page);
- return json_success($result);
- }
- /**
- * 邀请规则
- */
- public function inviteRule()
- {
- $cache = make(CacheInterface::class);
- $invite_rule = $cache->remember('invite_rule', 60 * 60, function () {
- return InviteRuleModel::query()->get(['person', 'day']);
- });
- return json_success($invite_rule);
- }
- /**
- * 帐变流水
- *
- * @param ValidatorFactoryInterface $validatorFactory
- * @return mixed|LogChangeListResponse
- */
- public function changeList(ValidatorFactoryInterface $validatorFactory)
- {
- $inputData = $this->getJsonData();
- $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'currency_type' => 'nullable|in:1,2', 'type' => 'nullable|int'];
- $validator = $validatorFactory->make($inputData, $rules);
- if ($validator->fails()) {
- return json_fail($validator->errors()->first());
- }
- $inputData['user_uid'] = $this->getUserId();
- $orders = [['created_at', 'DESC']];
- $page = $inputData['page'] ?? 1;
- $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
- if ($pageSize > 100) {
- $pageSize = CommonConstant::PAGE_SIZE;
- }
- $page = format_page($inputData['page']);
- $pageSize = intval($pageSize);
- if ($pageSize <= 0) {
- $pageSize = CommonConstant::PAGE_SIZE;
- }
- $field = ['type', 'currency_type', 'way', 'amount', 'before_amount', 'after_amount', 'created_at'];
- $res = make(ChangeLogRepository::class)->pushCriteria(new ChangeLogCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
- return new LogChangeListResponse($res);
- }
- /**
- * 聊天记录
- *
- * @param ValidatorFactoryInterface $validatorFactory
- * @return mixed
- */
- public function userChatRecord(ValidatorFactoryInterface $validatorFactory)
- {
- $inputData = $this->getJsonData();
- $rules = ['receive_uid' => 'nullable|string', 'chat_type' => 'nullable|string'];
- $validator = $validatorFactory->make($inputData, $rules);
- if ($validator->fails()) {
- // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
- return json_fail($validator->errors()->first());
- }
- $options = ['limit' => 50, 'sort' => ['created_at' => -1]];
- $where['$or'] = [['from_uid' => $this->getUserId(), 'receive_uid' => $inputData['receive_uid']], ['receive_uid' => $this->getUserId(), 'from_uid' => $inputData['receive_uid']]];
- if (isset($inputData['chat_type']) && $inputData['chat_type'] == 'user') {
- $where['receive_type'] = 'user';
- } else {
- $where['receive_type'] = 'shops';
- }
- $res = make(MessageModel::class)->db()->find($where, $options)->toArray();
- foreach ($res as $key => $val) {
- $content = json_decode($val['content'], true);
- $message = structureHandle($content['message'], $val['struct_type']);
- $res[$key]['message'] = json_encode($message);
- if ($inputData['chat_type'] == 'user') {
- $res[$key]['receive_avatar'] = M3u8CacheRepository::getImageUrl($res[$key]['receive_avatar']);
- $res[$key]['from_avatar'] = M3u8CacheRepository::getImageUrl($res[$key]['from_avatar']);
- }
- $res[$key]['msg_type'] = $val['struct_type'];
- $res[$key]['created_at'] = mongoIsoDateToCarbonTime($val['created_at'])->toDateTimeString();
- $res[$key]['updated_at'] = mongoIsoDateToCarbonTime($val['updated_at'])->toDateTimeString();
- unset($res[$key]['_id'], $res[$key]['subject'], $res[$key]['receive_type'], $res[$key]['from_type'], $res[$key]['struct_type'], $res[$key]['content']);
- }
- // 阅读时间修改
- make(MessageModel::class)->db()->updateMany(['from_uid' => $inputData['receive_uid'], 'receive_uid' => $this->getUserId(), 'receive_type' => $where['receive_type']], ['$set' => ['read_at' => toMongoIsoDate(Carbon::parse(date('Y-m-d H:i:s')))]]);
- return json_success(array_reverse($res));
- }
- /**
- * 推广记录
- *
- * @param ValidatorFactoryInterface $validatorFactory
- * @return mixed
- */
- public function promoteList(ValidatorFactoryInterface $validatorFactory)
- {
- $inputData = $this->getJsonData();
- $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
- $validator = $validatorFactory->make($inputData, $rules);
- if ($validator->fails()) {
- return json_fail($validator->errors()->first());
- }
- $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
- if ($pageSize > 100) {
- $pageSize = CommentConstant::PAGE_SIZE;
- }
- $page = format_page($inputData['page']);
- $pageSize = intval($pageSize);
- $res = make(UserRebateLevelRepoistory::class)->promoteLog($this->getUserId(), $page, $pageSize);
- return json_success($res);
- }
- }
|