MengbaoLogic.class.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  1. <?php
  2. /**
  3. * 佩奇拼图活动(由萌鸡快跑活动改写)
  4. * @author xusong
  5. * @version 0.0.1
  6. * @datetime 2019.07.25
  7. */
  8. namespace Home\Logic\Activityv2;
  9. class MengbaoLogic extends BaseLogic
  10. {
  11. private $act_id;
  12. private $uid;
  13. private $userinfo;
  14. private $activityinfo;
  15. private $vip_level;
  16. /**
  17. * [_initialize 前置操作-继承公共前置方法]
  18. * @author Devil
  19. * @blog http://gong.gg/
  20. * @version 0.0.1
  21. * @datetime 2016-12-03T12:39:08+0800
  22. */
  23. public function _initialize() {
  24. // 调用父类前置方法
  25. parent::_initialize();
  26. $this->uid = trim(I('uid'));
  27. if(!$this->userinfo = M('iptv_users')->where(['uid'=>$this->uid])->find()){
  28. $this->responseError('uid 参数非法');
  29. }
  30. $this->act_id = (int)I('act_id');
  31. if(!$this->activityinfo = M('Activity_v2')->where(['id'=>$this->act_id])->find()){
  32. $this->responseError('act_id 参数非法');
  33. }
  34. //检查vip鉴权方式
  35. $this->vip_level = I('is_vip') >= 0 ? I('is_vip') : 0;
  36. }
  37. public function getMengbaoList()
  38. {
  39. $page = I('page',1);
  40. $limit = I('limit',8);
  41. $count = M('activity_mengbao')->count();
  42. $order = I('order','id');
  43. if($order == 'id'){
  44. $order = 'id asc';
  45. }else{
  46. $order = 'score desc , id asc';
  47. }
  48. $maxPage = ceil($count/$limit);
  49. if( ($page < 1) || ($page > $maxPage)){
  50. $this->responseError('没有更多萌宝资料!', -3, $error);
  51. }
  52. $data = M('activity_mengbao')->field('id as mengbao_id,name,age,image,media_id,media_num,score')->order($order)->limit(($page-1)*$limit,$limit)->select();
  53. foreach ($data as $key=>$value) {
  54. $data[$key]['image'] = __MY_URL__.$value['image'];
  55. }
  56. $this->responseSuccess($data,'萌宝资料');
  57. }
  58. /**
  59. * 获取活动状态
  60. * @return [type] [description]
  61. */
  62. public function getActStatus()
  63. {
  64. //开始时间结束时间未作限制
  65. if($this->activityinfo['is_enable'] == 1){
  66. $this->responseSuccess(1, "请求成功!");
  67. }else{
  68. $this->responseSuccess(-1, "请求成功!");
  69. }
  70. }
  71. /**
  72. * 提交用户资料
  73. * @return [type] [description]
  74. */
  75. public function setUserInfo()
  76. {
  77. $phone = trim(I('phone'));
  78. if (empty($phone)) {
  79. $this->responseError('参数错误!');
  80. }
  81. //检测手机号码是否正确
  82. if (!preg_match('/^1[345789]\d{9}$/ims', $phone)) {
  83. $this->responseError('手机号填写有误!');
  84. }
  85. //更新用户活动手机号码
  86. $where = array(
  87. 'uid'=>$this->uid,
  88. 'act_id'=>$this->act_id,
  89. );
  90. if ($id = M('activity_user_v2')->where($where)->getField('id')){
  91. $update['user_phone']= $phone;
  92. $update['updated_at']= date('Y-m-d H:i:s');
  93. if(M('activity_user_v2')->where(['id'=>$id])->save($update)===false){
  94. Writelog(M()->getLastSql(),'sql','prize');
  95. $this->responseError("更新失败!");
  96. }
  97. }else{
  98. $insert_data = array(
  99. 'uid'=>$this->uid,
  100. 'act_id'=>$this->act_id,
  101. 'user_phone'=>$phone,
  102. 'created_at'=>date('Y-m-d H:i:s'),
  103. 'updated_at'=>date('Y-m-d H:i:s')
  104. );
  105. if(!M('activity_user_v2')->add($insert_data)){
  106. Writelog(M()->getLastSql(),'sql','prize');
  107. $this->responseError("登记失败!");
  108. }
  109. }
  110. $this->responseSuccess(0, "登记成功!");
  111. }
  112. public function vote()
  113. {
  114. $score = I('score',1);
  115. $mengbao_id = I('mengbao_id');
  116. $remain_vote_chance = $this->_getVoteChance();
  117. if(($remain_chance = $remain_vote_chance - $score) < 0){
  118. $this->responseError('您没有足够的投票次数,投票失败');
  119. }
  120. //更新萌宝获得总票数
  121. M('activity_mengbao')->where(['id'=>$mengbao_id])->setInc('score',$score);
  122. $where = [
  123. 'uid'=>$this->uid,
  124. 'created_at'=>['gt','2020-01-15'],
  125. 'product_id'=>'365',
  126. 'pay_result'=>0
  127. ];
  128. $is_year_vip = M('iptv_order')->where($where)->find();
  129. if($is_year_vip){
  130. //已投票数
  131. $vip_vote = M('activity_vip_vote')->where(['uid'=>$this->uid,'act_id'=>$this->act_id])->field('id,num')->find();
  132. $alrady_vip_vote = $vip_vote['num'] ? : 0;
  133. //剩余数
  134. $remain_vip_vote = 200 - $alrady_vip_vote;
  135. $diff = $remain_vip_vote - $score;
  136. if($diff >= 0){
  137. M('activity_vip_vote')->where(['id'=>$vip_vote['id']])->setInc('num',$diff);
  138. }else{
  139. M('activity_vip_vote')->where(['id'=>$vip_vote['id']])->save(['num'=>200]);
  140. }
  141. }
  142. //插入
  143. $insert_data = [
  144. 'act_id'=>$this->act_id,
  145. 'uid' =>$this->uid,
  146. 'num' =>$score,
  147. 'mengbao_id'=>$mengbao_id,
  148. 'created_at'=>date('Y-m-d H:i:s'),
  149. 'date' =>date('Ymd')
  150. ];
  151. M('activity_vote')->add($insert_data);
  152. $this->responseSuccess(['num'=>$remain_chance],'投票成功,去参与抽奖吧');
  153. }
  154. /**
  155. * 获取剩余投票次数
  156. */
  157. public function _getVoteChance()
  158. {
  159. if($this->vip_level >= 1){
  160. $vote = 10;
  161. }else{
  162. $vote = 5;
  163. }
  164. $add = 0;
  165. $where = [
  166. 'uid'=>$this->uid,
  167. 'created_at'=>['gt','2020-01-15'],
  168. 'product_id'=>'365',
  169. 'pay_result'=>0
  170. ];
  171. $is_year_vip = M('iptv_order')->where($where)->find();
  172. if($is_year_vip){
  173. $num = M('activity_vip_vote')->where(['uid'=>$this->uid,'act_id'=>$this->act_id])->getField('num');
  174. if($num === null){
  175. $insert = [
  176. 'act_id'=>$this->act_id,
  177. 'uid'=>$this->uid,
  178. 'num'=>0,
  179. 'created_at'=>date('Y-m-d H:i:s')
  180. ];
  181. M('activity_vip_vote')->add($insert);
  182. }
  183. $add = 200 - $num;
  184. }
  185. $vote += $add;
  186. //查看当前已投票次数
  187. $alreay_num = M('activity_vote')->where(['date'=>date('Ymd'),'uid'=>$this->uid,'act_id'=>$this->act_id])->sum('num');
  188. //查看当前应有票数
  189. if($vote <= $alreay_num){
  190. return 0;
  191. }
  192. return $vote > $alreay_num ? $vote - $alreay_num : 0;
  193. }
  194. /**
  195. * 获取剩余投票次数
  196. */
  197. public function getVoteChance()
  198. {
  199. $data['num'] = $this->_getVoteChance();
  200. $this->responseSuccess($data,'投票剩余次数');
  201. }
  202. /**
  203. * 提交用户资料
  204. * @return [type] [description]
  205. */
  206. public function setUserInfoByphone()
  207. {
  208. $phone = trim(I('phone'));
  209. $address = trim(I('address'));
  210. $receiver = trim(I('receiver'));
  211. if (!($phone && $address && $receiver)) {
  212. $this->responseError('参数错误!');
  213. }
  214. //检测手机号码是否正确
  215. if (!preg_match('/^1[345789]\d{9}$/ims', $phone)) {
  216. $this->responseError('手机号填写有误!');
  217. }
  218. //更新用户活动手机号码
  219. $where = array(
  220. 'uid'=>$this->uid,
  221. 'act_id'=>$this->act_id,
  222. );
  223. if ($id = M('activity_user_v2')->where($where)->getField('id')){
  224. $update['user_phone']= $phone;
  225. $update['address'] = $address;
  226. $update['receiver'] = $receiver;
  227. $update['updated_at'] = date('Y-m-d H:i:s');
  228. if(M('activity_user_v2')->where(['id'=>$id])->save($update)===false){
  229. Writelog(M()->getLastSql(),'sql','prize');
  230. $this->responseError("更新失败!");
  231. }
  232. }else{
  233. $insert_data = array(
  234. 'uid'=>$this->uid,
  235. 'act_id'=>$this->act_id,
  236. 'user_phone'=>$phone,
  237. 'address'=>$address,
  238. 'receiver'=>$receiver,
  239. 'created_at'=>date('Y-m-d H:i:s'),
  240. 'updated_at'=>date('Y-m-d H:i:s'),
  241. );
  242. if(!M('activity_user_v2')->add($insert_data)){
  243. Writelog(M()->getLastSql(),'sql','prize');
  244. $this->responseError("登记失败!");
  245. }
  246. }
  247. $this->responseSuccess(0, "登记成功!");
  248. }
  249. /**
  250. * 活动规则说明
  251. * @return [type] [description]
  252. */
  253. public function getActivityInfo()
  254. {
  255. // //获取活动规则信息
  256. $data['act'] = $this->activityinfo;
  257. $data['act']['info'] = explode('######', $this->activityinfo['introduce']);
  258. $data['act']['info'][0] = mb_substr(htmlspecialchars_decode($data['act']['info'][0]), 0, -3) ;
  259. $data['act']['info'][1] = mb_substr(htmlspecialchars_decode($data['act']['info'][1]), 4);
  260. //获取当前活动的手机号码
  261. $user_phone = M('activity_user_v2')->where(['act_id'=>$this->act_id,'uid'=>$this->uid])->getField('user_phone');
  262. if ($user_phone) {
  263. $data['user']['user_phone'] = $user_phone;
  264. }
  265. //获取奖品信息
  266. $prizes_tmp = json_decode($this->activityinfo['prize_list'],TRUE);
  267. foreach ($prizes_tmp as $key => $v) {
  268. $prizes[$v['prize_id']] = $v;
  269. if($v['prize_status'] == 0 || $v['prize_status'] == -1){
  270. continue;
  271. }
  272. $prize_list[] = ['id'=>$v['prize_id'],'prize_name'=>$v['prize_name'],'prize_img'=>$v['prize_img']];
  273. }
  274. // var_dump($prizes);die;
  275. $data['prizes'] = $prize_list;
  276. //获取中奖信息
  277. $data['rank'] = $this->prizelog('localhost');
  278. unset($data['act']['prize_list']);
  279. unset($data['act']['prize_rule']);
  280. //获取当前用户中奖信息
  281. $map['act_id'] = $this->act_id;
  282. $map['uid'] = $this->uid;
  283. $map['rule_id'] = array("neq", 0);
  284. //$data['my_prizes'] = M('prize_log_v2')->field('prize_id,prize_name')->where($map)->select();
  285. $my_prizes = M('prize_log_v2')->field('created_at,prize_id')->where($map)->select() ? : array();
  286. if($my_prizes){
  287. foreach ($my_prizes as $k=>$value) {
  288. $my_prizes[$k]['prize_name'] = $prizes[$value['prize_id']]['prize_name'];
  289. $data['my_prizes'][] = ['prize_id'=>$value['prize_id'],'prize_name'=>$prizes[$value['prize_id']]['prize_name']];
  290. }
  291. }
  292. //获取用户剩余中奖次数
  293. $data['remain_chance'] = $this->_getUserChance();
  294. $this->responseSuccess($data);
  295. }
  296. /**
  297. * 获取用户当日抽奖次数
  298. * @param [type] $uid [description]
  299. * @return [type] [description]
  300. */
  301. public function _getUserChance()
  302. {
  303. $map['uid'] = $this->uid;
  304. $map['act_id'] = $this->act_id;
  305. $map['date'] = date('Ymd');
  306. $chance = M('prize_log_v2')->where($map)->count();
  307. if(($this->activityinfo['is_test'] == 1) && (I('is_test') == 1)){
  308. return 1;
  309. }
  310. if($chance){
  311. return 0;
  312. }
  313. //是否参与了投票
  314. $bool = M('activity_vote')->where([$map])->find();
  315. if($bool){
  316. return 1;
  317. }else{
  318. return -1;
  319. }
  320. }
  321. /**
  322. * 获取用户剩余抽奖次数
  323. * @return [type] [description]
  324. */
  325. public function getPrizeNum()
  326. {
  327. $remain_chance = $this->_getUserChance();
  328. if($remain_chance == 0){
  329. $this->responseSuccess(['num'=>0],'您今天的抽奖次数用完了');
  330. }
  331. if($remain_chance == 1){
  332. $this->responseSuccess(['num'=>1],'您今天的剩余次数');
  333. }
  334. if($remain_chance == -1){
  335. $this->responseSuccess(['num'=>-1],'参与投票,即可抽奖');
  336. }
  337. }
  338. /**
  339. * 所有中奖记录查询
  340. */
  341. public function prizelog($model = ''){
  342. $error[] = ['error' => 'error'];
  343. $where['pl.act_id'] = $this->act_id;
  344. $where['pl.prize_status'] = 1;
  345. $data = M('prize_log_v2')->alias('pl')
  346. ->join(array('left join '.C("DB_PREFIX").'activity_user_v2 as iu on iu.uid = pl.uid and iu.act_id = '.$this->act_id))
  347. ->where($where)
  348. ->order('pl.id desc')
  349. ->field('pl.prize_id,pl.created_at,pl.uid,iu.user_phone')
  350. ->select();
  351. $prizes = json_decode($this->activityinfo['prize_list'],TRUE);
  352. foreach ($prizes as $value) {
  353. $prize_list[$value['prize_id']] = $value;
  354. }
  355. if($data){
  356. foreach ($data as $key=>$value) {
  357. $data[$key]['prize_name'] = $prize_list[$value['prize_id']]['prize_name'];
  358. $data[$key]['prize_img'] = __MY_URL__.$prize_list[$value['prize_id']]['prize_img'];
  359. }
  360. }
  361. //增加虚拟中奖信息
  362. $default_data = $this->getPrizeDefault();
  363. if($data || $default_data){
  364. if($data){
  365. foreach ($data as $k=>$v){
  366. if($v['user_phone']){
  367. $data[$k]['user_phone'] = substr_replace($v['user_phone'],'****',3,4);
  368. }else {
  369. $data[$k]['user_phone'] = substr_replace($v['uid'],'****',6);
  370. }
  371. unset($data[$k]['uid']);
  372. }
  373. }
  374. if($data && $default_data){
  375. $data = array_merge($default_data,$data);
  376. }else{
  377. $data = $data ? : $default_data;
  378. }
  379. array_multisort(array_column($data,'created_at'),SORT_DESC,$data);
  380. if($model == 'localhost'){
  381. return $data;
  382. }
  383. $this->responseSuccess($data, '查询成功!');
  384. }else{
  385. if($model == 'localhost'){
  386. return array();
  387. }
  388. $this->responseError('没有抽奖记录!', -3, $error);
  389. }
  390. }
  391. /**
  392. * 我的中奖记录查询
  393. */
  394. public function userPrizelog(){
  395. $error[] = ['error' => 'error'];
  396. //获取用户
  397. if($user_phone = M('activity_user_v2')->where(['uid'=>$this->uid,'act_id'=>$this->act_id])->getField('user_phone')){
  398. $phone_staus = 1;//填过
  399. }else{
  400. $phone_staus = 2;//填过
  401. }
  402. $where = array();
  403. $where['pl.prize_status'] = 1;
  404. $where['pl.uid'] = $this->uid;
  405. $where['pl.act_id'] = $this->act_id;
  406. $data = M('prize_log_v2')->alias('pl')
  407. ->where($where)
  408. ->order('pl.id desc')
  409. ->field('pl.prize_id,pl.created_at')
  410. ->select();
  411. // echo M()->getLastSql();die;
  412. $prizes = json_decode($this->activityinfo['prize_list'],TRUE);
  413. foreach ($prizes as $value) {
  414. $prize_list[$value['prize_id']] = $value;
  415. }
  416. $flag = $data ? 1 : 0;
  417. if($flag){
  418. if($data){
  419. foreach ($data as $k => $v){
  420. $data[$k]['prize_name'] = $prize_list[$v['prize_id']]['prize_name'];
  421. $data[$k]['prize_object'] = 'real';
  422. $data[$k]['show_image'] = $prize_list[$v['prize_id']]['prize_img'] ? __MY_URL__.$prize_list[$v['prize_id']]['prize_img']:null;
  423. unset($data[$k]['prize_id']);
  424. }
  425. }
  426. $return_data = array(
  427. 'my_prizes'=>$data,
  428. 'user_phone'=>['phone_status'=>$phone_staus,'user_phone'=>$user_phone ? :''],
  429. 'prize_status'=>$data ? 'real' : 'vitual'
  430. );
  431. $this->responseSuccess($return_data, '查询成功!');
  432. }else{
  433. $this->responseError('没有抽奖记录!', -3, $error);
  434. }
  435. }
  436. /**
  437. * 抽奖
  438. */
  439. public function prize(){
  440. $error[] = ['error' => 'error'];
  441. $chance = $this->_getUserChance();
  442. if($chance == 0){
  443. $this->responseError('您今天的抽奖次数用完了');
  444. }
  445. if($chance == -1){
  446. $this->responseSuccess('参与投票,即可抽奖');
  447. }
  448. //开始抽奖
  449. $prize_data = $this->_get_prize();
  450. unset($prize_data['yes']['rule_id']);
  451. $this->responseSuccess($prize_data, '抽奖成功!');
  452. }
  453. private function _get_prize() {
  454. $result = $this->getPrizeSetDeatil();
  455. // var_dump($result);die;
  456. $this->_writePrizeLog($result);
  457. $res = array();
  458. $res['yes']['prize_name'] = $result['prize_name']; //中奖项
  459. $res['yes']['prize_status'] = $result['prize_object'] ? : 'none';
  460. $res['yes']['prize_img'] = $result['prize_img'] ? __MY_URL__.$result['prize_img'] : '';
  461. $res['yes']['rule_id'] = $result['rule_id'];
  462. return $res;
  463. }
  464. /**
  465. * @param desc 写入抽奖日志
  466. * @param type $result
  467. */
  468. private function _writePrizeLog(&$result) {
  469. $log_data['uid'] = $this->uid;
  470. $log_data['prize_id'] = $result['prize_id'];
  471. $log_data['is_vip'] = $this->vip_level;
  472. $log_data['act_id'] = $this->act_id;
  473. $log_data['created_at'] = date('Y-m-d H:i:s');
  474. $log_data['date'] = date('Ymd');
  475. $log_data['rule_id'] = $result['rule_id'];
  476. $log_data['prize_status'] = $result['prize_status'];
  477. if(!M('prize_log_v2')->add($log_data)){
  478. Writelog(M()->getLastSql(),'sql','activity');
  479. $this->responseError('系统繁忙抽奖失败', -1);
  480. }
  481. }
  482. /**
  483. * 返回中奖的信息
  484. */
  485. private function getPrizeSetDeatil()
  486. {
  487. $prize_list = json_decode($this->activityinfo['prize_list'],TRUE);//获取奖项设置
  488. if($prize_list){
  489. foreach ($prize_list as $row) {
  490. $limit_sales[$row['prize_id']] = $row;
  491. if($row['prize_level']== 0){
  492. $impossible_prize = ['prize_id'=>$row['prize_id'],'prize_name'=>$row['prize_name'],'rule_id'=>0,'prize_img'=>'','prize_status'=>0];
  493. }
  494. }
  495. }
  496. //获取所有规则
  497. $rules = json_decode($this->activityinfo['prize_rule'],TRUE);
  498. if(!$rules){
  499. return $impossible_prize;
  500. }
  501. if(I('run')!='complate'){
  502. return $impossible_prize;
  503. }
  504. //如果中了一次实物奖就不允许中第二次
  505. $map = array(
  506. 'act_id'=> $this->act_id,
  507. 'uid'=> $this->uid,
  508. 'prize_status'=>1,
  509. );
  510. if(M('Prize_log_v2')->where($map)->find()){
  511. return $impossible_prize;
  512. }
  513. $swithc_no = '';
  514. foreach ($rules as $value) {
  515. if($value['rule_status'] == 0){
  516. $swithc_no = $swithc_no. 0;
  517. continue;
  518. }
  519. //1.检查是否符合身份
  520. if(FALSE === $this->_checkRuleRole($value['rule_role'])){
  521. $swithc_no = $swithc_no. 1;
  522. continue;
  523. }
  524. //2.检查中奖日期设置
  525. if(FALSE === $this->_checkRuleDate($value['rule_date'])){
  526. $swithc_no = $swithc_no. 2;
  527. continue;
  528. }
  529. //3.检查时段设置
  530. if(FALSE === $this->_checkRuleHour($value['rule_hour'])){
  531. $swithc_no = $swithc_no. 3;
  532. continue;
  533. }
  534. //4.概率摇奖
  535. if(FALSE === $this->_getRandNum($value['rule_probability'])){
  536. $swithc_no = $swithc_no. 4;
  537. continue;
  538. }
  539. //5.查询是否超出当前规则下的出奖数
  540. if(FALSE === $this->_checkCurrentRuleSale($value)){
  541. $swithc_no = $swithc_no. 5;
  542. continue;
  543. }
  544. //6.查询是否超出奖品总数
  545. if(FALSE === $this->_checkGolabRule($value,$limit_sales)){
  546. $swithc_no = $swithc_no. 6;
  547. continue;
  548. }
  549. //8.如果中了一次实物奖就不允许中第二次
  550. if('real'== $limit_sales[$value['rule_prize_id']]['prize_object']){
  551. if(M('Prize_log_v2')->where(['act_id'=>$this->act_id,'uid'=>$this->uid,'prize_status'=>1])->find()){
  552. $swithc_no = $swithc_no. 8;
  553. continue;
  554. }
  555. }
  556. Writelog('uid: '.$this->uid.'跳出关卡: '.$swithc_no,'switch','activityv2');
  557. $prize = $limit_sales[$value['rule_prize_id']];
  558. $prize['rule_id'] = $value['rule_id'];
  559. $prize['prize_status'] = 1;
  560. return $prize;
  561. }
  562. Writelog('uid: '.$this->uid.'跳出关卡: '.$swithc_no,'switch','activityv2');
  563. return $impossible_prize;
  564. }
  565. /**
  566. * 获取转盘信息
  567. */
  568. public function prizeData(){
  569. $error[] = ['error' => 'error'];
  570. $data = array();
  571. $data['userp']['prize_num'] = $this->_getUserChance();
  572. $data['userp']['user_phone'] = $this->userinfo['user_phone'] ? :$this->userinfo['uid'];
  573. //转盘信息
  574. $turn_data = json_decode($this->activityinfo['prize_list'],TRUE);
  575. if($turn_data){
  576. foreach ($turn_data as $k => $v){
  577. if($v['prize_status'] == 0){
  578. unset($turn_data[$k]);
  579. continue;
  580. }
  581. if($v['prize_img']){
  582. $turn_data[$k]['prize_img'] = __MY_URL__.$v['prize_img'];
  583. }
  584. unset($turn_data[$k]['prize_num']);
  585. unset($turn_data[$k]['prize_level']);
  586. unset($turn_data[$k]['prize_status']);
  587. }
  588. $data['prize_data'] = $turn_data;
  589. }else{
  590. $this->responseError('获取失败!', -1, $error);
  591. }
  592. $this->responseSuccess($data, '查询成功!');
  593. }
  594. private function getPrizeDefault()
  595. {
  596. $map['pd.act_id'] = $this->act_id;
  597. $prizes = json_decode($this->activityinfo['prize_list'],true);
  598. foreach ($prizes as $key=>$v){
  599. $prize_list[$v['prize_id']] = $v;
  600. }
  601. // var_dump($prize_list);die;
  602. $data = M('prize_default_v2')->where(['act_id'=>$this->act_id])->select();
  603. if($data){
  604. foreach ($data as $value) {
  605. $return_data[] = array(
  606. 'created_at'=>$value['prize_date'],
  607. 'prize_name'=>$prize_list[$value['prize_id']]['prize_name'],
  608. 'prize_img'=>$prize_list[$value['prize_id']]['prize_img'] ? __MY_URL__.$prize_list[$value['prize_id']]['prize_img']:'',
  609. 'user_phone'=>substr_replace($value['phone'],'****',3,4),
  610. );
  611. }
  612. }
  613. return $return_data;
  614. }
  615. /**
  616. * @desc 检查中奖规则关于身份设置
  617. */
  618. private function _checkRuleRole($rule_role)
  619. {
  620. $role = $this->vip_level ? '会员' : '普通用户';
  621. if(FALSE !== strpos($rule_role, '不限')){
  622. return TRUE;
  623. }
  624. if($rule_role != '虚拟用户'){
  625. if(in_array($role, explode(',', $rule_role))){
  626. return TRUE;
  627. }
  628. }
  629. return FALSE;
  630. }
  631. /**
  632. * @desc 检查中奖规则关于日期
  633. */
  634. private function _checkRuleDate($rule_date)
  635. {
  636. if(FALSE !== strpos($rule_date,'每日')){
  637. return TRUE;
  638. }
  639. //时间段
  640. if(strpos($rule_date,'至')){
  641. $date = explode('至', $rule_date);
  642. if((time()>=strtotime($date[0])) && time()< strtotime($date[1])){
  643. return TRUE;
  644. }else{
  645. return FALSE;
  646. }
  647. }else{
  648. if(date('Y-m-d') == $rule_date){
  649. return TRUE;
  650. }else{
  651. return FALSE;
  652. }
  653. }
  654. }
  655. /**
  656. * @desc 检查中奖规则关于时间段
  657. */
  658. private function _checkRuleHour($rule_hour)
  659. {
  660. $hour = explode('至', $rule_hour);
  661. if((date('H:i')>= trim($hour[0])) && (date('H:i')< trim($hour[1]))){
  662. return TRUE;
  663. }else{
  664. return FALSE;
  665. }
  666. }
  667. /**
  668. * @desc 概率摇奖
  669. * @param type $rule_probability
  670. * @return boolean
  671. */
  672. private function _getRandNum($rule_probability)
  673. {
  674. if($rule_probability == 0){
  675. return FALSE;
  676. }
  677. $tmp = explode('/', $rule_probability);
  678. $rand_array = range(1, $tmp[1]);
  679. shuffle($rand_array);
  680. $get_randnum = array_slice($rand_array, 0, $tmp[0]);
  681. Writelog('uid: '.$this->uid.'抽签: '.json_encode($get_randnum),'switch','activityv2');
  682. if(in_array($tmp[0], $get_randnum)){
  683. return TRUE;
  684. }else{
  685. return FALSE;
  686. }
  687. }
  688. /**
  689. * @desc 查询符合当前规则
  690. */
  691. private function _checkCurrentRuleSale(&$rule)
  692. {
  693. //查询当前规则下的中奖数,如果为-1则无限制
  694. if($rule['rule_num'] == -1){
  695. return TRUE;
  696. }
  697. if((FALSE!==strpos($rule['rule_date'],'至')) && ($rule['rule_cycle']=='total')){
  698. $rule_date = explode('至', $rule['rule_date']);
  699. $where['rule_id'] = $rule['rule_id'];
  700. $where['act_id'] = $this->act_id;
  701. $where['date'] = ['between',[date('Ymd', strtotime($rule_date[0])),date('Ymd', strtotime($rule_date[1]))]];
  702. $countNum = M('Prize_log_v2')->where($where)->count();
  703. Writelog('当前1:'.$countNum.'规则:'.$rule['rule_num'],'info','activityv2');
  704. return $countNum >= $rule['rule_num'] ? FALSE : TRUE;
  705. }else{
  706. $where['date'] = date('Ymd');
  707. $where['rule_id'] = $rule['rule_id'];
  708. $where['act_id'] = $this->act_id;
  709. $countNum = M('Prize_log_v2')->where($where)->count();
  710. Writelog('当前2:'.$countNum.'规则:'.$rule['rule_num'],'info','activityv2');
  711. // echo M()->getLastSql();die;
  712. return $countNum >= $rule['rule_num'] ? FALSE : TRUE;
  713. }
  714. }
  715. /**
  716. * @desc 不能超过奖品总数
  717. */
  718. private function _checkGolabRule(&$rule,&$limit_sales)
  719. {
  720. if($limit_sales[$rule['rule_prize_id']]['prize_num'] == -1){
  721. return TRUE;
  722. }
  723. $countNum = M('Prize_log_v2')->where(['prize_id'=>$rule['rule_prize_id'],'act_id'=>$this->act_id])->count();
  724. // echo M()->getLastSql();die;
  725. Writelog('当前3:'.$countNum.'总量:'.$limit_sales[$rule['rule_prize_id']]['prize_num'],'info','activityv2');
  726. return $countNum >= $limit_sales[$rule['rule_prize_id']]['prize_num'] ? FALSE : TRUE;
  727. }
  728. }