master
ELF 4 years ago
parent ad34536256
commit 268ea4e34d

@ -9,7 +9,7 @@
namespace Addons\SiteStat;
use Common\Controller\Addon;
use Base\Service\AdminNoticeService;
/**
* 系统环境信息插件
* @author thinkphp
@ -707,6 +707,12 @@ class SiteStatAddon extends Addon
->where('LENGTH(tab_giftbag.novice)-LENGTH(REPLACE(tab_giftbag.novice, ",", ""))+1<10')->select();
/* 2018-08-24 lwx add end */
$userAuth = session('user_auth');
$adminNoticeService = new AdminNoticeService();
$adminNoticeService->accept($userAuth['uid']);
$notices = $adminNoticeService->getAdminNotices($userAuth['uid']);
$this->assign('notices',$notices);
$this->assign('gift_list',$gift_list);
}

@ -24,6 +24,28 @@ $(document).ready(function () {
width: 60%;
padding-left: 6%;
}
.notice-btn {
display: inline-block;
/* width: 86px; */
height: 22px;
line-height: 22px;
text-align: center;
vertical-align: middle;
color: #ffffff;
border: 1px solid currentColor;
border-radius: 3px;
margin-left: 5px;
padding: 0px 5px;
background-color: #18b1ea;
cursor: pointer;
}
.notice-btn.readed-btn {
color: #ffffff;
background-color: #a5b6c8;
}
.notice-btn.delete-notice-btn {
background-color: #f56c6c;
}
</style>
<div class="zwm_xg">
@ -174,6 +196,27 @@ $(document).ready(function () {
<td colspan="2">
<div class="zw_bd" style="height:301px;overflow:hidden;overflow-y:auto;">
<table cellpadding="1" cellspacing="1" style="width:100%;">
<?php foreach($notices as $notice):?>
<tr data-id="<?=$notice['id']?>">
<td><?=$notice['title']?></td>
<td>
<?php if($notice['type'] == 'shift-player'):?>
<a target="_blank" href="{:U('Mend/recordList',array('account'=>$notice['target']))}">
<span><?=$notice['content']?></span>
</a>
<?php if($notice['status'] == 0):?>
<button class="read-btn notice-btn" type="button">标为已读</button>
<?php else:?>
<button class="readed-btn notice-btn" type="button">已读</button>
<?php endif;?>
<button class="delete-notice-btn notice-btn" type="button">删除</button>
<?php else:?>
<span><?=$notice['content']?></span>
<?php endif;?>
</td>
</tr>
<?php endforeach;?>
<volist name="fl_set" id="vo">
<tr>
@ -472,5 +515,42 @@ $(".js_indexSetup").click(function(){
content: ['{:U("Index/setup")}', 'no'], //iframe的urlno代表不显示滚动条
});
});
$('.read-btn').on({
click: function () {
var that = this
var id = $(this).parents('tr').eq(0).attr('data-id')
$.ajax({
url: '{:U("User/readAdminNotice")}',
type: 'post',
dataType: 'json',
data: {id: id},
success: function(result) {
if (result.status == 1) {
$(that).removeClass('read-btn').addClass('readed-btn').off('click')
$(that).html('已读')
}
layer.msg(result.info)
}
})
}
})
$('.delete-notice-btn').on({
click: function () {
var that = this
var id = $(this).parents('tr').eq(0).attr('data-id')
$.ajax({
url: '{:U("User/deleteAdminNotice")}',
type: 'post',
dataType: 'json',
data: {id: id},
success: function(result) {
if (result.status == 1) {
$(that).parents('tr').eq(0).remove()
}
layer.msg(result.info)
}
})
}
})
</script>
</block>

@ -12,6 +12,7 @@ namespace Admin\Controller;
use User\Api\UserApi;
use Com\Wechat;
use Com\WechatAuth;
use Base\Service\AdminNoticeService;
/**
* 后台用户控制器
@ -839,4 +840,20 @@ class UserController extends AdminController
}
return $this->ajaxReturn(array('status' => 1, 'data' => $lists));
}
public function readAdminNotice()
{
$id = I('id', 0);
$service = new AdminNoticeService();
$service->read($id);
$this->success('标记成功');
}
public function deleteAdminNotice()
{
$id = I('id', 0);
$service = new AdminNoticeService();
$service->delete($id);
$this->success('删除成功');
}
}

@ -76,7 +76,7 @@
<option value="">下拉选择</option>
<option value="-1">{:C('OFFICIEL_CHANNEL')}</option>
<volist name=":get_promote_list()" id="vo">
<option value="{$vo.id}">{$vo.account}{:get_parent_promoteto($vo['id'])}</option>
<option value="{$vo.id}">{$vo.account}</option>
</volist>
</select>
<input type="hidden" name="promote_id" value='{$data.promote_id}'/>

@ -0,0 +1,82 @@
<?php
namespace Base\Service;
use Base\Facade\Request;
class AdminNoticeService
{
public function accept($uid)
{
$notices = M('admin_notice','tab_')
->where([
'start_time' => ['elt', time()],
'end_time' => ['egt', time()],
'_string' => 'concat(",", admin_ids, ",") like "%,' . $uid . ',%"'
])
->getField('id', true);
if (empty($notices) || count($notices) == 0) {
return;
}
$readNotices = M('admin_notice_read', 'tab_')->where(['admin_id' => $uid, 'notice_id' => ['in', $notices]])->getField('notice_id', true);
$unreadNotices = $readNotices ? array_diff($notices, $readNotices) : $notices;
$records = [];
foreach ($unreadNotices as $noticeId) {
$records[] = [
'notice_id' => $noticeId,
'admin_id' => $uid,
'create_time' => time(),
'update_time' => time()
];
}
M('admin_notice_read', 'tab_')->addAll($records);
}
public function read($id)
{
M('admin_notice_read', 'tab_')->where(['id' => $id])->save(['status' => 1, 'update_time' => time()]);
}
public function delete($id)
{
M('admin_notice_read', 'tab_')->where(['id' => $id])->save(['status' => 2, 'update_time' => time()]);
}
public function getAdminNotices($uid)
{
$items = M('admin_notice_read', 'tab_')->field(['notice_id', 'status'])->where(['admin_id' => $uid, 'status' => ['in', [0, 1]]])->order('create_time desc')->select();
if (empty($items) || count($items) == 0) {
return [];
}
$ids = array_column($items, 'notice_id');
$notices = M('admin_notice','tab_')
->where([
'id' => ['in', $ids],
'start_time' => ['elt', time()],
'end_time' => ['egt', time()],
])
->select();
if ($notices) {
$notices = index_by_column('id', $notices);
}
$records = [];
foreach ($items as $item) {
$notice = $notices[$item['notice_id']] ?? null;
if (is_null($notice)) {
continue;
}
$records[] = [
'id' => $item['notice_id'],
'status' => $item['status'],
'type' => $notice['type'],
'content' => $notice['content'],
'title' => $notice['title'],
'target' => $notice['target'],
];
}
return $records;
}
}

@ -321,9 +321,8 @@ class PromoteService {
$toPromote = M('promote', 'tab_')->where(['id' => $toPromoteId])->find();
$fromPromote = M('promote', 'tab_')->where(['id' => $fromPromoteId])->find();
$toPromote = $toPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL')];
$fromPromote = $fromPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL')];
$toPromote = $toPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL'), 'company_id' => 0];
$fromPromote = $fromPromote ?? ['id' => 0, 'account' => C('OFFICIEL_CHANNEL'), 'company_id' => 0];
if ($fromPromote['id'] == 0 && count($shiftIds) == 0) {
return ['status' => false, 'msg' => '官方渠道玩家不能全部迁移'];
@ -339,14 +338,26 @@ class PromoteService {
$users = M('user', 'tab_')->field(['id', 'account', 'nickname'])->where($map)->select();
$spendMap['pay_time'] = ['egt', $orderTime];
$spendMap['is_check'] = ['in','1,2'];
$spendMap['settle_check'] = 0;
$spendMap['selle_status'] = 0;
$spendMap['pay_status'] = 1;
$payAmountRows = M('spend', 'tab_')
->field(['user_id', 'sum(pay_amount) payAmount'])
->field(['user_id', 'sum(pay_amount) pay_amount'])
->where($spendMap)
->group('user_id')
->select();
$payAmountRows = index_by_column('user_id', $payAmountRows);
$users = index_by_column('id', $users);
$notices = [];
$formConpany = M('promote_company', 'tab_')->field(['company_name', 'company_belong'])->where(['id' => $fromPromote['company_id']])->find();
$toConpany = M('promote_company', 'tab_')->field(['company_name', 'company_belong'])->where(['id' => $toPromote['company_id']])->find();
$belongs = PromoteCompanyService::$belongs;
$mends = [];
foreach ($users as $item) {
$amount = isset($payAmountRows[$item['id']]) ? round(floatval($payAmountRows[$item['id']]['pay_amount']), 2) : 0;
$mends[] = [
'user_id' => $item['id'],
'user_account' => $item['account'],
@ -358,12 +369,28 @@ class PromoteService {
'remark' => $remark == '' ? ($task['creator_type'] == 0 ? '后台补链' : '玩家迁移') : $remark,
'order_time' => $orderTime,
'create_time' => time(),
'pay_amount' => isset($payAmountRows[$item['id']]) ? intval($payAmountRows[$item['id']]['payAmount']) : 0,
'pay_amount' => $amount,
'op_id' => $creator ? $creator['id'] : 0,
'op_account' => $opAccount,
'op_type' => $task['creator_type'],
'bind_type' => 1,
];
if ($amount > 500) {
$userWord = '玩家账号' . $item['account'];
$fromWord = $fromPromote['account'] . ($formConpany ? '(' . $belongs[$formConpany['company_belong']] . '-' . $formConpany['company_name'] : '');
$toWord = $toPromote['account'] . ($toConpany ? '(' . $belongs[$toConpany['company_belong']] . '-' . $toConpany['company_name'] : '');
$content = $userWord . ', 从' . $fromWord . '换绑到' . $toWord . '换绑金额超过500达到' . $amount . '元';
$notices[] = [
'type' => 'shift-player',
'title' => '换绑额度超500',
'content' => $content,
'admin_ids' => '1',
'create_time' => time(),
'target' => $item['account'],
'start_time' => time(),
'end_time' => time() + 7*24*3600,
];
}
}
$model = new Model();
@ -375,6 +402,10 @@ class PromoteService {
return ['status' => false, 'msg' => '系统异常,添加变更记录失败'];
}
if (count($notices) > 0) {
M('admin_notice', 'tab_')->addAll($notices);
}
$updateData = [
'promote_id' => $toPromote['id'],
'promote_account' => $toPromote['account']
@ -398,15 +429,17 @@ class PromoteService {
M('user_play', 'tab_')->where($otherMap)->save($updateData);
M('user_play_info', 'tab_')->where($otherMap)->save($updateData);
$orderMap1 = $otherMap;
$orderMap1['pay_time'] = ['egt', $orderTime];
M('spend', 'tab_')->where($orderMap1)->where(['is_check' => ['in','1,2'], 'settle_check' => 0, 'selle_status' => 0])->save(array_merge($updateData, $updateMarket)); // 只改未对账的数据
M('bind_spend', 'tab_')->where($orderMap1)->save($updateData);
unset($spendMap['pay_status']);
M('spend', 'tab_')->where($spendMap)->save(array_merge($updateData, $updateMarket)); // 只改未对账的数据
$bindMap = $otherMap;
$bindMap['pay_time'] = ['egt', $orderTime];
M('bind_spend', 'tab_')->where($bindMap)->save($updateData);
$orderMap2 = $otherMap;
$orderMap2['create_time'] = ['egt', $orderTime];
M('deposit', 'tab_')->where($orderMap2)->save(array_merge($updateData, $updateMarket));
M('user_play_data_count', 'tab_')->where($orderMap2)->save(['promote_id' => $toPromote['id']]);
$orderMap = $otherMap;
$orderMap['create_time'] = ['egt', $orderTime];
M('deposit', 'tab_')->where($orderMap)->save(array_merge($updateData, $updateMarket));
M('user_play_data_count', 'tab_')->where($orderMap)->save(['promote_id' => $toPromote['id']]);
$status = M('shift_task', 'sys_')->where('id=' . $task['id'])->save(['status' => 1, 'handle_time' => time()]);
if (!$status) {

@ -2513,3 +2513,26 @@ CREATE TABLE `tab_payment_orders` (
`finished_at` datetime NOT NULL COMMENT '订单完成时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tab_admin_notice` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(20) NOT NULL COMMENT '提示类型',
`title` varchar(32) NOT NULL COMMENT '标题',
`content` varchar(255) NOT NULL COMMENT '内容',
`admin_ids` varchar(255) NOT NULL DEFAULT '' COMMENT '接收管理员ID',
`target` varchar(255) NOT NULL DEFAULT '' COMMENT '对应标识',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`start_time` int(11) NOT NULL DEFAULT '0' COMMENT '展示开始时间',
`end_time` int(11) NOT NULL DEFAULT '0' COMMENT '展示结束时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `tab_admin_notice_read` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`notice_id` int(11) NOT NULL COMMENT '通知ID',
`admin_id` int(11) NOT NULL COMMENT '管理员ID',
`create_time` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
`update_time` int(11) NOT NULL DEFAULT '0' COMMENT '更新时间',
`status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态 0 未读 1 已读',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Loading…
Cancel
Save