bonusex.php 38 KB

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