bonusex.php 41 KB

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