feat(zy): 添加俱乐部功能和用户消息功能
- 新增俱乐部相关接口和功能,包括创建俱乐部、申请加入俱乐部、邀请加入俱乐部等 - 添加用户消息功能,包括发送消息、查看消息等 - 优化了部分代码结构,提高了可维护性 - 更新了文档,添加了新的接口说明
This commit is contained in:
94
README.md
94
README.md
@@ -1,93 +1,5 @@
|
|||||||
FastAdmin是一款基于ThinkPHP+Bootstrap的极速后台开发框架。
|
FastAdmin是一款基于ThinkPHP+Bootstrap的极速后台开发框架。
|
||||||
|
|
||||||
|
### 队列启动命令
|
||||||
## 主要特性
|
- php think queue:work --daemon --queue shopro
|
||||||
|
- php think queue:work --daemon --queue shopro-high
|
||||||
* 基于`Auth`验证的权限管理系统
|
|
||||||
* 支持无限级父子级权限继承,父级的管理员可任意增删改子级管理员及权限设置
|
|
||||||
* 支持单管理员多角色
|
|
||||||
* 支持管理子级数据或个人数据
|
|
||||||
* 强大的一键生成功能
|
|
||||||
* 一键生成CRUD,包括控制器、模型、视图、JS、语言包、菜单、回收站等
|
|
||||||
* 一键压缩打包JS和CSS文件,一键CDN静态资源部署
|
|
||||||
* 一键生成控制器菜单和规则
|
|
||||||
* 一键生成API接口文档
|
|
||||||
* 完善的前端功能组件开发
|
|
||||||
* 基于`AdminLTE`二次开发
|
|
||||||
* 基于`Bootstrap`开发,自适应手机、平板、PC
|
|
||||||
* 基于`RequireJS`进行JS模块管理,按需加载
|
|
||||||
* 基于`Less`进行样式开发
|
|
||||||
* 强大的插件扩展功能,在线安装卸载升级插件
|
|
||||||
* 通用的会员模块和API模块
|
|
||||||
* 共用同一账号体系的Web端会员中心权限验证和API接口会员权限验证
|
|
||||||
* 二级域名部署支持,同时域名支持绑定到应用插件
|
|
||||||
* 多语言支持,服务端及客户端支持
|
|
||||||
* 支持大文件分片上传、剪切板粘贴上传、拖拽上传,进度条显示,图片上传前压缩
|
|
||||||
* 支持表格固定列、固定表头、跨页选择、Excel导出、模板渲染等功能
|
|
||||||
* 强大的第三方应用模块支持([CMS](https://www.fastadmin.net/store/cms.html)、[CRM](https://www.fastadmin.net/store/facrm.html)、[企业网站管理系统](https://www.fastadmin.net/store/ldcms.html)、[知识库文档系统](https://www.fastadmin.net/store/knowbase.html)、[在线投票系统](https://www.fastadmin.net/store/vote.html)、[B2C商城](https://www.fastadmin.net/store/shopro.html)、[B2B2C商城](https://www.fastadmin.net/store/wanlshop.html))
|
|
||||||
* 整合第三方短信接口(阿里云、腾讯云短信)
|
|
||||||
* 无缝整合第三方云存储(七牛云、阿里云OSS、腾讯云存储、又拍云)功能,支持云储存分片上传
|
|
||||||
* 第三方富文本编辑器支持(Summernote、百度编辑器)
|
|
||||||
* 第三方登录(QQ、微信、微博)整合
|
|
||||||
* 第三方支付(微信、支付宝)无缝整合,微信支持PC端扫码支付
|
|
||||||
* 丰富的插件应用市场
|
|
||||||
|
|
||||||
## 安装使用
|
|
||||||
|
|
||||||
https://doc.fastadmin.net
|
|
||||||
|
|
||||||
## 在线演示
|
|
||||||
|
|
||||||
https://demo.fastadmin.net
|
|
||||||
|
|
||||||
用户名:admin
|
|
||||||
|
|
||||||
密 码:123456
|
|
||||||
|
|
||||||
提 示:演示站数据无法进行修改,请下载源码安装体验全部功能
|
|
||||||
|
|
||||||
## 界面截图
|
|
||||||

|
|
||||||
|
|
||||||
## 问题反馈
|
|
||||||
|
|
||||||
在使用中有任何问题,请使用以下联系方式联系我们
|
|
||||||
|
|
||||||
问答社区: https://ask.fastadmin.net
|
|
||||||
|
|
||||||
Github: https://github.com/fastadminnet/fastadmin
|
|
||||||
|
|
||||||
Gitee: https://gitee.com/fastadminnet/fastadmin
|
|
||||||
|
|
||||||
## 特别鸣谢
|
|
||||||
|
|
||||||
感谢以下的项目,排名不分先后
|
|
||||||
|
|
||||||
ThinkPHP:http://www.thinkphp.cn
|
|
||||||
|
|
||||||
AdminLTE:https://adminlte.io
|
|
||||||
|
|
||||||
Bootstrap:http://getbootstrap.com
|
|
||||||
|
|
||||||
jQuery:http://jquery.com
|
|
||||||
|
|
||||||
Bootstrap-table:https://github.com/wenzhixin/bootstrap-table
|
|
||||||
|
|
||||||
Nice-validator: https://validator.niceue.com
|
|
||||||
|
|
||||||
SelectPage: https://github.com/TerryZ/SelectPage
|
|
||||||
|
|
||||||
Layer: https://layuion.com/layer/
|
|
||||||
|
|
||||||
DropzoneJS: https://www.dropzonejs.com
|
|
||||||
|
|
||||||
|
|
||||||
## 版权信息
|
|
||||||
|
|
||||||
FastAdmin遵循Apache2开源协议发布,并提供免费使用。
|
|
||||||
|
|
||||||
本项目包含的第三方源码和二进制文件之版权信息另行标注。
|
|
||||||
|
|
||||||
版权所有Copyright © 2017-2024 by FastAdmin (https://www.fastadmin.net)
|
|
||||||
|
|
||||||
All rights reserved。
|
|
||||||
@@ -16,7 +16,7 @@ class Command extends BaseCommand
|
|||||||
/**
|
/**
|
||||||
* 执行帮助命令
|
* 执行帮助命令
|
||||||
*/
|
*/
|
||||||
protected function execute(Input $input, Output $output)
|
protected function execute(?Input $input, ?Output $output)
|
||||||
{
|
{
|
||||||
$this->input = $input;
|
$this->input = $input;
|
||||||
$this->output = $output;
|
$this->output = $output;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class ShoproChat extends Command
|
|||||||
/**
|
/**
|
||||||
* 执行帮助命令
|
* 执行帮助命令
|
||||||
*/
|
*/
|
||||||
protected function execute(Input $input, Output $output)
|
protected function execute(?Input $input, ?Output $output)
|
||||||
{
|
{
|
||||||
$this->input = $input;
|
$this->input = $input;
|
||||||
$this->output = $output;
|
$this->output = $output;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use app\admin\model\shopro\user\User as UserModel;
|
|||||||
use app\admin\model\shopro\user\Coupon as UserCouponModel;
|
use app\admin\model\shopro\user\Coupon as UserCouponModel;
|
||||||
use app\admin\model\shopro\order\Order as OrderModel;
|
use app\admin\model\shopro\order\Order as OrderModel;
|
||||||
use app\admin\model\shopro\order\Aftersale as AftersaleModel;
|
use app\admin\model\shopro\order\Aftersale as AftersaleModel;
|
||||||
|
use app\admin\model\zy\link\Message;
|
||||||
use app\admin\model\shopro\ThirdOauth;
|
use app\admin\model\shopro\ThirdOauth;
|
||||||
|
|
||||||
class User extends Common
|
class User extends Common
|
||||||
@@ -92,7 +93,7 @@ class User extends Common
|
|||||||
{
|
{
|
||||||
$user = auth_user();
|
$user = auth_user();
|
||||||
|
|
||||||
$params = $this->request->only(['avatar', 'nickname', 'gender']);
|
$params = $this->request->only(['avatar', 'nickname', 'mobile', 'gender', 'qq', 'wechat', 'years', 'bio']);
|
||||||
$this->svalidate($params);
|
$this->svalidate($params);
|
||||||
|
|
||||||
$user->save($params);
|
$user->save($params);
|
||||||
@@ -147,7 +148,7 @@ class User extends Common
|
|||||||
}
|
}
|
||||||
//如果已经有账号则直接登录
|
//如果已经有账号则直接登录
|
||||||
$ret = $this->auth->direct($user->id);
|
$ret = $this->auth->direct($user->id);
|
||||||
}else {
|
} else {
|
||||||
$this->error('该手机号暂未注册');
|
$this->error('该手机号暂未注册');
|
||||||
}
|
}
|
||||||
if (isset($ret) && $ret) {
|
if (isset($ret) && $ret) {
|
||||||
@@ -302,4 +303,32 @@ class User extends Common
|
|||||||
|
|
||||||
$this->success('注销成功');
|
$this->success('注销成功');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 用户消息
|
||||||
|
public function msg()
|
||||||
|
{
|
||||||
|
$params = $this->request->param();
|
||||||
|
|
||||||
|
$model = Message::where('user_id', $this->auth->id);
|
||||||
|
if (isset($params['type'])) {
|
||||||
|
$model->where('type', $params['type']);
|
||||||
|
}
|
||||||
|
$res = $model->select();
|
||||||
|
|
||||||
|
$this->success('Success', $res);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 消息读取
|
||||||
|
public function msgRead()
|
||||||
|
{
|
||||||
|
$params = $this->request->param();
|
||||||
|
$model = Message::get($params['msg_id'] ?? NULL);
|
||||||
|
if (empty($model)) {
|
||||||
|
$this->error(__('No rows were found'));
|
||||||
|
}
|
||||||
|
$model->save(['status' => 1]); //已读
|
||||||
|
|
||||||
|
$this->success('Success', $model);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
118
addons/shopro/controller/zy/Activity.php
Normal file
118
addons/shopro/controller/zy/Activity.php
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addons\shopro\controller\zy;
|
||||||
|
|
||||||
|
use think\Db;
|
||||||
|
use think\Cache;
|
||||||
|
use think\Exception;
|
||||||
|
use think\exception\PDOException;
|
||||||
|
use addons\shopro\library\RedisCache;
|
||||||
|
use think\exception\ValidateException;
|
||||||
|
use addons\shopro\service\order\OrderCreate;
|
||||||
|
|
||||||
|
|
||||||
|
class Activity extends Base
|
||||||
|
{
|
||||||
|
|
||||||
|
protected $noNeedLogin = ['test'];
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->model = new \app\admin\model\zy\game\Activity;
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$params = $this->request->param();
|
||||||
|
$model = $this->model;
|
||||||
|
if (isset($params['name'])) {
|
||||||
|
$model->where('name', 'like', '%' . $params['name'] . '%');
|
||||||
|
}
|
||||||
|
if (isset($params['club_id'])) {
|
||||||
|
$model->where('club_id', $params['club_id']);
|
||||||
|
}
|
||||||
|
if (isset($params['week'])) {
|
||||||
|
$model->where('week', $params['week']);
|
||||||
|
}
|
||||||
|
if (isset($params['pid'])) {
|
||||||
|
$model->where('pid', $params['pid']);
|
||||||
|
} else {
|
||||||
|
$model->where('pid', 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
$res = $model->select();
|
||||||
|
foreach ($res as &$v) {
|
||||||
|
$v['public_time'] = json_decode($v['public_time'] ?? '[]', true);
|
||||||
|
$v['join_start_time'] = json_decode($v['join_start_time'] ?? '[]', true);
|
||||||
|
$v['join_end_time'] = json_decode($v['join_end_time'] ?? '[]', true);
|
||||||
|
$v['quit_time'] = json_decode($v['quit_time'] ?? '[]', true);
|
||||||
|
$v['cost'] = json_decode($v['cost'] ?? '[]', true);
|
||||||
|
$v['referee'] = explode(',', $v['referee']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->success('Success', $res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view()
|
||||||
|
{
|
||||||
|
$model = $this->model->get($this->request->param('id'));
|
||||||
|
if (empty($model)) {
|
||||||
|
$this->error(__('No rows were found'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$model['public_time'] = json_decode($model['public_time'] ?? '[]', true);
|
||||||
|
$model['join_start_time'] = json_decode($model['join_start_time'] ?? '[]', true);
|
||||||
|
$model['join_end_time'] = json_decode($model['join_end_time'] ?? '[]', true);
|
||||||
|
$model['quit_time'] = json_decode($model['quit_time'] ?? '[]', true);
|
||||||
|
$model['cost'] = json_decode($model['cost'] ?? '[]', true);
|
||||||
|
$model['referee'] = explode(',', $model['referee']);
|
||||||
|
|
||||||
|
$this->success('Success', $model);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 启动周期性活动创建比赛任务
|
||||||
|
public function test()
|
||||||
|
{
|
||||||
|
if (!\think\Cache::has('addons\shopro\job\Test@zy')) {
|
||||||
|
$res = \think\Queue::push('\addons\shopro\job\Test@zy', time(), 'shopro');
|
||||||
|
\think\Cache::set('addons\shopro\job\Test@zy', $res);
|
||||||
|
$this->success('Success', $res);
|
||||||
|
}
|
||||||
|
$this->success('Success', '任务已存在');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 比赛报名
|
||||||
|
public function gameJoin()
|
||||||
|
{
|
||||||
|
Db::startTrans();
|
||||||
|
try {
|
||||||
|
$params = $this->request->param();
|
||||||
|
$game = \app\admin\model\zy\game\Game::where('id', $params['act_id'] ?? NULL)
|
||||||
|
->where('date', $params['date'] ?? NULL)->find();
|
||||||
|
if (empty($game)) {
|
||||||
|
$this->error(__('No rows were found'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->svalidate($params, ".create");
|
||||||
|
$orderCreate = new OrderCreate($params);
|
||||||
|
$result = $orderCreate->calc('create');
|
||||||
|
$order = $orderCreate->create($result);
|
||||||
|
|
||||||
|
$join = new \app\admin\model\zy\game\GameJoin;
|
||||||
|
$join->allowField(true)->save([
|
||||||
|
'act_id' => $game['act_id'],
|
||||||
|
'game_id' => $game['id'],
|
||||||
|
'user_id' => $this->auth->id,
|
||||||
|
'orer_id' => $order['order_sn'],
|
||||||
|
'status' => 1,
|
||||||
|
'users' => json_encode($params['users'] ?? [])
|
||||||
|
]);
|
||||||
|
|
||||||
|
Db::commit();
|
||||||
|
} catch (ValidateException | PDOException | Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
$this->error($e->getMessage(), $e);
|
||||||
|
}
|
||||||
|
$this->success('Success', $join);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,7 +10,18 @@ use think\exception\ValidateException;
|
|||||||
|
|
||||||
class Base extends Common
|
class Base extends Common
|
||||||
{
|
{
|
||||||
|
protected $noNeedLogin = [];
|
||||||
|
protected $noNeedRight = ['*'];
|
||||||
|
|
||||||
protected $model;
|
protected $model;
|
||||||
|
protected $user;
|
||||||
|
|
||||||
|
public function _initialize()
|
||||||
|
{
|
||||||
|
parent::_initialize();
|
||||||
|
$this->user = auth_user();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
@@ -21,7 +32,7 @@ class Base extends Common
|
|||||||
$res = $this->model->select();
|
$res = $this->model->select();
|
||||||
|
|
||||||
|
|
||||||
$this->success('获取成功', $res);
|
$this->success('Success', $res);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function add()
|
public function add()
|
||||||
@@ -39,7 +50,7 @@ class Base extends Common
|
|||||||
if ($result === false) {
|
if ($result === false) {
|
||||||
$this->error(__('No rows were inserted'));
|
$this->error(__('No rows were inserted'));
|
||||||
}
|
}
|
||||||
$this->success();
|
$this->success('Success');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function update()
|
public function update()
|
||||||
@@ -61,7 +72,7 @@ class Base extends Common
|
|||||||
if ($result === false) {
|
if ($result === false) {
|
||||||
$this->error(__('No rows were inserted'));
|
$this->error(__('No rows were inserted'));
|
||||||
}
|
}
|
||||||
$this->success();
|
$this->success('Success');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function view()
|
public function view()
|
||||||
@@ -70,6 +81,6 @@ class Base extends Common
|
|||||||
if (empty($model)) {
|
if (empty($model)) {
|
||||||
$this->error(__('No rows were found'));
|
$this->error(__('No rows were found'));
|
||||||
}
|
}
|
||||||
$this->success($model);
|
$this->success('Success', $model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,14 +2,18 @@
|
|||||||
|
|
||||||
namespace addons\shopro\controller\zy;
|
namespace addons\shopro\controller\zy;
|
||||||
|
|
||||||
|
use think\Db;
|
||||||
|
use think\Exception;
|
||||||
|
use app\admin\model\User;
|
||||||
|
use app\admin\model\zy\Menber;
|
||||||
|
use think\exception\PDOException;
|
||||||
|
use app\admin\model\zy\link\Apply;
|
||||||
|
use app\admin\model\zy\link\Message;
|
||||||
|
use app\admin\model\zy\game\Activity;
|
||||||
|
use think\exception\ValidateException;
|
||||||
|
|
||||||
class Club extends Base
|
class Club extends Base
|
||||||
{
|
{
|
||||||
|
|
||||||
// protected $noNeedLogin = ['index'];
|
|
||||||
protected $noNeedLogin = ['*'];
|
|
||||||
protected $noNeedRight = ['*'];
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->model = new \app\admin\model\zy\Club;
|
$this->model = new \app\admin\model\zy\Club;
|
||||||
@@ -25,6 +29,223 @@ class Club extends Base
|
|||||||
}
|
}
|
||||||
$res = $model->select();
|
$res = $model->select();
|
||||||
|
|
||||||
$this->success('获取成功', $res);
|
$this->success('Success', $res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function add()
|
||||||
|
{
|
||||||
|
$result = false;
|
||||||
|
$params = $this->request->param();
|
||||||
|
Db::startTrans();
|
||||||
|
try {
|
||||||
|
$params['president'] = $this->user->id;
|
||||||
|
$result = $this->model->allowField(true)->save($params);
|
||||||
|
$menber = new Menber;
|
||||||
|
$menber->allowField(true)->save([
|
||||||
|
'club_id' => $this->model->id,
|
||||||
|
'user_id' => $this->user->id,
|
||||||
|
'role' => 3
|
||||||
|
]);
|
||||||
|
Db::commit();
|
||||||
|
} catch (ValidateException | PDOException | Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
$this->error($e->getMessage());
|
||||||
|
}
|
||||||
|
if ($result === false) {
|
||||||
|
$this->error(__('No rows were inserted'));
|
||||||
|
}
|
||||||
|
$this->success('Success', $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取俱乐部成员
|
||||||
|
public function menber()
|
||||||
|
{
|
||||||
|
$params = $this->request->param();
|
||||||
|
$query = Db::table(Menber::$tableName)->alias('m')
|
||||||
|
->join([User::$tableName => 'u'], 'u.id = m.user_id')
|
||||||
|
->field('m.*,u.avatar,u.gender,u.nickname');
|
||||||
|
if (empty($params['id'])) {
|
||||||
|
return $this->error('参数错误');
|
||||||
|
}
|
||||||
|
$query->where('club_id', $params['id']);
|
||||||
|
if (isset($params['role'])) {
|
||||||
|
$query->where('role', 'IN', explode(',', $params['role']));
|
||||||
|
} else {
|
||||||
|
$query->where('role', '>', 0);
|
||||||
|
}
|
||||||
|
$res = $query->select();
|
||||||
|
|
||||||
|
$this->success('Success', $res);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取俱乐部活动
|
||||||
|
public function activity()
|
||||||
|
{
|
||||||
|
$params = $this->request->param();
|
||||||
|
$query = Db::table(Activity::$tableName)
|
||||||
|
->where('pid', 0) //主活动
|
||||||
|
->field('');
|
||||||
|
if (isset($params['club_id'])) {
|
||||||
|
$query->where('club_id', $params['club_id']);
|
||||||
|
}
|
||||||
|
if (isset($params['week'])) {
|
||||||
|
$query->where('week', $params['week']);
|
||||||
|
}
|
||||||
|
$res = $query->select();
|
||||||
|
|
||||||
|
$this->success('Success', $res);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 申请加入俱乐部
|
||||||
|
public function apply()
|
||||||
|
{
|
||||||
|
$params = $this->request->param();
|
||||||
|
$club = $this->model->get($params['club_id']);
|
||||||
|
if (empty($club)) {
|
||||||
|
return $this->error('俱乐部不存在');
|
||||||
|
}
|
||||||
|
if ($club['join_type'] > 1) {
|
||||||
|
$this->error('该俱乐部不允许申请');
|
||||||
|
}
|
||||||
|
if (!empty(Menber::get(['club_id' => $params['club_id'], 'user_id' => $this->user->id]))) {
|
||||||
|
$this->error('您已经是俱乐部成员,无需重复申请');
|
||||||
|
}
|
||||||
|
if ($club['join_type'] == 0) {
|
||||||
|
(new Menber)->allowField(true)->save([
|
||||||
|
'club_id' => $params['club_id'],
|
||||||
|
'user_id' => $this->user->id,
|
||||||
|
'role' => 1
|
||||||
|
]);
|
||||||
|
$this->success('加入成功');
|
||||||
|
}
|
||||||
|
(new Apply)->allowField(true)->save([ // 记录申请
|
||||||
|
'type' => 1,
|
||||||
|
'user_id' => $this->user->id,
|
||||||
|
'target_id' => $params['club_id'],
|
||||||
|
'content' => json_encode(['reason' => $params['reason'] ?? '']),
|
||||||
|
'reason' => $params['reason'],
|
||||||
|
'status' => 1
|
||||||
|
]);
|
||||||
|
(new Message())->allowField(true)->save([ // 消息通知
|
||||||
|
'type' => 3,
|
||||||
|
'name' => $club->name,
|
||||||
|
'avatar' => $club->logo,
|
||||||
|
'from_id' => $this->user->id,
|
||||||
|
'target_id' => $params['club_id'],
|
||||||
|
'content' => json_encode([
|
||||||
|
'topic' => '俱乐部加入申请',
|
||||||
|
'俱乐部名称' => $club->name,
|
||||||
|
'申请人' => $this->user->nickname,
|
||||||
|
'申请时间' => date('Y-m-d H:i:s'),
|
||||||
|
'reason' => $params['reason'] ?? ''
|
||||||
|
])
|
||||||
|
]);
|
||||||
|
$this->success('已申请,请等候审核');
|
||||||
|
}
|
||||||
|
//join_type 0:'开放加入,无需审核',1:'开放申请,审核加入',2:'会员邀请,无需审核',3:'会员邀请,审核加入',4:'仅管理员邀请,无需审核'
|
||||||
|
|
||||||
|
// 邀请加入俱乐部
|
||||||
|
public function invite()
|
||||||
|
{
|
||||||
|
$params = $this->request->param();
|
||||||
|
$club = $this->model->get($params['club_id']);
|
||||||
|
if (empty($club)) {
|
||||||
|
return $this->error('俱乐部不存在');
|
||||||
|
}
|
||||||
|
$menber = Menber::where('club_id', $params['club_id'])
|
||||||
|
->where('user_id', $this->user->id)
|
||||||
|
->where('role', '>', 0)->find();
|
||||||
|
if (empty($menber)) {
|
||||||
|
$this->error('您无权邀请加入俱乐部');
|
||||||
|
}
|
||||||
|
$user = User::get($params['user_id']);
|
||||||
|
if (empty($user)) {
|
||||||
|
return $this->error('用户不存在');
|
||||||
|
}
|
||||||
|
if ($menber['role'] > 1 || $club['join_type'] == 0 || $club['join_type'] == 2) { // 管理员或者开放加入
|
||||||
|
(new Menber)->allowField(true)->save([
|
||||||
|
'club_id' => $club->id,
|
||||||
|
'user_id' => $user->id,
|
||||||
|
'role' => 1
|
||||||
|
]);
|
||||||
|
$this->success('邀请加入成功');
|
||||||
|
}
|
||||||
|
(new Apply)->allowField(true)->save([ // 记录申请
|
||||||
|
'type' => 1,
|
||||||
|
'user_id' => $user->id,
|
||||||
|
'target_id' => $club->id,
|
||||||
|
'content' => json_encode(['reason' => $params['reason'] ?? '']),
|
||||||
|
'reason' => $params['reason'],
|
||||||
|
'status' => 1
|
||||||
|
]);
|
||||||
|
(new Message())->allowField(true)->save([ // 消息通知
|
||||||
|
'type' => 3,
|
||||||
|
'name' => $club->name,
|
||||||
|
'avatar' => $club->logo,
|
||||||
|
'from_id' => $this->user->id,
|
||||||
|
'target_id' => $params['club_id'],
|
||||||
|
'content' => json_encode([
|
||||||
|
'topic' => '俱乐部加入申请',
|
||||||
|
'俱乐部名称' => $club->name,
|
||||||
|
'申请人' => $this->user->nickname,
|
||||||
|
'申请时间' => date('Y-m-d H:i:s'),
|
||||||
|
'reason' => $params['reason'] ?? ''
|
||||||
|
])
|
||||||
|
]);
|
||||||
|
$this->success('已邀请,请等候审核');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取申请列表
|
||||||
|
public function applyList()
|
||||||
|
{
|
||||||
|
$params = $this->request->param();
|
||||||
|
$club = $this->model->get($params['club_id']);
|
||||||
|
if (empty($club)) {
|
||||||
|
return $this->error('俱乐部不存在');
|
||||||
|
}
|
||||||
|
$menber = Menber::where('club_id', $params['club_id'])
|
||||||
|
->where('user_id', $this->user->id)
|
||||||
|
->where('role', '>', 1)->find();
|
||||||
|
if (empty($menber)) {
|
||||||
|
$this->error('您无权处理申请');
|
||||||
|
}
|
||||||
|
$query = Apply::where('type', 1)->where('target_id', $params['club_id']);
|
||||||
|
if (isset($params['status'])) {
|
||||||
|
$query->where('status', $params['status']);
|
||||||
|
}
|
||||||
|
$applyList = $query->select();
|
||||||
|
$this->success('Success', $applyList);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理申请
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$params = $this->request->param();
|
||||||
|
$apply = Apply::get($params['apply_id']);
|
||||||
|
$menber = Menber::where('club_id', $apply['target_id'])
|
||||||
|
->where('user_id', $this->user->id)
|
||||||
|
->where('role', '>', 1)->find();
|
||||||
|
if (empty($menber)) {
|
||||||
|
$this->error('您无权处理申请');
|
||||||
|
}
|
||||||
|
if (empty($apply)) {
|
||||||
|
return $this->error('申请记录不存在');
|
||||||
|
}
|
||||||
|
if ($apply['status'] != 1) {
|
||||||
|
return $this->error('该申请已处理');
|
||||||
|
}
|
||||||
|
if ($params['status'] == 2) {
|
||||||
|
(new Menber)->allowField(true)->save([
|
||||||
|
'club_id' => $apply['target_id'],
|
||||||
|
'user_id' => $apply['user_id'],
|
||||||
|
'role' => 1
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
$apply->save([
|
||||||
|
'status' => $params['status'],
|
||||||
|
'reply' => $params['reply'] ?? ''
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->success('处理成功');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
60
addons/shopro/controller/zy/Game.php
Normal file
60
addons/shopro/controller/zy/Game.php
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace addons\shopro\controller\zy;
|
||||||
|
|
||||||
|
|
||||||
|
class Game extends Base
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->model = new \app\admin\model\zy\game\Game;
|
||||||
|
parent::__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$params = $this->request->param();
|
||||||
|
$model = $this->model;
|
||||||
|
if (isset($params['name'])) {
|
||||||
|
$model->where('name', 'like', '%' . $params['name'] . '%');
|
||||||
|
}
|
||||||
|
if (isset($params['club_id'])) {
|
||||||
|
$model->where('club_id', $params['club_id']);
|
||||||
|
}
|
||||||
|
if (isset($params['week'])) {
|
||||||
|
$model->where('week', $params['week']);
|
||||||
|
}
|
||||||
|
if (isset($params['pid'])) {
|
||||||
|
$model->where('pid', $params['pid']);
|
||||||
|
} else {
|
||||||
|
$model->where('pid', 0);
|
||||||
|
}
|
||||||
|
if (isset($params['public_time'])) {
|
||||||
|
$model->where('public_time', $params['public_time']);
|
||||||
|
} else {
|
||||||
|
$model->where('public_time', '<=', date('Y-m-d H:i:s'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$res = $model->select();
|
||||||
|
foreach ($res as &$v) {
|
||||||
|
|
||||||
|
$v['cost'] = json_decode($v['cost'] ?? '[]', true);
|
||||||
|
$v['referee'] = explode(',', $v['referee']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->success('Success', $res);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function view()
|
||||||
|
{
|
||||||
|
$model = $this->model->get($this->request->param('id'));
|
||||||
|
if (empty($model)) {
|
||||||
|
$this->error(__('No rows were found'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$model['cost'] = json_decode($model['cost'] ?? '[]', true);
|
||||||
|
$model['referee'] = explode(',', $model['referee']);
|
||||||
|
|
||||||
|
$this->success('Success', $model);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,10 +7,6 @@ namespace addons\shopro\controller\zy;
|
|||||||
class Gym extends Base
|
class Gym extends Base
|
||||||
{
|
{
|
||||||
|
|
||||||
// protected $noNeedLogin = ['index'];
|
|
||||||
protected $noNeedLogin = ['*'];
|
|
||||||
protected $noNeedRight = ['*'];
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->model = new \app\admin\model\zy\Stadium;
|
$this->model = new \app\admin\model\zy\Stadium;
|
||||||
@@ -27,6 +23,6 @@ class Gym extends Base
|
|||||||
$res = $model->select();
|
$res = $model->select();
|
||||||
|
|
||||||
|
|
||||||
$this->success('获取成功', $res);
|
$this->success('Success', $res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,10 +8,6 @@ use addons\shopro\controller\Common;
|
|||||||
class Tags extends Common
|
class Tags extends Common
|
||||||
{
|
{
|
||||||
|
|
||||||
// protected $noNeedLogin = ['index'];
|
|
||||||
protected $noNeedLogin = ['*'];
|
|
||||||
protected $noNeedRight = ['*'];
|
|
||||||
|
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$params = $this->request->param();
|
$params = $this->request->param();
|
||||||
@@ -24,6 +20,6 @@ class Tags extends Common
|
|||||||
}
|
}
|
||||||
$res = $model->select();
|
$res = $model->select();
|
||||||
|
|
||||||
$this->success('获取成功', $res);
|
$this->success('Success', $res);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,11 @@
|
|||||||
|
|
||||||
namespace addons\shopro\job;
|
namespace addons\shopro\job;
|
||||||
|
|
||||||
|
use think\Db;
|
||||||
|
use think\Exception;
|
||||||
use think\queue\Job;
|
use think\queue\Job;
|
||||||
|
use think\exception\PDOException;
|
||||||
|
use think\exception\ValidateException;
|
||||||
|
|
||||||
class Test extends BaseJob
|
class Test extends BaseJob
|
||||||
{
|
{
|
||||||
@@ -48,4 +52,69 @@ class Test extends BaseJob
|
|||||||
@mkdir($dir, 0755, true);
|
@mkdir($dir, 0755, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 周期性活动创建比赛
|
||||||
|
*/
|
||||||
|
public function zy(Job $job, $data)
|
||||||
|
{
|
||||||
|
Db::startTrans();
|
||||||
|
try {
|
||||||
|
$_actModel = new \app\admin\model\zy\game\Activity();
|
||||||
|
$_gameModel = new \app\admin\model\zy\game\Game();
|
||||||
|
$week = date('w'); //当前星期
|
||||||
|
$current = time(); //当前时间
|
||||||
|
$activity = (clone $_actModel)::where('type', 1)->where('pid', 0)->select(); //周期性主活动
|
||||||
|
foreach ($activity as $act) {
|
||||||
|
$act = $act->toArray();
|
||||||
|
$publicTime = json_decode($act['public_time'] ?? '[]', true);
|
||||||
|
$publicBefore = intval($publicTime['before'] ?? 0); //提前几天
|
||||||
|
$PublicWeek = $act['week'] - $publicBefore; //设定应该发布的星期
|
||||||
|
if ($PublicWeek != $week && ($PublicWeek + 7) != $week) {
|
||||||
|
print_r('星期不对');
|
||||||
|
continue; // 星期不对
|
||||||
|
}
|
||||||
|
$public_time = strtotime($publicTime['time']); //设定的时间
|
||||||
|
if ($current < $public_time) {
|
||||||
|
print_r('时间未到');
|
||||||
|
continue; //时间未到
|
||||||
|
}
|
||||||
|
$act['public_time'] = date('Y-m-d H:i:s', $public_time - $publicBefore * 86400); //设定的时间
|
||||||
|
$act['date'] = date('Y-m-d', $public_time - $publicBefore * 86400); //设定的日期
|
||||||
|
$games = (clone $_gameModel)::where('act_id', $act['id'])
|
||||||
|
->where('public_time', $act['public_time'])
|
||||||
|
->where('date', $act['date'])->select();
|
||||||
|
if (!empty($games)) {
|
||||||
|
print_r('已存在');
|
||||||
|
continue; // 已存在
|
||||||
|
}
|
||||||
|
$joinStartTime = json_decode($act['join_start_time'] ?? '[]', true);
|
||||||
|
$act['join_start_time'] = date('Y-m-d H:i:s', strtotime($joinStartTime['time']) - intval($joinStartTime['before']) * 86400);
|
||||||
|
$joinEndTime = json_decode($act['join_end_time'] ?? '[]', true);
|
||||||
|
$act['join_end_time'] = date('Y-m-d H:i:s', strtotime($joinEndTime['time']) - intval($joinEndTime['before']) * 86400);
|
||||||
|
$quitTime = json_decode($act['quit_time'] ?? '[]', true);
|
||||||
|
$act['quit_time'] = date('Y-m-d H:i:s', strtotime($quitTime['time']) - intval($quitTime['before']) * 86400);
|
||||||
|
$act['act_id'] = $act['id'];
|
||||||
|
unset($act['id']);
|
||||||
|
$res = (clone $_gameModel)->allowField(true)->save($act);
|
||||||
|
$subs = (clone $_actModel)::where('pid', $act['act_id'])->select();
|
||||||
|
foreach ($subs as $sub) { //存在子活动
|
||||||
|
$sub = $sub->toArray();
|
||||||
|
$sub['public_time'] = $act['public_time'];
|
||||||
|
$sub['join_start_time'] = $act['join_start_time'];
|
||||||
|
$sub['join_end_time'] = $act['join_end_time'];
|
||||||
|
$sub['quit_time'] = $act['quit_time'];
|
||||||
|
$sub['act_id'] = $act['act_id'];
|
||||||
|
$sub['date'] = $act['date'];
|
||||||
|
unset($sub['id']);
|
||||||
|
$res = (clone $_gameModel)->allowField(true)->save($sub);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Db::commit();
|
||||||
|
} catch (ValidateException | PDOException | Exception $e) {
|
||||||
|
Db::rollback();
|
||||||
|
format_log_error($e, 'zy.activity create game');
|
||||||
|
}
|
||||||
|
$job->release(600); //$delay为延迟时间
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ class User extends Model
|
|||||||
{
|
{
|
||||||
|
|
||||||
// 表名
|
// 表名
|
||||||
|
public static $tableName = 'user';
|
||||||
protected $name = 'user';
|
protected $name = 'user';
|
||||||
// 自动写入时间戳字段
|
// 自动写入时间戳字段
|
||||||
protected $autoWriteTimestamp = 'int';
|
protected $autoWriteTimestamp = 'int';
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class Menber extends Model
|
|||||||
|
|
||||||
// 表名
|
// 表名
|
||||||
protected $table = 'zy_menber';
|
protected $table = 'zy_menber';
|
||||||
|
public static $tableName = 'zy_menber';
|
||||||
|
|
||||||
// 自动写入时间戳字段
|
// 自动写入时间戳字段
|
||||||
protected $autoWriteTimestamp = false;
|
protected $autoWriteTimestamp = false;
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class Activity extends Model
|
|||||||
|
|
||||||
// 表名
|
// 表名
|
||||||
protected $table = 'zy_activity';
|
protected $table = 'zy_activity';
|
||||||
|
public static $tableName = 'zy_activity';
|
||||||
|
|
||||||
// 自动写入时间戳字段
|
// 自动写入时间戳字段
|
||||||
protected $autoWriteTimestamp = false;
|
protected $autoWriteTimestamp = false;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ class Activity extends Validate
|
|||||||
* 验证规则
|
* 验证规则
|
||||||
*/
|
*/
|
||||||
protected $rule = [
|
protected $rule = [
|
||||||
|
'week' => 'number|between:0,6',
|
||||||
];
|
];
|
||||||
/**
|
/**
|
||||||
* 提示消息
|
* 提示消息
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ return [
|
|||||||
// +----------------------------------------------------------------------
|
// +----------------------------------------------------------------------
|
||||||
'cache' => [
|
'cache' => [
|
||||||
// 驱动方式
|
// 驱动方式
|
||||||
'type' => 'File',
|
'type' => 'redis',
|
||||||
// 缓存保存目录
|
// 缓存保存目录
|
||||||
'path' => CACHE_PATH,
|
'path' => CACHE_PATH,
|
||||||
// 缓存前缀
|
// 缓存前缀
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
return [
|
return [
|
||||||
'connector' => 'Redis', // Redis 驱动
|
'connector' => 'Redis', // Redis 驱动
|
||||||
'expire' => 0, // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
|
'expire' => 60, // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
|
||||||
'default' => 'default', // 默认的队列名称
|
'default' => 'default', // 默认的队列名称
|
||||||
'host' => '127.0.0.1', // redis 主机ip
|
'host' => '127.0.0.1', // redis 主机ip
|
||||||
'port' => 6379, // redis 端口
|
'port' => 6379, // redis 端口
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ return [
|
|||||||
'Type error' => '类型错误',
|
'Type error' => '类型错误',
|
||||||
'Fatal error' => '致命错误',
|
'Fatal error' => '致命错误',
|
||||||
'syntax error' => '语法错误',
|
'syntax error' => '语法错误',
|
||||||
|
'param error' => '参数错误',
|
||||||
|
'param lose: {:param}' => '参数缺失: {:param}',
|
||||||
|
|
||||||
// 框架核心错误提示
|
// 框架核心错误提示
|
||||||
'dispatch type not support' => '不支持的调度类型',
|
'dispatch type not support' => '不支持的调度类型',
|
||||||
|
|||||||
@@ -210,7 +210,7 @@ class Windows extends Pipes
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (null !== $w && 0 < count($w)) {
|
if (null !== $w && 0 < count($w)) {
|
||||||
while (strlen($this->inputBuffer)) {
|
while (strlen((string)$this->inputBuffer)) {
|
||||||
$written = fwrite($w[0], $this->inputBuffer, 2 << 18);
|
$written = fwrite($w[0], $this->inputBuffer, 2 << 18);
|
||||||
if ($written > 0) {
|
if ($written > 0) {
|
||||||
$this->inputBuffer = (string) substr($this->inputBuffer, $written);
|
$this->inputBuffer = (string) substr($this->inputBuffer, $written);
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class Listen extends Command
|
|||||||
->setDescription('Listen to a given queue');
|
->setDescription('Listen to a given queue');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function initialize(Input $input, Output $output)
|
public function initialize(?Input $input, ?Output $output)
|
||||||
{
|
{
|
||||||
$this->listener = new Listener($this->findCommandPath());
|
$this->listener = new Listener($this->findCommandPath());
|
||||||
$this->listener->setSleep($input->getOption('sleep'));
|
$this->listener->setSleep($input->getOption('sleep'));
|
||||||
@@ -45,7 +45,7 @@ class Listen extends Command
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function execute(Input $input, Output $output)
|
public function execute(?Input $input, ?Output $output)
|
||||||
{
|
{
|
||||||
$delay = $input->getOption('delay');
|
$delay = $input->getOption('delay');
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class Restart extends Command
|
|||||||
$this->setName('queue:restart')->setDescription('Restart queue worker daemons after their current job');
|
$this->setName('queue:restart')->setDescription('Restart queue worker daemons after their current job');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function execute(Input $input, Output $output)
|
public function execute(?Input $input, ?Output $output)
|
||||||
{
|
{
|
||||||
Cache::set('think:queue:restart', time());
|
Cache::set('think:queue:restart', time());
|
||||||
$output->writeln("<info>Broadcasting queue restart signal.</info>");
|
$output->writeln("<info>Broadcasting queue restart signal.</info>");
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class Subscribe extends Command
|
|||||||
->addOption('option', null, Option::VALUE_IS_ARRAY | Option::VALUE_OPTIONAL, 'the options');
|
->addOption('option', null, Option::VALUE_IS_ARRAY | Option::VALUE_OPTIONAL, 'the options');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function execute(Input $input, Output $output)
|
public function execute(?Input $input, ?Output $output)
|
||||||
{
|
{
|
||||||
|
|
||||||
$url = $input->getArgument('url');
|
$url = $input->getArgument('url');
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class Work extends Command
|
|||||||
*/
|
*/
|
||||||
protected $worker;
|
protected $worker;
|
||||||
|
|
||||||
protected function initialize(Input $input, Output $output)
|
protected function initialize(?Input $input, ?Output $output)
|
||||||
{
|
{
|
||||||
$this->worker = new Worker();
|
$this->worker = new Worker();
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ class Work extends Command
|
|||||||
* @param Output $output
|
* @param Output $output
|
||||||
* @return int|null|void
|
* @return int|null|void
|
||||||
*/
|
*/
|
||||||
public function execute(Input $input, Output $output)
|
public function execute(?Input $input, ?Output $output)
|
||||||
{
|
{
|
||||||
$queue = $input->getOption('queue');
|
$queue = $input->getOption('queue');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user