divert_account.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?php
  2. namespace refill;
  3. use Exception;
  4. use Log;
  5. use trans_wapper;
  6. use member_info;
  7. class divert_account
  8. {
  9. #初始化用户离散账号
  10. public function init_member($member_id)
  11. {
  12. $trans = null;
  13. try {
  14. $minfo = new member_info($member_id);
  15. $mod_divert = Model('account_divert');
  16. $trans = new trans_wapper($mod_divert,__METHOD__);
  17. $mod_divert->free_membr($member_id);
  18. $mod_divert->create_member($member_id);
  19. $mod_divert->divert_member($member_id,$minfo->available_predeposit(), $minfo->freeze_predeposit());
  20. $trans->commit();
  21. [$succ, $available_amounts, $freeze_amounts] = $mod_divert->stat_member($member_id);
  22. if (round($available_amounts - $minfo->available_predeposit(), 4) == 0.0000) {
  23. Log::record("available_predeposit = {$available_amounts} is ok",Log::DEBUG);
  24. } else {
  25. Log::record("available_predeposit = {$available_amounts} is fail",Log::ERR);
  26. }
  27. if (round($freeze_amounts - $minfo->freeze_predeposit(), 4) == 0.0000) {
  28. Log::record("freeze_predeposit = {$freeze_amounts} is ok",Log::DEBUG);
  29. } else {
  30. Log::record("freeze_predeposit = {$freeze_amounts} is fail",Log::ERR);
  31. }
  32. return true;
  33. }
  34. catch (Exception $ex)
  35. {
  36. $trans->rollback();
  37. Log::record($ex->getMessage(), Log::ERR);
  38. return false;
  39. }
  40. }
  41. #重设离散账号维度
  42. public function resize_member($member_id)
  43. {
  44. $trans = null;
  45. try {
  46. $mod_divert = Model('account_divert');
  47. $trans = new trans_wapper($mod_divert,__METHOD__);
  48. [$succ,$available_amounts,$freeze_amounts] = $mod_divert->check_member($member_id);
  49. if(!$succ) {
  50. $mod_divert->free_membr($member_id);
  51. $mod_divert->create_member($member_id);
  52. $mod_divert->divert_member($member_id,$available_amounts,$freeze_amounts);
  53. }
  54. $trans->commit();
  55. return true;
  56. }
  57. catch (Exception $ex)
  58. {
  59. $trans->rollback();
  60. Log::record($ex->getMessage(), Log::ERR);
  61. return false;
  62. }
  63. }
  64. // #加款
  65. // public function add_member($member_id, $available_amounts, $freeze_amounts = 0.00)
  66. // {
  67. // $trans = null;
  68. // try {
  69. // $mod_divert = Model('account_divert');
  70. // $trans = new trans_wapper($mod_divert,__METHOD__);
  71. // $mod_divert->divert_member($member_id,$available_amounts,$freeze_amounts);
  72. // $trans->commit();
  73. // return true;
  74. // }
  75. // catch (Exception $ex)
  76. // {
  77. // $trans->rollback();
  78. // Log::record($ex->getMessage(), Log::ERR);
  79. // return false;
  80. // }
  81. // }
  82. //
  83. // #减款
  84. // public function reduce_member($member_id, $available_amounts, $freeze_amounts = 0.00)
  85. // {
  86. // $trans = null;
  87. // try {
  88. // $mod_divert = Model('account_divert');
  89. // $trans = new trans_wapper($mod_divert,__METHOD__);
  90. // $mod_divert->divert_member($member_id,-$available_amounts,$freeze_amounts);
  91. // $trans->commit();
  92. // return true;
  93. // }
  94. // catch (Exception $ex)
  95. // {
  96. // $trans->rollback();
  97. // Log::record($ex->getMessage(), Log::ERR);
  98. // return false;
  99. // }
  100. // }
  101. public function init_merchant($mchid)
  102. {
  103. $trans = null;
  104. try {
  105. $mchinfo = Model('merchant')->getMerchantInfo(['mchid' => $mchid]);
  106. $member_id = intval($mchinfo['admin_id']);
  107. $mod_divert = Model('account_divert');
  108. $minfo = new member_info($member_id);
  109. $trans = new trans_wapper($mod_divert, __METHOD__);
  110. $mod_divert->free_membr($member_id);
  111. $mod_divert->create_member($member_id);
  112. $mod_divert->divert_member($member_id, $minfo->available_predeposit(), $minfo->freeze_predeposit());
  113. $trans->commit();
  114. return true;
  115. } catch (Exception $ex) {
  116. $trans->rollback();
  117. Log::record($ex->getMessage(), Log::ERR);
  118. return false;
  119. }
  120. }
  121. public function init_merchants()
  122. {
  123. $mids = $this->unique_mids();
  124. foreach ($mids as $mid) {
  125. $ret = $this->init_member($mid);
  126. Log::record("init_merchants {$mid}:" . $ret ? 'true' : 'false', Log::DEBUG);
  127. }
  128. }
  129. private function unique_mids()
  130. {
  131. $mids = [];
  132. $i = 0;
  133. while (true)
  134. {
  135. $start = $i * 100;
  136. $items = Model('')->table('merchant')->field('admin_id')->where(['mchid' => ['gt',0]])->order('mchid asc')->limit("{$start},100")->select();
  137. if(empty($items)) {
  138. break;
  139. }
  140. $i++;
  141. foreach ($items as $item) {
  142. $mids[] = intval($item['admin_id']);
  143. }
  144. }
  145. $mids = array_unique($mids);
  146. return $mids;
  147. }
  148. public function update_account($time)
  149. {
  150. $mod_divert = Model('account_divert');
  151. $mids = $mod_divert->need_upmembers($time);
  152. foreach ($mids as $mid)
  153. {
  154. [$succ, $available_amounts, $freeze_amounts] = $mod_divert->stat_member($mid);
  155. if($succ) {
  156. Model('member')->editMember(['member_id' => $mid],['available_predeposit' => $available_amounts,'freeze_predeposit' => $freeze_amounts]);
  157. }
  158. }
  159. }
  160. }