account_helper.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 16/6/27
  6. * Time: 下午2:46
  7. */
  8. require_once(BASE_ROOT_PATH . '/helper/bonus_helper.php');
  9. require_once(BASE_ROOT_PATH . '/helper/model_helper.php');
  10. require_once(BASE_ROOT_PATH . '/helper/push_helper.php');
  11. require_once(BASE_ROOT_PATH . '/helper/sms_helper.php');
  12. require_once(BASE_ROOT_PATH . '/helper/bonus/parameters.php');
  13. require_once(BASE_ROOT_PATH . '/helper/user_session/favorite.php');
  14. require_once(BASE_ROOT_PATH . '/helper/user_session/anotice.php');
  15. require_once(BASE_ROOT_PATH . '/helper/fcode/mfcode.php');
  16. require_once(BASE_ROOT_PATH . '/helper/fcode/operator.php');
  17. require_once(BASE_ROOT_PATH . '/helper/user_session/fcode.php');
  18. require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
  19. require_once(BASE_ROOT_PATH . '/helper/message/publisher.php');
  20. require_once(BASE_ROOT_PATH . '/helper/async/IAsync.php');
  21. require_once(BASE_ROOT_PATH . '/helper/async/status.php');
  22. require_once(BASE_ROOT_PATH . '/helper/async/register.php');
  23. require_once(BASE_ROOT_PATH . '/helper/async/order.php');
  24. require_once(BASE_ROOT_PATH . '/helper/async/qugc.php');
  25. require_once(BASE_ROOT_PATH . '/helper/async/bargain.php');
  26. require_once(BASE_ROOT_PATH . '/helper/room_helper.php');
  27. require_once(BASE_ROOT_PATH . '/helper/async/broadcast_order.php');
  28. require_once(BASE_ROOT_PATH . '/helper/async/broadcast.php');
  29. require_once(BASE_ROOT_PATH . '/helper/async/broadcast/filter.php');
  30. require_once(BASE_ROOT_PATH . '/helper/async/broadcast/operator.php');
  31. require_once(BASE_ROOT_PATH . '/helper/async/broadcast/sender.php');
  32. require_once(BASE_ROOT_PATH . '/helper/async/broadcast/params_table.php');
  33. require_once(BASE_ROOT_PATH . '/helper/order_helper.php');
  34. require_once(BASE_ROOT_PATH . '/helper/fcode/present_manager.php');
  35. require_once(BASE_ROOT_PATH . '/helper/schema_helper.php');
  36. require_once(BASE_ROOT_PATH . '/helper/url_helper.php');
  37. class account_helper
  38. {
  39. static private $stSysBonus = null;
  40. public static function invite_bonus($relay_id)
  41. {
  42. $last_type = bonus_helper::last_invite_type($relay_id);
  43. if(is_null($last_type) == false)
  44. {
  45. $type = bonus_helper::create_by_paramer($last_type);
  46. if($type->binded_over() == false && $type->isEnd() == false) {
  47. return $type->getType_sn();
  48. }
  49. }
  50. $param = bonus\parameters::invite($relay_id);
  51. $ret = bonus_helper::make_bonus($param,$param['rate_money']);
  52. if($ret != false) {
  53. $type_sn = $ret['type_sn'];
  54. return $type_sn;
  55. } else {
  56. return false;
  57. }
  58. }
  59. public static function gain_system($to_id, $amount)
  60. {
  61. if(self::$stSysBonus == null) {
  62. self::$stSysBonus = new bonus\sys_bonus();
  63. }
  64. if(self::$stSysBonus->bind_over())
  65. {
  66. $param = self::$stSysBonus->gen_param($rates);
  67. $ret = bonus_helper::make_bonus($param,$rates);
  68. if($ret != false) {
  69. $type_sn = $ret['type_sn'];
  70. self::$stSysBonus->reset($type_sn);
  71. } else {
  72. return false;
  73. }
  74. }
  75. $bonus = bonus_helper::send(self::$stSysBonus->type_sn(),[$to_id]);
  76. return $bonus;
  77. }
  78. public static function gain_bonus($from_id,$to_id,$amount)
  79. {
  80. $pred_from = new predeposit_helper($from_id);
  81. $bonus_rate = $pred_from->find_share_bonus($amount);
  82. if($bonus_rate == false || $bonus_rate['rate'] > 30) {
  83. return false;
  84. }
  85. $minfo = new member_info($from_id);
  86. $param = \bonus\parameters::shake_gain($minfo->member_id(),$minfo->mobile(),$minfo->nickname(),$bonus_rate['rate'],$bonus_rate['amount']);
  87. $ret = bonus_helper::make_bonus($param,$param['rate_money']);
  88. if($ret != false)
  89. {
  90. $to_minfo = new member_info($to_id);
  91. $thief = $to_minfo->nickname();
  92. bonus_helper::withold_money($from_id,$bonus_rate['rate'],$bonus_rate['amount'],bonus_helper::send_bonus_withold);
  93. $pred_from->handout_bonus($amount,$ret['type_sn'],$thief,"{$thief}摇走了您{$amount}元的红包.",\bonus\type::MakeShakeGainType);
  94. $bonusex = bonus_helper::send($ret['type_sn'],[$to_id]);
  95. push_helper::stolen_bonus($minfo,$to_minfo,$amount);
  96. return $bonusex;
  97. } else {
  98. return false;
  99. }
  100. }
  101. public static function lost_bonus($from_id,$to_id,$amount)
  102. {
  103. $pred_from = new predeposit_helper($from_id);
  104. $bonus_rate = $pred_from->find_share_bonus($amount);
  105. if($bonus_rate == false) {
  106. return false;
  107. }
  108. $rate = $bonus_rate['rate'];
  109. $amount = $bonus_rate['amount'];
  110. $minfo = new member_info($from_id);
  111. $param = \bonus\parameters::shake_lost($minfo->member_id(),$minfo->mobile(),$minfo->nickname(),$bonus_rate['rate'],$bonus_rate['amount']);
  112. $ret = bonus_helper::make_bonus($param,$param['rate_money']);
  113. if($ret != false)
  114. {
  115. $to_info = new member_info($to_id);
  116. $pred_from->handout_bonus($amount,$ret['type_sn'],$to_info->nickname(),"您摇丢了{$amount}的红包.",\bonus\type::MakeShakeLostType);
  117. bonus_helper::withold_money($from_id,$rate,$amount,bonus_helper::send_bonus_withold);
  118. $bonusex = bonus_helper::send($ret['type_sn'],[$to_id]);
  119. push_helper::fly_bonus($minfo,$to_info,$amount);
  120. return $bonusex;
  121. } else {
  122. return false;
  123. }
  124. }
  125. private static function pay_refund($member_id,$amount,$bonus_name)
  126. {
  127. // $param = self::base_param($amount,1);
  128. // self::admin_param($param);
  129. // $param['make_type'] = \bonus\type::MakePayRefundType;
  130. // $param['type_name'] = $bonus_name;
  131. //
  132. // $ret = bonus_helper::make_bonus($param);
  133. // if($ret != false)
  134. // {
  135. // bonus_helper::send($ret['type_sn'],array($member_id));
  136. // push_helper::order_refund_bonus($member_id,$amount);
  137. // } else {
  138. // Log::record("给用户 {$member_id} 退款{$amount}失败.");
  139. // }
  140. }
  141. private static function use_bonus($order_sn, $member_id)
  142. {
  143. $mod_order = Model('order');
  144. $order = $mod_order->getOrderInfo(['order_sn' => $order_sn]);
  145. $pd_amount = $order['pd_amount'];
  146. $bonus_rate = $order['bonus_rate'];
  147. if(empty($bonus_rate)) {
  148. $bonus_rate = [30 => $pd_amount];
  149. } else {
  150. $bonus_rate = unserialize($bonus_rate);
  151. }
  152. $pred = new predeposit_helper($member_id);
  153. $pred->pay_bonus($bonus_rate);
  154. }
  155. public static function bonus_refund($type_sn,$member_id)
  156. {
  157. $type = bonus\type::create_by_sn($type_sn);
  158. $amount = $type->remain_amount();
  159. $rate = $type->bonus_rate();
  160. if(empty($rate)) $rate = 30;
  161. $param = \bonus\parameters::bonus_refund($rate,$amount);
  162. $ret = bonus_helper::make_bonus($param,$param['rate_money']);
  163. if($ret != false)
  164. {
  165. $bonus = bonus_helper::send($ret['type_sn'],[$member_id]);
  166. if($bonus != false) {
  167. push_helper::bonus_refund($member_id,$amount);
  168. }
  169. }
  170. else {
  171. Log::record("给用户 {$member_id} 红包退款{$amount}失败.");
  172. }
  173. }
  174. private static function send_bonus($param,$rates,array $member_ids)
  175. {
  176. $ret = bonus_helper::make_bonus($param,$rates);
  177. if($ret != false)
  178. {
  179. $type_sn = $ret['type_sn'];
  180. $items = bonus_helper::send($type_sn,$member_ids);
  181. if($items != false)
  182. {
  183. $result = [];
  184. foreach ($items as $bonus_param) {
  185. $bonus = bonus\user_bonus::create_by_param($bonus_param);
  186. $user_id = $bonus->user_id();
  187. $result[$user_id] = $bonus;
  188. }
  189. return $result;
  190. }
  191. else {
  192. return false;
  193. }
  194. }
  195. else {
  196. return false;
  197. }
  198. }
  199. public static function add_bonus($rate,$amount,$member_ids,$type_name,$can_share)
  200. {
  201. $param = bonus\parameters::admin_fixed(intval($rate),doubleval($amount),count($member_ids),$type_name,$can_share);
  202. $fix_bonus = self::send_bonus($param,$param['rate_money'],$member_ids);
  203. if($fix_bonus != false) {
  204. return true;
  205. } else {
  206. return false;
  207. }
  208. }
  209. public static function appreciate($sender_id,$rate,$amount,$toid,$bless)
  210. {
  211. $param = bonus\parameters::appreciate($sender_id,intval($rate),$amount,$bless);
  212. $pred = new predeposit_helper($sender_id);
  213. $rate_moneys[] = ['rate' => $rate,'num' => 1,'amount' => $amount,'hold_amount' => $amount];
  214. $ret = $pred->make_bonus($param,$rate_moneys);
  215. if($ret == false) return false;
  216. $type_sn = $ret['type_sn'];
  217. $ret = bonus_helper::send($type_sn,[$toid]);
  218. return ($ret != false);
  219. }
  220. public static function withhold_bonus($rate,$amount,$member_id)
  221. {
  222. $rates = [intval($rate) => doubleval($amount)];
  223. $ret = bonus_helper::withold($member_id,$rates,bonus_helper::pay_order_withold);
  224. if($ret) {
  225. $pred = new predeposit_helper($member_id);
  226. $pred->reduce_pred($amount);
  227. } else {
  228. Log::record('扣除预存款失败',Log::ERR);
  229. }
  230. return $ret;
  231. }
  232. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  233. public static function onPredRefund($change_type,$member_id,$sn,$refund_id)
  234. {
  235. // $order_sn = $sn;
  236. // $order = order::create_by_sn($order_sn);
  237. // if($order == false) {
  238. // self::pay_refund($member_id,$pd_amount,"退款红包");
  239. // } else {
  240. // self::pay_refund($member_id,$order->pd_amount(),"退款红包");
  241. // }
  242. }
  243. public static function onPredeposit($change_type,$member_id,$sn)
  244. {
  245. if($change_type == 'order_pay' || $change_type == 'order_freeze')
  246. {
  247. self::use_bonus($sn,$member_id);
  248. }
  249. elseif($change_type == 'order_cancel')
  250. {
  251. //发送给该用户一个同等额度的红包
  252. $mod_order = Model('order');
  253. $order = $mod_order->getOrderInfo(['order_sn' => $sn,'buyer_id' => $member_id]);
  254. if(!empty($order)) {
  255. $pay_sn = $order['pay_sn'];
  256. QueueClient::push('onAsyncOrderCancel',['pay_sn' => $pay_sn]);
  257. }
  258. }
  259. elseif($change_type == 'refund') { //发送给该用户一个同等额度的红包
  260. }
  261. elseif($change_type == 'bonus_refund') { // 发送给该用户一个同等额度的红包
  262. self::bonus_refund($sn,$member_id);
  263. }
  264. }
  265. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  266. public static function onLogin($member_id)
  267. {
  268. if(session_helper::isapp()) {
  269. $updata['client_type'] = session_helper::client_type();
  270. $updata['client_version'] = session_helper::version_code();
  271. Model('member')->editMember(['member_id' => $member_id], $updata);
  272. }
  273. relation_helper::onLogin($member_id);
  274. $anotice = new user_session\anotice();
  275. $anotice->onStatus();
  276. $favorate = new user_session\favorite();
  277. $favorate->onLogin();
  278. $fcode = new user_session\fcode();
  279. $fcode->onStatus();
  280. QueueClient::push('onAsyncStatus',['member_id' => $member_id]);
  281. $member_info = Model('member')->getMemberInfoByID($member_id);
  282. $rewared_inviter = intval($member_info['rewared_inviter']);
  283. $inviter_id = intval($member_info['inviter_id']);
  284. if(session_helper::isapp() && session_helper::logined() && $rewared_inviter == 0) {
  285. QueueClient::push('onAsyncRegister',['user' => $member_id,'inviter' => $inviter_id]);
  286. }
  287. }
  288. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  289. public static function onStatus($member_id)
  290. {
  291. relation_helper::onLogin($member_id);
  292. $member_info = Model('member')->getMemberInfoByID($member_id);
  293. $updata['member_login_num'] = $member_info['member_login_num'] + 1;
  294. $updata['member_login_time'] = time();
  295. $updata['member_old_login_time'] = $member_info['member_login_time'];
  296. $updata['member_login_ip'] = getIp();
  297. $updata['member_old_login_ip'] = $member_info['member_login_ip'];
  298. if(session_helper::isapp()) {
  299. $updata['client_type'] = session_helper::client_type();
  300. $updata['client_version'] = session_helper::version_code();
  301. }
  302. Model('member')->editMember(['member_id' => $member_id], $updata);
  303. $anotice = new user_session\anotice();
  304. $anotice->onStatus();
  305. $favorate = new user_session\favorite();
  306. $favorate->onLogin();
  307. $fcode = new user_session\fcode();
  308. $fcode->onStatus();
  309. $rewared_inviter = intval($member_info['rewared_inviter']);
  310. $inviter_id = intval($member_info['inviter_id']);
  311. if(session_helper::isapp() && session_helper::logined() && $rewared_inviter == 0) {
  312. QueueClient::async_push('onAsyncRegister',['user' => $member_id,'inviter' => $inviter_id],5);
  313. }
  314. QueueClient::async_push('onAsyncStatus',['member_id' => $member_id],10);
  315. }
  316. public static function onAsyncStatus($member_id)
  317. {
  318. try
  319. {
  320. $iPusher = new async\status($member_id);
  321. $iPusher->run();
  322. } catch (Exception $ex) {
  323. Log::record($ex->getMessage(),Log::ERR);
  324. }
  325. }
  326. public static function onAsyncTopup($member_id)
  327. {
  328. try
  329. {
  330. $iPusher = new async\status($member_id);
  331. $iPusher->topup();
  332. } catch (Exception $ex) {
  333. Log::record($ex->getMessage(),Log::ERR);
  334. }
  335. }
  336. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  337. public static function onRegister($member_id,$relay_id)
  338. {
  339. if(session_helper::isapp()) {
  340. $updata['client_type'] = session_helper::client_type();
  341. $updata['client_version'] = session_helper::version_code();
  342. Model('member')->editMember(['member_id' => $member_id], $updata);
  343. }
  344. if($relay_id > 0) {
  345. relation_helper::onSubscribe($member_id,$relay_id);
  346. relation_helper::onInvite($relay_id,$member_id);
  347. }
  348. relation_helper::onRegister($member_id);
  349. $publisher = new message\publisher();
  350. if($relay_id > 0) {
  351. $publisher->add_follow($relay_id,[$member_id]);
  352. }
  353. $publisher->add_inviter($member_id,$relay_id);
  354. if(session_helper::logined() && session_helper::isapp()) {
  355. QueueClient::async_push('onAsyncRegister',['user' => $member_id,'inviter' => $relay_id],5);
  356. }
  357. }
  358. public static function onAsyncRegister($user,$inviter)
  359. {
  360. try
  361. {
  362. $iPusher = new async\register($user,$inviter);
  363. $iPusher->run();
  364. } catch (Exception $ex) {
  365. Log::record($ex->getMessage(),Log::ERR);
  366. }
  367. }
  368. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  369. public static function onAsyncOrderPaied($pay_sn)
  370. {
  371. try
  372. {
  373. $iPusher = new async\order($pay_sn);
  374. $iPusher->onPaied();
  375. } catch (Exception $ex) {
  376. Log::record($ex->getMessage(),Log::ERR);
  377. }
  378. }
  379. public static function onAsyncOrderSended($pay_sn,$logistics_no,$logistics_company)
  380. {
  381. try
  382. {
  383. $iPusher = new async\order($pay_sn);
  384. $iPusher->onSended($logistics_no,$logistics_company);
  385. } catch (Exception $ex) {
  386. Log::record($ex->getMessage(),Log::ERR);
  387. }
  388. }
  389. public static function onAsyncOrderComplete($pay_sn)
  390. {
  391. try
  392. {
  393. $iPusher = new async\order($pay_sn);
  394. $iPusher->onComplete();
  395. } catch (Exception $ex) {
  396. Log::record($ex->getMessage(),Log::ERR);
  397. }
  398. }
  399. public static function onAsyncBroadcastOrder($pay_sn,$amount,$days)
  400. {
  401. try
  402. {
  403. $iPusher = new async\broadcast_order($pay_sn);
  404. $iPusher->order_bonus($amount,$days);
  405. } catch (Exception $ex) {
  406. Log::record($ex->getMessage(),Log::ERR);
  407. }
  408. }
  409. public static function onAsyncBroadcastNormal($filters,$oper_param,$send_params)
  410. {
  411. try
  412. {
  413. $sms_type = $send_params['type'];
  414. $memf_params = $filters['member_filters'];
  415. $mem_filters = async\filter::create($memf_params);
  416. $oper = async\operator::create($oper_param);
  417. $smsf_params = $filters['sms_filters'];
  418. $sms_filters = async\filter::create($smsf_params);
  419. $sender = async\sender::create($sms_filters,$send_params);
  420. $broad = new async\broadcast($mem_filters,$oper,$sender,$sms_type);
  421. $broad->run();
  422. } catch (Exception $ex) {
  423. Log::record($ex->getMessage(),Log::ERR);
  424. }
  425. }
  426. public static function onAsyncOrderCancel($pay_sn)
  427. {
  428. try
  429. {
  430. $iPusher = new async\order($pay_sn);
  431. $iPusher->onCancel();
  432. } catch (Exception $ex) {
  433. Log::record($ex->getMessage(),Log::ERR);
  434. }
  435. }
  436. public static function onAsyncOrderEvaluate($pay_sn)
  437. {
  438. try
  439. {
  440. $iPusher = new async\order($pay_sn);
  441. $iPusher->onEvaluate();
  442. } catch (Exception $ex) {
  443. Log::record($ex->getMessage(),Log::ERR);
  444. }
  445. }
  446. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  447. public static function onAsyncUgcPublish($spid)
  448. {
  449. try
  450. {
  451. $iPusher = new async\qugc($spid);
  452. $iPusher->onPublish();
  453. } catch (Exception $ex) {
  454. Log::record($ex->getMessage(),Log::ERR);
  455. }
  456. }
  457. public static function onAsyncUgcDel($spid)
  458. {
  459. try
  460. {
  461. $iPusher = new async\qugc($spid);
  462. $iPusher->onDel();
  463. } catch (Exception $ex) {
  464. Log::record($ex->getMessage(),Log::ERR);
  465. }
  466. }
  467. public static function onAsyncUgcSubmit($spid,$user)
  468. {
  469. try
  470. {
  471. $iPusher = new async\qugc($spid);
  472. $iPusher->onSubmit($user);
  473. } catch (Exception $ex) {
  474. Log::record($ex->getMessage(),Log::ERR);
  475. }
  476. }
  477. public static function onAsyncUgcSupport($spid,$comment_id,$user)
  478. {
  479. try
  480. {
  481. $iPusher = new async\qugc($spid);
  482. $iPusher->onSupport($comment_id,$user);
  483. } catch (Exception $ex) {
  484. Log::record($ex->getMessage(),Log::ERR);
  485. }
  486. }
  487. public static function onAsyncUgcComment($spid,$commentid,$userid)
  488. {
  489. try
  490. {
  491. $iPusher = new async\qugc($spid);
  492. $iPusher->onComment($commentid,$userid);
  493. } catch (Exception $ex) {
  494. Log::record($ex->getMessage(),Log::ERR);
  495. }
  496. }
  497. public static function onAsyncUgcAppreciate($spid,$user,$rate,$amount)
  498. {
  499. try
  500. {
  501. $iPusher = new async\qugc($spid);
  502. $iPusher->onAppreciate($user,$rate,$amount);
  503. } catch (Exception $ex) {
  504. Log::record($ex->getMessage(),Log::ERR);
  505. }
  506. }
  507. ////////////////////////////////////////Bargain/////////////////////////////////////////////////////////////////////
  508. public static function onAsyncBargain($type,$bargain_id)
  509. {
  510. try
  511. {
  512. $bargain = new async\bargain($bargain_id);
  513. if($type == "close") {
  514. $bargain->onClose();
  515. }
  516. } catch (Exception $ex) {
  517. Log::record($ex->getMessage(),Log::ERR);
  518. }
  519. }
  520. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  521. public static function onAsyncFollow($user,$follow)
  522. {
  523. }
  524. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  525. public static function onAsyncGoodsDiscount($gid)
  526. {
  527. }
  528. }