User.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. /**
  3. *
  4. * @author: xaboy<365615158@qq.com>
  5. * @day: 2017/12/21
  6. */
  7. namespace app\wap\model\user;
  8. use basic\ModelBasic;
  9. use service\SystemConfigService;
  10. use think\Request;
  11. use think\response\Redirect;
  12. use think\Session;
  13. use think\Url;
  14. use traits\ModelTrait;
  15. class User extends ModelBasic
  16. {
  17. use ModelTrait;
  18. protected $insert = ['add_time','add_ip','last_time','last_ip'];
  19. protected function setAddTimeAttr($value)
  20. {
  21. return time();
  22. }
  23. protected function setAddIpAttr($value)
  24. {
  25. return Request::instance()->ip();
  26. }
  27. protected function setLastTimeAttr($value)
  28. {
  29. return time();
  30. }
  31. protected function setLastIpAttr($value)
  32. {
  33. return Request::instance()->ip();
  34. }
  35. public static function setWechatUser($wechatUser,$spread_uid = 0)
  36. {
  37. return self::set([
  38. 'account'=>'wx'.$wechatUser['uid'].time(),
  39. 'pwd'=>md5(123456),
  40. 'nickname'=>$wechatUser['nickname']?:'',
  41. 'avatar'=>$wechatUser['headimgurl']?:'',
  42. 'spread_uid'=>$spread_uid,
  43. 'uid'=>$wechatUser['uid'],
  44. 'user_type'=>'wechat'
  45. ]);
  46. }
  47. public static function updateWechatUser($wechatUser,$uid)
  48. {
  49. return self::edit([
  50. 'nickname'=>$wechatUser['nickname']?:'',
  51. 'avatar'=>$wechatUser['headimgurl']?:''
  52. ],$uid,'uid');
  53. }
  54. public static function setSpreadUid($uid,$spreadUid)
  55. {
  56. return self::where('uid',$uid)->update(['spread_uid'=>$spreadUid]);
  57. }
  58. public static function getUserInfo($uid)
  59. {
  60. $userInfo = self::where('uid',$uid)->find();
  61. if(!$userInfo) exception('读取用户信息失败!');
  62. return $userInfo->toArray();
  63. }
  64. /**
  65. * 获得当前登陆用户UID
  66. * @return int $uid
  67. */
  68. public static function getActiveUid()
  69. {
  70. $uid = null;
  71. if(Session::has('loginUid','wap')) $uid = Session::get('loginUid','wap');
  72. if(!$uid && Session::has('loginOpenid','wap') && ($openid = Session::get('loginOpenid','wap')))
  73. $uid = WechatUser::openidToUid($openid);
  74. if(!$uid) exit(exception('请登陆!'));
  75. return $uid;
  76. }
  77. /** //TODO 一级返佣
  78. * @param $orderInfo
  79. * @return bool
  80. */
  81. public static function backOrderBrokerage($orderInfo)
  82. {
  83. $userInfo = User::getUserInfo($orderInfo['uid']);
  84. if(!$userInfo || !$userInfo['spread_uid']) return true;
  85. $storeBrokerageStatu = SystemConfigService::get('store_brokerage_statu') ? : 1;//获取后台分销类型
  86. if($storeBrokerageStatu == 1){
  87. if(!User::be(['uid'=>$userInfo['spread_uid'],'is_promoter'=>1])) return true;
  88. }
  89. $brokerageRatio = (SystemConfigService::get('store_brokerage_ratio') ?: 0)/100;
  90. if($brokerageRatio <= 0) return true;
  91. $cost = isset($orderInfo['cost']) ? $orderInfo['cost'] : 0;//成本价
  92. if($cost > $orderInfo['pay_price']) return true;//成本价大于支付价格时直接返回
  93. $brokeragePrice = bcmul(bcsub($orderInfo['pay_price'],$cost,2),$brokerageRatio,2);
  94. if($brokeragePrice <= 0) return true;
  95. $mark = $userInfo['nickname'].'成功消费'.floatval($orderInfo['pay_price']).'元,奖励推广佣金'.floatval($brokeragePrice);
  96. self::beginTrans();
  97. $res1 = UserBill::income('获得推广佣金',$userInfo['spread_uid'],'now_money','brokerage',$brokeragePrice,$orderInfo['id'],0,$mark);
  98. $res2 = self::bcInc($userInfo['spread_uid'],'now_money',$brokeragePrice,'uid');
  99. $res = $res1 && $res2;
  100. self::checkTrans($res);
  101. if($res) self::backOrderBrokerageTwo($orderInfo);
  102. return $res;
  103. }
  104. /**
  105. * //TODO 二级推广
  106. * @param $orderInfo
  107. * @return bool
  108. */
  109. public static function backOrderBrokerageTwo($orderInfo){
  110. $userInfo = User::getUserInfo($orderInfo['uid']);
  111. $userInfoTwo = User::getUserInfo($userInfo['spread_uid']);
  112. if(!$userInfoTwo || !$userInfoTwo['spread_uid']) return true;
  113. $storeBrokerageStatu = SystemConfigService::get('store_brokerage_statu') ? : 1;//获取后台分销类型
  114. if($storeBrokerageStatu == 1){
  115. if(!User::be(['uid'=>$userInfoTwo['spread_uid'],'is_promoter'=>1])) return true;
  116. }
  117. $brokerageRatio = (SystemConfigService::get('store_brokerage_two') ?: 0)/100;
  118. if($brokerageRatio <= 0) return true;
  119. $cost = isset($orderInfo['cost']) ? $orderInfo['cost'] : 0;//成本价
  120. if($cost > $orderInfo['pay_price']) return true;//成本价大于支付价格时直接返回
  121. $brokeragePrice = bcmul(bcsub($orderInfo['pay_price'],$cost,2),$brokerageRatio,2);
  122. if($brokeragePrice <= 0) return true;
  123. $mark = '二级推广人'.$userInfo['nickname'].'成功消费'.floatval($orderInfo['pay_price']).'元,奖励推广佣金'.floatval($brokeragePrice);
  124. self::beginTrans();
  125. $res1 = UserBill::income('获得推广佣金',$userInfoTwo['spread_uid'],'now_money','brokerage',$brokeragePrice,$orderInfo['id'],0,$mark);
  126. $res2 = self::bcInc($userInfoTwo['spread_uid'],'now_money',$brokeragePrice,'uid');
  127. $res = $res1 && $res2;
  128. self::checkTrans($res);
  129. return $res;
  130. }
  131. }