Wallet.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <?php
  2. namespace app\common\components;
  3. use app\modules\ucenter\models\User;
  4. use app\modules\ucenter\models\UserCoinLog;
  5. use app\modules\ucenter\models\UserPointLog;
  6. use app\modules\ucenter\models\UserMoneyLog;
  7. use app\modules\shopping\models\ShoppingCommissionLog;
  8. use app\modules\shopping\models\ShoppingStore;
  9. use app\modules\Doc\models\DocReal;
  10. use Yii;
  11. class Wallet
  12. {
  13. //金币变化
  14. public static function coinChange($user_id,$change_num,$bak,$change_type=1,$field='coin',$table_name='',$data_id=0)
  15. {
  16. $userInfo = User::findOne($user_id);
  17. $before_num = $userInfo[$field];
  18. $after_num = $change_type==1?$before_num + $change_num:(($before_num - $change_num)>0?($before_num - $change_num):0);
  19. $log = new UserCoinLog();
  20. $log->user_id = $userInfo['user_id'];
  21. $log->before_num = $before_num;
  22. $log->after_num = $after_num;
  23. $log->change_num = $change_num;
  24. $log->change_type = $change_type;
  25. $log->table_name = $table_name;
  26. $log->data_id = $data_id;
  27. $log->field = $field;
  28. $log->bak = $bak;
  29. $log->create_time = TIMESTAMP;
  30. if($log->save())
  31. {
  32. $updateNum = $change_type==1?$change_num:0-$change_num;
  33. User::findOne($user_id)->updateCounters([$field=>$updateNum]);
  34. //更新用户累计金币收入
  35. if($field=='coin_income'&&$change_type==1)
  36. {
  37. User::findOne($user_id)->updateCounters(['amount_coin_income'=>$updateNum]);
  38. }
  39. return true;
  40. }
  41. else
  42. {
  43. return false;
  44. }
  45. }
  46. //金币变化
  47. public static function pointChange($user_id,$change_num,$bak,$change_type=1,$field='point',$table_name='',$data_id=0)
  48. {
  49. if($change_num==0)return true;
  50. $userInfo = User::findOne($user_id);
  51. $before_num = intval($userInfo[$field]);
  52. $after_num = $change_type==1?$before_num + $change_num:(($before_num - $change_num)>0?($before_num - $change_num):0);
  53. $log = new UserPointLog();
  54. $log->user_id = $userInfo['user_id'];
  55. $log->before_num = $before_num;
  56. $log->after_num = $after_num;
  57. $log->change_num = $change_num;
  58. $log->table_name = $table_name;
  59. $log->data_id = $data_id;
  60. $log->change_type = $change_type;
  61. $log->bak = $bak;
  62. $log->create_time = TIMESTAMP;
  63. if($log->save())
  64. {
  65. $updateNum = $change_type==1?$change_num:0-$change_num;
  66. User::findOne($user_id)->updateCounters([$field=>$updateNum]);
  67. //更新用户累计积分
  68. if($field=='point'&&$change_type==1)
  69. {
  70. User::findOne($user_id)->updateCounters(['allpoint'=>$updateNum]);
  71. }
  72. return true;
  73. }
  74. else
  75. {
  76. file_put_contents(UPLOAD_PATH.'log.txt',$log->returnFirstError(),FILE_APPEND);
  77. }
  78. }
  79. //文档分销
  80. public static function docCommission($user_id,$doc,$paylog,$coin_num)
  81. {
  82. $leftCoin = $coin_num;
  83. $commissionconfigResult = Yii::$app->db->createCommand("select * from {{%config}} where name='commission'")->queryOne();
  84. $commissionConfig = string2array($commissionconfigResult['value']);
  85. if($commissionConfig['on'])
  86. {
  87. $user = User::findOne($user_id);
  88. if(!empty($user->referer_ids))
  89. {
  90. $paylog->agent_id = $user->referer_id;
  91. $paylog->agent_ids = $user->referer_ids;
  92. $paylog->save();
  93. $referer_ids = explode(",",trim($user->referer_ids,","));
  94. if(is_array($referer_ids))foreach(array_slice($referer_ids,0,Yii::$app->params['level']) as $k=>$referer_id)
  95. {
  96. $level = $k+1;
  97. $tempUser = User::findOne($referer_id);
  98. $vipSettings = [];
  99. $commissionRate = 0;
  100. if($tempUser->vipInfo())
  101. {
  102. $vipSettings = $tempUser->vipSettings();
  103. $commissionRate = $vipSettings?$vipSettings['doc_commission_level'.$level.'_rate']:$commissionConfig['doc_commission_level'.$level.'_rate'];
  104. }
  105. else
  106. {
  107. $commissionRate = $commissionConfig['doc_commission_level'.$level.'_rate'];
  108. }
  109. if($commissionRate>0)
  110. {
  111. $store = ShoppingStore::find()->where("user_id=$referer_id")->one();
  112. $commissionLog = new ShoppingCommissionLog();
  113. if(!empty($store))
  114. {
  115. $commissionLog->store_id = $store->store_id;
  116. }
  117. $commissionLog->user_id = $user_id;
  118. $commissionLog->order_id = 0;
  119. $commissionLog->goods_id = $paylog->log_id;
  120. $commissionLog->referer_id = $referer_id;
  121. $commissionLog->referer_level = $level;
  122. $commissionLog->commission = round(($commissionRate/100)*$coin_num,2);
  123. $commissionLog->type = 2;
  124. $commissionLog->bak = '分销文档';
  125. $commissionLog->create_time = TIMESTAMP;
  126. if($commissionLog->save())
  127. {
  128. Wallet::coinChange($referer_id,$commissionLog->commission,'分销返佣',1,'coin_income',DocReal::shortTableName(),$doc->id);
  129. $leftCoin -= $commissionLog->commission;
  130. //公众号消息推送
  131. MessageOne::commissionDoc($referer_id,$doc,$paylog->coin_num,$commissionLog->commission);
  132. }
  133. }
  134. }
  135. }
  136. }
  137. return $leftCoin;
  138. }
  139. //VIP分销
  140. public static function vipCommission($user_id,$userVipOrder)
  141. {
  142. $commissionconfigResult = Yii::$app->db->createCommand("select * from {{%config}} where name='commission'")->queryOne();
  143. $commissionConfig = string2array($commissionconfigResult['value']);
  144. if($commissionConfig['on'])
  145. {
  146. $user = User::findOne($user_id);
  147. if(!empty($user->referer_ids))
  148. {
  149. $referer_ids = explode(",",trim($user->referer_ids,","));
  150. if(is_array($referer_ids))foreach(array_slice($referer_ids,0,Yii::$app->params['level']) as $k=>$referer_id)
  151. {
  152. $level = $k+1;
  153. $tempUser = User::findOne($referer_id);
  154. $vipSettings = [];
  155. $commissionRate = 0;
  156. if($tempUser->vipInfo())
  157. {
  158. $vipSettings = $tempUser->vipSettings();
  159. $commissionRate = $vipSettings?$vipSettings['docvip_commission_level'.$level.'_rate']:$commissionConfig['docvip_commission_level'.$level.'_rate'];
  160. }
  161. else
  162. {
  163. $commissionRate = $commissionConfig['docvip_commission_level'.$level.'_rate'];
  164. }
  165. if($commissionRate>0)
  166. {
  167. $store = ShoppingStore::find()->where("user_id=$referer_id")->one();
  168. $commissionLog = new ShoppingCommissionLog();
  169. if(!empty($store))
  170. {
  171. $commissionLog->store_id = $store->store_id;
  172. }
  173. $commissionLog->user_id = $user_id;
  174. $commissionLog->order_id = $userVipOrder->order_id;
  175. $commissionLog->goods_id = $userVipOrder->vip_type;
  176. $commissionLog->referer_id = $referer_id;
  177. $commissionLog->referer_level = $level;
  178. $commissionLog->commission = round(($commissionRate/100)*$userVipOrder->money,2);
  179. $commissionLog->type = 1;
  180. $commissionLog->bak = '分销VIP';
  181. $commissionLog->create_time = TIMESTAMP;
  182. if($commissionLog->save())
  183. {
  184. Wallet::moneyChange($referer_id,$commissionLog->commission,'分销返佣',1);
  185. //公众号消息推送
  186. MessageOne::commissionVip($referer_id,$userVipOrder,$commissionLog->commission);
  187. }
  188. }
  189. }
  190. }
  191. }
  192. }
  193. //余额变化
  194. public static function moneyChange($user_id,$change_num,$bak,$change_type=1,$field='money',$status=1)
  195. {
  196. if($change_num==0)return true;
  197. $userInfo = User::findOne($user_id);
  198. $before_num = intval($userInfo[$field]);
  199. $after_num = $change_type==1?$before_num + $change_num:(($before_num - $change_num)>0?($before_num - $change_num):0);
  200. $log = new UserMoneyLog();
  201. $log->user_id = $userInfo['user_id'];
  202. $log->before_num = $before_num;
  203. $log->after_num = $after_num;
  204. $log->change_num = $change_num;
  205. $log->change_type = $change_type;
  206. $log->field = $field;
  207. $log->bak = $bak;
  208. $log->status = $status;
  209. $log->create_time = TIMESTAMP;
  210. if($log->save())
  211. {
  212. $updateNum = $change_type==1?$change_num:0-$change_num;
  213. User::findOne($user_id)->updateCounters([$field=>$updateNum]);
  214. //更新用户累计收益
  215. if($field=='money'&&$change_type==1&&$status==1)
  216. {
  217. User::findOne($user_id)->updateCounters(['amount_money_income'=>$updateNum]);
  218. }
  219. return true;
  220. }
  221. else
  222. {
  223. file_put_contents(UPLOAD_PATH.'log.txt',$log->returnFirstError(),FILE_APPEND);
  224. }
  225. }
  226. }