divert_account.php 5.5 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. public function reduce_member($member_id, $available_amounts, $freeze_amounts = 0.00)
  84. {
  85. $trans = null;
  86. try {
  87. $mod_divert = Model('account_divert');
  88. $trans = new trans_wapper($mod_divert,__METHOD__);
  89. $mod_divert->divert_member($member_id,-$available_amounts,$freeze_amounts);
  90. $trans->commit();
  91. return true;
  92. }
  93. catch (Exception $ex)
  94. {
  95. $trans->rollback();
  96. Log::record($ex->getMessage(), Log::ERR);
  97. return false;
  98. }
  99. }
  100. public function init_merchant($mchid)
  101. {
  102. $trans = null;
  103. try {
  104. $mchinfo = Model('merchant')->getMerchantInfo(['mchid' => $mchid]);
  105. $member_id = intval($mchinfo['admin_id']);
  106. $mod_divert = Model('account_divert');
  107. $minfo = new member_info($member_id);
  108. $trans = new trans_wapper($mod_divert, __METHOD__);
  109. $mod_divert->free_membr($member_id);
  110. $mod_divert->create_member($member_id);
  111. $mod_divert->divert_member($member_id, $minfo->available_predeposit(), $minfo->freeze_predeposit());
  112. $trans->commit();
  113. return true;
  114. } catch (Exception $ex) {
  115. $trans->rollback();
  116. Log::record($ex->getMessage(), Log::ERR);
  117. return false;
  118. }
  119. }
  120. public function init_merchants()
  121. {
  122. $mids = $this->unique_mids();
  123. foreach ($mids as $mid) {
  124. $ret = $this->init_member($mid);
  125. Log::record("init_merchants {$mid}:" . $ret ? 'true' : 'false', Log::DEBUG);
  126. }
  127. }
  128. private function unique_mids()
  129. {
  130. $mids = [];
  131. $i = 0;
  132. while (true)
  133. {
  134. $start = $i * 100;
  135. $items = Model('')->table('merchant')->field('admin_id')->where(['mchid' => ['gt',0]])->order('mchid asc')->limit("{$start},100")->select();
  136. if(empty($items)) {
  137. break;
  138. }
  139. $i++;
  140. foreach ($items as $item) {
  141. $mids[] = intval($item['admin_id']);
  142. }
  143. }
  144. $mids = array_unique($mids);
  145. return $mids;
  146. }
  147. public function update_merchants()
  148. {
  149. $mod_divert = Model('account_divert');
  150. $mids = $this->unique_mids();
  151. foreach ($mids as $mid)
  152. {
  153. [$succ, $available_amounts, $freeze_amounts] = $mod_divert->stat_member($mid);
  154. if($succ) {
  155. $update = Model('member')->where(['member_id' => $mid])->update(['available_predeposit' => $available_amounts,'freeze_predeposit' => $freeze_amounts]);
  156. }
  157. }
  158. }
  159. }