第二阶段完善代理商激活码

This commit is contained in:
huangzhenpc
2025-02-12 10:45:49 +08:00
parent 46b14149c9
commit abfa783907
23 changed files with 2541 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
<?php
namespace app\agent\controller;
use think\admin\Controller;
use think\facade\Db;
/**
* 代理商后台
*/
class Index extends Controller
{
/**
* 生成激活码
*/
public function generate()
{
if ($this->request->isPost()) {
$count = intval(input('count', 1));
$count = max(1, min($count, 100)); // 限制一次最多生成100个
// 获取当前代理商信息
$agentId = session('agent.id');
$agent = Db::name('cursor_agents')->where('id', $agentId)->find();
if (empty($agent)) {
$this->error('代理商信息不存在!');
}
// 开启事务
Db::startTrans();
try {
$codes = [];
$agentCodes = [];
$now = date('Y-m-d H:i:s');
for ($i = 0; $i < $count; $i++) {
// 生成激活码
$codes[] = [
'code' => strtoupper(substr(md5(uniqid() . mt_rand()), 0, 16)),
'days' => 30, // 固定30天
'created_at' => $now,
'is_used' => 0
];
}
// 批量插入激活码
$codeIds = Db::name('cursor_activation_codes')->insertAll($codes);
// 计算佣金
$price = 100; // 固定价格100元
$commission = $price * ($agent['commission_rate'] / 100);
// 如果是二级代理,计算上级佣金
$parentCommission = 0;
if ($agent['level'] == 2 && $agent['parent_id'] > 0) {
$parent = Db::name('cursor_agents')->where('id', $agent['parent_id'])->find();
if ($parent) {
$parentCommission = $price * ($parent['commission_rate'] / 100);
}
}
// 准备代理商激活码数据
foreach ($codes as $index => $code) {
$agentCodes[] = [
'agent_id' => $agentId,
'code_id' => $codeIds[$index],
'price' => $price,
'commission' => $commission,
'parent_commission' => $parentCommission,
'status' => 0,
'created_at' => $now,
'updated_at' => $now
];
}
// 批量插入代理商激活码关联
Db::name('cursor_agent_codes')->insertAll($agentCodes);
Db::commit();
$this->success('生成成功!');
} catch (\Exception $e) {
Db::rollback();
$this->error('生成失败:' . $e->getMessage());
}
} else {
$this->fetch();
}
}
/**
* 我的激活码列表
*/
public function codes()
{
$this->title = '我的激活码';
$agentId = session('agent.id');
$query = $this->_query('cursor_agent_codes')->alias('ac')
->join('cursor_activation_codes c', 'c.id = ac.code_id')
->where('ac.agent_id', $agentId)
->field('ac.*, c.code, c.days, c.is_used, c.used_at, c.used_by');
// 数据列表处理
$query->equal('c.is_used')->equal('ac.status');
// 列表排序并显示
$query->order('ac.id desc')->page();
}
}

View File

@@ -0,0 +1,83 @@
{extend name="../../admin/view/main"}
{block name="button"}
<button class='layui-btn layui-btn-sm layui-btn-primary' data-modal='{:url("generate")}'>生成激活码</button>
{/block}
{block name="content"}
<div class="think-box-shadow">
<form class="layui-form layui-form-pane form-search" action="{:sysuri()}" onsubmit="return false" method="get" autocomplete="off">
<div class="layui-form-item layui-inline">
<label class="layui-form-label">使用状态</label>
<div class="layui-input-inline">
<select name='is_used' lay-search class='layui-select'>
<option value=''>-- 全部 --</option>
<option value='0' {if isset($get.is_used) and $get.is_used=='0'}selected{/if}>未使用</option>
<option value='1' {if isset($get.is_used) and $get.is_used=='1'}selected{/if}>已使用</option>
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">结算状态</label>
<div class="layui-input-inline">
<select name='status' lay-search class='layui-select'>
<option value=''>-- 全部 --</option>
<option value='0' {if isset($get.status) and $get.status=='0'}selected{/if}>未结算</option>
<option value='1' {if isset($get.status) and $get.status=='1'}selected{/if}>已结算</option>
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<button class="layui-btn layui-btn-primary"><i class="layui-icon">&#xe615;</i> 搜 索</button>
</div>
</form>
<table class="layui-table margin-top-10" lay-skin="line">
{notempty name='list'}
<thead>
<tr>
<th class='text-left'>激活码</th>
<th class='text-left'>有效天数</th>
<th class='text-left'>销售价格</th>
<th class='text-left'>佣金</th>
<th class='text-left'>使用状态</th>
<th class='text-left'>使用时间</th>
<th class='text-left'>使用者</th>
<th class='text-left'>结算状态</th>
<th class='text-left'>生成时间</th>
</tr>
</thead>
{/notempty}
<tbody>
{foreach $list as $key=>$vo}
<tr>
<td class='text-left'>{$vo.code}</td>
<td class='text-left'>{$vo.days} </td>
<td class='text-left'>{$vo.price}</td>
<td class='text-left'>{$vo.commission}</td>
<td class='text-left'>
{if $vo.is_used eq 1}
<span class="color-red">已使用</span>
{else}
<span class="color-green">未使用</span>
{/if}
</td>
<td class='text-left'>{$vo.used_at|format_datetime|default='--'}</td>
<td class='text-left'>{$vo.used_by|default='--'}</td>
<td class='text-left'>
{if $vo.status eq 1}
<span class="color-blue">已结算</span>
{else}
<span class="color-red">未结算</span>
{/if}
</td>
<td class='text-left'>{$vo.created_at|format_datetime}</td>
</tr>
{/foreach}
</tbody>
</table>
{empty name='list'}<span class="notdata">没有记录哦</span>{else}{$pagehtml|raw|default=''}{/empty}
</div>
{/block}

View File

@@ -0,0 +1,20 @@
{extend name="../../admin/view/main"}
{block name="content"}
<form class="layui-form layui-card" action="{:request()->url()}" data-auto="true" method="post">
<div class="layui-card-body">
<div class="layui-form-item">
<label class="layui-form-label">生成数量</label>
<div class="layui-input-block">
<input name="count" value="1" required placeholder="请输入要生成的激活码数量" class="layui-input">
<tip class="help-block">一次最多可生成100个激活码每个激活码售价100元</tip>
</div>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="layui-form-item text-center">
<button class="layui-btn" type="submit">确定生成</button>
<button class="layui-btn layui-btn-danger" type="button" data-close>取消</button>
</div>
</form>
{/block}