|
@@ -55,6 +55,183 @@ class User extends BaseModel
|
|
|
return app('request')->ip();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @param $uid
|
|
|
+ * @param $parent
|
|
|
+ * @param $parent_area
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ public static function setParentUser($uid, $parent, $parent_area)
|
|
|
+ {
|
|
|
+
|
|
|
+ $res = true;
|
|
|
+ while ($parent) {
|
|
|
+ $user = self::get($parent);
|
|
|
+ $res = $res && self::where('uid', $parent)->inc($parent_area . '_count', 1)->update();
|
|
|
+ $res = $res && self::where('uid', $parent)->inc($parent_area . '_achievement', sys_config('order_coin_price'))->update();
|
|
|
+ if (
|
|
|
+ $user['is_partner'] == 0
|
|
|
+ && $user['A_achievement'] + ($parent_area == 'A' ? sys_config('order_coin_price') : 0) >= sys_config('partner_achievement_A')
|
|
|
+ && $user['B_achievement'] + ($parent_area == 'B' ? sys_config('order_coin_price') : 0) >= sys_config('partner_achievement_B')
|
|
|
+ && $user['C_achievement'] + ($parent_area == 'C' ? sys_config('order_coin_price') : 0) >= sys_config('partner_achievement_C')
|
|
|
+ ) {
|
|
|
+ self::where('uid', $parent)->update(['is_partner' => 1]);
|
|
|
+ }
|
|
|
+
|
|
|
+ $parent = $user['parent'];
|
|
|
+ $parent_area = $user['parent_area'];
|
|
|
+ }
|
|
|
+ $res = $res && Achievement::create(['uid' => $uid, 'achievement' => sys_config('order_coin_price'), 'add_time' => time()]);
|
|
|
+ $res = $res && self::sendRecommendAward($uid);
|
|
|
+ $res = $res && self::sendCAreaAward($uid);
|
|
|
+ $res = $res && self::sendGroupAward($uid);
|
|
|
+ $res = $res && self::sendPartnerAward(sys_config('order_coin_price'), $uid);
|
|
|
+ return $res;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static function sendPartnerAward($money, $uid)
|
|
|
+ {
|
|
|
+ $partner_ratio = sys_config('partner_ratio');
|
|
|
+ $brokerage = bcmul(bcdiv($partner_ratio, 100, 4), $money, 2);
|
|
|
+ if ($brokerage < 0) return true;
|
|
|
+ $partners = self::where('is_partner', 1)->column('uid');
|
|
|
+ $average = bcdiv($brokerage, count($partners) ?: 1, 2);
|
|
|
+ if ($average < 0) return true;
|
|
|
+ $res = true;
|
|
|
+ foreach ($partners as $v) {
|
|
|
+ $spread = self::get($v);
|
|
|
+ $res = $res && User::edit(['brokerage_price' => bcadd($spread['brokerage_price'], $average, 2)], $spread['uid'], 'uid');
|
|
|
+ $res = $res && UserBill::income('合伙人分红', $spread['uid'], 'now_money', 'parent_brokerage', $average, $uid, bcadd($spread['brokerage_price'], $average, 2), '获得合伙人分红');
|
|
|
+ }
|
|
|
+ return $res;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public static function sendRecommendAward($uid): bool
|
|
|
+ {
|
|
|
+ $user = self::get($uid);
|
|
|
+ if (!$user) return true;
|
|
|
+ $brokerage = sys_config('recommend_award');
|
|
|
+ $integral = bcmul(bcdiv(sys_config('brokerage_integral_ratio'), 100, 4), $brokerage, 2);
|
|
|
+ $real_brokerage = bcsub($brokerage, $integral, 2);
|
|
|
+ $spread = self::get($user['spread_uid']);
|
|
|
+ $res = true;
|
|
|
+ if ($spread) {
|
|
|
+ if ($real_brokerage > 0) {
|
|
|
+ $res = $res && User::edit(['brokerage_price' => bcadd($spread['brokerage_price'], $real_brokerage, 2)], $user['spread_uid'], 'uid');
|
|
|
+ $res = $res && UserBill::income('直推奖-佣金', $user['spread_uid'], 'now_money', 'recommend_brokerage', $real_brokerage, $uid, bcadd($spread['brokerage_price'], $real_brokerage, 2), '直推用户报单获得直推奖' . $brokerage . ',其中佣金' . $real_brokerage . ',积分' . $integral);
|
|
|
+ }
|
|
|
+ if ($integral > 0) {
|
|
|
+ $res = $res && User::edit(['integral' => bcadd($spread['integral'], $integral, 2)], $user['spread_uid'], 'uid');
|
|
|
+ $res = $res && UserBill::income('直推奖-积分', $user['spread_uid'], 'integral', 'recommend_brokerage_integral', $integral, $uid, bcadd($spread['integral'], $integral, 2), '直推用户报单获得直推奖' . $brokerage . ',其中佣金' . $real_brokerage . ',积分' . $integral);
|
|
|
+ }
|
|
|
+ return $res && self::sendManageAward($spread, $brokerage, 'recommend', $uid);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public static function sendCAreaAward($uid): bool
|
|
|
+ {
|
|
|
+ $user = self::get($uid);
|
|
|
+ if (!$user) return true;
|
|
|
+ $parent = self::get($user['parent']);
|
|
|
+ while ($parent && $user['parent_area'] != 'C') {
|
|
|
+ $user = $parent;
|
|
|
+ $parent = self::get($user['parent']);
|
|
|
+ }
|
|
|
+ if ($parent) {
|
|
|
+ $brokerage = sys_config('C_area_award');
|
|
|
+ $integral = bcmul(bcdiv(sys_config('brokerage_integral_ratio'), 100, 4), $brokerage, 2);
|
|
|
+ $real_brokerage = bcsub($brokerage, $integral, 2);
|
|
|
+ $res = true;
|
|
|
+ if ($real_brokerage > 0) {
|
|
|
+ $res = $res && User::edit(['brokerage_price' => bcadd($parent['brokerage_price'], $real_brokerage, 2)], $user['parent'], 'uid');
|
|
|
+ $res = $res && UserBill::income('见点奖-佣金', $user['parent'], 'now_money', 'c_area_brokerage', $real_brokerage, $uid, bcadd($parent['brokerage_price'], $real_brokerage, 2), 'C区用户报单获得见点奖' . $brokerage . ',其中佣金' . $real_brokerage . ',积分' . $integral);
|
|
|
+ }
|
|
|
+ if ($integral > 0) {
|
|
|
+ $res = $res && User::edit(['integral' => bcadd($parent['integral'], $integral, 2)], $user['parent'], 'uid');
|
|
|
+ $res = $res && UserBill::income('见点奖-积分', $user['parent'], 'integral', 'c_area_brokerage_integral', $integral, $uid, bcadd($parent['integral'], $integral, 2), 'C区用户报单获得见点奖' . $brokerage . ',其中佣金' . $real_brokerage . ',积分' . $integral);
|
|
|
+ }
|
|
|
+ return $res && self::sendManageAward($parent, $brokerage, 'c_area', $uid);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $uid
|
|
|
+ * @return bool
|
|
|
+ * @throws DataNotFoundException
|
|
|
+ * @throws DbException
|
|
|
+ * @throws ModelNotFoundException
|
|
|
+ */
|
|
|
+ public static function sendGroupAward($uid): bool
|
|
|
+ {
|
|
|
+ $userInfo = User::getUserInfo($uid);
|
|
|
+ $spread = User::getUserInfo($userInfo['spread_uid']);
|
|
|
+ $send = 0;
|
|
|
+ $res = true;
|
|
|
+ while ($spread) {
|
|
|
+ $level = UserLevel::getUserLevelInfo(UserLevel::getUserLevel($spread['uid']));
|
|
|
+ if ($level['group_award_ratio'] <= 0) {
|
|
|
+ $spread = User::getUserInfo($spread['spread_uid']);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $brokerageRatio = bcdiv($level['group_award_ratio'], 100, 4);
|
|
|
+ $brokeragePrice = bcmul(sys_config('order_coin_price'), $brokerageRatio, 8);
|
|
|
+ if ($brokeragePrice < $send) {
|
|
|
+ $spread = User::getUserInfo($spread['spread_uid']);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ $realBrokeragePrice = bcsub($brokeragePrice, $send, 8);
|
|
|
+ $mark = '用户' . $userInfo['nickname'] . '(' . $uid . ')' . '报单,获得极差奖励' . $realBrokeragePrice;
|
|
|
+ $res = $res && User::edit(['brokerage_price' => bcadd($spread['brokerage_price'], $realBrokeragePrice, 2)], $spread['uid'], 'uid');
|
|
|
+ $res = $res && UserBill::income('极差奖', $spread['uid'], 'now_money', 'layer_brokerage_price', $realBrokeragePrice, $uid, bcadd($spread['brokerage_price'], $realBrokeragePrice, 2), $mark);
|
|
|
+ $send = $brokeragePrice;
|
|
|
+ $spread = User::getUserInfo($spread['spread_uid']);
|
|
|
+ }
|
|
|
+ return $res;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //管理奖
|
|
|
+ public static function sendManageAward($user_info, $brokerage, $type, $uid): bool
|
|
|
+ {
|
|
|
+ if ($brokerage <= 0) return true;
|
|
|
+ $spread = self::get($user_info['spread_uid']);
|
|
|
+ if (!$spread) return true;
|
|
|
+ $res = true;
|
|
|
+ $manage_ratio_one = sys_config('manage_ratio_one');
|
|
|
+ $brokerage_one = bcmul(bcdiv($manage_ratio_one, 100, 4), $brokerage, 2);
|
|
|
+ if ($brokerage_one > 0) {
|
|
|
+ $res = $res && User::edit(['brokerage_price' => bcadd($spread['brokerage_price'], $brokerage_one, 2)], $spread['uid'], 'uid');
|
|
|
+ $res = $res && UserBill::income('管理奖', $spread['uid'], 'now_money', 'manage_brokerage', $brokerage_one, $uid, bcadd($spread['brokerage_price'], $brokerage_one, 2), '下级用户获得' . ($type == 'recommend' ? '推荐奖' : '见点奖') . ',获得一级管理奖' . $brokerage_one);
|
|
|
+ }
|
|
|
+ $spread = self::get($spread['spread_uid']);
|
|
|
+ if (!$spread) return $res;
|
|
|
+ $manage_ratio_two = sys_config('manage_ratio_two');
|
|
|
+ $brokerage_two = bcmul(bcdiv($manage_ratio_two, 100, 4), $brokerage, 2);
|
|
|
+ if ($brokerage_two > 0) {
|
|
|
+ $res = $res && User::edit(['brokerage_price' => bcadd($spread['brokerage_price'], $brokerage_two, 2)], $spread['uid'], 'uid');
|
|
|
+ $res = $res && UserBill::income('管理奖', $spread['uid'], 'now_money', 'manage_brokerage', $brokerage_two, $uid, bcadd($spread['brokerage_price'], $brokerage_two, 2), '下下级用户获得' . ($type == 'recommend' ? '推荐奖' : '见点奖') . ',获得二级管理奖' . $brokerage_two);
|
|
|
+ }
|
|
|
+ return $res;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* @param $wechatUser
|
|
|
* @param int $spread_uid
|