bonusex.php 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 16/4/11
  6. * Time: 上午12:49
  7. */
  8. defined('InShopNC') or exit('Access Invalid!');
  9. require_once(BASE_ROOT_PATH . '/helper/bonus_helper.php');
  10. require_once(BASE_ROOT_PATH . '/helper/predeposit_helper.php');
  11. require_once(BASE_ROOT_PATH . '/helper/session_helper.php');
  12. require_once(BASE_ROOT_PATH . '/helper/sms_helper.php');
  13. require_once(BASE_ROOT_PATH . '/helper/model_helper.php');
  14. require_once(BASE_ROOT_PATH . '/helper/category_helper.php');
  15. require_once(BASE_ROOT_PATH . '/helper/brand_helper.php');
  16. require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
  17. require_once(BASE_ROOT_PATH . '/helper/search/util.php');
  18. require_once(BASE_ROOT_PATH . '/helper/search_param.php');
  19. require_once(BASE_ROOT_PATH . '/helper/goods_helper.php');
  20. require_once(BASE_ROOT_PATH . '/helper/session_helper.php');
  21. require_once(BASE_ROOT_PATH . '/helper/login_helper.php');
  22. require_once(BASE_ROOT_PATH . '/helper/third_author/wxauthor.php');
  23. require_once(BASE_ROOT_PATH . '/helper/fcode/present_manager.php');
  24. require_once(BASE_ROOT_PATH . '/helper/url_helper.php');
  25. require_once(BASE_ROOT_PATH . '/helper/activity_helper.php');
  26. class bonusexControl extends mobileControl
  27. {
  28. const bonus_goods = 10;
  29. public function __construct() {
  30. parent::__construct();
  31. }
  32. private function fileter_typeinfos($type_infos,&$type_info,&$binded_info,&$avatars)
  33. {
  34. $type_info = bonus_helper::filter_type($type_infos['type_info']);
  35. $avatars = $type_infos['avatars'];
  36. $binded_info = array();
  37. $binded_infos = $type_infos['binded_info'];
  38. if(is_array($binded_infos))
  39. {
  40. foreach($binded_infos as $val)
  41. {
  42. $user_info = bonus_helper::filter_bonus($val);
  43. if(isset($val['user_mobile'])) {
  44. unset($val['user_mobile']);
  45. }
  46. array_push($binded_info,$user_info);
  47. }
  48. }
  49. }
  50. private function isMineType(bonus\type $type) {
  51. return ($type->sender_id() == $_SESSION['member_id'] || $type->relayer_id() == $_SESSION['member_id']);
  52. }
  53. public function openOp()
  54. {
  55. if(!isset($_GET['type_sn']) || empty($_GET['type_sn'])) {
  56. return self::outerr(errcode::ErrParamter,"需要红包 type_sn 参数.");
  57. }
  58. $type_sn = $_GET['type_sn'];
  59. $type_infos = bonus_helper::get_typeinfo($type_sn);
  60. if(empty($type_infos)) {
  61. return self::outerr(errcode::ErrBonus,"无此红包.");
  62. }
  63. if(session_helper::need_wechat_author())
  64. {
  65. $author = new thrid_author\wxauthor();
  66. $url = author_url::bonus_open_url($type_sn);
  67. $url = $author->enter($url);
  68. return self::outsuccess(['direct_uri' => $url],"redirect");
  69. }
  70. $this->fileter_typeinfos($type_infos,$type_info,$binded_info,$avatars);
  71. $type = bonus\type::create_by_paramer($type_infos['type_info']);
  72. $isMineType = $this->isMineType($type);
  73. if($type->isStart() == false) {
  74. return self::outsuccess(array('type_info' => $type_info),"bonus/unstart");
  75. }
  76. $grabable = bonus_helper::can_grab($type,session_helper::memberid(),session_helper::mobile());
  77. $mine_bonus = bonus_helper::get_mine_by_typesn($type_sn);
  78. if($mine_bonus != false)
  79. { //显示我抢到的红包,按照状态进行判断
  80. $bonus = bonus\user_bonus::create_by_param($mine_bonus);
  81. $mine_bonus = bonus_helper::filter_bonus($mine_bonus);
  82. if($bonus->isBinded() == false && (session_helper::logined() || session_helper::isVerfiyMobile()))
  83. {
  84. if($grabable == false) {
  85. return self::outsuccess(array('type_info' => $type_info,'msg' => "已注册用户不能领邀请红包~"),"bonus/over");
  86. }
  87. $ret = bonus_helper::bind_bonus($bonus->bonus_sn(),session_helper::session_id(),session_helper::mobile(),session_helper::memberid(),$new_sn);
  88. if($ret == true) {
  89. $mine_bonus = bonus_helper::get_mine_by_bonussn($new_sn);
  90. }
  91. }
  92. $summarys = $this->matched_goods($type_sn);
  93. $data = array('type_info' => $type_info,
  94. 'mine_bonus' => $mine_bonus,
  95. 'binded_info' => $binded_info,
  96. 'avatars' => $avatars,
  97. 'summarys' => $summarys);
  98. if($bonus->isBinded() || $isMineType) {
  99. return self::outsuccess($data,"bonus/detail");
  100. }
  101. else
  102. {
  103. if($type->isEnd()) {
  104. return self::outsuccess(array('type_info' => $type_info),"bonus/end");
  105. } else {
  106. return self::outsuccess($data,"bonus/bind");
  107. }
  108. }
  109. }
  110. else
  111. {
  112. if($grabable == false) {
  113. return self::outsuccess(array('type_info' => $type_info,'msg' => "已注册用户不能领邀请红包~"),"bonus/over");
  114. }
  115. //我没有抢过的情况
  116. if($isMineType == false)
  117. {
  118. if($type->isEnd()) {
  119. return self::outsuccess(array('type_info' => $type_info),"bonus/end");
  120. }
  121. else if($type->binded_over()) {
  122. return self::outsuccess(array('type_info' => $type_info,'msg' => "手慢了,红包已派完~"),"bonus/over");
  123. } else {
  124. return self::outsuccess(array('type_info' => $type_info),"bonus/open");
  125. }
  126. }
  127. else
  128. {
  129. if($type->isEnd() || $type->binded_over()) {
  130. $summarys = $this->matched_goods($type_sn);
  131. return self::outsuccess(array('type_info' => $type_info,
  132. 'binded_info' => $binded_info,
  133. 'avatars' => $avatars,
  134. 'summarys' => $summarys),
  135. 'bonus/detail');
  136. }
  137. else {
  138. return self::outsuccess(array('type_info' => $type_info),"bonus/open");
  139. }
  140. }
  141. }
  142. }
  143. public function detailOp()
  144. {
  145. if(!isset($_GET['type_sn']) || empty($_GET['type_sn'])) {
  146. return self::outerr(errcode::ErrParamter,"需要红包 type_sn 参数.");
  147. }
  148. $type_sn = $_GET['type_sn'];
  149. $type_infos = bonus_helper::get_typeinfo($type_sn);
  150. if(empty($type_infos)) {
  151. return self::outerr(errcode::ErrBonus,"无此红包.");
  152. }
  153. $this->fileter_typeinfos($type_infos,$type_info,$binded_info,$avatars);
  154. $type = \bonus\type::create_by_paramer($type_infos['type_info']);
  155. if($type->isStart() == false) {
  156. return self::outsuccess(array('type_info' => $type_info),"bonus/unstart");
  157. }
  158. $mine_bonus = bonus_helper::get_mine_by_typesn($type_sn);
  159. if($mine_bonus != false) { //显示我抢到的红包,按照状态进行判断
  160. $mine_bonus = bonus_helper::filter_bonus($mine_bonus);
  161. }
  162. $summarys = $this->matched_goods($type_sn);
  163. return self::outsuccess(array('type_info' => $type_info,
  164. 'mine_bonus' => $mine_bonus,
  165. 'binded_info' => $binded_info,
  166. 'avatars' => $avatars,
  167. 'summarys' => $summarys),
  168. 'bonus/detail');
  169. }
  170. public function grabOp()
  171. {
  172. if(!isset($_GET['type_sn']) || empty($_GET['type_sn'])) {
  173. return self::outerr(errcode::ErrParamter,"需要红包 type_sn 参数.");
  174. }
  175. $type_sn = $_GET['type_sn'];
  176. $type_infos = bonus_helper::get_typeinfo($type_sn);
  177. if(empty($type_infos)) {
  178. return self::outerr(errcode::ErrBonus,"无此红包.");
  179. }
  180. $this->fileter_typeinfos($type_infos,$type_info,$binded_info,$avatars);
  181. $type = \bonus\type::create_by_paramer($type_infos['type_info']);
  182. if($type->isStart() == false) {
  183. return self::outsuccess(array('type_info' => $type_info),"bonus/unstart");
  184. }
  185. $grabable = bonus_helper::can_grab($type,session_helper::memberid(),session_helper::mobile());
  186. $mine_bonus = bonus_helper::get_mine_by_typesn($type_sn);
  187. if($mine_bonus != false)
  188. { //显示我抢到的红包,按照状态进行判断
  189. $bonus_obj = \bonus\user_bonus::create_by_param($mine_bonus);
  190. $mine_bonus = bonus_helper::filter_bonus($mine_bonus);
  191. if($bonus_obj->isBinded()) {
  192. $summarys = $this->matched_goods($type_sn);
  193. return self::outsuccess(array('type_info' => $type_info,
  194. 'mine_bonus' => $mine_bonus,
  195. 'binded_info' => $binded_info,
  196. 'avatars' => $avatars,
  197. 'summarys' => $summarys),
  198. "bonus/detail");
  199. }
  200. elseif($type->isEnd()) {
  201. return self::outsuccess(array('type_info' => $type_info),"bonus/end");
  202. }
  203. else
  204. {
  205. if(session_helper::isVerfiyMobile() || session_helper::logined())
  206. {
  207. if($grabable == false) {
  208. return self::outsuccess(array('type_info' => $type_info,'msg' => "已注册用户不能领邀请红包~"),"bonus/over");
  209. }
  210. $ret = bonus_helper::bind_bonus($bonus_obj->bonus_sn(),$_SESSION['MPHPSESSID'],session_helper::mobile(),session_helper::memberid(),$new_sn);
  211. if($ret == true) {
  212. $mine_bonus = bonus_helper::get_mine_by_bonussn($new_sn);
  213. $summarys = $this->matched_goods($type_sn);
  214. return self::outsuccess(array('type_info' => $type_info,
  215. 'mine_bonus' => $mine_bonus,
  216. 'binded_info' => $binded_info,
  217. 'avatars' => $avatars,
  218. 'summarys' => $summarys),
  219. "bonus/detail");
  220. } else {
  221. return self::outsuccess(array('type_info' => $type_info,
  222. 'mine_bonus' => $mine_bonus,'binded_info' => $binded_info,
  223. 'avatars' => $avatars),"bonus/bind");
  224. }
  225. }
  226. else {
  227. return self::outsuccess(array('type_info' => $type_info, 'mine_bonus' => $mine_bonus,'binded_info' => $binded_info,
  228. 'avatars' => $avatars),"bonus/bind");
  229. }
  230. }
  231. }
  232. else
  233. {
  234. if($grabable == false) {
  235. return self::outsuccess(array('type_info' => $type_info,'msg' => "已注册用户不能领邀请红包~"),"bonus/over");
  236. }
  237. if($type->isEnd()) {
  238. return self::outsuccess(array('type_info' => $type_info),"bonus/end");
  239. }
  240. elseif($type->binded_over()) {
  241. return self::outsuccess(array('type_info' => $type_info,'msg' => "手慢了,红包已派完~"),"bonus/over");
  242. }
  243. else
  244. {
  245. $bonus = bonus_helper::grab_bonus($type_sn);
  246. if($bonus == false) {
  247. return self::outsuccess(array('type_info' => $type_info,'msg' => "手慢了,红包已派完~"),"bonus/over");
  248. }
  249. else
  250. {
  251. $bonus_obj = \bonus\user_bonus::create_by_param($bonus);
  252. $mine_bonus = bonus_helper::filter_bonus($bonus);
  253. if($bonus_obj->isBinded())
  254. {
  255. bonus_helper::onBinded($bonus_obj->bonus_sn(),$bonus_obj->user_mobile(),$bonus_obj->user_id());
  256. $type_infos = bonus_helper::get_typeinfo($bonus_obj->type_sn());
  257. if(empty($type_infos)) {
  258. return self::outerr(errcode::ErrBonus,"无此红包.");
  259. }
  260. $this->fileter_typeinfos($type_infos,$type_info,$binded_info,$avatars);
  261. $summarys = $this->matched_goods($type_sn);
  262. $data = array('type_info' => $type_info,
  263. 'mine_bonus' => $mine_bonus,
  264. 'binded_info' => $binded_info,
  265. 'avatars' => $avatars,
  266. 'summarys' => $summarys);
  267. return self::outsuccess($data,"bonus/detail");
  268. } else {
  269. $data = array('type_info' => $type_info, 'mine_bonus' => $mine_bonus,'binded_info' => $binded_info,'avatars' => $avatars);
  270. return self::outsuccess($data,"bonus/bind");
  271. }
  272. }
  273. }
  274. }
  275. }
  276. public function bindOp()
  277. {
  278. if(!isset($_GET['bonus_sn']) || empty($_GET['bonus_sn'])) {
  279. return self::outerr(errcode::ErrParamter,"请输入红包序列号.");
  280. }
  281. $bonus_sn = $_GET['bonus_sn'];
  282. $mine_bonus = bonus_helper::get_mine_by_bonussn($bonus_sn);
  283. if($mine_bonus == false) {
  284. return self::outerr(errcode::ErrParamter, "您不能领没有抢到的红包.");
  285. }
  286. $bonus_obj = \bonus\user_bonus::create_by_param($mine_bonus);
  287. if($bonus_obj->isBinded()) {
  288. $type_sn = $bonus_obj->type_sn();
  289. $type_infos = bonus_helper::get_typeinfo($type_sn);
  290. $this->fileter_typeinfos($type_infos,$type_info,$binded_info,$avatars);
  291. $mine_bonus = bonus_helper::filter_bonus($mine_bonus);
  292. $summarys = $this->matched_goods($type_sn);
  293. return self::outsuccess(array('type_info' => $type_info,
  294. 'mine_bonus' => $mine_bonus,
  295. 'binded_info' => $binded_info,
  296. 'avatars' => $avatars,
  297. 'summarys' => $summarys),
  298. "bonus/detail");
  299. }
  300. $type_sn = $bonus_obj->type_sn();
  301. $type_infos = bonus_helper::get_typeinfo($type_sn);
  302. $type = \bonus\type::create_by_paramer($type_infos['type_info']);
  303. $grabable = bonus_helper::can_grab($type,$_SESSION['member_id'],$_SESSION['member_mobile']);
  304. if($grabable == false) {
  305. $this->fileter_typeinfos($type_infos,$type_info,$binded_info,$avatars);
  306. return self::outsuccess(array('type_info' => $type_info,'msg' => "已注册用户不能领邀请红包~"),"bonus/over");
  307. }
  308. if($type->isEnd()) {
  309. return self::outsuccess(array('type_info' => $type_infos['type_info']),"bonus/end");
  310. }
  311. elseif(session_helper::isVerfiyMobile()) {
  312. $mobile = session_helper::mobile();
  313. }
  314. else
  315. {
  316. $mobile = $_GET['mobile'];
  317. $validator = new Validator();
  318. $validator->setValidate(Validator::verify_mobile($mobile));
  319. $err = $validator->validate();
  320. if ($err != '') {
  321. return self::outerr(errcode::ErrParamter, $err);
  322. }
  323. if(!isset($_GET['code']) || empty($_GET['code'])) {
  324. return self::outerr(errcode::ErrParamter, "请输入验证码.");
  325. }
  326. $code = $_GET['code'];
  327. $ret = sms_helper::check_code(Sms::getbonus_code,$code,$mobile);
  328. if(is_array($ret)) {
  329. return self::outerr($ret['code'], $ret['msg']);
  330. }
  331. else
  332. {
  333. $grabable = bonus_helper::can_grab($type,$_SESSION['member_id'],$mobile);
  334. login_helper::onBinded($mobile,session_helper::relay_id());
  335. }
  336. }
  337. if($grabable)
  338. {
  339. $ret = bonus_helper::bind_bonus($bonus_sn,session_helper::session_id(),$mobile,session_helper::memberid(),$new_bonus_sn);
  340. if($ret == true) {
  341. $mine_bonus = bonus_helper::get_mine_by_bonussn($new_bonus_sn);
  342. $bonus_obj = \bonus\user_bonus::create_by_param($mine_bonus);
  343. $type_infos = bonus_helper::get_typeinfo($bonus_obj->type_sn());
  344. $this->fileter_typeinfos($type_infos,$type_info,$binded_info,$avatars);
  345. return self::outsuccess(array('type_info' => $type_info,
  346. 'mine_bonus' => $mine_bonus,
  347. 'binded_info' => $binded_info,
  348. 'avatars' => $avatars));
  349. } else {
  350. return self::outerr($ret['code'],$ret['msg']);
  351. }
  352. }
  353. else
  354. {
  355. $this->fileter_typeinfos($type_infos,$type_info,$binded_info,$avatars);
  356. return self::outsuccess(array('type_info' => $type_info,'msg' => "已注册用户不能领邀请红包~"),"bonus/over");
  357. }
  358. }
  359. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  360. public function shakeOp()
  361. {
  362. if(!isset($_GET['bonus_sn']) || empty($_GET['bonus_sn'])) {
  363. return self::outerr(errcode::ErrParamter,"请输入红包序列号.");
  364. }
  365. $bonus_sn = $_GET['bonus_sn'];
  366. $mine_bonus = bonus_helper::get_mine_by_bonussn($bonus_sn);
  367. if($mine_bonus == false) {
  368. return self::outerr(errcode::ErrParamter, "领到红包后才可以摇.");
  369. }
  370. if(!isset($_POST['strength']) || empty($_POST['strength'])) {
  371. $strength = intval($_POST['strength']);
  372. } else {
  373. $strength = 3;
  374. }
  375. $bonus_obj = \bonus\user_bonus::create_by_param($mine_bonus);
  376. if($bonus_obj->can_shake())
  377. {
  378. $type_sn = $bonus_obj->type_sn();
  379. $type_infos = bonus_helper::get_typeinfo($type_sn);
  380. $type = \bonus\type::create_by_paramer($type_infos['type_info']);
  381. if($type->isEnd()) {
  382. return self::outsuccess(errcode::ErrBonus,"该红包已经过期,不能再摇啦~");
  383. }
  384. elseif($type->binded_over()) {
  385. return self::outsuccess(errcode::ErrBonus,"该红包已经被领光,摇不出更多啦~");
  386. }
  387. elseif($type->isFixedAmount()) {
  388. return self::outsuccess(errcode::ErrBonus,"只有拼收起红包才可以摇哦~");
  389. }
  390. else
  391. {
  392. $ret = bonus_helper::check_shake($bonus_sn,$first);
  393. if($ret != true) {
  394. return self::outerr($ret['code'], $ret['msg']);
  395. }
  396. $direction = bonus_helper::get_direction($first);
  397. $ret = bonus_helper::shake($bonus_obj->bonus_sn(),$strength,$direction);
  398. if($ret == true)
  399. {
  400. $bonus = bonus_helper::get_mine_by_bonussn($bonus_obj->bonus_sn());
  401. $type_infos = bonus_helper::get_typeinfo($bonus_obj->type_sn());
  402. $this->fileter_typeinfos($type_infos,$type_info,$binded_info,$avatars);
  403. $summarys = $this->matched_goods($type_sn);
  404. return self::outsuccess(array('type_info' => $type_info,
  405. 'mine_bonus' => $bonus,
  406. 'binded_info' => $binded_info,
  407. 'avatars' => $avatars,
  408. 'summarys' => $summarys),
  409. "bonus/detail");
  410. } else {
  411. return self::outsuccess(errcode::ErrBonus,"只有拼收起红包才可以摇哦~");
  412. }
  413. }
  414. }
  415. else {
  416. return self::outerr(errcode::ErrParamter, "抢到或者领到红包后才可以摇.");
  417. }
  418. }
  419. //红包留言
  420. public function commentOp()
  421. {
  422. if(!isset($_GET['bonus_sn']) || empty($_GET['bonus_sn'])) {
  423. return self::outerr(errcode::ErrParamter,"请输入红包序列号.");
  424. }
  425. $bonus_sn = $_GET['bonus_sn'];
  426. if(!isset($_GET['comment']) || empty($_GET['comment'])) {
  427. return self::outerr(errcode::ErrParamter,"请输入留言.");
  428. }
  429. $comment = urldecode($_GET['comment']);
  430. if(bonus_helper::comment($bonus_sn,urldecode($comment)) == true) {
  431. return self::outsuccess(array());
  432. } else {
  433. return self::outerr(errcode::ErrBonusComment,"留言失败.");
  434. }
  435. }
  436. private function random_cids($type_sn)
  437. {
  438. $time = 0;
  439. $cids = [];
  440. if(array_key_exists('goods_sampler',$_SESSION) && array_key_exists($type_sn,$_SESSION['goods_sampler']))
  441. {
  442. $cids = $_SESSION['goods_sampler'][$type_sn]['cids'];
  443. $time = $_SESSION['goods_sampler'][$type_sn]['time'];
  444. }
  445. if($time < time() - 86400 || empty($cids))
  446. {
  447. if(session_helper::is_man()) {
  448. $cids = activity\goods_sampler::instance()->fetch_male(self::bonus_goods);
  449. } else {
  450. $cids = activity\goods_sampler::instance()->fetch_female(self::bonus_goods);
  451. }
  452. if(!empty($cids)) {
  453. $_SESSION['goods_sampler'][$type_sn]['cids'] = $cids;
  454. $_SESSION['goods_sampler'][$type_sn]['time'] = time();
  455. }
  456. }
  457. return $cids;
  458. }
  459. private function matched_goods($type_sn)
  460. {
  461. if(session_helper::isapp())
  462. {
  463. }
  464. else
  465. {
  466. $cids = $this->random_cids($type_sn);
  467. if(empty($cids)) return false;
  468. $model_goods = Model('goods');
  469. $items = $model_goods->getGoodsListByColorDistinct(array('goods_commonid' => array('in',$cids)),goods_helper::fieldstr,'','');
  470. $tmp =[];
  471. foreach ($items as $item) {
  472. $commonid = intval($item['goods_commonid']);
  473. $tmp[$commonid] = $item;
  474. }
  475. $goods_list = [];
  476. foreach ($cids as $cid)
  477. {
  478. if(array_key_exists($cid,$tmp)) {
  479. $goods_list[] = $tmp[$cid];
  480. }
  481. }
  482. $helper = new goods_helper();
  483. $ret = $helper->summary($goods_list,$related_goods);
  484. return $ret['summary'];
  485. }
  486. }
  487. }
  488. function bonus_output_unstart($output)
  489. {
  490. $type_info = $output['type_info'];
  491. $type = \bonus\type::create_by_paramer($type_info);
  492. $local_tm = time();
  493. $start_tm = $type->get_start_time();
  494. $str_localtime = "<input type=\"hidden\" id=\"server_local_time\" value=\"{$local_tm}\"/>";
  495. $str_starttime = "<input type=\"hidden\" id=\"server_start_time\" value=\"{$start_tm}\"/>";
  496. echo($str_localtime);
  497. echo($str_starttime);
  498. }
  499. function bonus_output_end($output)
  500. {
  501. $type_info = $output['type_info'];
  502. $type = \bonus\type::create_by_paramer($type_info);
  503. $start_tm = $type->get_start_time();
  504. $end_time = $type->get_end_time();
  505. $day_secs = 24 * 60 * 60;
  506. if(($end_time - $start_tm) == $day_secs) {
  507. return "该红包已超过24小时。";
  508. } else {
  509. return "该红包已过期。";
  510. }
  511. }
  512. function bonus_output_grabinfo($output)
  513. {
  514. $type_info = $output['type_info'];
  515. $type = \bonus\type::create_by_paramer($type_info);
  516. $msg = $output['msg'];
  517. if($type->binded_over()) {
  518. echo("<p>{$msg}</p>");
  519. }
  520. else if($type->grabed_over())
  521. {
  522. echo("<p>{$msg}</p>");
  523. $last_time = $type->grab_lastime();
  524. if($last_time)
  525. {
  526. $wait_sec = $last_time + 600 - time();
  527. $wait_min = intval($wait_sec / 60);
  528. $wait_sec = $wait_sec % 60;
  529. if($wait_min > 0) {
  530. echo("<p style=\"font-size:1rem;margin-top:2rem\">{$wait_min}分钟后,您可以尝试抢一个未及时领取的红包.</p>");
  531. } else {
  532. echo("<p style=\"font-size:1rem;margin-top:2rem\">{$wait_sec}秒后,您可以尝试抢一个未及时领取的红包.</p>");
  533. }
  534. }
  535. }
  536. else {
  537. echo("<p>{$msg}</p>");
  538. }
  539. }
  540. function bonus_output_sender_header($output)
  541. {
  542. $type_info = $output['type_info'];
  543. $avatars = $output['avatars'];
  544. if(!empty($type_info))
  545. {
  546. $type = \bonus\type::create_by_paramer($type_info);
  547. $user_id = $type->sender_id();
  548. $relay_id = $type->relayer_id();
  549. if($relay_id > 0 && array_key_exists($relay_id,$avatars)) {
  550. $avatar = $avatars[$relay_id]['avatar'];
  551. }
  552. elseif($user_id > 0 && array_key_exists($user_id,$avatars)) {
  553. $avatar = $avatars[$user_id]['avatar'];
  554. } else {
  555. $avatar = RESOURCE_SITE_URL . '/mobile/defimg/female.png';
  556. }
  557. }
  558. else {
  559. $avatar = '';
  560. }
  561. return $avatar;
  562. }
  563. function bonus_output_sender($output)
  564. {
  565. $type_info = $output['type_info'];
  566. if(!empty($type_info)) {
  567. $type = \bonus\type::create_by_paramer($type_info);
  568. echo($type->sender_name());
  569. } else {
  570. echo("");
  571. }
  572. }
  573. function bonus_output_openurl($output)
  574. {
  575. $type_info = $output['type_info'];
  576. $type = \bonus\type::create_by_paramer($type_info);
  577. $type_sn = $type->getType_sn();
  578. $url = BASE_SITE_URL . "/mobile/index.php?act=bonusex&op=open&type_sn={$type_sn}";
  579. return $url;
  580. }
  581. function bonus_output_detailurl($output)
  582. {
  583. $type_info = $output['type_info'];
  584. $type = \bonus\type::create_by_paramer($type_info);
  585. $type_sn = $type->getType_sn();
  586. $url = BASE_SITE_URL . "/mobile/index.php?act=bonusex&op=detail&type_sn={$type_sn}&client_type=wap";
  587. return $url;
  588. }
  589. function bonus_output_graburl($output)
  590. {
  591. $type_info = $output['type_info'];
  592. $type = \bonus\type::create_by_paramer($type_info);
  593. $type_sn = $type->getType_sn();
  594. return url_helper::bonus_grab_url($type_sn);
  595. }
  596. function bonus_output_type($output)
  597. {
  598. echo '<div class="name">';
  599. echo '<p class="p p_name" style="color:#454545">';
  600. $type_info = $output['type_info'];
  601. $type = \bonus\type::create_by_paramer($type_info);
  602. echo($type->name());
  603. if($type->isRandomAmount()) {
  604. echo '<s class="icon_pin"></s>';
  605. }
  606. echo '</p>';
  607. echo '<p class="prompt">' . $type_info['type_bless'] . '</p>';
  608. echo '</div>';
  609. }
  610. function bonus_output_present($output)
  611. {
  612. if(session_helper::first_order() == false) return;
  613. $fcode = fcode\present_manager::instance()->fetch(session_helper::mobile(),session_helper::session_id());
  614. if($fcode == false) return;
  615. $common_id = $fcode['common_id'];
  616. $batch_code = $fcode['batch_code'];
  617. $fcode_url = BASE_SITE_URL . "/mobile/index.php?act=fcode&op=index&common_id={$common_id}&batch_code={$batch_code}";
  618. $model_goods = Model('goods');
  619. $items = $model_goods->getGoodsListByColorDistinct(array('goods_commonid' => $common_id),goods_helper::fieldstr,'','');
  620. if(empty($items)) return;
  621. $helper = new goods_helper();
  622. $ret = $helper->summary($items,$related_goods);
  623. $summary = $ret['summary'][0];
  624. $str = "<div class=\"prompt text_left\">
  625. <p class=\"prompt pro\">丽人亲友首单福利</p>
  626. </div>";
  627. $str.= "<div class=\"first_goods_box overflow_h text_left\">
  628. <div class=\"first_goods_img f_left\">
  629. <img src=\"{$summary['goods_image_url']}\">
  630. </div>
  631. <div class=\"first_goods_msg f_right\">
  632. <p class=\"p first_goods_name\">{$summary['goods_mobile_name']}</p>
  633. <p class=\"p first_goods_desc\">{$summary['goods_jingle']}</p>
  634. <p class=\"p first_goods_price bonus_price\"><span class=\"bonus_icon\"></span>{$summary['goods_promotion_price']}元</p>
  635. <p><a href=\"{$fcode_url}\" class=\"center\">查看详情</a></p>
  636. </div>
  637. </div>";
  638. echo $str;
  639. }
  640. function bonus_output_mine($output)
  641. {
  642. if($_SESSION['is_app']) {
  643. $show_down = false;
  644. } else {
  645. $show_down = true;
  646. }
  647. $mine_bonus = $output['mine_bonus'];
  648. if(!empty($mine_bonus))
  649. {
  650. $bonus = \bonus\user_bonus::create_by_param($mine_bonus);
  651. echo('<div class="price">');
  652. echo('<p><span>' . $bonus->bonus_value() . "</span>元</p>");
  653. echo('</div>');
  654. echo('<input type="hidden" id="mine_bonus" value=' ."{$bonus->bonus_sn()}>");
  655. $mobile = $bonus->user_mobile();
  656. $show_down = $bonus->isBinded() && $show_down;
  657. } else {
  658. $show_down = false;
  659. $mobile = '';
  660. }
  661. if($show_down) {
  662. echo('<div class="prompt bouns_pro">');
  663. echo("<p>红包已放至账户<span>{$mobile}</span></p>");
  664. echo('</div>');
  665. }
  666. }
  667. function bonus_out_bindtimeout($output)
  668. {
  669. $mine_bonus = $output['mine_bonus'];
  670. if(!empty($mine_bonus))
  671. {
  672. $bonus = \bonus\user_bonus::create_by_param($mine_bonus);
  673. $grab_time = $bonus->grab_time();
  674. $time_out = 600;
  675. if($grab_time > 0)
  676. {
  677. if($grab_time + $time_out <= time() - 60) {
  678. return '您的红包随时可能被抢走,抓紧领啊~';
  679. } else {
  680. $left_time = $grab_time + $time_out - time();
  681. $mins = $left_time / 60;
  682. return "请{$mins}分钟内,输入手机号领取红包";
  683. }
  684. }
  685. }
  686. return '';
  687. }
  688. function bonus_out_bindedtime($period)
  689. {
  690. $min = 60;
  691. $hour = 3600;
  692. $day = 24 * 3600;
  693. $days = intval($period / $day);
  694. $period = $period % $day;
  695. $houres = intval($period / $hour);
  696. $period = $period % $hour;
  697. $mins = intval($period / $min);
  698. $period = $period % $min;
  699. if($period > 0) {
  700. $mins += 1;
  701. }
  702. $time_str = '';
  703. if($days > 0) {
  704. $time_str .= "{$days}天";
  705. }
  706. if($houres > 0) {
  707. $time_str .= "{$houres}小时";
  708. }
  709. if($mins > 0) {
  710. $time_str .= "{$mins}分钟";
  711. }
  712. $time_str .= "领完.";
  713. return $time_str;
  714. }
  715. function bonus_output_bindedinfo($output)
  716. {
  717. $type_info = $output['type_info'];
  718. $avatars = $output['avatars'];
  719. $type = \bonus\type::create_by_paramer($type_info);
  720. echo('<div class="prompt text_left">');
  721. if($type->binded_over()) {
  722. $prompt = "{$type->getTotal_num()}个红包";
  723. $prompt .= ",";
  724. $period = $type_info['binded_period'];
  725. $prompt .= bonus_out_bindedtime($period);
  726. }
  727. else
  728. {
  729. $prompt = "领取 {$type->binded_num()}/{$type->getTotal_num()}";
  730. if($type->isEnd() == false)
  731. {
  732. if(util::from_wechat()) {
  733. $prompt = $prompt . "点击右上角继续分享此红包";
  734. }
  735. }
  736. }
  737. echo('<p class="prompt pro">' .$prompt. '</p>');
  738. echo('</div>');
  739. $bined_info = $output['binded_info'];
  740. if(empty($bined_info)) return;
  741. echo '<div class="list">';
  742. foreach($bined_info as $val)
  743. {
  744. $bonus = \bonus\user_bonus::create_by_param($val);
  745. $user_id = $bonus->user_id();
  746. if(array_key_exists($user_id,$avatars)) {
  747. $avatar = $avatars[$user_id]['avatar'];
  748. $discount = intval($avatars[$user_id]['discount'] * 100 + 0.5);
  749. } else {
  750. $avatar = RESOURCE_SITE_URL . '/mobile/defimg/female.png';
  751. $discount = 0;
  752. }
  753. echo('<div class="li">');
  754. echo('<div class="li_head_image">');
  755. echo('<img src="' . $avatar .'" />');
  756. echo('</div>');
  757. echo('<div class="li_left">');
  758. echo('<p class="p">' . $bonus->user_name() .'</p>');
  759. if($discount !== 0) {
  760. $discount = $discount / 100;
  761. echo "<p class=\"prompt_s\">已累计节省{$discount}元</p>";
  762. }
  763. if(empty($bonus->user_comment()))
  764. {
  765. if($bonus->user_mobile() == $_SESSION['member_mobile']) {
  766. echo('<p class="prompt" id="my_prompt"><a href="javascript:void(0)" id="message" style="color: #1927D1;display:inline-block;padding-top: 0.1rem;">留言</a></p>');
  767. echo('<p class="prompt">' . $bonus->get_time_format() . '</p>');
  768. } else {
  769. echo('<p class="prompt">' . $bonus->get_time_format() . '</p>');
  770. echo('<p class="prompt"></p>');
  771. }
  772. }
  773. else
  774. {
  775. echo('<p class="prompt">' . $bonus->user_comment() . '</p>');
  776. echo('<p class="prompt">' . $bonus->get_time_format() . '</p>');
  777. }
  778. echo('</div>');
  779. echo('<div class="li_right">');
  780. echo('<p class="p">' . $bonus->bonus_value() . '元</p>');
  781. echo('<p><span class="hilt">' . $bonus->bonus_rate() . '<span class="bonus_scale"></span></span></p>');
  782. if($type->binded_over() && $type->isMaxAmount($bonus->bonus_value()) && $type->isRandomAmount()) {
  783. echo('<p class="king_box"><s class="king"></s>手气最佳</p>');
  784. }
  785. echo('</div>');
  786. echo('</div>');
  787. }
  788. echo('</div>');
  789. }
  790. function android_downpath()
  791. {
  792. $url = BASE_SITE_URL . '/data/upload/package/xmmz_release.apk';
  793. return $url;
  794. }
  795. function share_url($output)
  796. {
  797. return url_helper::bonus_open_url($output['type_info']['type_sn']);
  798. }
  799. function share_title($output)
  800. {
  801. $type_info = $output['type_info'];
  802. $type = \bonus\type::create_by_paramer($type_info);
  803. $share_id = $type->share_id();
  804. $share = bonus_helper::get_share($share_id);
  805. return $share['title'];
  806. }
  807. function share_subtitle($output)
  808. {
  809. $type_info = $output['type_info'];
  810. $type = \bonus\type::create_by_paramer($type_info);
  811. $share_id = $type->share_id();
  812. $share = bonus_helper::get_share($share_id);
  813. return $share['sub_title'];
  814. }
  815. function share_image($output)
  816. {
  817. $type_info = $output['type_info'];
  818. $type = \bonus\type::create_by_paramer($type_info);
  819. $share_id = $type->share_id();
  820. $share = bonus_helper::get_share($share_id);
  821. return $share['img_url'];
  822. }
  823. class tpl_goods
  824. {
  825. private $mSummary;
  826. public function reinit($summary) {
  827. $this->mSummary = $summary;
  828. }
  829. public function base_info()
  830. {
  831. $country = $this->mSummary['brand_country'];
  832. if(empty($country)) {
  833. $str = "<p class=\"text_left goods_name\">{$this->mSummary['goods_mobile_name']}</p>";
  834. }
  835. else {
  836. $str = "<p class=\"text_left goods_name\">{$country}·{$this->mSummary['goods_mobile_name']}</p>";
  837. }
  838. $str .= " <p class=\"text_left goods_desc\">{$this->mSummary['goods_jingle']}</p>";
  839. return $str;
  840. }
  841. public function price()
  842. {
  843. $act_id = $this->mSummary['act_id'];
  844. if($act_id > 0) {
  845. return $this->groupbuy();
  846. } else {
  847. return $this->normal();
  848. }
  849. }
  850. private function normal()
  851. {
  852. $discount = $this->mSummary['goods_price'] - $this->mSummary['bonus_price'];
  853. $str = "<span class=\"f_right\">红包抵{$discount}</span>";
  854. $market_price = intval($this->mSummary['goods_price'] * 100 + 0.5) / 100;
  855. $outstr = "<p class=\"bonus_price_box text_left\">¥<span class=\"bonus_price\">{$this->mSummary['bonus_price']}</span></p>
  856. <p class=\"overflow_h favourable\">
  857. <span class=\"f_left\">天猫价{$market_price}</span>
  858. {$str}
  859. </p>";
  860. return $outstr;
  861. }
  862. private function groupbuy()
  863. {
  864. $discount = $this->mSummary['goods_price'] - $this->mSummary['goods_promotion_price'];
  865. $str = "<span class=\"f_right\">立省{$discount}元</span>";
  866. $market_price = intval($this->mSummary['goods_price'] * 100 + 0.5) / 100;
  867. $outstr = "<p class=\"bonus_price_box text_left\">¥<span class=\"bonus_price\">{$this->mSummary['goods_promotion_price']}</span></p>
  868. <p class=\"overflow_h favourable\">
  869. <span class=\"f_left\">天猫价{$market_price}</span>
  870. {$str}
  871. </p>";
  872. return $outstr;
  873. }
  874. public function showicon()
  875. {
  876. $act_id = $this->mSummary['act_id'];
  877. if($act_id > 0) {
  878. $str = "<div class=\"grab_icon\"></div>";
  879. }
  880. else
  881. {
  882. if($this->mSummary['is_new']) {
  883. $str = "<div class=\"new_icon\"></div>";
  884. } else {
  885. $str = '';
  886. }
  887. }
  888. return $str;
  889. }
  890. }
  891. function bonnus_out_goods($output)
  892. {
  893. $summarys = $output['summarys'];
  894. if($summarys == false) return;
  895. echo '<div class="prompt text_left">
  896. <p class="pro">热卖商品</p>
  897. </div>';
  898. $printer = new tpl_goods();
  899. echo '<div class="goods_items">';
  900. foreach ($summarys as $summary)
  901. {
  902. $printer->reinit($summary);
  903. echo "<div class=\"goods_box\">
  904. <a href=\"{$summary['goods_url']}\">
  905. <div class=\"goods\">
  906. <div class=\"goods_img\">
  907. <img src=\"{$summary['goods_image_url']}\">
  908. </div>
  909. <div class=\"goods_msg\">
  910. {$printer->base_info()}
  911. <div class=\"price_box\">
  912. {$printer->price()}
  913. </div>
  914. {$printer->showicon()}
  915. </div>
  916. </div>
  917. </a>
  918. </div>";
  919. }
  920. echo '</div>';
  921. }
  922. function bonus_out_rule()
  923. {
  924. echo '<div class="briefing_address"></div>';
  925. }
  926. function bonus_out_download()
  927. {
  928. if(!session_helper::isapp())
  929. {
  930. echo "<div class=\"fixed_bottom\">
  931. <span class=\"flex_logo\"></span>
  932. <div class=\"label\">
  933. <p>熊猫美妆</p>
  934. <p>下载APP即可得更多奖励</p>
  935. </div>
  936. <a href=\"#\" class=\"download_app_btn\" id=\"link\">打开APP</a>
  937. </div>";
  938. }
  939. }
  940. function bonus_out_brands()
  941. {
  942. if($_SESSION['is_app']) {
  943. return;
  944. }
  945. $brandsex = brand_helper::instance()->brandex();
  946. if(empty($brandsex)) return;
  947. $brands = $brandsex['brands'];
  948. if(empty($brands)) return;
  949. echo '<div class="prompt text_left">
  950. <p class="pro">官方授权品牌</p>
  951. </div>
  952. <div class="brands_list">';
  953. $count = count($brands);
  954. foreach ($brands as $brand) {
  955. $logo = $brand['brand_logo'];
  956. echo "<div><img src=\"{$logo}\"/></div>";
  957. }
  958. $left = $count % 3;
  959. if($left > 0) {
  960. $left = 3 - $left;
  961. }
  962. for($index = 0; $index < $left; ++$index) {
  963. echo "<div></div>";
  964. }
  965. echo "</div>";
  966. }
  967. function bonus_canshare($output)
  968. {
  969. $type_info = $output['type_info'];
  970. if(empty($type_info)) return 'false';
  971. $type = \bonus\type::create_by_paramer($type_info);
  972. $make_type = $type->send_type();
  973. if($type->binded_over() || $type->isEnd() || $make_type == bonus\type::MakeVoteType) {
  974. return 'false';
  975. } else {
  976. return 'true';
  977. }
  978. }