bonusex.php 40 KB

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