Vip.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 会员类型封装
  7. */
  8. namespace app\allwin\widget;
  9. use app\allwin\model\Bank;
  10. use app\allwin\model\BankBill;
  11. use app\allwin\model\FundBill;
  12. use app\allwin\model\AllwinUser;
  13. use app\allwin\model\Levels;
  14. use app\common\model\SystemUser;
  15. class Vip{
  16. /**
  17. * 开通会员,并注册为会员用户
  18. * 如果已经是会员,更换会员类型,以第一次开通邀请人的所属店铺为当前用户所属店铺
  19. * @return void
  20. */
  21. public static function addLevel(int $uid,int $invite_uid = 0,int $store_id = 0){
  22. //判断直推关系
  23. $level = Levels::where(['user_id' => $uid])->find();
  24. if (empty($level) && !empty($invite_uid)) {
  25. Levels::addLevel($uid,$invite_uid); //增加要求邀请关系
  26. }
  27. $rel = AllwinUser::where(['uid' => $uid])->find();
  28. if (empty($rel)) {
  29. $data['uid'] = $uid;
  30. $data['store_id'] = $store_id;
  31. return AllwinUser::create($data);
  32. }
  33. return true;
  34. }
  35. /**
  36. * 已邀请码来判断邀请关系和开通,并注册为会员用户
  37. * @return void
  38. */
  39. public static function register(int $uid,$invite){
  40. $store_id = 0;
  41. $invite_uid = SystemUser::isInvite($invite);
  42. if($invite_uid){
  43. $vipuser = AllwinUser::where(['uid' => $invite_uid])->find();
  44. if($vipuser){
  45. $store_id = $vipuser['store_id'];
  46. }
  47. }
  48. //增加要求邀请关系
  49. return self::addLevel($uid,$invite_uid,$store_id);
  50. }
  51. /**
  52. * 收益计算器
  53. * $vip->store_workers //直推(必须是会员、如果是老板或员工免开会员)
  54. * $vip->store //给好店管理员(如推荐人不属于某个好店,则直接归运营公司)
  55. * $vip->company_workers //公司员工或签约的社群主
  56. * $vip->company //地方运营公司
  57. * $vip->stock //采购基金
  58. * $vip->group //给所属总代或总公司
  59. * @param array $order
  60. * @return void
  61. */
  62. public static function income(array $order){
  63. $miniapp_id = $order['member_miniapp_id'];
  64. //读取所属VIP
  65. $vip_card = model('VipCard')->where(['id' => $order['vipcard_id']])->find();
  66. if (empty($vip_card)) {
  67. return;
  68. }
  69. //如果订单金额和创客配置不一样禁止分配
  70. if ($order['amount'] != $vip_card->price) {
  71. return;
  72. }
  73. //判断直接推荐人UID
  74. $parent_uid = 0;
  75. $levels = model('Levels')->where(['user_id' => $order['user_id'],'level' => 1])->field('parent_id')->find();
  76. if (isset($levels)) {
  77. $parent_vip = model('Vip')->where(['user_id' => $levels->parent_id,'is_lock' => 0,'state' => 1])->field('vipcard_id,user_id')->find();
  78. if (isset($parent_vip)) {
  79. if ($parent_vip->vipcard->is_up) {
  80. if ($parent_vip->vipcard_id == $vip_card->id) {
  81. $parent_uid = $levels->parent_id;
  82. }
  83. }else{
  84. $parent_uid = $levels->parent_id;
  85. }
  86. }
  87. }
  88. //判断用户是好店老板、好店员工还是社群主
  89. $allwinUser = model('AllwinUser')->where(['uid' => $order['user_id']])->field('store_id')->find(); //判断开通用户所属好店
  90. $store_id = empty($allwinUser) ? 0 : $allwinUser->store_id;
  91. if($store_id){
  92. //读取好店老板
  93. $store = model('Store')->where(['id' => $store_id])->field('manage_uid')->find();
  94. $store_uid = empty($store->manage_uid) ? 0 : $store->manage_uid;
  95. //判断好店是否是运营公司的员工
  96. $worker = model('Worker')->whereRaw("FIND_IN_SET({$store_id},store_ids)")->find();
  97. $worker_uid = empty($worker) ? 0 : $worker->uid;
  98. }else{
  99. $store_uid = model('AllwinUserAgent')->agentUid($order['user_id'],$miniapp_id);
  100. $worker_uid = 0; //员工UID
  101. }
  102. //判断是否有社群主
  103. //如果分配金额小于待分配,将不分配
  104. if($parent_uid && $vip_card->store_workers > 0){
  105. Bank::dueMoney($miniapp_id,$parent_uid,$vip_card->store_workers);
  106. BankBill::add(['miniapp_id'=>$miniapp_id,'store_id' => 0,'money'=>$vip_card->store_workers,'uid'=>$parent_uid,'pay_uid' =>$order['user_id']],'推荐会员奖励');
  107. }
  108. //好店管理员
  109. if($store_uid && $vip_card->store > 0){
  110. Bank::dueMoney($miniapp_id,$store_uid,$vip_card->store);
  111. BankBill::add(['miniapp_id'=>$miniapp_id,'store_id' => 0,'money' => $vip_card->store,'uid'=>$store_uid,'pay_uid' =>$order['user_id']],'会员奖励');
  112. if($store_id){
  113. model('StoreStats')->vip($miniapp_id,$store_id,$vip_card->store); //增加创客分润
  114. }
  115. }
  116. //员工奖励
  117. if($worker_uid && $vip_card->company_workers > 0){
  118. Bank::dueMoney($miniapp_id,$worker_uid,$vip_card->company_workers);
  119. BankBill::add(['miniapp_id'=>$miniapp_id,'store_id' => 0,'money' => $vip_card->company_workers,'uid'=> $worker_uid,'pay_uid' =>$order['user_id']],'员工会员奖励');
  120. }
  121. //购物基金
  122. if($vip_card->stock > 0){
  123. model('Fund')->recharge($miniapp_id,$vip_card->stock);
  124. FundBill::add(['miniapp_id'=>$miniapp_id,'types'=>0,'store_id'=>$order['store_id'],'money'=>$vip_card->stock,'order_no' => $order['order_no'],'uid' =>$order['user_id']]);
  125. }
  126. //采购公司利润
  127. if($vip_card->company > 0){
  128. model('Platform')->company($miniapp_id,$vip_card->company);
  129. }
  130. if($vip_card->group > 0){
  131. model('Platform')->platforms($miniapp_id,$vip_card->group);
  132. }
  133. return model('vip')->where(['id' => $order['id']])->update(['is_divided' => 1]);
  134. }
  135. }