Modules_Api_Controllers_LogController.proxy.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <?php
  2. /**
  3. * 各种分页记录
  4. * @author xiabian <xiabian666@gmail.com>
  5. * @date 2020-02-19 10:13:09
  6. */
  7. declare (strict_types=1);
  8. namespace Modules\Api\Controllers;
  9. use App\Constants\CommentConstant;
  10. use App\Constants\CommonConstant;
  11. use App\Constants\OrderConstrant;
  12. use App\Model\CoinsLogModel;
  13. use App\Model\InviteRuleModel;
  14. use App\Model\Mongo\MessageModel;
  15. use App\Repositories\ChangeLogRepository;
  16. use App\Repositories\Criterias\ChangeLogCriteria;
  17. use App\Repositories\Criterias\OrderLimitCriteria;
  18. use App\Repositories\Criterias\UserCriteria;
  19. use App\Repositories\UserRebateLevelRepoistory;
  20. use App\Repositories\UserRepository;
  21. use App\Repositories\Utils\M3u8CacheRepository;
  22. use Carbon\Carbon;
  23. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  24. use App\Model\CoinsOrderModel;
  25. use App\Model\VipOrderModel;
  26. use Modules\Api\Responses\LogChangeListResponse;
  27. use Psr\SimpleCache\CacheInterface;
  28. class LogController extends BaseController
  29. {
  30. use \Hyperf\Di\Aop\ProxyTrait;
  31. use \Hyperf\Di\Aop\PropertyHandlerTrait;
  32. function __construct()
  33. {
  34. if (method_exists(parent::class, '__construct')) {
  35. parent::__construct(...func_get_args());
  36. }
  37. $this->__handlePropertyHandler(__CLASS__);
  38. }
  39. /**
  40. * 金币购买记录
  41. */
  42. public function coinsList(ValidatorFactoryInterface $validatorFactory)
  43. {
  44. // 或 ->getUserId() 拿到到 都是非用户ID,仅用户到邀请码:user_code, 安全设计为此!
  45. $user_id = $this->getUserId();
  46. // 拿到客户端上传的json内容 {"data":{"page":1,"page_size":2,"moreparam":"vaule"}}
  47. $inputData = $this->getJsonData();
  48. $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
  49. $validator = $validatorFactory->make($inputData, $rules);
  50. if ($validator->fails()) {
  51. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  52. return json_fail($validator->errors()->first());
  53. }
  54. $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
  55. if ($pageSize > 100) {
  56. $pageSize = CommentConstant::PAGE_SIZE;
  57. }
  58. $page = format_page($inputData['page']);
  59. $pageSize = intval($pageSize);
  60. if ($pageSize <= 0) {
  61. $pageSize = CommentConstant::PAGE_SIZE;
  62. }
  63. $result = CoinsOrderModel::query()->where(['user_code' => $user_id])->orderByDesc('id')->paginate($pageSize, ['*'], 'page', $page);
  64. return json_success($result);
  65. }
  66. /**
  67. * 金币明细
  68. */
  69. public function coinsMore(ValidatorFactoryInterface $validatorFactory)
  70. {
  71. $user_id = $this->getUserId();
  72. $inputData = $this->getJsonData();
  73. $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
  74. $validator = $validatorFactory->make($inputData, $rules);
  75. if ($validator->fails()) {
  76. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  77. return json_fail($validator->errors()->first());
  78. }
  79. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  80. if ($pageSize > 100) {
  81. $pageSize = CommonConstant::PAGE_SIZE;
  82. }
  83. $page = format_page($inputData['page']);
  84. $pageSize = intval($pageSize);
  85. if ($pageSize <= 0) {
  86. $pageSize = CommonConstant::PAGE_SIZE;
  87. }
  88. $result = CoinsLogModel::query()->where(['user_code' => $user_id])->orderByDesc('id')->paginate($pageSize, ['*'], 'page', $page);
  89. return json_success($result);
  90. }
  91. /**
  92. * vip购买记录
  93. */
  94. public function vipOrderList(ValidatorFactoryInterface $validatorFactory)
  95. {
  96. $user_id = $this->getUserId();
  97. $inputData = $this->getJsonData();
  98. $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
  99. $validator = $validatorFactory->make($inputData, $rules);
  100. if ($validator->fails()) {
  101. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  102. return json_fail($validator->errors()->first());
  103. }
  104. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  105. if ($pageSize > 100) {
  106. $pageSize = CommonConstant::PAGE_SIZE;
  107. }
  108. $page = format_page($inputData['page']);
  109. $pageSize = intval($pageSize);
  110. if ($pageSize <= 0) {
  111. $pageSize = CommonConstant::PAGE_SIZE;
  112. }
  113. $where = ['user_code' => $user_id];
  114. $result = VipOrderModel::query()->where($where)->orderByDesc('vip_order.id')->paginate($pageSize, ['*'], 'page', $page);
  115. foreach ($result as $r) {
  116. $r->pay_type = OrderConstrant::$messages[$r->pay_type];
  117. }
  118. return json_success($result);
  119. }
  120. /**
  121. * 余额明细(暂缓-第一版暂不提供)
  122. */
  123. /**
  124. * 邀请记录
  125. *
  126. * 若不传别人的邀请码,则仅查看自己的邀请人记录; - code
  127. * 若传了邀请码,则表示查看别人的邀请人记录; - code
  128. * 表user
  129. */
  130. public function inviteList(ValidatorFactoryInterface $validatorFactory)
  131. {
  132. $inputData = $this->getJsonData();
  133. $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'doings_end_time' => 'nullable|string'];
  134. $validator = $validatorFactory->make($inputData, $rules);
  135. if ($validator->fails()) {
  136. return json_fail($validator->errors()->first());
  137. }
  138. $code = isset($inputData['code']) ? $inputData['code'] : '';
  139. if ($code) {
  140. //若传了则是请求别人的邀请列表
  141. $user_code = $code;
  142. } else {
  143. //反之仅查自己的邀请列表
  144. $user_code = $this->getUserId();
  145. }
  146. $user_info = make(UserRepository::class)->getUserInfoFromCache($user_code);
  147. if (!$user_info) {
  148. return json_fail('用户不存在');
  149. }
  150. $inputData['parent_uid'] = $user_info['code'];
  151. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  152. if ($pageSize > 100) {
  153. $pageSize = CommonConstant::PAGE_SIZE;
  154. }
  155. $page = format_page($inputData['page']);
  156. $pageSize = intval($pageSize);
  157. if ($pageSize <= 0) {
  158. $pageSize = CommonConstant::PAGE_SIZE;
  159. }
  160. $select = ['nick', 'created_at'];
  161. $result = make(UserRepository::class)->pushCriteria(new UserCriteria($inputData))->pushCriteria(new OrderLimitCriteria([['id', 'desc']]))->paginate($pageSize, $select, $page);
  162. return json_success($result);
  163. }
  164. /**
  165. * 邀请规则
  166. */
  167. public function inviteRule()
  168. {
  169. $cache = make(CacheInterface::class);
  170. $invite_rule = $cache->remember('invite_rule', 60 * 60, function () {
  171. return InviteRuleModel::query()->get(['person', 'day']);
  172. });
  173. return json_success($invite_rule);
  174. }
  175. /**
  176. * 帐变流水
  177. *
  178. * @param ValidatorFactoryInterface $validatorFactory
  179. * @return mixed|LogChangeListResponse
  180. */
  181. public function changeList(ValidatorFactoryInterface $validatorFactory)
  182. {
  183. $inputData = $this->getJsonData();
  184. $rules = ['page' => 'required|int', 'page_size' => 'required|int', 'currency_type' => 'nullable|in:1,2', 'type' => 'nullable|int'];
  185. $validator = $validatorFactory->make($inputData, $rules);
  186. if ($validator->fails()) {
  187. return json_fail($validator->errors()->first());
  188. }
  189. $inputData['user_uid'] = $this->getUserId();
  190. $orders = [['created_at', 'DESC']];
  191. $page = $inputData['page'] ?? 1;
  192. $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE;
  193. if ($pageSize > 100) {
  194. $pageSize = CommonConstant::PAGE_SIZE;
  195. }
  196. $page = format_page($inputData['page']);
  197. $pageSize = intval($pageSize);
  198. if ($pageSize <= 0) {
  199. $pageSize = CommonConstant::PAGE_SIZE;
  200. }
  201. $field = ['type', 'currency_type', 'way', 'amount', 'before_amount', 'after_amount', 'created_at'];
  202. $res = make(ChangeLogRepository::class)->pushCriteria(new ChangeLogCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page);
  203. return new LogChangeListResponse($res);
  204. }
  205. /**
  206. * 聊天记录
  207. *
  208. * @param ValidatorFactoryInterface $validatorFactory
  209. * @return mixed
  210. */
  211. public function userChatRecord(ValidatorFactoryInterface $validatorFactory)
  212. {
  213. $inputData = $this->getJsonData();
  214. $rules = ['receive_uid' => 'nullable|string', 'chat_type' => 'nullable|string'];
  215. $validator = $validatorFactory->make($inputData, $rules);
  216. if ($validator->fails()) {
  217. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  218. return json_fail($validator->errors()->first());
  219. }
  220. $options = ['limit' => 50, 'sort' => ['created_at' => -1]];
  221. $where['$or'] = [['from_uid' => $this->getUserId(), 'receive_uid' => $inputData['receive_uid']], ['receive_uid' => $this->getUserId(), 'from_uid' => $inputData['receive_uid']]];
  222. if (isset($inputData['chat_type']) && $inputData['chat_type'] == 'user') {
  223. $where['receive_type'] = 'user';
  224. } else {
  225. $where['receive_type'] = 'shops';
  226. }
  227. $res = make(MessageModel::class)->db()->find($where, $options)->toArray();
  228. foreach ($res as $key => $val) {
  229. $content = json_decode($val['content'], true);
  230. $message = structureHandle($content['message'], $val['struct_type']);
  231. $res[$key]['message'] = json_encode($message);
  232. if ($inputData['chat_type'] == 'user') {
  233. $res[$key]['receive_avatar'] = M3u8CacheRepository::getImageUrl($res[$key]['receive_avatar']);
  234. $res[$key]['from_avatar'] = M3u8CacheRepository::getImageUrl($res[$key]['from_avatar']);
  235. }
  236. $res[$key]['msg_type'] = $val['struct_type'];
  237. $res[$key]['created_at'] = mongoIsoDateToCarbonTime($val['created_at'])->toDateTimeString();
  238. $res[$key]['updated_at'] = mongoIsoDateToCarbonTime($val['updated_at'])->toDateTimeString();
  239. unset($res[$key]['_id'], $res[$key]['subject'], $res[$key]['receive_type'], $res[$key]['from_type'], $res[$key]['struct_type'], $res[$key]['content']);
  240. }
  241. // 阅读时间修改
  242. 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')))]]);
  243. return json_success(array_reverse($res));
  244. }
  245. /**
  246. * 推广记录
  247. *
  248. * @param ValidatorFactoryInterface $validatorFactory
  249. * @return mixed
  250. */
  251. public function promoteList(ValidatorFactoryInterface $validatorFactory)
  252. {
  253. $inputData = $this->getJsonData();
  254. $rules = ['page' => 'required|int', 'page_size' => 'required|int'];
  255. $validator = $validatorFactory->make($inputData, $rules);
  256. if ($validator->fails()) {
  257. return json_fail($validator->errors()->first());
  258. }
  259. $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE;
  260. if ($pageSize > 100) {
  261. $pageSize = CommentConstant::PAGE_SIZE;
  262. }
  263. $page = format_page($inputData['page']);
  264. $pageSize = intval($pageSize);
  265. $res = make(UserRebateLevelRepoistory::class)->promoteLog($this->getUserId(), $page, $pageSize);
  266. return json_success($res);
  267. }
  268. }