bonusex.php 40 KB

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