InnerController.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. namespace Modules\Api\Controllers;
  3. use App\Jobs\Inner\ReceiveVideosJob;
  4. use App\Model\Mongo\HotelLogModel;
  5. use Hyperf\HttpServer\Request;
  6. use Hyperf\Validation\Contract\ValidatorFactoryInterface;
  7. use Psr\SimpleCache\CacheInterface;
  8. class InnerController extends BaseController
  9. {
  10. /**
  11. * 内部通信token
  12. * @var string
  13. */
  14. private $innerToken = 'VC4Pfzrg9nKpq';
  15. public function receiveVideo(Request $request, ValidatorFactoryInterface $validatorFactory)
  16. {
  17. if (!$this->checkToken()) {
  18. return json_fail('通信失败.');
  19. }
  20. $inputData = $request->all();
  21. $rules = [
  22. 'source_type' => 'required',
  23. 'data' => 'required|array',
  24. /*
  25. * // 主要是要接收比如广告的东西,有些原有的字段就非必填了.
  26. 'data.*.video_uid' => 'required|max:32',
  27. 'data.*.type' => 'required|integer',
  28. 'data.*.category_name' => 'nullable|max:32',
  29. 'data.*.created_at' => 'required',
  30. 'data.*.updated_at' => 'required',
  31. 'data.*.title' => 'required',
  32. 'data.*.cover' => 'nullable|max:700',
  33. 'data.*.duration' => 'required|integer',
  34. 'data.*.bitrate' => 'required|integer',
  35. 'data.*.resolution' => 'required',
  36. 'data.*.tags' => 'nullable',
  37. 'data.*.screenshots' => 'nullable',
  38. 'data.*.merge_pic' => 'nullable|max:700',
  39. 'data.*.file_hash' => 'required|max:32',
  40. 'data.*.status' => 'required|integer',
  41. 'data.*.multiple_rates' => 'nullable|array',
  42. 'data.*.app_alias_name' => 'nullable|max:120',
  43. 'data.*.app_module_name' => 'nullable|max:120',
  44. 'data.*.app_item_code' => 'nullable|max:64',
  45. 'data.*.from_type' => 'required|integer',
  46. 'data.*.server_flag' => 'required|max:64',
  47. */
  48. ];
  49. $validator = $validatorFactory->make($inputData, $rules);
  50. if ($validator->fails()) {
  51. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  52. return json_fail($validator->errors()->first());
  53. }
  54. if ($inputData['source_type'] != 'video') {
  55. return json_fail('通信数据类型有误');
  56. }
  57. if (!empty($inputData['data'])) {
  58. // 异步调度.
  59. dispatch_job(new ReceiveVideosJob($inputData['data']));
  60. }
  61. $res = [
  62. 'result' => 'success',
  63. ];
  64. return $this->jsonSuccess($res);
  65. }
  66. /**
  67. * 检查token合法性.
  68. * @return bool
  69. */
  70. private function checkToken()
  71. {
  72. $token = request()->header('AUTH-TOKEN', '');
  73. if (empty($token)) {
  74. $token = request()->input('token', '');
  75. }
  76. return $token === $this->innerToken;
  77. }
  78. /**
  79. * 搜索开房记录
  80. * @param Request $request
  81. * @param ValidatorFactoryInterface $validatorFactory
  82. * @return mixed
  83. */
  84. public function searchHotelRecord(Request $request, ValidatorFactoryInterface $validatorFactory)
  85. {
  86. if (!$this->checkToken()) {
  87. return json_fail('通信失败.');
  88. }
  89. $inputData = $request->all();
  90. $rules = [
  91. 'card_no' => 'required|string|max:18',
  92. ];
  93. $validator = $validatorFactory->make($inputData, $rules);
  94. if ($validator->fails()) {
  95. // 如果有错误(可能是多个信息),这里只取第一个错误信息返回.
  96. return json_fail($validator->errors()->first());
  97. }
  98. $options = [
  99. 'skip' => 0,
  100. 'limit' => 5,
  101. 'sort' => [
  102. 'check_time' => -1,
  103. ],
  104. ];
  105. $cache = make(CacheInterface::class);
  106. $hotelRecordData = $cache->remember(
  107. 'check_fid_list:' . $inputData['card_no'],
  108. 60 * 24 * 7,
  109. function () use ($inputData, $options) {
  110. return make(HotelLogModel::class)->db()
  111. ->find([
  112. 'ct_type' => 'ID',
  113. 'ct_fid' => $inputData['card_no']
  114. ], $options)->toArray();
  115. }
  116. );
  117. $data = [];
  118. if ($hotelRecordData) {
  119. foreach ($hotelRecordData as $key => $item) {
  120. $check_time = 'XXXX-XX-XX';
  121. $ct_fid = 'XXXXXXXX';
  122. $birthday = 'XXXX-XX-XX';
  123. // 处理时间
  124. if (strlen($item['check_time']) > 2) {
  125. $check_time = substr($item['check_time'], 0, 4) . '-XX-XX';
  126. }
  127. // 处理出生日期
  128. if (strlen($item['birthday']) > 2) {
  129. $birthday = substr($item['birthday'], 0, 4) . '-XX-XX';
  130. }
  131. // 处理身身份证
  132. if (strlen($item['ct_fid']) > 2) {
  133. $ct_fid = substr($item['ct_fid'], 0, -4) . 'XXXX';
  134. }
  135. $data[] = [
  136. 'check_id' => $item['_id']->__toString(),
  137. 'username' => $item['username'],
  138. 'gender' => $item['gender'] === 1 ? '男' : ($item['gender'] === 2 ? '女' : '未知'),
  139. 'ct_fid' => $ct_fid,
  140. 'birthday' => $birthday,
  141. 'check_address' => 'XXXXXX',
  142. 'check_time' => $check_time,
  143. // 同住性别
  144. 'check_sex' => $item['gender'] === 2 ? '男' : '女',
  145. ];
  146. }
  147. }
  148. return $this->jsonSuccess($data);
  149. }
  150. /**
  151. * @param $data
  152. * @return mixed
  153. */
  154. private function jsonSuccess($data)
  155. {
  156. $result = [
  157. 'code' => 200,
  158. 'message' => '',
  159. 'data' => $data,
  160. 'handshake' => '',
  161. ];
  162. return response()->json($result);
  163. }
  164. }