bonusex.php 38 KB

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