ActivityController.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <?php
  2. namespace App\Http\Controllers\Wap\Web;
  3. use App\Modules\Activity\Services\ActivityService;
  4. use App\Modules\Product\Services\ProductService;
  5. use App\Modules\User\Services\UserService;
  6. use Illuminate\Http\Request;
  7. use App\Http\Controllers\Wap\BaseController;
  8. use Redis;
  9. use DB;
  10. class ActivityController extends BaseController
  11. {
  12. //渠道自定义活动 可以多少充值
  13. public function channelCustomActivity(Request $request)
  14. {
  15. $encode_distribution_channel_id = encodeDistributionChannelId($this->distribution_channel_id);
  16. $token = $request->input('token');
  17. $activity_info = ActivityService::getByToken($token);
  18. $img = 'https://cdn-novel.iycdm.com/h5/activity-chanel-custom/btn48.jpg';
  19. if ($activity_info && $activity_info->product_id) {
  20. $customer_activity_info = DB::table('channel_custom_activity')->where('product_id', $activity_info->product_id)->select('setting')->first();
  21. if ($customer_activity_info && $customer_activity_info->setting) {
  22. $img = json_decode($customer_activity_info->setting, 1)['img'];
  23. }
  24. $from = $request->input('fromtype', 'main');
  25. $uv_key_format = 'activity:%s:distribution_channel_id:%s:date:%s:uv';
  26. $pv_key_format = 'activity:%s:distribution_channel_id:%s:pv';
  27. $uv_key = sprintf($uv_key_format, $activity_info->id, $this->distribution_channel_id, date('Y-m-d'));
  28. $pv_key = sprintf($pv_key_format, $activity_info->id, $this->distribution_channel_id);
  29. Redis::sadd($uv_key, $this->uid);
  30. Redis::hincrby($pv_key, date('Y-m-d'), 1);
  31. //$order = Order::where('uid',$this->uid)->where('status','PAID')->where('activity_id',$activity_info->id)->count();
  32. //渠道不符合
  33. if ($activity_info->distribution_channel_id != $this->distribution_channel_id) {
  34. return view('pay.activity.ChannelCustomerV1', ['url' => '###', 'img' => $img, 'code' => -1, 'start_time' => date('Y-m-d', time() - 86400 * 2), 'end_time' => date('Y-m-d', time() - 86400)]);
  35. }
  36. //活动未开始
  37. if (time() < strtotime($activity_info->start_time)) {
  38. return view('pay.activity.ChannelCustomerV1', ['url' => '###', 'img' => $img, 'code' => -3, 'start_time' => date('Y-m-d', strtotime($activity_info->start_time)), 'end_time' => date('Y-m-d', strtotime($activity_info->end_time) - 100)]);
  39. }
  40. //活动结束
  41. if (time() > strtotime($activity_info->end_time)) {
  42. return view('pay.activity.ChannelCustomerV1', ['url' => '###', 'img' => $img, 'code' => -1, 'start_time' => date('Y-m-d', strtotime($activity_info->start_time)), 'end_time' => date('Y-m-d', strtotime($activity_info->end_time) - 100)]);
  43. }
  44. if (time() > strtotime($activity_info->start_time) && time() < strtotime($activity_info->end_time)) {
  45. $param = [
  46. 'uid' => $this->uid,
  47. 'distribution_channel_id' => $this->distribution_channel_id,
  48. 'product_id' => $activity_info->product_id,
  49. 'activity_id' => $activity_info->id,
  50. 'fromtype' => $from,
  51. 'limit' => 100,
  52. 'pay_redirect_url' => env('H5_SCHEME', 'https') . '://site' . $encode_distribution_channel_id . '.' . env('CUSTOM_HOST') . '.com/person'
  53. ];
  54. $url = env('CREATE_PAY_URL') . '?' . http_build_query($param);
  55. return view('pay.activity.ChannelCustomerV1', ['url' => $url, 'img' => $img, 'code' => 0, 'start_time' => date('Y-m-d', strtotime($activity_info->start_time)), 'end_time' => date('Y-m-d', strtotime($activity_info->end_time) - 100)]);
  56. }
  57. }
  58. return view('pay.activity.ChannelCustomerV1', ['url' => '###', 'img' => $img, 'code' => -1, 'start_time' => date('Y-m-d', time() - 86400 * 2), 'end_time' => date('Y-m-d', time() - 86400)]);
  59. }
  60. public function commonActivity(Request $request)
  61. {
  62. $encode_distribution_channel_id = encodeDistributionChannelId($this->distribution_channel_id);
  63. $token = $request->input('token');
  64. $activity_info = ActivityService::getByToken($token);
  65. if ($activity_info && isset($activity_info->setting) && empty(!$activity_info->setting)) {
  66. $imgs = json_decode($activity_info->setting, 1);
  67. $from = $request->input('fromtype', 'main');
  68. $uv_key_format = 'activity:%s:distribution_channel_id:%s:date:%s:uv';
  69. $pv_key_format = 'activity:%s:distribution_channel_id:%s:pv';
  70. $uv_key = sprintf($uv_key_format, $activity_info->id, $this->distribution_channel_id, date('Y-m-d'));
  71. $pv_key = sprintf($pv_key_format, $activity_info->id, $this->distribution_channel_id);
  72. $redirect_url = env('H5_SCHEME', 'https') . '://site' . $encode_distribution_channel_id . '.' . env('CUSTOM_HOST') . '.com/person';
  73. if ($request->input('redirect_url')) {
  74. $redirect_url = $request->input('redirect_url');
  75. $redirect_url = urldecode($redirect_url);
  76. }
  77. $product_id = $activity_info->product_id;
  78. if ($activity_info->id == 6000) {
  79. $imgs['page_bd_img'] = 'https://cdn-novel.iycdm.com/h5/activity-2019-04-29/bg2.jpg';
  80. $product_id = 5788;
  81. }
  82. if (time() > strtotime($activity_info->start_time) && time() < strtotime($activity_info->end_time)) {
  83. Redis::sadd($uv_key, $this->uid);
  84. Redis::hincrby($pv_key, date('Y-m-d'), 1);
  85. $param = [
  86. 'uid' => $this->uid,
  87. 'distribution_channel_id' => $this->distribution_channel_id,
  88. 'product_id' => $product_id,
  89. 'activity_id' => $activity_info->id,
  90. 'fromtype' => $from,
  91. 'pay_redirect_url' => $redirect_url,
  92. 'limit' => 100,
  93. ];
  94. $url = env('CREATE_PAY_URL') . '?' . http_build_query($param);
  95. return view('pay.order.common', ['url' => $url, 'code' => 0, 'img' => $imgs]);
  96. } else if (time() <= strtotime($activity_info->start_time)) {
  97. return view('pay.order.common', ['url' => [], 'code' => 1, 'img' => $imgs]);
  98. } else {
  99. return view('pay.order.common', ['url' => [], 'code' => 2, 'img' => $imgs]);
  100. }
  101. }
  102. $default_url = env('H5_SCHEME', 'https') . '://site' . $encode_distribution_channel_id . '.' . env('CUSTOM_HOST') . '.com/';
  103. return redirect()->to($default_url);
  104. }
  105. public function crmActivity(Request $request)
  106. {
  107. $default_url = env('H5_SCHEME', 'https') . '://site' . $this->en_distribution_channel_id . '.' . env('CUSTOM_HOST') . '.com/';
  108. $token = $request->input('token');
  109. if (!$token) {
  110. return redirect()->to($default_url);
  111. }
  112. $activity_info = ActivityService::getByToken($token);
  113. if (!$activity_info) {
  114. return redirect()->to($default_url);
  115. }
  116. $img = \GuzzleHttp\json_decode($activity_info->setting, 1);
  117. $param = [
  118. 'uid' => $this->uid,
  119. 'distribution_channel_id' => $this->distribution_channel_id,
  120. 'product_id' => $activity_info->product_id,
  121. 'activity_id' => $activity_info->id,
  122. 'fromtype' => 'crm',
  123. 'pay_redirect_url' => $default_url . 'person',
  124. 'limit' => 100,
  125. ];
  126. $product_info = ProductService::getProductSingle($activity_info->product_id);
  127. $url = env('CREATE_PAY_URL') . '?' . http_build_query($param);
  128. $fee = $product_info->price * 100 + $product_info->given;
  129. return view('crm.crmActivity', ['url' => $url, 'img' => $img['button'], 'fee' => $fee]);
  130. }
  131. public function huaweiActivity(Request $request)
  132. {
  133. $encode_distribution_channel_id = encodeDistributionChannelId($this->distribution_channel_id);
  134. $activity_id = redisEnv('HUAWEI_ACTIVITY_ID',0);
  135. $activity_info = ActivityService::getById($activity_id);
  136. if ($activity_info && isset($activity_info->setting) && empty(!$activity_info->setting)) {
  137. $from = $request->input('fromtype', 'main');
  138. $display_dialog = $request->input('display_dialog', 'none');
  139. $uv_key_format = 'activity:%s:distribution_channel_id:%s:date:%s:uv';
  140. $pv_key_format = 'activity:%s:distribution_channel_id:%s:pv';
  141. $uv_key = sprintf($uv_key_format, $activity_info->id, $this->distribution_channel_id, date('Y-m-d'));
  142. $pv_key = sprintf($pv_key_format, $activity_info->id, $this->distribution_channel_id);
  143. if (time() > strtotime($activity_info->start_time) && time() < strtotime($activity_info->end_time)) {
  144. Redis::sadd($uv_key, $this->uid);
  145. Redis::hincrby($pv_key, date('Y-m-d'), 1);
  146. $products = explode(',', $activity_info->setting);
  147. $url = [];
  148. $request_param = $request->except('_url');
  149. $request_param['display_dialog'] = 'block';
  150. $count_info = DB::table('huaweilottery_user_counts')->where('uid', $this->uid)->select('count')->first();
  151. $count = 0;
  152. if($count_info && $count_info->count){
  153. $count = $count_info->count;
  154. }
  155. $default_url = env('H5_SCHEME', 'https') . '://site' . $this->en_distribution_channel_id . '.' . env('CUSTOM_HOST') . '.com';
  156. foreach ($products as $v) {
  157. $param = [
  158. 'uid' => $this->uid,
  159. 'distribution_channel_id' => $this->distribution_channel_id,
  160. 'product_id' => $v,
  161. 'activity_id' => $activity_info->id,
  162. 'fromtype' => $from,
  163. 'pay_redirect_url' => $default_url.'/activity/huaweiActivity?'.http_build_query($request_param),
  164. 'limit' => 100,
  165. ];
  166. $url[] = env('CREATE_PAY_URL') . '?' . http_build_query($param);
  167. }
  168. return view('pay.activity.huaweiActivity', ['url' => $url, 'code' => 0,'display_dialog'=>$display_dialog,'count'=>$count ,'end_time'=>$activity_info->end_time]);
  169. } else if (time() <= strtotime($activity_info->start_time)) {
  170. return view('pay.activity.huaweiActivity', ['url' => [], 'code' => 1 ,'display_dialog'=>'none','count'=>0,'end_time'=>$activity_info->end_time]);
  171. } else {
  172. return view('pay.activity.huaweiActivity', ['url' => [], 'code' => 2,'display_dialog'=>'none','count'=>0,'end_time'=>$activity_info->end_time]);
  173. }
  174. }
  175. $default_url = env('H5_SCHEME', 'https') . '://site' . $encode_distribution_channel_id . '.' . env('CUSTOM_HOST') . '.com/';
  176. return redirect()->to($default_url);
  177. }
  178. public function huaweiLotteryView()
  179. {
  180. $count_info = DB::table('huaweilottery_user_counts')->where('uid', $this->uid)->select('count')->first();
  181. $total = DB::table('huaweilottery_record')->sum('price');
  182. $left_total = 5000000-($total?$total:0);
  183. $count = 0;
  184. if($count_info && $count_info->count){
  185. $count = $count_info->count;
  186. }
  187. $activity_id = redisEnv('HUAWEI_ACTIVITY_ID',0);
  188. $activity_info = ActivityService::getById($activity_id);
  189. if(!$activity_info){
  190. $diff = 0;
  191. }else{
  192. $diff = time()-strtotime($activity_info->end_time);
  193. $diff = $diff>0?$diff:0;
  194. }
  195. $list = DB::table('huaweilottery_record')
  196. ->where('uid',$this->uid)
  197. ->where('price','>',0)
  198. ->select('created_at','price')
  199. ->get();
  200. return view('pay.activity.huaweiLottery', ['count' => $count, 'time_diff' => $diff,'list'=>$list,'total'=>$left_total]);
  201. }
  202. public function huaweiLottery()
  203. {
  204. $count_info = DB::table('huaweilottery_user_counts')->where('uid', $this->uid)->select('count')->first();
  205. $rest_count = 0;
  206. if ($count_info && $count_info->count) {
  207. $rest_count = $count_info->count;
  208. }
  209. $count = random_int(6, 10);
  210. if ($rest_count <= 0) {
  211. return response()->success(['rotate' => 20 + 45 * 2 * $count]);
  212. }
  213. DB::table('huaweilottery_user_counts')->where('uid', $this->uid)->update([
  214. 'count' => $rest_count - 1,
  215. 'updated_at' => date('Y-m-d H:i:s')
  216. ]);
  217. $code = random_int(1, 1000);
  218. if ($code <= 20) {
  219. // 1000书币
  220. $point = 20 + 45 * 7;
  221. $price = 1000;
  222. } elseif ($code <= 200) {
  223. //100
  224. $point = 20 + 45;
  225. $price = 100;
  226. } elseif ($code <= 700) {
  227. //50
  228. $point = 20 + 45 * 3;
  229. $price = 50;
  230. } else {
  231. $point = 20 + 45 * 2;
  232. $price = 0;
  233. }
  234. $rotate = $point + 360 * $count;
  235. if ($price > 0) {
  236. UserService::addBalance($this->uid, $price, 0, $price);
  237. }
  238. DB::table('huaweilottery_record')->insert([
  239. 'uid' => $this->uid,
  240. 'price' => $price,
  241. 'created_at' => date('Y-m-d H:i:s'),
  242. 'updated_at' => date('Y-m-d H:i:s'),
  243. ]);
  244. return response()->success(compact('rotate','price'));
  245. }
  246. }