diff --git a/app/data/service/RebateCurrentService.php b/app/data/service/RebateCurrentService.php index 41ca5db24..8f52b0b2c 100644 --- a/app/data/service/RebateCurrentService.php +++ b/app/data/service/RebateCurrentService.php @@ -272,12 +272,56 @@ class RebateCurrentService extends Service /** * 管理奖励发放 * @return boolean + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException */ private function _prize06(): bool { + $puids = array_reverse(explode('-', trim($this->user['path'], '-'))); + if (empty($puids) || $this->order['amount_total'] <= 0) return false; + // 记录原始等级 + $prevLevel = $this->user['vip_code']; + // 获取可以参与奖励的代理 + $subsql = $this->app->db->name('DataUserUpgrade')->field('number')->whereLike('rebate_rule', '%,' . self::PRIZE_06 . ',%')->buildSql(true); + foreach ($this->app->db->name('DataUser')->where("vip_code in {$subsql}")->whereIn('id', $puids)->orderField('id', $puids)->cursor() as $user) { + if ($user['vip_code'] > $prevLevel) { + if (($amount = $this->_prize06amount($prevLevel, $user['vip_code'])) > 0) { + $map = ['type' => self::PRIZE_06, 'order_no' => $this->order['order_no'], 'order_uid' => $this->order['uid']]; + $name = "{$this->name(self::PRIZE_06)},[ {$prevLevel} > {$user['vip_code']} ]每单 {$amount} 元"; + $this->app->db->name($this->table)->insert(array_merge($map, [ + 'uid' => $this->from2['id'], 'name' => $name, 'amount' => $amount, 'order_amount' => $this->order['amount_total'], + ])); + UserUpgradeService::instance()->syncLevel($this->from2['id']); + } + $prevLevel = $user['vip_code']; + } + } return true; } + /** + * 计算两等级之间的管理奖差异 + * @param int $prevLevel + * @param int $nextLevel + * @return float + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + */ + private function _prize06amount(int $prevLevel, int $nextLevel): float + { + $amount = 0.00; + foreach (range($prevLevel, $nextLevel) as $level) { + [$state, $value] = [ + $this->config("manage_state_vip_{$level}"), + $this->config("manage_value_vip_{$level}"), + ]; + if ($state && $value > 0) $amount += $value; + } + return floatval($amount); + } + /** * 升级奖励发放 */ diff --git a/app/data/service/UserUpgradeService.php b/app/data/service/UserUpgradeService.php index 10714c0b0..a4c568c5a 100644 --- a/app/data/service/UserUpgradeService.php +++ b/app/data/service/UserUpgradeService.php @@ -95,7 +95,7 @@ class UserUpgradeService extends Service { $user = $this->app->db->name('DataUser')->where(['id' => $uid])->find(); if (empty($user)) return true; - [$vipName, $vipNumber] = ['普通用户', 0]; + [$vipName, $vipCode] = ['普通用户', 0]; // 统计历史数据 $teamsDirect = $this->app->db->name('DataUser')->where(['pid1' => $uid])->count(); $teamsIndirect = $this->app->db->name('DataUser')->where(['pid2' => $uid])->count(); @@ -113,17 +113,17 @@ class UserUpgradeService extends Service || ($item['upgrade_type'] == 1 && ($l1 && $l2 && $l3 && $l4 && $l5)) /* 满足所有条件可以等级 */ ) { - [$vipName, $vipNumber] = [$item['name'], $item['number']]; + [$vipName, $vipCode] = [$item['name'], $item['number']]; break; } } // 购买商品升级 $query = $this->app->db->name('ShopOrderItem')->alias('b')->join('shop_order a', 'b.order_no=a.order_no'); $tmpNumber = $query->whereRaw("a.uid={$uid} and a.payment_status=1 and a.status>=4 and b.vip_entry=1")->max('b.vip_code'); - if ($tmpNumber > $vipNumber) { + if ($tmpNumber > $vipCode) { $map = ['status' => 1, 'number' => $tmpNumber]; $upgrade = $this->app->db->name('DataUserUpgrade')->where($map)->find(); - if (!empty($upgrade)) [$vipName, $vipNumber] = [$upgrade['name'], $upgrade['number']]; + if (!empty($upgrade)) [$vipName, $vipCode] = [$upgrade['name'], $upgrade['number']]; } // 统计订单金额 $orderAmountTotal = $this->app->db->name('ShopOrder')->whereRaw("uid={$uid} and status>=4")->sum('amount_goods'); @@ -132,7 +132,7 @@ class UserUpgradeService extends Service // 更新用户数据 $data = [ 'vip_name' => $vipName, - 'vip_code' => $vipNumber, + 'vip_code' => $vipCode, 'teams_users_total' => $teamsUsers, 'teams_users_direct' => $teamsDirect, 'teams_users_indirect' => $teamsIndirect, @@ -145,6 +145,12 @@ class UserUpgradeService extends Service $data['vip_datetime'] = date('Y-m-d H:i:s'); } $this->app->db->name('DataUser')->where(['id' => $uid])->update($data); + if ($user['vip_code'] < $vipCode) { + // 用户升级事件 + $this->app->event->trigger('UserUpgradeLevel', [ + 'uid' => $user['uid'], 'vip_code_old' => $user['vip_code'], 'vip_code_new' => $vipCode, + ]); + } return ($parent && $user['pid2'] > 0) ? $this->syncLevel($user['pid2'], false) : true; } } \ No newline at end of file diff --git a/app/data/view/user_rebate/config.html b/app/data/view/user_rebate/config.html index fa08dcb88..7d70af372 100644 --- a/app/data/view/user_rebate/config.html +++ b/app/data/view/user_rebate/config.html @@ -236,6 +236,28 @@ +
+
+ + {php} $key = 'manage_state_vip_'.$level['number']; {/php} + + {php} $data[$key] = $data[$key] ?? 0; {/php} + {if isset($data[$key]) and $data[$key] eq 1} + + {else} + + {/if} + +
+ {php} $key = 'manage_value_vip_'.$level['number']; {/php} + + +
+
+