notify_helper.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 16/6/26
  6. * Time: 下午9:30
  7. */
  8. require_once (BASE_ROOT_PATH . '/helper/account_helper.php');
  9. require_once (BASE_ROOT_PATH . '/helper/predeposit_helper.php');
  10. require_once (BASE_ROOT_PATH . '/helper/bonus_helper.php');
  11. require_once (BASE_ROOT_PATH . '/helper/push_helper.php');
  12. class notify_helper
  13. {
  14. private static function secs_days($secs)
  15. {
  16. $days = intval($secs / 86400) + ($secs % 86400 != 0) ? 1 : 0;
  17. return $days;
  18. }
  19. static public function onBonusExpire($warn_remain_days, $warn_interval_days)
  20. {
  21. $mod_bonus = Model("user_bonus");
  22. $items = $mod_bonus->getNeedWarn($warn_remain_days, $warn_interval_days);
  23. if($items == false) return;
  24. $member_amount = [];
  25. $member_day = [];
  26. $ids = [];
  27. foreach ($items as $key => $val)
  28. {
  29. $bonus = bonus\user_bonus::create_by_param($val);
  30. $leftsecs = $bonus->usable_time() - time();
  31. $remain_days = self::secs_days($leftsecs);
  32. $amount = $bonus->remain_amount();
  33. if(isset($member_amount[$bonus->user_id()]) == false) {
  34. $member_amount[$bonus->user_id()] = $amount;
  35. $member_day[$bonus->user_id()] = $remain_days;
  36. } else {
  37. $member_amount[$bonus->user_id()] += $amount;
  38. }
  39. $ids[] = $bonus->bonus_id();
  40. }
  41. foreach ($member_amount as $member_id => $amount) {
  42. $remain_days = $member_day[$member_id];
  43. push_helper::notice_expring($member_id,$amount,$remain_days);
  44. }
  45. if (!empty($ids)) {
  46. $mod_bonus->edit(array('bonus_id' => array('in', $ids)),array("notify_time" => time()));
  47. }
  48. }
  49. static public function bonus_expired()
  50. {
  51. $mod_bonus = Model("user_bonus");
  52. $items = $mod_bonus->getExpired();
  53. $ids = array();
  54. $member_amount = [];
  55. foreach ($items as $key => $val) {
  56. $bonus = bonus\user_bonus::create_by_param($val);
  57. $user_id = $bonus->user_id();
  58. $amount = $bonus->remain_amount();
  59. $pred = new predeposit_helper($user_id);
  60. $pred->bonus_expire($val);
  61. array_push($ids,$bonus->bonus_id());
  62. if(isset($member_amount[$bonus->user_id()]) == false) {
  63. $member_amount[$bonus->user_id()] = $amount;
  64. } else {
  65. $member_amount[$bonus->user_id()] += $amount;
  66. }
  67. }
  68. foreach ($member_amount as $member_id => $amount) {
  69. push_helper::notice_expired($member_id,$amount);
  70. }
  71. if (!empty($ids)) {
  72. $mod_bonus->edit(array('bonus_id' => array('in', $ids)),array("expired" => 1));
  73. }
  74. }
  75. static public function release_bonus()
  76. {
  77. $bonus_type = Model('bonus_type');
  78. $one_hour = 60 * 60;
  79. $condition = array('remain_amount' => array('gt',0),'is_refund' => 0,'send_end_date' =>array('lt',time() - $one_hour));
  80. $bonus_types = $bonus_type->getTypeList($condition,'','*','',false);
  81. if(empty($bonus_types) || count($bonus_types) <= 0) {
  82. return;
  83. }
  84. foreach($bonus_types as $type)
  85. {
  86. try
  87. {
  88. $pred = new predeposit_helper($type['sender_id']);
  89. $trans = new trans_wapper(null,__METHOD__);
  90. $bonus_type->edit(array('type_id' =>$type['type_id']),array('is_refund' => 1,'refund_time' => time()));
  91. if ($bonus_type->affected_rows() <= 0) {
  92. $sresult = implode(',',$type);
  93. Log::record("bonus refund 更新状态失败,result:{$sresult}.");
  94. } else {
  95. $pred->bonus_refund($type);
  96. $condition = array('type_id' =>$type['type_id'],'bonus_status' => array('in','0,1'));
  97. Model('user_bonus')->where($condition)->delete();
  98. }
  99. $trans->commit();
  100. }
  101. catch (Exception $e)
  102. {
  103. $trans->rollback();
  104. $sresult = implode(',',$type);
  105. Log::record('bonus refund : error:' . $e->getMessage() . " result:{$sresult}.");
  106. }
  107. }
  108. }
  109. static public function onFcodeWarning()
  110. {
  111. $pre_secs = 86400 * 5;
  112. $mod_member = Model('member');
  113. $i = 0;
  114. while (true)
  115. {
  116. $start = $i * 1000;
  117. $items = Model()->table('goods_fcode')
  118. ->field('fc_id,mobile,goods_commonid,usable_time')
  119. ->where(array('usable_time&usable_time' => ['_multi'=>true,['gt',time() - $pre_secs],['lt',time()]],'fc_state' => 0,'warning_time' => 0))
  120. ->order('fc_id desc')
  121. ->limit("{$start},1000")->select();
  122. if(empty($items)) {
  123. return;
  124. }
  125. $i++;
  126. foreach ($items as $item)
  127. {
  128. $fc_id = $item['fc_id'];
  129. $cid = $item['goods_commonid'];
  130. $usable_time = $item['usable_time'];
  131. $mobile = $item['mobile'];
  132. $mid = self::member_id($mod_member,$mobile);
  133. if($mid!= false && $mid > 0) {
  134. push_helper::fcode_warning($cid,$mid,$usable_time);
  135. }
  136. Model()->table('goods_fcode')->where(['fc_id' => $fc_id])->update(['warning_time' => time()]);
  137. }
  138. }
  139. }
  140. static private function member_id($mod_member,$mobile)
  141. {
  142. $items = $mod_member->where(['member_mobile' => $mobile])->select();
  143. if(!empty($items)) {
  144. return intval($items[0]['member_id']);
  145. }
  146. return false;
  147. }
  148. }