初始化提交

This commit is contained in:
maticarmy
2025-02-10 10:39:00 +08:00
commit 59cd2c19d1
491 changed files with 54545 additions and 0 deletions

View File

@@ -0,0 +1,495 @@
<?php
declare(strict_types=1);
namespace app\manager\controller;
use think\admin\Controller;
use think\admin\service\AdminService;
/**
* 包名回传配置管理
* @auth true
* @menu true
*/
class PackageCallback extends Controller
{
/**
* 绑定数据表
* @var string
*/
protected $table = 'offer_package_callback';
/**
* 回传配置列表
* @auth true
* @menu true
*/
public function index()
{
// 设置页面标题
$this->title = '回传配置管理';
$this->fetch();
}
/**
* 获取回传配置列表数据
* @auth true
*/
public function get_list()
{
try {
// 获取请求参数
$page = input('page/d', 1);
$limit = input('limit/d', 15);
$where = [];
// 包名搜索
if ($package_name = input('package_name/s', '')) {
$where[] = ['package_name', 'like', "%{$package_name}%"];
}
// 事件名称搜索
if ($event_name = input('event_name/s', '')) {
$where[] = ['event_name', 'like', "%{$event_name}%"];
}
// 状态筛选
if ($status = input('status/s', '')) {
$where[] = ['status', '=', $status];
}
// 非超级管理员需要进行权限过滤
if (!AdminService::instance()->isSuper()) {
// 检查包名管理模块权限
if (!AdminService::instance()->check('package/index')) {
return json([
'code' => 0,
'msg' => '',
'count' => 0,
'data' => []
]);
}
$userId = AdminService::instance()->getUserId();
// 获取有权限的包名ID列表
$packageIds = $this->app->db->name('offer_package_auth')
->where('user_id', $userId)
->column('package_id');
if (empty($packageIds)) {
return json([
'code' => 0,
'msg' => '',
'count' => 0,
'data' => []
]);
}
$where[] = ['package_id', 'in', $packageIds];
}
// 查询数据
$query = $this->app->db->name($this->table);
// 先获取总数
$total = $query->where($where)->count();
// 分页查询数据
$list = $query->where($where)
->field('*')
->order('id desc')
->limit(($page - 1) * $limit, $limit)
->select()
->toArray();
return json([
'code' => 0,
'msg' => '',
'count' => $total,
'data' => $list
]);
} catch (\Exception $e) {
trace("获取回传配置列表异常:" . $e->getMessage());
return json([
'code' => 1,
'msg' => '获取数据失败,请稍后重试',
'count' => 0,
'data' => []
]);
}
}
/**
* 添加回传配置
* @auth true
*/
public function add()
{
if ($this->request->isGet()) {
// 设置页面标题
$this->title = '添加回传配置';
$this->fetch('add'); // 明确指定渲染 add.html
}
if ($this->request->isPost()) {
try {
$data = $this->_vali([
'package_id.require' => '包名ID不能为空',
'package_name.require' => '包名不能为空!',
'event_name.require' => '事件名称不能为空!',
'callback_url.require' => '回传地址不能为空!',
'status.in:0,1' => '状态值不正确!'
]);
// 检查权限
if (!$this->checkPackageAuth($data['package_id'])) {
return json(['code' => 0, 'info' => '您没有操作此包名的权限!']);
}
// 检查是否已存在相同配置
$exists = $this->app->db->name($this->table)
->where([
'package_id' => $data['package_id'],
'event_name' => $data['event_name']
])
->find();
if ($exists) {
return json(['code' => 0, 'info' => '该包名下已存在相同事件名称的配置!']);
}
// 添加创建信息
$data['create_by'] = AdminService::instance()->getUserId();
$data['create_at'] = date('Y-m-d H:i:s');
$data['update_at'] = date('Y-m-d H:i:s');
$result = $this->app->db->name($this->table)->insert($data);
if ($result === false) {
return json(['code' => 0, 'info' => '添加失败,请重试!']);
}
sysoplog('积分墙包名回传', '添加成功!');
return json(['code' => 1, 'info' => '添加成功!']);
} catch (\Exception $e) {
trace("添加回传配置异常:" . $e->getMessage());
return json(['code' => 0, 'info' => '系统异常,请稍后重试!']);
}
}
}
/**
* 编辑回传配置
* @auth true
*/
public function edit()
{
if ($this->request->isGet()) {
$id = $this->request->get('id/d', 0);
if (empty($id)) {
$this->error('参数错误');
}
// 获取配置信息
$vo = $this->app->db->name($this->table)->where('id', $id)->find();
if (empty($vo)) {
$this->error('配置不存在');
}
// 检查权限
if (!$this->checkPackageAuth($vo['package_id'])) {
$this->error('您没有操作此包名的权限!');
}
$this->assign('vo', $vo);
$this->fetch(); // 直接渲染 edit.html
}
if ($this->request->isPost()) {
try {
$data = $this->_vali([
'id.require' => '配置ID不能为空',
'package_id.require' => '包名ID不能为空',
'package_name.require' => '包名不能为空!',
'event_name.require' => '事件名称不能为空!',
'callback_url.require' => '回传地址不能为空!',
'status.in:0,1' => '状态值不正确!'
]);
// 检查权限
if (!$this->checkPackageAuth($data['package_id'])) {
return json(['code' => 0, 'info' => '您没有操作此包名的权限!']);
}
// 检查是否已存在相同配置(排除自身)
$exists = $this->app->db->name($this->table)
->where([
['package_id', '=', $data['package_id']],
['event_name', '=', $data['event_name']],
['id', '<>', $data['id']]
])
->find();
if ($exists) {
return json(['code' => 0, 'info' => '该包名下已存在相同事件名称的配置!']);
}
// 更新时间
$data['update_at'] = date('Y-m-d H:i:s');
$result = $this->app->db->name($this->table)
->where(['id' => $data['id']])
->update($data);
if ($result === false) {
return json(['code' => 0, 'info' => '更新失败,请重试!']);
}
sysoplog('积分墙包名回传', '更新成功!');
return json(['code' => 1, 'info' => '更新成功!']);
} catch (\Exception $e) {
trace("编辑回传配置异常:" . $e->getMessage());
return json(['code' => 0, 'info' => '系统异常,请稍后重试!']);
}
}
}
/**
* 删除回传配置
* @auth true
*/
public function remove()
{
if ($this->request->isPost()) {
try {
$id = $this->request->param('id/d');
if (empty($id)) {
return json(['code' => 0, 'info' => '参数错误!']);
}
// 获取配置信息
$config = $this->app->db->name($this->table)->where('id', $id)->find();
if (empty($config)) {
return json(['code' => 0, 'info' => '配置不存在!']);
}
// 检查权限
if (!$this->checkPackageAuth($config['package_id'])) {
return json(['code' => 0, 'info' => '您没有操作此包名的权限!']);
}
$result = $this->app->db->name($this->table)->where('id', $id)->delete();
if ($result === false) {
return json(['code' => 0, 'info' => '删除失败,请重试!']);
}
sysoplog('积分墙包名回传', '删除成功!');
return json(['code' => 1, 'info' => '删除成功!']);
} catch (\Exception $e) {
trace("删除回传配置异常:" . $e->getMessage());
return json(['code' => 0, 'info' => '系统异常,请稍后重试!']);
}
}
}
/**
* 检查包名权限
* @param int $packageId 包名ID
* @return bool
*/
protected function checkPackageAuth($packageId)
{
// 超级管理员直接放行
if (AdminService::instance()->isSuper()) {
return true;
}
// 检查用户是否有包名管理模块的权限
if (!AdminService::instance()->check('package/index')) {
return false;
}
// 检查具体包名权限
$userId = AdminService::instance()->getUserId();
$exists = $this->app->db->name('offer_package_auth')
->where(['package_id' => $packageId, 'user_id' => $userId])
->find();
return !empty($exists);
}
/**
* 修改状态
* @auth true
*/
public function state()
{
if ($this->request->isPost()) {
try {
$data = $this->_vali([
'id.require' => '配置ID不能为空',
'status.in:0,1' => '状态值不正确!'
]);
// 获取配置信息
$config = $this->app->db->name($this->table)->where('id', $data['id'])->find();
if (empty($config)) {
return json(['code' => 0, 'info' => '配置不存在!']);
}
// 检查权限
if (!$this->checkPackageAuth($config['package_id'])) {
return json(['code' => 0, 'info' => '您没有操作此包名的权限!']);
}
// 更新状态
$result = $this->app->db->name($this->table)
->where(['id' => $data['id']])
->update([
'status' => $data['status'],
'update_at' => date('Y-m-d H:i:s')
]);
if ($result === false) {
return json(['code' => 0, 'info' => '状态更新失败!']);
}
sysoplog('积分墙包名回传', '状态更新成功!');
return json(['code' => 1, 'info' => '状态更新成功!']);
} catch (\Exception $e) {
trace("修改状态异常:" . $e->getMessage());
return json(['code' => 0, 'info' => '系统异常,请稍后重试!']);
}
}
}
/**
* 搜索包名
* @auth true
*/
public function searchPackages()
{
try {
$keyword = input('keyword/s', '');
$init = input('init/d', 0); // 是否是初始化加载
$event_name = input('event_name/s', ''); // 事件名称,用于排除已配置的包名
$edit_id = input('edit_id/d', 0); // 编辑时的ID用于排除自身
// 构建查询
$query = $this->app->db->name('offer_package')
->alias('p')
->where('p.status', 1);
// 非超级管理员需要进行权限过滤
if (!AdminService::instance()->isSuper()) {
$userId = AdminService::instance()->getUserId();
$query->join('offer_package_auth a', 'p.id = a.package_id')
->where('a.user_id', $userId);
}
// 排除已经配置过此事件的包名
if (!empty($event_name)) {
$existsQuery = $this->app->db->name($this->table)
->where('event_name', $event_name);
// 编辑时排除自身
if ($edit_id > 0) {
$existsQuery->where('id', '<>', $edit_id);
}
$existsPackageIds = $existsQuery->column('package_id');
if (!empty($existsPackageIds)) {
$query->whereNotIn('p.id', $existsPackageIds);
}
}
// 如果是搜索则添加搜索条件
if (!$init && !empty($keyword)) {
$query->where(function($query) use ($keyword) {
$query->whereOr([
['p.package_name', 'like', "%{$keyword}%"],
['p.name', 'like', "%{$keyword}%"]
]);
});
}
// 限制返回数量
$list = $query->field(['p.id', 'p.package_name', 'p.name']) // 明确指定字段
->group('p.id') // 防止重复
->order('p.id desc') // 按ID倒序
->limit(20)
->select()
->toArray();
return json(['code' => 1, 'msg' => '获取成功', 'data' => $list]);
} catch (\Exception $e) {
trace("搜索包名异常:" . $e->getMessage() . "\n" . $e->getTraceAsString());
return json(['code' => 0, 'msg' => '系统异常,请稍后重试']);
}
}
/**
* 检查配置是否存在
* @auth true
*/
public function checkExists()
{
if ($this->request->isPost()) {
try {
$data = $this->_vali([
'package_id.require' => '包名ID不能为空',
'event_name.require' => '事件名称不能为空!'
]);
// 检查是否已存在相同配置
$exists = $this->app->db->name($this->table)
->where([
'package_id' => $data['package_id'],
'event_name' => $data['event_name']
])
->find();
return json([
'code' => 1,
'msg' => '检查成功',
'data' => !empty($exists)
]);
} catch (\Exception $e) {
return json(['code' => 0, 'msg' => '检查失败']);
}
}
}
/**
* 获取已存在的配置详情
* @auth true
*/
public function getExistingConfig()
{
if ($this->request->isPost()) {
try {
$data = $this->_vali([
'package_id.require' => '包名ID不能为空',
'event_name.require' => '事件名称不能为空!'
]);
// 获取已存在的配置
$config = $this->app->db->name($this->table)
->where([
'package_id' => $data['package_id'],
'event_name' => $data['event_name']
])
->find();
return json([
'code' => 1,
'msg' => '获取成功',
'data' => $config
]);
} catch (\Exception $e) {
return json(['code' => 0, 'msg' => '获取失败']);
}
}
}
}