添加管理奖

This commit is contained in:
邹景立 2021-03-15 11:30:22 +08:00
parent fa47f17415
commit 7c9b52de8e
3 changed files with 77 additions and 5 deletions

View File

@ -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);
}
/**
* 升级奖励发放
*/

View File

@ -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;
}
}

View File

@ -236,6 +236,28 @@
</div>
</fieldset>
</div>
<div class="layui-col-xs4">
<fieldset class="block">
<legend>
{php} $key = 'manage_state_vip_'.$level['number']; {/php}
<input type="hidden" name="{$key}" value="0">
{php} $data[$key] = $data[$key] ?? 0; {/php}
{if isset($data[$key]) and $data[$key] eq 1}
<input checked type="checkbox" name="{$key}" lay-skin="switch" value="1" lay-text="已启用用户 {$level.name} 管理奖励|已停用用户 {$level.name} 管理奖励">
{else}
<input type="checkbox" name="{$key}" lay-skin="switch" value="1" lay-text="已启用用户 {$level.name} 管理奖励|已停用用户 {$level.name} 管理奖励">
{/if}
</legend>
<div class="layui-form-item nowrap">
{php} $key = 'manage_value_vip_'.$level['number']; {/php}
<input class="layui-input" type="hidden" name="upgrade_type_vip_{$level.number}" value="2">
<label class="block">
<span class="color-blue"><b>请输入固定奖励金额</b> 如:比例填写 10.00 表示 10.00 </span>
<input class="layui-input" type="text" name="{$key}" data-blur-number="4" placeholder="请输入奖励金额或订单比例" value="{$data[$key]??'0.0000'}">
</label>
</div>
</fieldset>
</div>
</div>
</div>
</div>