* @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); } }