Retail.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. namespace app\api\library;
  3. use app\api\model\CoinRecord;
  4. use think\Db;
  5. /**
  6. * 分销
  7. */
  8. class Retail
  9. {
  10. /**
  11. * 计算佣金
  12. * @Author Nilr
  13. * @DateTime 2021-10-20T19:55:34+0800
  14. * @return [type] [description]
  15. */
  16. public static function giveMoney ($order) {
  17. $order = \app\api\model\RechargeOrder::get($order['id']);
  18. if($order->status != "paid") return false;
  19. $user_id = $order->user_id; //购买的用户id
  20. $money = $order->rmb_amount; //支付金额
  21. // 匹配往上3级的用户
  22. $f_relation = db("retail_invitation")->alias("a")->join("user b","b.id = a.pid")->where(['a.user_id'=>$user_id])->field("b.id, b.retail_1, b.retail_2, b.retail_3, a.level")->select();
  23. //比例
  24. // var_dump($f_relation);
  25. $system = db("setting")->where(['id'=>1])->field("retail_1, retail_2, retail_3")->find();
  26. $arr = ['retail_1', "retail_2", "retail_3"];
  27. foreach($f_relation as $k=>$v){
  28. $v['now_level'] = $v[$arr[$v['level']-1]] > 0 ? $v[$arr[$v['level']-1]] : $system[$arr[$v['level']-1]];
  29. self::sendCoin($v, $money, $order, $v['level']);
  30. }
  31. }
  32. public static function giveMoneys ($order) {
  33. $order = \app\api\model\Order::get($order['id']);
  34. if($order->status != "unused") return false;
  35. $user_id = $order->user_id; //购买的用户id
  36. $money = $order->rmb_amount; //支付金额
  37. // 匹配往上3级的用户
  38. $f_relation = db("retail_invitation")->alias("a")->join("user b","b.id = a.pid")->where(['a.user_id'=>$user_id])->field("b.id, b.retail_1, b.retail_2, b.retail_3, a.level")->select();
  39. //比例
  40. // var_dump($f_relation);
  41. $system = db("setting")->where(['id'=>1])->field("retail_1, retail_2, retail_3")->find();
  42. $arr = ['retail_1', "retail_2", "retail_3"];
  43. foreach($f_relation as $k=>$v){
  44. $v['now_level'] = $v[$arr[$v['level']-1]] > 0 ? $v[$arr[$v['level']-1]] : $system[$arr[$v['level']-1]];
  45. self::sendCoin($v, $money, $order, $v['level']);
  46. }
  47. }
  48. private static function sendCoin($v, $money, $order, $level = 1)
  49. {
  50. $user = \app\common\model\User::get($v['id']);
  51. if(empty($user)) return false;
  52. Db::startTrans();
  53. $before = $user->retail_balance;
  54. $moneyAfter = $money * $v['now_level'] / 100;
  55. $after = $before + $moneyAfter;
  56. // 创建金币记录
  57. // CoinRecord::create([
  58. // 'user_id' => $v['id'],
  59. // 'before' => $before,
  60. // 'after' => $after,
  61. // 'coin' => $moneyAfter,
  62. // 'order_id' => $order->id,
  63. // 'type' => 'retail', // 变更类型:pay_box=支付盲盒,recharge=充值,fromwallet=余额转入,refund=退款,retail分佣
  64. // ]);
  65. $user->retail_balance = $after;
  66. $sourcephone = \app\common\model\User::get($order->user_id);
  67. $arr = [
  68. "user_id"=>$v['id'],
  69. "source_user_id" =>$order->user_id,
  70. 'userphone'=>$user->username,
  71. 'sourcephone'=>$sourcephone->username,
  72. "coin"=>$moneyAfter,
  73. "level"=>$level,
  74. "create_time"=>time()
  75. ];
  76. $res2 = db("retail_detail")->insert($arr);
  77. $res = $user->save();
  78. if($res && $res2){
  79. Db::commit();
  80. return true;
  81. }
  82. Db::rollback();
  83. return false;
  84. }
  85. public static function bindRelation($pid, $uid){
  86. if(empty($pid)) return true;
  87. //找到pid 的上级
  88. $f_relation = db("retail_invitation")->where(['user_id'=>$pid])->where("level", "in", "1,2")->select();
  89. $arr = [];
  90. foreach($f_relation as $k=>&$v){
  91. $v['user_id'] = $uid;
  92. $v['level'] = $v['level'] + 1;
  93. unset($v['id']);
  94. $arr[] = $v;
  95. }
  96. $arr[] = [
  97. "user_id"=>$uid,
  98. "pid"=>$pid,
  99. "level"=>1,
  100. "create_time"=>time()
  101. ];
  102. if(count($arr) > 0) db("retail_invitation")->insertAll($arr);
  103. return true;
  104. }
  105. }