修改余额充值记录

This commit is contained in:
邹景立 2021-03-18 11:49:09 +08:00
parent 8057576a07
commit 9ffb226053
11 changed files with 201 additions and 67 deletions

View File

@ -3,6 +3,7 @@
namespace app\data\controller;
use app\data\service\UserAdminService;
use app\data\service\UserUpgradeService;
use think\admin\Controller;
/**
@ -30,17 +31,21 @@ class User extends Controller
{
$this->title = '普通用户管理';
$query = $this->_query($this->table);
$query->like('phone,username|nickname#username');
$query->like('phone,username|nickname#username')->equal('vip_code');
$query->order('id desc')->equal('status')->dateBetween('create_at')->page();
}
/**
* 数据列表处理
* @param array $data
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
protected function _page_filter(array &$data)
{
UserAdminService::instance()->buildByUid($data, 'pid1', 'fromer');
$this->upgrades = UserUpgradeService::instance()->levels();
UserAdminService::instance()->buildByUid($data, 'pid1', 'from');
}
/**

View File

@ -35,25 +35,34 @@ class UserBalance extends Controller
$this->title = '余额充值记录';
// 统计用户余额
$this->balance = UserBalanceService::instance()->amount(0);
// 现有余额类型
$this->names = $this->app->db->name($this->table)->group('name')->column('name');
// 创建查询对象
$query = $this->_query($this->table);
$query = $this->_query($this->table)->equal('name,vip_upgrade');
// 用户搜索查询
$db = $this->_query('DataUser')->like('phone#user_phone,nickname#user_nickname')->db();
if ($db->getOptions('where')) $query->whereRaw("uid in {$db->field('id')->buildSql()}");
// 数据查询分页
$query->where(['deleted' => 0])->like('code,name')->dateBetween('create_at')->order('id desc')->page();
$query->where(['deleted' => 0])->like('code,remark')->dateBetween('create_at')->order('id desc')->page();
}
/**
* 数据列表处理
* @param array $data
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
protected function _index_page_filter(array &$data)
{
UserAdminService::instance()->buildByUid($data);
$uids = array_unique(array_column($data, 'create_by'));
$users = $this->app->db->name('SystemUser')->whereIn('id', $uids)->column('username', 'id');
foreach ($data as &$vo) $vo['create_byname'] = $users[$vo['create_by']] ?? $vo['create_by'];
$this->upgrades = UserUpgradeService::instance()->levels();
foreach ($data as &$vo) {
$vo['vip_upgradeinfo'] = $this->upgrades[$vo['vip_upgrade']] ?? [];
$vo['create_byname'] = $users[$vo['create_by']] ?? $vo['create_by'];
}
}
/**
@ -74,6 +83,9 @@ class UserBalance extends Controller
/**
* 表单数据处理
* @param array $data
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
protected function _form_filter(array &$data)
{
@ -82,7 +94,11 @@ class UserBalance extends Controller
}
if ($this->request->isPost()) {
$data['create_by'] = AdminService::instance()->getUserId();
if (empty(floatval($data['amount']))) $this->error('充值金额不能为零');
if (empty(floatval($data['amount'])) && empty($data['vip_upgrade'])) {
$this->error('充值金额为零并没有升级行为!');
}
} else {
$this->upgrades = UserUpgradeService::instance()->levels();
}
}
@ -96,6 +112,9 @@ class UserBalance extends Controller
{
if ($state && isset($data['uid'])) {
UserBalanceService::instance()->amount($data['uid']);
if ($data['vip_upgrade'] > 0) {
UserUpgradeService::instance()->upgrade($data['uid']);
}
}
}

View File

@ -2,6 +2,7 @@
namespace app\data\controller;
use app\data\service\RebateService;
use app\data\service\UserRebateService;
use app\data\service\UserUpgradeService;
use think\admin\Controller;
@ -32,6 +33,7 @@ class UserRebate extends Controller
{
$this->title = '用户返利管理';
// 统计所有返利
$this->types = RebateService::PRIZES;
$this->rebate = UserRebateService::instance()->amount(0);
// 创建查询对象
$query = $this->_query($this->table)->equal('type')->like('name,order_no');
@ -58,6 +60,7 @@ class UserRebate extends Controller
$userItem = $this->app->db->name('DataUser')->whereIn('id', array_unique($uids))->select();
$goodsItem = $this->app->db->name('ShopOrderItem')->whereIn('order_no', array_unique(array_column($data, 'order_no')))->select();
foreach ($data as &$vo) {
$vo['type'] = RebateService::instance()->name($vo['type']);
[$vo['user'], $vo['agent'], $vo['list']] = [[], [], []];
foreach ($userItem as $user) {
if ($user['id'] === $vo['uid']) $vo['agent'] = $user;

View File

@ -15,14 +15,11 @@ class UserUpgradeService extends Service
/**
* 获取用户等级数据
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function levels(): array
{
$query = $this->app->db->name('DataUserUpgrade');
return $query->where(['status' => 1])->order('number asc')->select()->toArray();
return $query->where(['status' => 1])->order('number asc')->column('*', 'number');
}
/**
@ -62,7 +59,7 @@ class UserUpgradeService extends Service
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_upgrade');
if ($tmpNumber > $vipCode) {
@ -72,11 +69,18 @@ class UserUpgradeService extends Service
} else {
$orderNo = null;
}
// 统计订单金额
// 后台余额充值升级
$tmpNumber = $this->app->db->name('DataUserBalance')->where(['uid' => $uid, 'deleted' => 0])->max('vip_upgrade');
if ($tmpNumber > $vipCode) {
$map = ['status' => 1, 'number' => $tmpNumber];
$upgrade = $this->app->db->name('DataUserUpgrade')->where($map)->find();
if (!empty($upgrade)) [$vipName, $vipCode] = [$upgrade['name'], $upgrade['number']];
}
// 统计用户订单金额
$orderAmountTotal = $this->app->db->name('ShopOrder')->whereRaw("uid={$uid} and status>=4")->sum('amount_goods');
$teamsAmountDirect = $this->app->db->name('ShopOrder')->whereRaw("puid1={$uid} and status>=4")->sum('amount_goods');
$teamsAmountIndirect = $this->app->db->name('ShopOrder')->whereRaw("puid2={$uid} and status>=4")->sum('amount_goods');
// 更新用户数据
// 更新用户团队数据
$data = [
'vip_name' => $vipName,
'vip_code' => $vipCode,

View File

@ -24,27 +24,33 @@
<td class='list-table-check-td think-checkbox'>
<label><input class="list-check-box" value='{$vo.id}' type='checkbox'></label>
</td>
<td class="sub-span-blue nowrap">
<td class="nowrap">
<div class="headimg" data-tips-image data-lazy-src="{$vo.headimg|default='__ROOT__/static/theme/img/headimg.png'}"></div>
<div class="inline-block">
{notempty name='vo.username'}
<div>姓名:<span>{$vo.username|default='-'}</span></div>
{else}
<div>昵称:<span>{$vo.nickname|default='-'}</span></div>
{/notempty}
<div>手机:<span>{$vo.phone|default='-'}</span></div>
<div>
{notempty name='vo.username'}
姓名:<span class="color-blue">{$vo.username|default='-'}</span>
{else}
昵称:<span class="color-blue">{$vo.nickname|default='-'}</span>
{/notempty}
<span class="margin-left-5">[ <b class="color-red">VIP{$vo.vip_code}</b> ] <b class="color-red">{$vo.vip_name}</b></span>
</div>
<div>手机:<span class="color-blue">{$vo.phone|default='-'}</span></div>
</div>
</td>
<td class="sub-span-blue nowrap">
{notempty name='vo.fromer'}
<div class="headimg" data-tips-image data-lazy-src="{$vo.fromer.headimg|default='__ROOT__/static/theme/img/headimg.png'}"></div>
<td class="nowrap">
{notempty name='vo.from'}
<div class="headimg" data-tips-image data-lazy-src="{$vo.from.headimg|default='__ROOT__/static/theme/img/headimg.png'}"></div>
<div class="inline-block">
{notempty name='vo.fromer.username'}
<div>姓名:<span>{$vo.fromer.username|default='-'}</span></div>
{else}
<div>昵称:<span>{$vo.fromer.nickname|default='-'}</span></div>
{/notempty}
<div>手机:<span>{$vo.fromer.phone|default='-'}</span></div>
<div>
{notempty name='vo.from.username'}
姓名:<span class="color-blue">{$vo.from.username|default='-'}</span>
{else}
昵称:<span class="color-blue">{$vo.from.nickname|default='-'}</span>
{/notempty}
<span class="margin-left-5">[ <b class="color-red">VIP{$vo.from.vip_code}</b> ] <b class="color-red">{$vo.from.vip_name}</b></span>
</div>
<div>手机:<span>{$vo.from.phone|default='-'}</span></div>
</div>
{else}
<div class="color-desc">没有推荐人</div>

View File

@ -9,18 +9,34 @@
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">昵称姓名</label>
<label class="layui-form-label">用户昵称</label>
<label class="layui-input-inline">
<input name="username" value="{:input('username')}" placeholder="请输入昵称姓名" class="layui-input">
<input name="username" value="{:input('username')}" placeholder="请输入用户昵称" class="layui-input">
</label>
</div>
<!--{notempty name='upgrades'}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">用户等级</label>
<div class="layui-input-inline">
<select name="vip_code" class="layui-select">
<option value="">-- 全部 --</option>
{foreach $upgrades as $upgrade}{if input('vip_code') eq $upgrade.number}
<option selected value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{else}
<option value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{/if}{/foreach}
</select>
</div>
</div>
<!--{/notempty}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">使用状态</label>
<div class="layui-input-inline">
<select class="layui-select" name="status">
<option value="">-- 全部 --</option>
{foreach ['已冻结的用户','已激活的用户'] as $k=>$v}
{foreach ['已冻结的用户', '已激活的用户'] as $k=>$v}
{if $k.'' eq input('status')}
<option selected value="{$k}">{$v}</option>
{else}

View File

@ -24,24 +24,37 @@
</div>
</fieldset>
<label class="layui-form-item relative block">
<label class="layui-form-item layui-hide">
<span class="color-green font-w7">充值单号</span>
<span class="color-desc margin-left-5">Code</span>
<input class="layui-input layui-bg-gray" readonly required placeholder="请输入充值单号" name="name" value="{$vo.code|default=''}"/>
</label>
<label class="layui-form-item relative block">
<span class="color-green font-w7">充值名称</span>
<label class="layui-form-item layui-hide">
<span class="color-green font-w7">余额充值名称</span>
<span class="color-desc margin-left-5">Name</span>
<input class="layui-input" maxlength="100" required placeholder="请输入充值名称" name="name" value="{$vo.name|default='后台充值'}"/>
<input class="layui-input" maxlength="100" required placeholder="请输入余额充值名称" name="name" value="{$vo.name|default='后台余额充值'}"/>
</label>
<label class="layui-form-item relative block">
<span class="color-green font-w7">充值</span>
<span class="color-green font-w7">充值账户余</span>
<span class="color-desc margin-left-5">Amount</span>
<input class="layui-input" maxlength="10" data-blur-number="2" required placeholder="请输入充值" name="amount" value="{$vo.amount|default='0.00'}"/>
<input class="layui-input" maxlength="10" data-blur-number="2" required placeholder="请输入充值账户余" name="amount" value="{$vo.amount|default='0.00'}"/>
</label>
<div class="layui-form-item">
<span class="color-green font-w7">升级用户等级</span>
<span class="color-desc margin-left-5">Upgrade</span>
<select name="vip_upgrade" class="layui-select" lay-filter="vip_upgrade">
<option value="0">-- 不升级 --</option>
{foreach $upgrades as $upgrade}{if isset($vo.vip_upgrade) and $vo.vip_upgrade eq $upgrade.number}
<option selected value="{$upgrade.number|default=0}">升级到 [ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{else}
<option value="{$upgrade.number|default=0}">升级到 [ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{/if}{/foreach}
</select>
</div>
<div class="layui-form-item relative block">
<span class="color-green font-w7">充值备注</span>
<span class="color-desc margin-left-5">Remark</span>
@ -62,6 +75,8 @@
</div>
</form>
<script>form.render()</script>
<style>
.WechatUserHead {
width: 138px !important;

View File

@ -8,7 +8,7 @@
{block name="content"}
<div class="layui-badge layui-bg-cyan text-left notselect block shadow margin-0 padding-10 padding-left-20 border-radius-5 font-s15">
余额统计:已产生返利累计 {$balance.0|default=0.00} 元,累计已使用 {$balance.1|default=0.00} 元,剩余可使用 {$balance.0-$balance.1} 元。
余额统计:累计已充值余额 {$balance.0|default=0.00} 元,已使用 {$balance.1|default=0.00} 元,剩余可使用 {$balance.0-$balance.1} 元。
</div>
<div class="think-box-shadow margin-top-10">
{include file='user_balance/index_search'}
@ -35,22 +35,34 @@
</td>
<td class="nowrap">
<div class="headimg" data-tips-image data-lazy-src="{$vo.user.headimg|default='__ROOT__/static/theme/img/headimg.png'}"></div>
<div class="inline-block sub-span-blue">
<div>昵称:<span>{$vo.user.nickname|default='--'}</span></div>
<div>手机:<span>{$vo.user.phone|default='--'}</span></div>
<div class="inline-block">
<div>用户昵称:<span class="color-blue">{$vo.user.nickname|default='--'}</span></div>
<div>用户手机:<span class="color-blue">{$vo.user.phone|default='--'}</span></div>
<div>用户等级:<span>[ <b class="color-red">VIP{$vo.user.vip_code}</b> ] <b class="color-red">{$vo.user.vip_name}</b></span></div>
</div>
</td>
<td class="nowrap sub-span-blue">
<div>充值金额:<span>{$vo.amount+0}</span> </div>
<td class="nowrap sub-strong-red">
<div>充值金额:<b>{$vo.amount+0}</b> </div>
<div>升级等级:{if $vo.vip_upgrade > 0}
<span class="color-blue">升级到 [ <b>VIP{$vo.vip_upgrade}</b> ] <b>{$vo.vip_upgradeinfo.name|default=''}</b></span>
{else}
<span class="color-desc">不升级</span>
{/if}
</div>
<div>充值单号:{$vo.code|default='-'}</div>
</td>
<td class="nowrap">
<td class="nowrap sub-strong-blue">
<div>充值名称:{$vo.name|default='-'}</div>
<div>充值备注:{$vo.remark|default='-'}</div>
<div>充值单号:<b>{$vo.code|default='-'}</b></div>
<!--{notempty name='vo.remark'}-->
<div>充值备注:{$vo.remark}</div>
<!--{else}-->
<div>充值备注:<span class="color-desc">未填写充值充值备注</span></div>
<!--{/notempty}-->
</td>
<td class="nowrap">
<div>操作账号:{$vo.create_byname|default=''}</div>
<div>操作时间:{$vo.create_at|default=''}</div>
<div>操作时间:{$vo.create_at|format_datetime}</div>
</td>
<td class="nowrap">
<!--{if auth("remove")}-->

View File

@ -15,10 +15,49 @@
</label>
</div>
<!--{notempty name='upgrades'}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">充值时间</label>
<label class="layui-form-label">升级等级</label>
<div class="layui-input-inline">
<select name="vip_upgrade" class="layui-select">
<option value="">-- 全部 --</option>
{foreach $upgrades as $upgrade}{if input('vip_upgrade') eq $upgrade.number}
<option selected value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{else}
<option value="{$upgrade.number|default=0}">[ {$upgrade.number|default='0'} ] {$upgrade.name|default=''}</option>
{/if}{/foreach}
</select>
</div>
</div>
<!--{/notempty}-->
<!--{notempty name='names'}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">充值名称</label>
<div class="layui-input-inline">
<select name="name" class="layui-select">
<option value="">-- 全部 --</option>
{foreach $names as $name}{if input('name') eq $name}
<option selected value="{$name}">{$name}</option>
{else}
<option value="{$name}">{$name}</option>
{/if}{/foreach}
</select>
</div>
</div>
<!--{/notempty}-->
<div class="layui-form-item layui-inline">
<label class="layui-form-label">充值备注</label>
<label class="layui-input-inline">
<input data-date-range name="create_at" value="{:input('create_at','')}" placeholder="请选择充值时间" class="layui-input">
<input name="remark" value="{:input('remark')}" placeholder="请输入充值备注" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">操作时间</label>
<label class="layui-input-inline">
<input data-date-range name="create_at" value="{:input('create_at','')}" placeholder="请选择操作时间" class="layui-input">
</label>
</div>

View File

@ -8,7 +8,7 @@
{block name="content"}
<div class="layui-badge layui-bg-cyan text-left notselect block shadow margin-0 padding-10 padding-left-20 border-radius-5 font-s15">
返利统计:累计已产生返利 {$rebate.0|default=0.00} 元( 不含锁定 {$rebate.2|default='0.00'} ),累计已提现 {$total.1|default=0.00} 元。
返利统计:累计已产生返利 <b>{$rebate.0|default=0.00}</b> 元( 不含锁定 <b>{$rebate.2|default='0.00'}</b> ),累计已提现 <b>{$total.1|default=0.00}</b> 元。
</div>
<div class="think-box-shadow margin-top-10">
{include file='user_rebate/index_search'}
@ -19,8 +19,8 @@
<th class='list-table-check-td think-checkbox'>
<label><input data-auto-none data-check-target='.list-check-box' type='checkbox'></label>
</th>
<th class="text-left nowrap" style="width:300px">代理会员</th>
<th class="text-left nowrap" style="width:300px">交易会员</th>
<th class="text-left nowrap" style="width:300px">代理用户</th>
<th class="text-left nowrap" style="width:300px">交易用户</th>
<th class='text-left nowrap'>订单信息</th>
<th class='text-left nowrap'>商品信息</th>
</tr>
@ -34,7 +34,7 @@
</td>
<td class="text-left nowrap relative">
{notempty name='vo.agent.headimg'}
<img data-tips-image style="width:auto;height:60px" src="{$vo.agent.headimg|default=''}" class="margin-right-5" alt="img">
<div class="headimg" data-tips-image data-lazy-src="{$vo.agent.headimg|default='__ROOT__/static/theme/img/headimg.png'}"></div>
{/notempty}
<div class="inline-block text-middle">
代理昵称:{$vo.agent.nickname|default='--'}<br>
@ -44,19 +44,21 @@
</td>
<td class="text-left nowrap relative">
{notempty name='vo.user.headimg'}
<img data-tips-image style="width:auto;height:60px" src="{$vo.user.headimg|default=''}" class="margin-right-5" alt="img">
<div class="headimg" data-tips-image data-lazy-src="{$vo.user.headimg|default='__ROOT__/static/theme/img/headimg.png'}"></div>
{/notempty}
<div class="inline-block text-middle">
会员昵称:{$vo.user.nickname|default='--'}<br>
会员手机:{$vo.user.phone|default='--'}<br>
会员级别:{notempty name='vo.user.vip_code'}[ <b class="color-red">VIP{$vo.user.vip_code}</b> ] <b class="color-red">{$vo.user.vip_name}</b>{else}--{/notempty}
用户昵称:{$vo.user.nickname|default='--'}<br>
用户手机:{$vo.user.phone|default='--'}<br>
用户级别:{notempty name='vo.user.vip_code'}[ <b class="color-red">VIP{$vo.user.vip_code}</b> ] <b class="color-red">{$vo.user.vip_name}</b>{else}--{/notempty}
</div>
</td>
<td class='text-left nowrap'>
订单单号:<span class="color-blue">{$vo.order_no|default='--'}</span><br>
订单交易 <span class="color-blue">{$vo.order_amount+0}</span> 元获得收益 <span class="color-blue">{$vo.amount+0}</span>
{notempty name='vo.description'}<span class="layui-badge layui-bg-blue margin-left-5">{$vo.description|default=''}</span>{/notempty}<br>
返拥时间:<span class="color-blue">{$vo.create_at|format_datetime}</span><br>
<div class="layui-badge layui-badge-middle layui-bg-black" style="line-height:14px">{$vo.type|default=''}</div>
<div class="inline-block text-middle">
<div>返利时间:<span class="color-blue">{$vo.create_at|format_datetime}</span></div>
<div>返利描述:{$vo.name|default=''} {if $vo.status}<span class="layui-badge layui-bg-black margin-left-5">未到账</span>{else}<span class="layui-badge layui-bg-green margin-left-5">已到账</span>{/if}</div>
<div class="sub-strong-blue">订单 <b>{$vo.order_no|default='--'}</b> 交易 <b>{$vo.order_amount+0}</b> 元返利 <b>{$vo.amount+0}</b> </div>
</div>
</td>
<td class="text-left nowrap">
{foreach $vo.list as $g}

View File

@ -14,15 +14,15 @@
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">会员昵称</label>
<label class="layui-form-label">用户昵称</label>
<label class="layui-input-inline">
<input name="order_nickname" value="{:input('order_nickname','')}" placeholder="请输入会员昵称" class="layui-input">
<input name="order_nickname" value="{:input('order_nickname','')}" placeholder="请输入用户昵称" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">会员手机</label>
<label class="layui-form-label">用户手机</label>
<label class="layui-input-inline">
<input name="order_phone" value="{:input('order_phone','')}" placeholder="请输入会员手机" class="layui-input">
<input name="order_phone" value="{:input('order_phone','')}" placeholder="请输入用户手机" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">
@ -32,9 +32,22 @@
</label>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">返佣描述</label>
<label class="layui-form-label">返利类型</label>
<div class="layui-input-inline">
<select name="type">
<option value="">-- 全部 --</option>
{foreach $types as $v}{if input('type') eq $v.code}
<option selected value="{$v.code}">{$v.name}</option>
{else}
<option value="{$v.code}">{$v.name}</option>
{/if}{/foreach}
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label">返利描述</label>
<label class="layui-input-inline">
<input name="name" value="{:input('name','')}" placeholder="请输入返佣描述" class="layui-input">
<input name="name" value="{:input('name','')}" placeholder="请输入返描述" class="layui-input">
</label>
</div>
<div class="layui-form-item layui-inline">