2248 changed files with 319674 additions and 3163 deletions
@ -1 +0,0 @@ |
|||||
APP_DEBUG = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = test
USERNAME = username
PASSWORD = password
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
[LANG]
default_lang = zh-cn |
|
||||
@ -1,5 +1,6 @@ |
|||||
/.idea |
.idea |
||||
/.vscode |
composer.lock |
||||
/vendor |
|
||||
*.log |
*.log |
||||
.env |
|
||||
|
*.css.map |
||||
|
.sass-cache |
||||
|
|||||
@ -1,42 +0,0 @@ |
|||||
sudo: false |
|
||||
|
|
||||
language: php |
|
||||
|
|
||||
branches: |
|
||||
only: |
|
||||
- stable |
|
||||
|
|
||||
cache: |
|
||||
directories: |
|
||||
- $HOME/.composer/cache |
|
||||
|
|
||||
before_install: |
|
||||
- composer self-update |
|
||||
|
|
||||
install: |
|
||||
- composer install --no-dev --no-interaction --ignore-platform-reqs |
|
||||
- zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Core.zip . |
|
||||
- composer require --update-no-dev --no-interaction "topthink/think-image:^1.0" |
|
||||
- composer require --update-no-dev --no-interaction "topthink/think-migration:^1.0" |
|
||||
- composer require --update-no-dev --no-interaction "topthink/think-captcha:^1.0" |
|
||||
- composer require --update-no-dev --no-interaction "topthink/think-mongo:^1.0" |
|
||||
- composer require --update-no-dev --no-interaction "topthink/think-worker:^1.0" |
|
||||
- composer require --update-no-dev --no-interaction "topthink/think-helper:^1.0" |
|
||||
- composer require --update-no-dev --no-interaction "topthink/think-queue:^1.0" |
|
||||
- composer require --update-no-dev --no-interaction "topthink/think-angular:^1.0" |
|
||||
- composer require --dev --update-no-dev --no-interaction "topthink/think-testing:^1.0" |
|
||||
- zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Full.zip . |
|
||||
|
|
||||
script: |
|
||||
- php think unit |
|
||||
|
|
||||
deploy: |
|
||||
provider: releases |
|
||||
api_key: |
|
||||
secure: TSF6bnl2JYN72UQOORAJYL+CqIryP2gHVKt6grfveQ7d9rleAEoxlq6PWxbvTI4jZ5nrPpUcBUpWIJHNgVcs+bzLFtyh5THaLqm39uCgBbrW7M8rI26L8sBh/6nsdtGgdeQrO/cLu31QoTzbwuz1WfAVoCdCkOSZeXyT/CclH99qV6RYyQYqaD2wpRjrhA5O4fSsEkiPVuk0GaOogFlrQHx+C+lHnf6pa1KxEoN1A0UxxVfGX6K4y5g4WQDO5zT4bLeubkWOXK0G51XSvACDOZVIyLdjApaOFTwamPcD3S1tfvuxRWWvsCD5ljFvb2kSmx5BIBNwN80MzuBmrGIC27XLGOxyMerwKxB6DskNUO9PflKHDPI61DRq0FTy1fv70SFMSiAtUv9aJRT41NQh9iJJ0vC8dl+xcxrWIjU1GG6+l/ZcRqVx9V1VuGQsLKndGhja7SQ+X1slHl76fRq223sMOql7MFCd0vvvxVQ2V39CcFKao/LB1aPH3VhODDEyxwx6aXoTznvC/QPepgWsHOWQzKj9ftsgDbsNiyFlXL4cu8DWUty6rQy8zT2b4O8b1xjcwSUCsy+auEjBamzQkMJFNlZAIUrukL/NbUhQU37TAbwsFyz7X0E/u/VMle/nBCNAzgkMwAUjiHM6FqrKKBRWFbPrSIixjfjkCnrMEPw= |
|
||||
file: |
|
||||
- ThinkPHP_Core.zip |
|
||||
- ThinkPHP_Full.zip |
|
||||
skip_cleanup: true |
|
||||
on: |
|
||||
tags: true |
|
||||
@ -1,32 +0,0 @@ |
|||||
|
|
||||
ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 |
|
||||
版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn) |
|
||||
All rights reserved。 |
|
||||
ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 |
|
||||
|
|
||||
Apache Licence是著名的非盈利开源组织Apache采用的协议。 |
|
||||
该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, |
|
||||
允许代码修改,再作为开源或商业软件发布。需要满足 |
|
||||
的条件: |
|
||||
1. 需要给代码的用户一份Apache Licence ; |
|
||||
2. 如果你修改了代码,需要在被修改的文件中说明; |
|
||||
3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 |
|
||||
带有原来代码中的协议,商标,专利声明和其他原来作者规 |
|
||||
定需要包含的说明; |
|
||||
4. 如果再发布的产品中包含一个Notice文件,则在Notice文 |
|
||||
件中需要带有本协议内容。你可以在Notice中增加自己的 |
|
||||
许可,但不可以表现为对Apache Licence构成更改。 |
|
||||
具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 |
|
||||
|
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
||||
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
|
||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
|
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
|
||||
POSSIBILITY OF SUCH DAMAGE. |
|
||||
@ -1,56 +0,0 @@ |
|||||
ThinkPHP 6.0 |
|
||||
=============== |
|
||||
|
|
||||
> 运行环境要求PHP7.1+,兼容PHP8.0。 |
|
||||
|
|
||||
[官方应用服务市场](https://market.topthink.com) | [`ThinkAPI`——官方统一API服务](https://docs.topthink.com/think-api) |
|
||||
|
|
||||
ThinkPHPV6.0版本由[亿速云](https://www.yisu.com/)独家赞助发布。 |
|
||||
|
|
||||
## 主要新特性 |
|
||||
|
|
||||
* 采用`PHP7`强类型(严格模式) |
|
||||
* 支持更多的`PSR`规范 |
|
||||
* 原生多应用支持 |
|
||||
* 更强大和易用的查询 |
|
||||
* 全新的事件系统 |
|
||||
* 模型事件和数据库事件统一纳入事件系统 |
|
||||
* 模板引擎分离出核心 |
|
||||
* 内部功能中间件化 |
|
||||
* SESSION/Cookie机制改进 |
|
||||
* 对Swoole以及协程支持改进 |
|
||||
* 对IDE更加友好 |
|
||||
* 统一和精简大量用法 |
|
||||
|
|
||||
## 安装 |
|
||||
|
|
||||
~~~ |
|
||||
composer create-project topthink/think tp 6.0.* |
|
||||
~~~ |
|
||||
|
|
||||
如果需要更新框架使用 |
|
||||
~~~ |
|
||||
composer update topthink/framework |
|
||||
~~~ |
|
||||
|
|
||||
## 文档 |
|
||||
|
|
||||
[完全开发手册](https://www.kancloud.cn/manual/thinkphp6_0/content) |
|
||||
|
|
||||
## 参与开发 |
|
||||
|
|
||||
请参阅 [ThinkPHP 核心框架包](https://github.com/top-think/framework)。 |
|
||||
|
|
||||
## 版权信息 |
|
||||
|
|
||||
ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 |
|
||||
|
|
||||
本项目包含的第三方源码和二进制文件之版权信息另行标注。 |
|
||||
|
|
||||
版权所有Copyright © 2006-2020 by ThinkPHP (http://thinkphp.cn) |
|
||||
|
|
||||
All rights reserved。 |
|
||||
|
|
||||
ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 |
|
||||
|
|
||||
更多细节参阅 [LICENSE.txt](LICENSE.txt) |
|
||||
@ -1,22 +0,0 @@ |
|||||
<?php |
|
||||
declare (strict_types = 1); |
|
||||
|
|
||||
namespace app; |
|
||||
|
|
||||
use think\Service; |
|
||||
|
|
||||
/** |
|
||||
* 应用服务类 |
|
||||
*/ |
|
||||
class AppService extends Service |
|
||||
{ |
|
||||
public function register() |
|
||||
{ |
|
||||
// 服务注册 |
|
||||
} |
|
||||
|
|
||||
public function boot() |
|
||||
{ |
|
||||
// 服务启动 |
|
||||
} |
|
||||
} |
|
||||
@ -1,204 +0,0 @@ |
|||||
<?php |
|
||||
declare (strict_types = 1); |
|
||||
|
|
||||
namespace app; |
|
||||
|
|
||||
use think\App; |
|
||||
use think\exception\ValidateException; |
|
||||
use think\Validate; |
|
||||
use think\facade\View; |
|
||||
use think\facade\Config; |
|
||||
use think\facade\Request; |
|
||||
|
|
||||
/** |
|
||||
* 控制器基础类 |
|
||||
*/ |
|
||||
abstract class BaseController |
|
||||
{ |
|
||||
/** |
|
||||
* Request实例 |
|
||||
* @var \think\Request |
|
||||
*/ |
|
||||
protected $request; |
|
||||
|
|
||||
/** |
|
||||
* 应用实例 |
|
||||
* @var \think\App |
|
||||
*/ |
|
||||
protected $app; |
|
||||
|
|
||||
/** |
|
||||
* 是否批量验证 |
|
||||
* @var bool |
|
||||
*/ |
|
||||
protected $batchValidate = false; |
|
||||
|
|
||||
/** |
|
||||
* 控制器中间件 |
|
||||
* @var array |
|
||||
*/ |
|
||||
protected $middleware = []; |
|
||||
|
|
||||
/* @var array $admin 商家登录信息 */ |
|
||||
protected $admin; |
|
||||
|
|
||||
/* @var string $route 当前控制器名称 */ |
|
||||
protected $controller = ''; |
|
||||
|
|
||||
/* @var string $route 当前方法名称 */ |
|
||||
protected $action = ''; |
|
||||
|
|
||||
/* @var string $route 当前路由uri */ |
|
||||
protected $routeUri = ''; |
|
||||
|
|
||||
/* @var string $route 当前路由:分组名称 */ |
|
||||
protected $group = ''; |
|
||||
|
|
||||
/* @var array $allowAllAction 登录验证白名单 */ |
|
||||
protected $allowAllAction = [ |
|
||||
// 登录页面 |
|
||||
'passport/login', |
|
||||
]; |
|
||||
|
|
||||
/* @var array $notLayoutAction 无需全局layout */ |
|
||||
protected $notLayoutAction = [ |
|
||||
// 登录页面 |
|
||||
'passport/login', |
|
||||
]; |
|
||||
|
|
||||
/** |
|
||||
* 构造方法 |
|
||||
* @access public |
|
||||
* @param App $app 应用对象 |
|
||||
*/ |
|
||||
public function __construct(App $app) |
|
||||
{ |
|
||||
$this->app = $app; |
|
||||
$this->request = $this->app->request; |
|
||||
|
|
||||
// 控制器初始化 |
|
||||
$this->initialize(); |
|
||||
// 全局layout |
|
||||
$this->layout(); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 全局layout模板输出 |
|
||||
* @throws \Exception |
|
||||
*/ |
|
||||
private function layout() |
|
||||
{ |
|
||||
// 验证当前请求是否在白名单 |
|
||||
if (!in_array($this->routeUri, $this->notLayoutAction)) { |
|
||||
// 输出到view |
|
||||
View::assign([ |
|
||||
'base_url' => base_url(), // 当前域名 |
|
||||
'admin_url' => url('/admin'), // 后台模块url |
|
||||
'group' => $this->group, |
|
||||
'menus' => $this->menus(), // 后台菜单 |
|
||||
'admin' => $this->admin, // 商家登录信息 |
|
||||
'request' => Request::instance() // Request对象 |
|
||||
]); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// 初始化 |
|
||||
protected function initialize() |
|
||||
{} |
|
||||
|
|
||||
/** |
|
||||
* 验证数据 |
|
||||
* @access protected |
|
||||
* @param array $data 数据 |
|
||||
* @param string|array $validate 验证器名或者验证规则数组 |
|
||||
* @param array $message 提示信息 |
|
||||
* @param bool $batch 是否批量验证 |
|
||||
* @return array|string|true |
|
||||
* @throws ValidateException |
|
||||
*/ |
|
||||
protected function validate(array $data, $validate, array $message = [], bool $batch = false) |
|
||||
{ |
|
||||
if (is_array($validate)) { |
|
||||
$v = new Validate(); |
|
||||
$v->rule($validate); |
|
||||
} else { |
|
||||
if (strpos($validate, '.')) { |
|
||||
// 支持场景 |
|
||||
[$validate, $scene] = explode('.', $validate); |
|
||||
} |
|
||||
$class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate); |
|
||||
$v = new $class(); |
|
||||
if (!empty($scene)) { |
|
||||
$v->scene($scene); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
$v->message($message); |
|
||||
|
|
||||
// 是否批量验证 |
|
||||
if ($batch || $this->batchValidate) { |
|
||||
$v->batch(true); |
|
||||
} |
|
||||
|
|
||||
return $v->failException(true)->check($data); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 解析当前路由参数 (分组名称、控制器名称、方法名) |
|
||||
*/ |
|
||||
protected function getRouteinfo() |
|
||||
{ |
|
||||
// 控制器名称 |
|
||||
$this->controller = toUnderScore($this->request->controller()); |
|
||||
// 方法名称 |
|
||||
$this->action = $this->request->action(); |
|
||||
// 控制器分组 (用于定义所属模块) |
|
||||
$groupstr = strstr($this->controller, '.', true); |
|
||||
$this->group = $groupstr !== false ? $groupstr : $this->controller; |
|
||||
// 当前uri |
|
||||
$this->routeUri = $this->controller . '/' . $this->action; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 后台菜单配置 |
|
||||
* @return array |
|
||||
*/ |
|
||||
private function menus() |
|
||||
{ |
|
||||
foreach ($data = Config::get('menus') as $group => $first) { |
|
||||
$data[$group]['active'] = $group === $this->group; |
|
||||
// 遍历:二级菜单 |
|
||||
if (isset($first['submenu'])) { |
|
||||
foreach ($first['submenu'] as $secondKey => $second) { |
|
||||
// 二级菜单所有uri |
|
||||
$secondUris = isset($second['uris']) ? $second['uris'] : [$second['index']]; |
|
||||
// 二级菜单:active |
|
||||
!isset($data[$group]['submenu'][$secondKey]['active']) |
|
||||
&& $data[$group]['submenu'][$secondKey]['active'] = in_array($this->routeUri, $secondUris); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
return $data; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 验证登录状态 |
|
||||
* @return bool |
|
||||
*/ |
|
||||
private function checkLogin() |
|
||||
{ |
|
||||
// 验证当前请求是否在白名单 |
|
||||
if (in_array($this->routeUri, $this->allowAllAction)) { |
|
||||
return true; |
|
||||
} |
|
||||
// 验证登录状态 |
|
||||
if (empty($this->admin) |
|
||||
|| (int)$this->admin['is_login'] !== 1 |
|
||||
) { |
|
||||
$this->redirect('passport/login'); |
|
||||
return false; |
|
||||
} |
|
||||
return true; |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
@ -1,58 +0,0 @@ |
|||||
<?php |
|
||||
namespace app; |
|
||||
|
|
||||
use think\db\exception\DataNotFoundException; |
|
||||
use think\db\exception\ModelNotFoundException; |
|
||||
use think\exception\Handle; |
|
||||
use think\exception\HttpException; |
|
||||
use think\exception\HttpResponseException; |
|
||||
use think\exception\ValidateException; |
|
||||
use think\Response; |
|
||||
use Throwable; |
|
||||
|
|
||||
/** |
|
||||
* 应用异常处理类 |
|
||||
*/ |
|
||||
class ExceptionHandle extends Handle |
|
||||
{ |
|
||||
/** |
|
||||
* 不需要记录信息(日志)的异常类列表 |
|
||||
* @var array |
|
||||
*/ |
|
||||
protected $ignoreReport = [ |
|
||||
HttpException::class, |
|
||||
HttpResponseException::class, |
|
||||
ModelNotFoundException::class, |
|
||||
DataNotFoundException::class, |
|
||||
ValidateException::class, |
|
||||
]; |
|
||||
|
|
||||
/** |
|
||||
* 记录异常信息(包括日志或者其它方式记录) |
|
||||
* |
|
||||
* @access public |
|
||||
* @param Throwable $exception |
|
||||
* @return void |
|
||||
*/ |
|
||||
public function report(Throwable $exception): void |
|
||||
{ |
|
||||
// 使用内置的方式记录异常日志 |
|
||||
parent::report($exception); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* Render an exception into an HTTP response. |
|
||||
* |
|
||||
* @access public |
|
||||
* @param \think\Request $request |
|
||||
* @param Throwable $e |
|
||||
* @return Response |
|
||||
*/ |
|
||||
public function render($request, Throwable $e): Response |
|
||||
{ |
|
||||
// 添加自定义异常处理机制 |
|
||||
|
|
||||
// 其他错误交给系统处理 |
|
||||
return parent::render($request, $e); |
|
||||
} |
|
||||
} |
|
||||
@ -1,8 +0,0 @@ |
|||||
<?php |
|
||||
namespace app; |
|
||||
|
|
||||
// 应用请求对象类 |
|
||||
class Request extends \think\Request |
|
||||
{ |
|
||||
|
|
||||
} |
|
||||
@ -1,91 +0,0 @@ |
|||||
<?php |
|
||||
namespace app\command; |
|
||||
|
|
||||
use think\console\Command; |
|
||||
use think\console\Input; |
|
||||
use think\console\input\Argument; |
|
||||
use think\console\input\Option; |
|
||||
use think\console\Output; |
|
||||
use think\facade\Db; |
|
||||
|
|
||||
class passengerFlow extends Command |
|
||||
{ |
|
||||
|
|
||||
protected function configure() |
|
||||
{ |
|
||||
$this->setName('passengerFlow') |
|
||||
->addArgument('name', Argument::OPTIONAL, "your name") |
|
||||
->addOption('city', null, Option::VALUE_REQUIRED, 'city name') |
|
||||
->setDescription('Say Hello'); |
|
||||
} |
|
||||
|
|
||||
protected function execute(Input $input, Output $output) |
|
||||
{ |
|
||||
$config = config('app'); |
|
||||
$dateData = getTargetDate(); |
|
||||
$token = getAccessToken(); |
|
||||
|
|
||||
$arr = [ |
|
||||
'hourly' => [ |
|
||||
'startTime' => $dateData['day']['c_start_time'], |
|
||||
'endTime' => $dateData['day']['c_end_time'], |
|
||||
], |
|
||||
'daily' => [ |
|
||||
'startTime' => $dateData['month']['c_start_time'], |
|
||||
'endTime' => $dateData['month']['c_end_time'], |
|
||||
], |
|
||||
'monthly' => [ |
|
||||
'startTime' => $dateData['year']['c_start_time'], |
|
||||
'endTime' => date('c'), |
|
||||
] |
|
||||
]; |
|
||||
|
|
||||
$url = $config['host_url'] . "/api/cfas/v2/passengerFlow/groups"; |
|
||||
|
|
||||
$delete = Db::table('tp_passenger_flow')->where('id','>',1)->delete(); |
|
||||
|
|
||||
try { |
|
||||
foreach ($arr as $granularity => $value) { |
|
||||
|
|
||||
$dataArr = [ |
|
||||
'granularity' => $granularity, |
|
||||
'startTime' => $value['startTime'], |
|
||||
'endTime' => $value['endTime'], |
|
||||
'ids' => '01' // --- <replace> --- // |
|
||||
]; |
|
||||
|
|
||||
$json_data = json_encode($dataArr); |
|
||||
$result = postToken($url,$json_data,false,[],$token); |
|
||||
|
|
||||
$res_data = json_decode($result,true); |
|
||||
if ($res_data['code'] != 0) throw new \Exception('请求失败'); |
|
||||
$list = (array)$res_data['data']['list']; |
|
||||
|
|
||||
foreach ($list as $val) { |
|
||||
$insert_arr = [ |
|
||||
'groupId' => $val['groupId'], |
|
||||
'groupName' => $val['groupName'], |
|
||||
'flowInNum' => $val['flowInNum'], |
|
||||
'flowOutNum' => $val['flowOutNum'], |
|
||||
'noRepeatInNum' => $val['noRepeatInNum'], |
|
||||
'noRepeatOutNum' => $val['noRepeatOutNum'], |
|
||||
'holdValue' => $val['holdValue'], |
|
||||
'createTime' => $val['createTime'], |
|
||||
'updateTime' => $val['updateTime'], |
|
||||
'netValue' => $val['netValue'], |
|
||||
'statTime' => $val['statTime'], |
|
||||
'granularity' => $granularity, |
|
||||
]; |
|
||||
|
|
||||
Db::table('tp_passenger_flow')->insert($insert_arr); |
|
||||
} |
|
||||
|
|
||||
} |
|
||||
$output->writeln('完成'); |
|
||||
} catch (\Exception $e) { |
|
||||
$output->writeln($e->getMessage()); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
//return $res_data['data']['list']; |
|
||||
@ -1,92 +0,0 @@ |
|||||
<?php |
|
||||
namespace app\command; |
|
||||
|
|
||||
use think\console\Command; |
|
||||
use think\console\Input; |
|
||||
use think\console\input\Argument; |
|
||||
use think\console\input\Option; |
|
||||
use think\console\Output; |
|
||||
use think\facade\Db; |
|
||||
|
|
||||
class passengerFlowAll extends Command |
|
||||
{ |
|
||||
|
|
||||
protected function configure() |
|
||||
{ |
|
||||
$this->setName('passengerFlow') |
|
||||
->addArgument('name', Argument::OPTIONAL, "your name") |
|
||||
->addOption('city', null, Option::VALUE_REQUIRED, 'city name') |
|
||||
->setDescription('Say Hello'); |
|
||||
} |
|
||||
|
|
||||
protected function execute(Input $input, Output $output) |
|
||||
{ |
|
||||
$config = config('app'); |
|
||||
$dateData = getTargetDate(); |
|
||||
$token = getAccessToken(); |
|
||||
|
|
||||
$dateArr = [ |
|
||||
'day' => [ |
|
||||
'startTime' => $dateData['day']['c_start_time'],// 当天开始时间 |
|
||||
'endTime' => date("c"),// 当天结束时间 |
|
||||
'granularity' => 'daily' |
|
||||
], |
|
||||
'week' => [ |
|
||||
'startTime' => $dateData['week']['c_start_time'], |
|
||||
'endTime' => date("c"), |
|
||||
'granularity' => 'daily' |
|
||||
], |
|
||||
'month' =>[ |
|
||||
'startTime' => $dateData['month']['c_start_time'], |
|
||||
'endTime' => date("c"), |
|
||||
'granularity' => 'monthly' |
|
||||
] |
|
||||
|
|
||||
]; |
|
||||
|
|
||||
$delete = Db::table('tp_passenger_flow_all')->where('id','>',1)->delete(); |
|
||||
|
|
||||
try { |
|
||||
foreach ($dateArr as $date => $value) { |
|
||||
|
|
||||
$url = $config['host_url'] . "/api/cfas/v2/passengerFlow/groups"; |
|
||||
$granularity = $value['granularity']; |
|
||||
$dataArr = [ |
|
||||
'granularity' => $granularity, |
|
||||
'startTime' => $value['startTime'], |
|
||||
'endTime' => $value['endTime'], |
|
||||
'ids' => '01' // --- <replace> --- // |
|
||||
]; |
|
||||
|
|
||||
$json_data = json_encode($dataArr); |
|
||||
$result = postToken($url,$json_data,false,[],$token); |
|
||||
|
|
||||
$res_data = json_decode($result,true); |
|
||||
if ($res_data['code'] != 0) throw new \Exception('请求失败'); |
|
||||
$list = (array)$res_data['data']['list']; |
|
||||
foreach ($list as $val) { |
|
||||
$insert_arr = [ |
|
||||
'groupId' => $val['groupId'], |
|
||||
'groupName' => $val['groupName'], |
|
||||
'flowInNum' => $val['flowInNum'], |
|
||||
'flowOutNum' => $val['flowOutNum'], |
|
||||
'noRepeatInNum' => $val['noRepeatInNum'], |
|
||||
'noRepeatOutNum' => $val['noRepeatOutNum'], |
|
||||
'holdValue' => $val['holdValue'], |
|
||||
'createTime' => $val['createTime'], |
|
||||
'updateTime' => $val['updateTime'], |
|
||||
'netValue' => $val['netValue'], |
|
||||
'statTime' => $val['statTime'], |
|
||||
'granularity' => $granularity, |
|
||||
'date' => $date, |
|
||||
]; |
|
||||
|
|
||||
Db::table('tp_passenger_flow_all')->insert($insert_arr); |
|
||||
} |
|
||||
} |
|
||||
$output->writeln('完成'); |
|
||||
} catch (\Exception $e) { |
|
||||
$output->writeln($e->getMessage()); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,65 +0,0 @@ |
|||||
<?php |
|
||||
namespace app\command; |
|
||||
|
|
||||
use think\console\Command; |
|
||||
use think\console\Input; |
|
||||
use think\console\input\Argument; |
|
||||
use think\console\input\Option; |
|
||||
use think\console\Output; |
|
||||
use think\facade\Db; |
|
||||
|
|
||||
class passengerFlowReal extends Command |
|
||||
{ |
|
||||
|
|
||||
protected function configure() |
|
||||
{ |
|
||||
$this->setName('passengerFlow') |
|
||||
->addArgument('name', Argument::OPTIONAL, "your name") |
|
||||
->addOption('city', null, Option::VALUE_REQUIRED, 'city name') |
|
||||
->setDescription('Say Hello'); |
|
||||
} |
|
||||
|
|
||||
protected function execute(Input $input, Output $output) |
|
||||
{ |
|
||||
$config = config('app'); |
|
||||
|
|
||||
$delete = Db::table('tp_passenger_flow_real')->where('id','>',1)->delete(); |
|
||||
|
|
||||
try{ |
|
||||
|
|
||||
$url = $config['host_url'] . "/api/cfas/v3/passenger/realTime"; |
|
||||
$dataArr = [ |
|
||||
'01' // --- <replace> --- // |
|
||||
]; |
|
||||
|
|
||||
$token = getAccessToken(); |
|
||||
$json_data = json_encode($dataArr); |
|
||||
$result = postToken($url,$json_data,false,[],$token); |
|
||||
|
|
||||
$res_data = json_decode($result,true); |
|
||||
|
|
||||
$list = (array) $res_data['data']; |
|
||||
|
|
||||
foreach ($list as $value) { |
|
||||
|
|
||||
$insert_arr = [ |
|
||||
'groupId' => $value['groupId'], |
|
||||
'regionId' => $value['regionId'], |
|
||||
'statisticsTime' => $value['statisticsTime'], |
|
||||
'enter' => $value['enter'], |
|
||||
'exit' => $value['exit'], |
|
||||
'pass' => $value['pass'], |
|
||||
'holdValue' => $value['holdValue'], |
|
||||
'allEnter' => $value['allEnter'], |
|
||||
'allExit' => $value['allExit'] |
|
||||
]; |
|
||||
|
|
||||
Db::table('tp_passenger_flow_real')->insert($insert_arr); |
|
||||
} |
|
||||
|
|
||||
$output->writeln('完成'); |
|
||||
} catch (\Exception $e) { |
|
||||
$output->writeln($e->getMessage()); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,237 +0,0 @@ |
|||||
<?php |
|
||||
// 应用公共文件 |
|
||||
use think\facade\Request; |
|
||||
use think\facade\Session; |
|
||||
/** |
|
||||
* 模拟GET请求 HTTPS的页面 |
|
||||
* @param string $url 请求地址 |
|
||||
* @param array $data |
|
||||
* @return string $result |
|
||||
*/ |
|
||||
function get(string $url, array $data = []) |
|
||||
{ |
|
||||
// 处理query参数 |
|
||||
if (!empty($data)) { |
|
||||
$url = $url . '?' . http_build_query($data); |
|
||||
} |
|
||||
$curl = curl_init(); |
|
||||
curl_setopt($curl, CURLOPT_URL, $url); |
|
||||
curl_setopt($curl, CURLOPT_HEADER, 0); |
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); |
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts |
|
||||
$result = curl_exec($curl); |
|
||||
if ($result === false) { |
|
||||
curl_error($curl); |
|
||||
} |
|
||||
curl_close($curl); |
|
||||
return $result; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 模拟POST请求 |
|
||||
* @param string $url 请求地址 |
|
||||
* @param mixed $data 请求数据 |
|
||||
* @param false $useCert 是否引入微信支付证书 |
|
||||
* @param array $sslCert 证书路径 |
|
||||
* @return mixed|bool|string |
|
||||
*/ |
|
||||
function post(string $url, $data = [], bool $useCert = false, array $sslCert = []) |
|
||||
{ |
|
||||
$header = [ |
|
||||
'Content-type: application/json;' |
|
||||
]; |
|
||||
$curl = curl_init(); |
|
||||
curl_setopt($curl, CURLOPT_URL, $url); |
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); |
|
||||
curl_setopt($curl, CURLOPT_HEADER, false); |
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); |
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
||||
curl_setopt($curl, CURLOPT_POST, TRUE); |
|
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); |
|
||||
if ($useCert == true) { |
|
||||
// 设置证书:cert 与 key 分别属于两个.pem文件 |
|
||||
curl_setopt($curl, CURLOPT_SSLCERTTYPE, 'PEM'); |
|
||||
curl_setopt($curl, CURLOPT_SSLCERT, $sslCert['certPem']); |
|
||||
curl_setopt($curl, CURLOPT_SSLKEYTYPE, 'PEM'); |
|
||||
curl_setopt($curl, CURLOPT_SSLKEY, $sslCert['keyPem']); |
|
||||
} |
|
||||
$result = curl_exec($curl); |
|
||||
if ($result === false) { |
|
||||
curl_error($curl); |
|
||||
} |
|
||||
curl_close($curl); |
|
||||
return $result; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 模拟POST请求 |
|
||||
* @param string $url 请求地址 |
|
||||
* @param mixed $data 请求数据 |
|
||||
* @param false $useCert 是否引入微信支付证书 |
|
||||
* @param array $sslCert 证书路径 |
|
||||
* @return mixed|bool|string |
|
||||
*/ |
|
||||
function postToken(string $url, $data = [], bool $useCert = false, array $sslCert = [],string $token) |
|
||||
{ |
|
||||
$header = [ |
|
||||
'Content-type: application/json;', |
|
||||
"access_token: {$token}" |
|
||||
]; |
|
||||
$curl = curl_init(); |
|
||||
curl_setopt($curl, CURLOPT_URL, $url); |
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); |
|
||||
curl_setopt($curl, CURLOPT_HEADER, false); |
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); |
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); |
|
||||
curl_setopt($curl, CURLOPT_POST, TRUE); |
|
||||
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); |
|
||||
if ($useCert == true) { |
|
||||
// 设置证书:cert 与 key 分别属于两个.pem文件 |
|
||||
curl_setopt($curl, CURLOPT_SSLCERTTYPE, 'PEM'); |
|
||||
curl_setopt($curl, CURLOPT_SSLCERT, $sslCert['certPem']); |
|
||||
curl_setopt($curl, CURLOPT_SSLKEYTYPE, 'PEM'); |
|
||||
curl_setopt($curl, CURLOPT_SSLKEY, $sslCert['keyPem']); |
|
||||
} |
|
||||
$result = curl_exec($curl); |
|
||||
if ($result === false) { |
|
||||
curl_error($curl); |
|
||||
} |
|
||||
curl_close($curl); |
|
||||
return $result; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 模拟POST请求 [第二种方式,] |
|
||||
* @param $url |
|
||||
* @param array $data |
|
||||
* @return mixed |
|
||||
*/ |
|
||||
function post2($url, array $data = []) |
|
||||
{ |
|
||||
$header = [ |
|
||||
'Content-Type: application/x-www-form-urlencoded' |
|
||||
]; |
|
||||
$ch = curl_init(); |
|
||||
curl_setopt($ch, CURLOPT_URL, $url); |
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); |
|
||||
curl_setopt($ch, CURLOPT_POST, true); |
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); |
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//这个是重点。 |
|
||||
$result = curl_exec($ch); |
|
||||
if ($result === false) { |
|
||||
curl_error($ch); |
|
||||
} |
|
||||
curl_close($ch); |
|
||||
return $result; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 获取当前域名及根路径 |
|
||||
* @return string |
|
||||
*/ |
|
||||
function base_url() |
|
||||
{ |
|
||||
static $baseUrl = ''; |
|
||||
if (empty($baseUrl)) { |
|
||||
$request = Request::instance(); |
|
||||
$subDir = str_replace('\\', '/', dirname($request->server('PHP_SELF'))); |
|
||||
$baseUrl = $request->scheme() . '://' . $request->host() . $subDir . ($subDir === '/' ? '' : '/'); |
|
||||
} |
|
||||
return $baseUrl; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 获取 接口 accessToken |
|
||||
* @return mixed |
|
||||
*/ |
|
||||
function getAccessToken(){ |
|
||||
|
|
||||
$token = Session::get('apiAccessToken'); |
|
||||
|
|
||||
if (empty($token)) { |
|
||||
$config = config('app'); |
|
||||
// |
|
||||
$url = $config['host_url']."/oauth/token?client_id=".$config['cid']."&client_secret=".$config['cskey']; |
|
||||
// do post |
|
||||
$ret = post($url); |
|
||||
$res = json_decode($ret,true); |
|
||||
if ($res['access_token']) { |
|
||||
Session::set('apiAccessToken',$res['access_token']); |
|
||||
$token = $res['access_token']; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
return $token; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 获取 天,周,月,年 开始时间~结束时间 |
|
||||
* @param $granularity |
|
||||
* @return array |
|
||||
*/ |
|
||||
function getTargetDate($granularity = 'all') { |
|
||||
|
|
||||
$data = []; |
|
||||
|
|
||||
if ($granularity === 'day' || $granularity === 'all') { |
|
||||
$date = $granularity !== 'all' ? $granularity : 'day'; |
|
||||
$data[$date] = [ |
|
||||
'start_time' => strtotime('today'), |
|
||||
'end_time' => strtotime('tomorrow - 1 second'), |
|
||||
]; |
|
||||
} |
|
||||
if ($granularity === 'week' || $granularity === 'all') { |
|
||||
$date = $granularity !== 'all' ? $granularity : 'week'; |
|
||||
$data[$date] = [ |
|
||||
'start_time' => strtotime('this week midnight'), |
|
||||
'end_time' => strtotime('next week midnight - 1 second'), |
|
||||
]; |
|
||||
} |
|
||||
if ($granularity === 'month' || $granularity === 'all') { |
|
||||
$date = $granularity !== 'all' ? $granularity : 'month'; |
|
||||
$data[$date] = [ |
|
||||
'start_time' => strtotime(date('Y-m-01 00:00:00')), |
|
||||
'end_time' => strtotime(date('Y-m-t 23:59:59')), |
|
||||
]; |
|
||||
} |
|
||||
if ($granularity === 'year' || $granularity === 'all') { |
|
||||
$date = $granularity !== 'all' ? $granularity : 'year'; |
|
||||
$data[$date] = [ |
|
||||
'start_time' => strtotime('first day of January this year'), |
|
||||
'end_time' => strtotime('first day of January next year - 1 second'), |
|
||||
]; |
|
||||
} |
|
||||
|
|
||||
foreach ($data as &$val) { |
|
||||
$val['c_start_time'] = date("c",$val['start_time']); |
|
||||
$val['c_end_time'] = date("c",$val['end_time']); |
|
||||
$val['start_time'] = date("Y-m-d H:i:s",$val['start_time']); |
|
||||
$val['end_time'] = date("Y-m-d H:i:s",$val['end_time']); |
|
||||
} |
|
||||
return $data; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 特殊处理数字 |
|
||||
* @param $number |
|
||||
* @return string |
|
||||
*/ |
|
||||
function formatNumber($number) |
|
||||
{ |
|
||||
if ($number < 10000) { |
|
||||
return number_format($number); |
|
||||
} else if ($number < 100000000) { |
|
||||
if ($number % 10000 == 0) { |
|
||||
return number_format($number / 10000) . '万'; |
|
||||
} else { |
|
||||
return number_format($number); |
|
||||
} |
|
||||
} else { |
|
||||
if ($number % 100000000 == 0) { |
|
||||
return number_format($number / 100000000) . '亿'; |
|
||||
} else { |
|
||||
return number_format($number); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
@ -1,235 +0,0 @@ |
|||||
<?php |
|
||||
namespace app\controller; |
|
||||
|
|
||||
use app\BaseController; |
|
||||
use think\facade\Db; |
|
||||
use think\facade\View; |
|
||||
|
|
||||
class Index extends BaseController |
|
||||
{ |
|
||||
public function index() |
|
||||
{ |
|
||||
return view("index"); |
|
||||
//return '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:) </h1><p> ThinkPHP V' . \think\facade\App::version() . '<br/><span style="font-size:30px;">14载初心不改 - 你值得信赖的PHP框架</span></p><span style="font-size:25px;">[ V6.0 版本由 <a href="https://www.yisu.com/" target="yisu">亿速云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=64890268" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="ee9b1aa918103c4fc"></think>'; |
|
||||
} |
|
||||
|
|
||||
public function hello($name = 'ThinkPHP6') |
|
||||
{ |
|
||||
return 'hello,' . $name; |
|
||||
} |
|
||||
|
|
||||
public function getAccessToken(){ |
|
||||
$config = config('app'); |
|
||||
// |
|
||||
$url = $config['host_url']."/oauth/token?client_id=".$config['cid']."&client_secret=".$config['cskey']; |
|
||||
// do post |
|
||||
$ret = post($url); |
|
||||
|
|
||||
return $ret; |
|
||||
} |
|
||||
|
|
||||
protected $token = 'y871T5okLEegC6WrcKN259Mhy4AGDcjm'; |
|
||||
|
|
||||
/** |
|
||||
* 分时时间段接口 <首页-客流趋势> |
|
||||
* @return false|string |
|
||||
* @throws \think\db\exception\DataNotFoundException |
|
||||
* @throws \think\db\exception\DbException |
|
||||
* @throws \think\db\exception\ModelNotFoundException |
|
||||
*/ |
|
||||
public function allGroupTimeNum() { |
|
||||
|
|
||||
$request = $this->request; |
|
||||
$granularity = $request['granularity']; |
|
||||
if (empty($granularity)) return json_encode(['code' => 403, 'date参数不能为空'],JSON_UNESCAPED_UNICODE); |
|
||||
|
|
||||
$dateData = getTargetDate(); |
|
||||
$allTimeData = []; |
|
||||
$groupsData = []; |
|
||||
if ($granularity == 'daily') { |
|
||||
$list = Db::table('tp_passenger_flow')->where(['granularity' => 'hourly'])->select()->toArray(); |
|
||||
$data = $this->handleGroupData($list); |
|
||||
$allTimeData = $data['allTimeData']; |
|
||||
$groupsData = $data['groupsData']; |
|
||||
} elseif ($granularity == 'monthly') { |
|
||||
$list = Db::table('tp_passenger_flow')->where(['granularity' => 'daily'])->select()->toArray(); |
|
||||
$data = $this->handleGroupData($list,'d'); |
|
||||
$allTimeData = $data['allTimeData']; |
|
||||
$groupsData = $data['groupsData']; |
|
||||
} elseif ($granularity == 'yearly') { |
|
||||
$list = Db::table('tp_passenger_flow')->where(['granularity' => 'monthly'])->select()->toArray(); |
|
||||
$data = $this->handleGroupData($list,'m'); |
|
||||
$allTimeData = $data['allTimeData']; |
|
||||
$groupsData = $data['groupsData']; |
|
||||
} |
|
||||
|
|
||||
return json_encode(['code' => 0, 'msg' => '成功', 'data' => [ |
|
||||
'allTimeData' => $allTimeData, |
|
||||
'groupsData' => $groupsData |
|
||||
]],JSON_UNESCAPED_UNICODE); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 查询时间范围内的多个统计组的客流统计数据 |
|
||||
* @param $granularity // 可选 hourly | daily | monthly | yearly,分别为按小时、按天、按月和按年统计 |
|
||||
* @param $s_time // 开始时间 |
|
||||
* @param $e_time // 结束时间 |
|
||||
* @return false|mixed|string |
|
||||
*/ |
|
||||
protected function getGroupData($granularity,$s_time,$e_time) { |
|
||||
$config = config('app'); |
|
||||
$token = getAccessToken(); |
|
||||
$url = $config['host_url'] . "/api/cfas/v2/passengerFlow/groups"; |
|
||||
$dataArr = [ |
|
||||
'granularity' => $granularity, |
|
||||
'startTime' => $s_time, |
|
||||
'endTime' => $e_time, |
|
||||
'ids' => '01' // --- <replace> --- // |
|
||||
]; |
|
||||
|
|
||||
$json_data = json_encode($dataArr); |
|
||||
$result = postToken($url,$json_data,false,[],$token); |
|
||||
|
|
||||
$res_data = json_decode($result,true); |
|
||||
if ($res_data['code'] != 0) return json_encode(['code' => 403, 'msg' => $res_data['msg']],JSON_UNESCAPED_UNICODE); |
|
||||
|
|
||||
return json_encode(['code' => 403, 'msg' => $res_data['msg'],'data' => $res_data['data']['list']],JSON_UNESCAPED_UNICODE); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 特殊处理 |
|
||||
* @param $list |
|
||||
* @param $date_str |
|
||||
* @return array |
|
||||
*/ |
|
||||
protected function handleGroupData($list,$date_str = 'H:00') { |
|
||||
$allTimeData = []; |
|
||||
$groupsData = []; |
|
||||
if ($date_str == 'H:00') { |
|
||||
for ($i = 9; $i < 23; $i++) { |
|
||||
$str = strlen($i) == 1 ? '0'.$i.':00' : $i.':00'; |
|
||||
$allTimeData[$str]['num'] = 0; |
|
||||
$allTimeData[$str]['title'] = $str; |
|
||||
} |
|
||||
} elseif ($date_str == 'd') { |
|
||||
$d = date('d') * 1; |
|
||||
$date = $d - 12 > 0 ? $d - 12 : 1; |
|
||||
for ($i = $date; $i <= $d; $i++) { |
|
||||
$str = strlen($i) == 1 ? '0'.$i : $i; |
|
||||
$allTimeData[$str]['num'] = 0; |
|
||||
$allTimeData[$str]['title'] = $str; |
|
||||
} |
|
||||
} elseif ($date_str == 'm') { |
|
||||
$m = date('m') * 1; |
|
||||
$date = $m - 12 > 0 ? $m - 12 : 1; |
|
||||
for ($i = $date; $i <= $m; $i++) { |
|
||||
$str = strlen($i) == 1 ? '0'.$i : $i; |
|
||||
$allTimeData[$str]['num'] = 0; |
|
||||
$allTimeData[$str]['title'] = $str; |
|
||||
} |
|
||||
} |
|
||||
$sumNoRepeatInNum = 0; |
|
||||
foreach ($list as $value) { |
|
||||
$sumNoRepeatInNum += $value['noRepeatInNum']; // 进馆总人数 |
|
||||
if (!isset($groupsData[$value['groupName']]['noRepeatInNum'])) $groupsData[$value['groupName']]['noRepeatInNum'] = 0; |
|
||||
$groupsData[$value['groupName']]['noRepeatInNum'] += $value['noRepeatInNum']; // 分租进馆人数 |
|
||||
$date = date($date_str,ceil($value['createTime'] / 1000) + (8*3600)); // 各时间端进馆人数 |
|
||||
if (!isset($allTimeData[$date])) continue; |
|
||||
$allTimeData[$date]['num'] += $value['noRepeatInNum']; |
|
||||
} |
|
||||
ksort($allTimeData); |
|
||||
|
|
||||
// 计算各组占比 |
|
||||
foreach ($groupsData as &$val) { |
|
||||
$val['proportion'] = (round($val['noRepeatInNum']/$sumNoRepeatInNum,2) * 100) ."%"; |
|
||||
} |
|
||||
|
|
||||
return [ |
|
||||
'allTimeData' => $allTimeData, // 总客流趋势时间段 |
|
||||
'groupsData' => $groupsData // 各组总数及占比 |
|
||||
]; |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 总览总数据接口 <首页-中间部分总览> |
|
||||
* @return false|string |
|
||||
* @throws \think\db\exception\DataNotFoundException |
|
||||
* @throws \think\db\exception\DbException |
|
||||
* @throws \think\db\exception\ModelNotFoundException |
|
||||
*/ |
|
||||
public function allGroupNum() { |
|
||||
|
|
||||
$dateArr = ['day' => 'daily', 'week' => 'daily', 'month' => 'monthly']; |
|
||||
|
|
||||
$returnData = []; |
|
||||
foreach ($dateArr as $date => $granularity) { |
|
||||
|
|
||||
$list = Db::table('tp_passenger_flow_all') |
|
||||
->where(['granularity' => $granularity, 'date' => $date])->select()->toArray(); |
|
||||
|
|
||||
$returnData[$date]['noRepeatInNum'] = 0; |
|
||||
foreach ($list as $value) { |
|
||||
$returnData[$date]['noRepeatInNum'] += $value['noRepeatInNum']; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
foreach ($returnData as &$val) { |
|
||||
$val['noRepeatInNum'] = formatNumber($val['noRepeatInNum']); |
|
||||
} |
|
||||
|
|
||||
$returnArr = [ |
|
||||
'code' => 0, |
|
||||
'msg' => '成功', |
|
||||
'data' => $returnData |
|
||||
]; |
|
||||
return json_encode($returnArr,JSON_UNESCAPED_UNICODE); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 查询最新客流统计组实时数据 <各场管实施实时进馆人数> |
|
||||
* @return void |
|
||||
*/ |
|
||||
public function realTimeData() { |
|
||||
|
|
||||
$list = Db::table('tp_passenger_flow_real')->select()->toArray(); |
|
||||
$returnData = []; |
|
||||
|
|
||||
$sumAllEnter = 0; |
|
||||
foreach ($list as $value) { |
|
||||
if (!isset($returnData[$value['groupId']]['allEnter'])) $returnData[$value['groupId']]['allEnter'] = 0; |
|
||||
$returnData[$value['groupId']]['allEnter'] += $value['allEnter']; |
|
||||
$sumAllEnter += $value['allEnter']; |
|
||||
} |
|
||||
|
|
||||
foreach ($returnData as &$val) { |
|
||||
$val['proportion'] = (round($val['allEnter']/$sumAllEnter,2) * 100) ."%"; |
|
||||
} |
|
||||
|
|
||||
return json_encode(['code' => 0, 'msg' => '成功', 'data' => $returnData],JSON_UNESCAPED_UNICODE); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 今日各场馆人数趋势 |
|
||||
* @return false|string |
|
||||
* @throws \think\db\exception\DataNotFoundException |
|
||||
* @throws \think\db\exception\DbException |
|
||||
* @throws \think\db\exception\ModelNotFoundException |
|
||||
*/ |
|
||||
public function toDayGroupsEnterNum() |
|
||||
{ |
|
||||
$list = Db::table('tp_passenger_flow')->where(['granularity' => 'hourly'])->select()->toArray(); |
|
||||
$allTimeData = []; |
|
||||
for ($i = 9; $i < 23; $i++) { |
|
||||
$str = strlen($i) == 1 ? '0'.$i.':00' : $i.':00'; |
|
||||
$allTimeData[$str] = 0; |
|
||||
} |
|
||||
$returnData = []; |
|
||||
foreach ($list as $value) { |
|
||||
$date = date('H:00',ceil($value['createTime'] / 1000)); // 各时间端进馆人数 |
|
||||
if (!isset($allTimeData[$date])) continue; |
|
||||
if (!isset($returnData[$value['groupName']][$allTimeData[$date]])) $returnData[$value['groupName']][$date] = 0; |
|
||||
$returnData[$value['groupName']][$date] += $value['flowInNum']; |
|
||||
} |
|
||||
return json_encode(['code' => 0, 'msg' => '成功', 'data' => $returnData],JSON_UNESCAPED_UNICODE); |
|
||||
} |
|
||||
} |
|
||||
@ -1,24 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
namespace app\controller; |
|
||||
|
|
||||
use app\BaseController; |
|
||||
use think\facade\View; |
|
||||
use think\facade\Session; |
|
||||
|
|
||||
class Passport extends BaseController |
|
||||
{ |
|
||||
public function login(){ |
|
||||
return View::fetch("login"); |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 退出登录 |
|
||||
*/ |
|
||||
public function logout() |
|
||||
{ |
|
||||
Session::clear('btgym_manager'); |
|
||||
$url =url('passport/login'); |
|
||||
return redirect($url); |
|
||||
} |
|
||||
} |
|
||||
@ -1,17 +0,0 @@ |
|||||
<?php |
|
||||
// 事件定义文件 |
|
||||
return [ |
|
||||
'bind' => [ |
|
||||
], |
|
||||
|
|
||||
'listen' => [ |
|
||||
'AppInit' => [], |
|
||||
'HttpRun' => [], |
|
||||
'HttpEnd' => [], |
|
||||
'LogLevel' => [], |
|
||||
'LogWrite' => [], |
|
||||
], |
|
||||
|
|
||||
'subscribe' => [ |
|
||||
], |
|
||||
]; |
|
||||
@ -1,10 +0,0 @@ |
|||||
<?php |
|
||||
// 全局中间件定义文件 |
|
||||
return [ |
|
||||
// 全局请求缓存 |
|
||||
// \think\middleware\CheckRequestCache::class, |
|
||||
// 多语言加载 |
|
||||
// \think\middleware\LoadLangPack::class, |
|
||||
// Session初始化 |
|
||||
// \think\middleware\SessionInit::class |
|
||||
]; |
|
||||
@ -1,9 +0,0 @@ |
|||||
<?php |
|
||||
use app\ExceptionHandle; |
|
||||
use app\Request; |
|
||||
|
|
||||
// 容器Provider定义文件 |
|
||||
return [ |
|
||||
'think\Request' => Request::class, |
|
||||
'think\exception\Handle' => ExceptionHandle::class, |
|
||||
]; |
|
||||
@ -1,9 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
use app\AppService; |
|
||||
|
|
||||
// 系统服务定义文件 |
|
||||
// 服务在完成全局初始化之后执行 |
|
||||
return [ |
|
||||
AppService::class, |
|
||||
]; |
|
||||
@ -1,49 +0,0 @@ |
|||||
{ |
|
||||
"name": "topthink/think", |
|
||||
"description": "the new thinkphp framework", |
|
||||
"type": "project", |
|
||||
"keywords": [ |
|
||||
"framework", |
|
||||
"thinkphp", |
|
||||
"ORM" |
|
||||
], |
|
||||
"homepage": "http://thinkphp.cn/", |
|
||||
"license": "Apache-2.0", |
|
||||
"authors": [ |
|
||||
{ |
|
||||
"name": "liu21st", |
|
||||
"email": "liu21st@gmail.com" |
|
||||
}, |
|
||||
{ |
|
||||
"name": "yunwuxin", |
|
||||
"email": "448901948@qq.com" |
|
||||
} |
|
||||
], |
|
||||
"require": { |
|
||||
"php": ">=7.1.0", |
|
||||
"topthink/framework": "^6.0.0", |
|
||||
"topthink/think-orm": "^2.0", |
|
||||
"topthink/think-view": "^1.0" |
|
||||
}, |
|
||||
"require-dev": { |
|
||||
"symfony/var-dumper": "^4.2", |
|
||||
"topthink/think-trace":"^1.0" |
|
||||
}, |
|
||||
"autoload": { |
|
||||
"psr-4": { |
|
||||
"app\\": "app" |
|
||||
}, |
|
||||
"psr-0": { |
|
||||
"": "extend/" |
|
||||
} |
|
||||
}, |
|
||||
"config": { |
|
||||
"preferred-install": "dist" |
|
||||
}, |
|
||||
"scripts": { |
|
||||
"post-autoload-dump": [ |
|
||||
"@php think service:discover", |
|
||||
"@php think vendor:publish" |
|
||||
] |
|
||||
} |
|
||||
} |
|
||||
File diff suppressed because it is too large
@ -1,37 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | 应用设置 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
|
|
||||
return [ |
|
||||
// 应用地址 |
|
||||
'app_host' => env('app.host', ''), |
|
||||
// 应用的命名空间 |
|
||||
'app_namespace' => '', |
|
||||
// 是否启用路由 |
|
||||
'with_route' => true, |
|
||||
// 默认应用 |
|
||||
'default_app' => 'index', |
|
||||
// 默认时区 |
|
||||
'default_timezone' => 'Asia/Shanghai', |
|
||||
|
|
||||
// 应用映射(自动多应用模式有效) |
|
||||
'app_map' => [], |
|
||||
// 域名绑定(自动多应用模式有效) |
|
||||
'domain_bind' => [], |
|
||||
// 禁止URL访问的应用列表(自动多应用模式有效) |
|
||||
'deny_app_list' => [], |
|
||||
|
|
||||
// 异常页面的模板文件 |
|
||||
'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl', |
|
||||
|
|
||||
// 错误显示信息,非调试模式有效 |
|
||||
'error_message' => '页面错误!请稍后再试~', |
|
||||
// 显示错误信息 |
|
||||
'show_error_msg' => false, |
|
||||
// 调用网址地址 |
|
||||
'host_url' => 'https://192.168.66.13:443/artemis', |
|
||||
'port' => '443', |
|
||||
'cid' => '29940726', |
|
||||
'cskey' => 'SkTCnQdFbNW4Z2suNj8P', |
|
||||
]; |
|
||||
@ -1,29 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | 缓存设置 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
|
|
||||
return [ |
|
||||
// 默认缓存驱动 |
|
||||
'default' => env('cache.driver', 'file'), |
|
||||
|
|
||||
// 缓存连接方式配置 |
|
||||
'stores' => [ |
|
||||
'file' => [ |
|
||||
// 驱动方式 |
|
||||
'type' => 'File', |
|
||||
// 缓存保存目录 |
|
||||
'path' => '', |
|
||||
// 缓存前缀 |
|
||||
'prefix' => '', |
|
||||
// 缓存有效期 0表示永久缓存 |
|
||||
'expire' => 0, |
|
||||
// 缓存标签前缀 |
|
||||
'tag_prefix' => 'tag:', |
|
||||
// 序列化机制 例如 ['serialize', 'unserialize'] |
|
||||
'serialize' => [], |
|
||||
], |
|
||||
// 更多的缓存连接 |
|
||||
], |
|
||||
]; |
|
||||
@ -1,12 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | 控制台配置 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
return [ |
|
||||
// 指令定义 |
|
||||
'commands' => [ |
|
||||
'passengerFlow' => 'app\command\passengerFlow', |
|
||||
'passengerFlowAll' => 'app\command\passengerFlowAll', |
|
||||
'passengerFlowReal' => 'app\command\passengerFlowReal', |
|
||||
], |
|
||||
]; |
|
||||
@ -1,20 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Cookie设置 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
return [ |
|
||||
// cookie 保存时间 |
|
||||
'expire' => 0, |
|
||||
// cookie 保存路径 |
|
||||
'path' => '/', |
|
||||
// cookie 有效域名 |
|
||||
'domain' => '', |
|
||||
// cookie 启用安全传输 |
|
||||
'secure' => false, |
|
||||
// httponly设置 |
|
||||
'httponly' => false, |
|
||||
// 是否使用 setcookie |
|
||||
'setcookie' => true, |
|
||||
// samesite 设置,支持 'strict' 'lax' |
|
||||
'samesite' => '', |
|
||||
]; |
|
||||
@ -1,63 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
return [ |
|
||||
// 默认使用的数据库连接配置 |
|
||||
'default' => env('database.driver', 'mysql'), |
|
||||
|
|
||||
// 自定义时间查询规则 |
|
||||
'time_query_rule' => [], |
|
||||
|
|
||||
// 自动写入时间戳字段 |
|
||||
// true为自动识别类型 false关闭 |
|
||||
// 字符串则明确指定时间字段类型 支持 int timestamp datetime date |
|
||||
'auto_timestamp' => true, |
|
||||
|
|
||||
// 时间字段取出后的默认时间格式 |
|
||||
'datetime_format' => 'Y-m-d H:i:s', |
|
||||
|
|
||||
// 时间字段配置 配置格式:create_time,update_time |
|
||||
'datetime_field' => '', |
|
||||
|
|
||||
// 数据库连接配置信息 |
|
||||
'connections' => [ |
|
||||
'mysql' => [ |
|
||||
// 数据库类型 |
|
||||
'type' => env('database.type', 'mysql'), |
|
||||
// 服务器地址 |
|
||||
'hostname' => env('database.hostname', '127.0.0.1'), |
|
||||
// 数据库名 |
|
||||
'database' => env('database.database', ''), |
|
||||
// 用户名 |
|
||||
'username' => env('database.username', 'root'), |
|
||||
// 密码 |
|
||||
'password' => env('database.password', 'root'), |
|
||||
// 端口 |
|
||||
'hostport' => env('database.hostport', '3306'), |
|
||||
// 数据库连接参数 |
|
||||
'params' => [], |
|
||||
// 数据库编码默认采用utf8 |
|
||||
'charset' => env('database.charset', 'utf8'), |
|
||||
// 数据库表前缀 |
|
||||
'prefix' => env('database.prefix', ''), |
|
||||
|
|
||||
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) |
|
||||
'deploy' => 0, |
|
||||
// 数据库读写是否分离 主从式有效 |
|
||||
'rw_separate' => false, |
|
||||
// 读写分离后 主服务器数量 |
|
||||
'master_num' => 1, |
|
||||
// 指定从服务器序号 |
|
||||
'slave_no' => '', |
|
||||
// 是否严格检查字段是否存在 |
|
||||
'fields_strict' => true, |
|
||||
// 是否需要断线重连 |
|
||||
'break_reconnect' => false, |
|
||||
// 监听SQL |
|
||||
'trigger_sql' => env('app_debug', true), |
|
||||
// 开启字段缓存 |
|
||||
'fields_cache' => false, |
|
||||
], |
|
||||
|
|
||||
// 更多的数据库配置信息 |
|
||||
], |
|
||||
]; |
|
||||
@ -1,24 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
return [ |
|
||||
// 默认磁盘 |
|
||||
'default' => env('filesystem.driver', 'local'), |
|
||||
// 磁盘列表 |
|
||||
'disks' => [ |
|
||||
'local' => [ |
|
||||
'type' => 'local', |
|
||||
'root' => app()->getRuntimePath() . 'storage', |
|
||||
], |
|
||||
'public' => [ |
|
||||
// 磁盘类型 |
|
||||
'type' => 'local', |
|
||||
// 磁盘路径 |
|
||||
'root' => app()->getRootPath() . 'public/storage', |
|
||||
// 磁盘路径对应的外部URL路径 |
|
||||
'url' => '/storage', |
|
||||
// 可见性 |
|
||||
'visibility' => 'public', |
|
||||
], |
|
||||
// 更多的磁盘配置信息 |
|
||||
], |
|
||||
]; |
|
||||
@ -1,27 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | 多语言设置 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
|
|
||||
return [ |
|
||||
// 默认语言 |
|
||||
'default_lang' => env('lang.default_lang', 'zh-cn'), |
|
||||
// 允许的语言列表 |
|
||||
'allow_lang_list' => [], |
|
||||
// 多语言自动侦测变量名 |
|
||||
'detect_var' => 'lang', |
|
||||
// 是否使用Cookie记录 |
|
||||
'use_cookie' => true, |
|
||||
// 多语言cookie变量 |
|
||||
'cookie_var' => 'think_lang', |
|
||||
// 多语言header变量 |
|
||||
'header_var' => 'think-lang', |
|
||||
// 扩展语言包 |
|
||||
'extend_list' => [], |
|
||||
// Accept-Language转义为对应语言包名称 |
|
||||
'accept_language' => [ |
|
||||
'zh-hans-cn' => 'zh-cn', |
|
||||
], |
|
||||
// 是否支持语言分组 |
|
||||
'allow_group' => false, |
|
||||
]; |
|
||||
@ -1,45 +0,0 @@ |
|||||
<?php |
|
||||
|
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | 日志设置 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
return [ |
|
||||
// 默认日志记录通道 |
|
||||
'default' => env('log.channel', 'file'), |
|
||||
// 日志记录级别 |
|
||||
'level' => [], |
|
||||
// 日志类型记录的通道 ['error'=>'email',...] |
|
||||
'type_channel' => [], |
|
||||
// 关闭全局日志写入 |
|
||||
'close' => false, |
|
||||
// 全局日志处理 支持闭包 |
|
||||
'processor' => null, |
|
||||
|
|
||||
// 日志通道列表 |
|
||||
'channels' => [ |
|
||||
'file' => [ |
|
||||
// 日志记录方式 |
|
||||
'type' => 'File', |
|
||||
// 日志保存目录 |
|
||||
'path' => '', |
|
||||
// 单文件日志写入 |
|
||||
'single' => false, |
|
||||
// 独立日志级别 |
|
||||
'apart_level' => [], |
|
||||
// 最大日志文件数量 |
|
||||
'max_files' => 0, |
|
||||
// 使用JSON格式记录 |
|
||||
'json' => false, |
|
||||
// 日志处理 |
|
||||
'processor' => null, |
|
||||
// 关闭通道日志写入 |
|
||||
'close' => false, |
|
||||
// 日志输出格式化 |
|
||||
'format' => '[%s][%s] %s', |
|
||||
// 是否实时写入 |
|
||||
'realtime_write' => false, |
|
||||
], |
|
||||
// 其它日志通道配置 |
|
||||
], |
|
||||
|
|
||||
]; |
|
||||
@ -1,8 +0,0 @@ |
|||||
<?php |
|
||||
// 中间件配置 |
|
||||
return [ |
|
||||
// 别名或分组 |
|
||||
'alias' => [], |
|
||||
// 优先级设置,此数组中的中间件会按照数组中的顺序优先执行 |
|
||||
'priority' => [], |
|
||||
]; |
|
||||
@ -1,45 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | 路由设置 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
|
|
||||
return [ |
|
||||
// pathinfo分隔符 |
|
||||
'pathinfo_depr' => '/', |
|
||||
// URL伪静态后缀 |
|
||||
'url_html_suffix' => 'html', |
|
||||
// URL普通方式参数 用于自动生成 |
|
||||
'url_common_param' => true, |
|
||||
// 是否开启路由延迟解析 |
|
||||
'url_lazy_route' => false, |
|
||||
// 是否强制使用路由 |
|
||||
'url_route_must' => false, |
|
||||
// 合并路由规则 |
|
||||
'route_rule_merge' => false, |
|
||||
// 路由是否完全匹配 |
|
||||
'route_complete_match' => false, |
|
||||
// 访问控制器层名称 |
|
||||
'controller_layer' => 'controller', |
|
||||
// 空控制器名 |
|
||||
'empty_controller' => 'Error', |
|
||||
// 是否使用控制器后缀 |
|
||||
'controller_suffix' => false, |
|
||||
// 默认的路由变量规则 |
|
||||
'default_route_pattern' => '[\w\.]+', |
|
||||
// 是否开启请求缓存 true自动缓存 支持设置请求缓存规则 |
|
||||
'request_cache_key' => false, |
|
||||
// 请求缓存有效期 |
|
||||
'request_cache_expire' => null, |
|
||||
// 全局请求缓存排除规则 |
|
||||
'request_cache_except' => [], |
|
||||
// 默认控制器名 |
|
||||
'default_controller' => 'Index', |
|
||||
// 默认操作名 |
|
||||
'default_action' => 'index', |
|
||||
// 操作方法后缀 |
|
||||
'action_suffix' => '', |
|
||||
// 默认JSONP格式返回的处理方法 |
|
||||
'default_jsonp_handler' => 'jsonpReturn', |
|
||||
// 默认JSONP处理方法 |
|
||||
'var_jsonp_handler' => 'callback', |
|
||||
]; |
|
||||
@ -1,19 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | 会话设置 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
|
|
||||
return [ |
|
||||
// session name |
|
||||
'name' => 'PHPSESSID', |
|
||||
// SESSION_ID的提交变量,解决flash上传跨域 |
|
||||
'var_session_id' => '', |
|
||||
// 驱动方式 支持file cache |
|
||||
'type' => 'file', |
|
||||
// 存储连接标识 当type使用cache的时候有效 |
|
||||
'store' => null, |
|
||||
// 过期时间 |
|
||||
'expire' => 1440, |
|
||||
// 前缀 |
|
||||
'prefix' => '', |
|
||||
]; |
|
||||
@ -1,10 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Trace设置 开启调试模式后有效 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
return [ |
|
||||
// 内置Html和Console两种方式 支持扩展 |
|
||||
'type' => 'Html', |
|
||||
// 读取的日志通道名 |
|
||||
'channel' => '', |
|
||||
]; |
|
||||
@ -1,29 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | 模板设置 |
|
||||
// +---------------------------------------------------------------------- |
|
||||
|
|
||||
return [ |
|
||||
// 模板引擎类型使用Think |
|
||||
'type' => 'Think', |
|
||||
// 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法 |
|
||||
'auto_rule' => 1, |
|
||||
// 模板目录名 |
|
||||
'view_dir_name' => 'view', |
|
||||
// 模板后缀 |
|
||||
'view_suffix' => 'php', |
|
||||
// 模板文件名分隔符 |
|
||||
'view_depr' => DIRECTORY_SEPARATOR, |
|
||||
// 模板引擎普通标签开始标记 |
|
||||
'tpl_begin' => '{', |
|
||||
// 模板引擎普通标签结束标记 |
|
||||
'tpl_end' => '}', |
|
||||
// 标签库标签开始标记 |
|
||||
'taglib_begin' => '{', |
|
||||
// 标签库标签结束标记 |
|
||||
'taglib_end' => '}', |
|
||||
// layout 设置 |
|
||||
'layout_on' => true, |
|
||||
'layout_name' => 'layouts/layout', |
|
||||
'layout_item' => '{__CONTENT__}' |
|
||||
]; |
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
@ -1,8 +0,0 @@ |
|||||
<IfModule mod_rewrite.c> |
|
||||
Options +FollowSymlinks -Multiviews |
|
||||
RewriteEngine On |
|
||||
|
|
||||
RewriteCond %{REQUEST_FILENAME} !-d |
|
||||
RewriteCond %{REQUEST_FILENAME} !-f |
|
||||
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] |
|
||||
</IfModule> |
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,24 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | ThinkPHP [ WE CAN DO IT JUST THINK ] |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Copyright (c) 2006-2019 http://thinkphp.cn All rights reserved. |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Author: liu21st <liu21st@gmail.com> |
|
||||
// +---------------------------------------------------------------------- |
|
||||
|
|
||||
// [ 应用入口文件 ] |
|
||||
namespace think; |
|
||||
|
|
||||
require __DIR__ . '/../vendor/autoload.php'; |
|
||||
|
|
||||
// 执行HTTP应用并响应 |
|
||||
$http = (new App())->http; |
|
||||
|
|
||||
$response = $http->run(); |
|
||||
|
|
||||
$response->send(); |
|
||||
|
|
||||
$http->end($response); |
|
||||
@ -1,2 +0,0 @@ |
|||||
User-agent: * |
|
||||
Disallow: |
|
||||
@ -1,19 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | ThinkPHP [ WE CAN DO IT JUST THINK ] |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Copyright (c) 2006~2019 http://thinkphp.cn All rights reserved. |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Author: liu21st <liu21st@gmail.com> |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// $Id$ |
|
||||
|
|
||||
if (is_file($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SCRIPT_NAME"])) { |
|
||||
return false; |
|
||||
} else { |
|
||||
$_SERVER["SCRIPT_FILENAME"] = __DIR__ . '/index.php'; |
|
||||
|
|
||||
require __DIR__ . "/index.php"; |
|
||||
} |
|
||||
@ -1,23 +0,0 @@ |
|||||
<?php |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | ThinkPHP [ WE CAN DO IT JUST THINK ] |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) |
|
||||
// +---------------------------------------------------------------------- |
|
||||
// | Author: liu21st <liu21st@gmail.com> |
|
||||
// +---------------------------------------------------------------------- |
|
||||
use think\facade\Route; |
|
||||
|
|
||||
Route::get('think', function () { |
|
||||
return 'hello,ThinkPHP6!'; |
|
||||
}); |
|
||||
|
|
||||
Route::get('hello/:name', 'index/hello'); |
|
||||
Route::get('getAccessToken', 'index/getAccessToken'); |
|
||||
Route::get('allGroupTimeNum', 'index/allGroupTimeNum'); |
|
||||
Route::get('allGroupNum', 'index/allGroupNum'); |
|
||||
Route::get('realTimeData', 'index/realTimeData'); |
|
||||
Route::get('toDayGroupsEnterNum', 'index/toDayGroupsEnterNum'); |
|
||||
Route::rule('admin', 'admin/Index/index'); |
|
||||
@ -0,0 +1,117 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\behavior\order; |
||||
|
|
||||
|
use app\common\service\Message as MessageService; |
||||
|
use app\common\service\order\Printer as PrinterService; |
||||
|
use app\common\service\wechat\wow\Order as WowOrder; |
||||
|
use app\common\enum\OrderType as OrderTypeEnum; |
||||
|
use app\common\enum\OrderStatus as OrderStatusEnum; |
||||
|
use app\common\enum\order\OrderSource as OrderSourceEnum; |
||||
|
|
||||
|
/** |
||||
|
* 订单支付成功后扩展类 |
||||
|
* Class PaySuccess |
||||
|
* @package app\api\behavior\order |
||||
|
*/ |
||||
|
class PaySuccess |
||||
|
{ |
||||
|
// 订单信息 |
||||
|
private $order; |
||||
|
|
||||
|
// 订单类型 |
||||
|
private $orderType; |
||||
|
|
||||
|
private $wxappId; |
||||
|
|
||||
|
/** |
||||
|
* 订单来源回调业务映射类 |
||||
|
* @var array |
||||
|
*/ |
||||
|
protected $sourceCallbackClass = [ |
||||
|
OrderSourceEnum::MASTER => 'app\api\service\master\order\PaySuccess', |
||||
|
OrderSourceEnum::BARGAIN => 'app\api\service\bargain\order\PaySuccess', |
||||
|
OrderSourceEnum::SHARP => 'app\api\service\sharp\order\PaySuccess', |
||||
|
]; |
||||
|
|
||||
|
/** |
||||
|
* 执行入口 |
||||
|
* @param $order |
||||
|
* @param int $orderType |
||||
|
* @return bool |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\Exception |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function run($order, $orderType = OrderTypeEnum::MASTER) |
||||
|
{ |
||||
|
// 设置当前类的属性 |
||||
|
$this->setAttribute($order, $orderType); |
||||
|
// 订单公共业务 |
||||
|
$this->onCommonEvent(); |
||||
|
// 普通订单业务 |
||||
|
if ($orderType == OrderTypeEnum::MASTER) { |
||||
|
$this->onMasterEvent(); |
||||
|
} |
||||
|
// 订单来源回调业务 |
||||
|
$this->onSourceCallback(); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 设置当前类的属性 |
||||
|
* @param $order |
||||
|
* @param int $orderType |
||||
|
*/ |
||||
|
private function setAttribute($order, $orderType = OrderTypeEnum::MASTER) |
||||
|
{ |
||||
|
$this->order = $order; |
||||
|
$this->wxappId = $this->order['wxapp_id']; |
||||
|
$this->orderType = $orderType; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 订单公共业务 |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\Exception |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
private function onCommonEvent() |
||||
|
{ |
||||
|
// 发送消息通知 |
||||
|
MessageService::send('order.payment', [ |
||||
|
'order' => $this->order, |
||||
|
'order_type' => $this->orderType, |
||||
|
]); |
||||
|
// 小票打印 |
||||
|
(new PrinterService)->printTicket($this->order, OrderStatusEnum::ORDER_PAYMENT); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 普通订单业务 |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
private function onMasterEvent() |
||||
|
{ |
||||
|
// 同步好物圈 |
||||
|
(new WowOrder($this->wxappId))->import([$this->order], true); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 订单来源回调业务 |
||||
|
* @return bool |
||||
|
*/ |
||||
|
private function onSourceCallback() |
||||
|
{ |
||||
|
if (!isset($this->order['order_source'])) { |
||||
|
return false; |
||||
|
} |
||||
|
if (!isset($this->sourceCallbackClass[$this->order['order_source']])) { |
||||
|
return false; |
||||
|
} |
||||
|
$class = $this->sourceCallbackClass[$this->order['order_source']]; |
||||
|
return !is_null($class) ? (new $class)->onPaySuccess($this->order) : false; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,8 @@ |
|||||
|
<?php |
||||
|
|
||||
|
return [ |
||||
|
// 默认输出类型 |
||||
|
'default_return_type' => 'json', |
||||
|
// 默认全局过滤方法 用逗号分隔多个 |
||||
|
'default_filter' => 'trim,htmlspecialchars', |
||||
|
]; |
||||
@ -0,0 +1,111 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\UserAddress; |
||||
|
|
||||
|
/** |
||||
|
* 收货地址管理 |
||||
|
* Class Address |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Address extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 收货地址列表 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists() |
||||
|
{ |
||||
|
$user = $this->getUser(); |
||||
|
$model = new UserAddress; |
||||
|
$list = $model->getList($user['user_id']); |
||||
|
return $this->renderSuccess([ |
||||
|
'list' => $list, |
||||
|
'default_id' => $user['address_id'], |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 添加收货地址 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function add() |
||||
|
{ |
||||
|
$model = new UserAddress; |
||||
|
if ($model->add($this->getUser(), $this->request->post())) { |
||||
|
return $this->renderSuccess([], '添加成功'); |
||||
|
} |
||||
|
return $this->renderError('添加失败'); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 收货地址详情 |
||||
|
* @param $address_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function detail($address_id) |
||||
|
{ |
||||
|
$user = $this->getUser(); |
||||
|
$detail = UserAddress::detail($user['user_id'],$address_id); |
||||
|
$region = array_values($detail['region']); |
||||
|
return $this->renderSuccess(compact('detail', 'region')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 编辑收货地址 |
||||
|
* @param $address_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function edit($address_id) |
||||
|
{ |
||||
|
$user = $this->getUser(); |
||||
|
$model = UserAddress::detail($user['user_id'], $address_id); |
||||
|
if ($model->edit($this->request->post())) { |
||||
|
return $this->renderSuccess([], '更新成功'); |
||||
|
} |
||||
|
return $this->renderError('更新失败'); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 设为默认地址 |
||||
|
* @param $address_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function setDefault($address_id) { |
||||
|
$user = $this->getUser(); |
||||
|
$model = UserAddress::detail($user['user_id'], $address_id); |
||||
|
if ($model->setDefault($user)) { |
||||
|
return $this->renderSuccess([], '设置成功'); |
||||
|
} |
||||
|
return $this->renderError('设置失败'); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除收货地址 |
||||
|
* @param $address_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function delete($address_id) |
||||
|
{ |
||||
|
$user = $this->getUser(); |
||||
|
$model = UserAddress::detail($user['user_id'], $address_id); |
||||
|
if ($model->remove($user)) { |
||||
|
return $this->renderSuccess([], '删除成功'); |
||||
|
} |
||||
|
return $this->renderError('删除失败'); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,53 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\Article as ArticleModel; |
||||
|
use app\api\model\article\Category as CategoryModel; |
||||
|
|
||||
|
/** |
||||
|
* 文章控制器 |
||||
|
* Class Article |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Article extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 文章首页 |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function index() |
||||
|
{ |
||||
|
// 文章分类列表 |
||||
|
$categoryList = CategoryModel::getAll(); |
||||
|
return $this->renderSuccess(compact('categoryList')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 文章列表 |
||||
|
* @param int $category_id |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists($category_id = 0) |
||||
|
{ |
||||
|
$model = new ArticleModel; |
||||
|
$list = $model->getList($category_id); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 文章详情 |
||||
|
* @param $article_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\Exception |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function detail($article_id) |
||||
|
{ |
||||
|
$detail = ArticleModel::detail($article_id); |
||||
|
return $this->renderSuccess(compact('detail')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,84 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\Cart as CartModel; |
||||
|
|
||||
|
/** |
||||
|
* 购物车管理 |
||||
|
* Class Cart |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Cart extends Controller |
||||
|
{ |
||||
|
/* @var \app\api\model\User $user */ |
||||
|
private $user; |
||||
|
|
||||
|
/* @var \app\api\model\Cart $model */ |
||||
|
private $model; |
||||
|
|
||||
|
/** |
||||
|
* 构造方法 |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function _initialize() |
||||
|
{ |
||||
|
parent::_initialize(); |
||||
|
$this->user = $this->getUser(); |
||||
|
$this->model = new CartModel($this->user); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 购物车列表 |
||||
|
* @return array |
||||
|
* @throws \think\Exception |
||||
|
* @throws \think\db\exception\DataNotFoundException |
||||
|
* @throws \think\db\exception\ModelNotFoundException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists() |
||||
|
{ |
||||
|
return $this->renderSuccess($this->model->getList()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 加入购物车 |
||||
|
* @param $goods_id |
||||
|
* @param $goods_num |
||||
|
* @param $goods_sku_id |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function add($goods_id, $goods_num, $goods_sku_id) |
||||
|
{ |
||||
|
if (!$this->model->add($goods_id, $goods_num, $goods_sku_id)) { |
||||
|
return $this->renderError($this->model->getError() ?: '加入购物车失败'); |
||||
|
} |
||||
|
$total_num = $this->model->getTotalNum(); |
||||
|
return $this->renderSuccess(['cart_total_num' => $total_num], '加入购物车成功'); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 减少购物车商品数量 |
||||
|
* @param $goods_id |
||||
|
* @param $goods_sku_id |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function sub($goods_id, $goods_sku_id) |
||||
|
{ |
||||
|
$this->model->sub($goods_id, $goods_sku_id); |
||||
|
return $this->renderSuccess(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除购物车中指定商品 |
||||
|
* @param $goods_sku_id (支持字符串ID集) |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function delete($goods_sku_id) |
||||
|
{ |
||||
|
$this->model->delete($goods_sku_id); |
||||
|
return $this->renderSuccess(); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,29 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\Category as CategoryModel; |
||||
|
use app\api\model\WxappCategory as WxappCategoryModel; |
||||
|
|
||||
|
/** |
||||
|
* 商品分类控制器 |
||||
|
* Class Goods |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Category extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 分类页面 |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function index() |
||||
|
{ |
||||
|
// 分类模板 |
||||
|
$templet = WxappCategoryModel::detail(); |
||||
|
// 商品分类列表 |
||||
|
$list = array_values(CategoryModel::getCacheTree()); |
||||
|
return $this->renderSuccess(compact('templet', 'list')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,29 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\Comment as CommentModel; |
||||
|
|
||||
|
/** |
||||
|
* 商品评价控制器 |
||||
|
* Class Comment |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Comment extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 商品评价列表 |
||||
|
* @param $goods_id |
||||
|
* @param int $scoreType |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists($goods_id, $scoreType = -1) |
||||
|
{ |
||||
|
$model = new CommentModel; |
||||
|
$list = $model->getGoodsCommentList($goods_id, $scoreType); |
||||
|
$total = $model->getTotal($goods_id); |
||||
|
return $this->renderSuccess(compact('list', 'total')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,139 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\User as UserModel; |
||||
|
use app\api\model\Wxapp as WxappModel; |
||||
|
use app\common\exception\BaseException; |
||||
|
|
||||
|
/** |
||||
|
* API控制器基类 |
||||
|
* Class BaseController |
||||
|
* @package app\store\controller |
||||
|
*/ |
||||
|
class Controller extends \think\Controller |
||||
|
{ |
||||
|
const JSON_SUCCESS_STATUS = 1; |
||||
|
const JSON_ERROR_STATUS = 0; |
||||
|
|
||||
|
/* @ver $wxapp_id 小程序id */ |
||||
|
protected $wxapp_id; |
||||
|
|
||||
|
/** |
||||
|
* API基类初始化 |
||||
|
* @throws BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function _initialize() |
||||
|
{ |
||||
|
// 当前小程序id |
||||
|
$this->wxapp_id = $this->getWxappId(); |
||||
|
// 验证当前小程序状态 |
||||
|
$this->checkWxapp(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取当前小程序ID |
||||
|
* @return mixed |
||||
|
* @throws BaseException |
||||
|
*/ |
||||
|
private function getWxappId() |
||||
|
{ |
||||
|
if (!$wxapp_id = $this->request->param('wxapp_id')) { |
||||
|
throw new BaseException(['msg' => '缺少必要的参数:wxapp_id']); |
||||
|
} |
||||
|
return $wxapp_id; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 验证当前小程序状态 |
||||
|
* @throws BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
private function checkWxapp() |
||||
|
{ |
||||
|
$wxapp = WxappModel::detail($this->wxapp_id); |
||||
|
if (empty($wxapp)) { |
||||
|
throw new BaseException(['msg' => '当前小程序信息不存在']); |
||||
|
} |
||||
|
if ($wxapp['is_recycle'] || $wxapp['is_delete']) { |
||||
|
throw new BaseException(['msg' => '当前小程序已删除']); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取当前用户信息 |
||||
|
* @param bool $is_force |
||||
|
* @return UserModel|bool|null |
||||
|
* @throws BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
protected function getUser($is_force = true) |
||||
|
{ |
||||
|
if (!$token = $this->request->param('token')) { |
||||
|
$is_force && $this->throwError('缺少必要的参数:token', -1); |
||||
|
return false; |
||||
|
} |
||||
|
if (!$user = UserModel::getUser($token)) { |
||||
|
$is_force && $this->throwError('没有找到用户信息', -1); |
||||
|
return false; |
||||
|
} |
||||
|
return $user; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 输出错误信息 |
||||
|
* @param int $code |
||||
|
* @param $msg |
||||
|
* @throws BaseException |
||||
|
*/ |
||||
|
protected function throwError($msg, $code = 0) |
||||
|
{ |
||||
|
throw new BaseException(['code' => $code, 'msg' => $msg]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 返回封装后的 API 数据到客户端 |
||||
|
* @param int $code |
||||
|
* @param string $msg |
||||
|
* @param array $data |
||||
|
* @return array |
||||
|
*/ |
||||
|
protected function renderJson($code = self::JSON_SUCCESS_STATUS, $msg = '', $data = []) |
||||
|
{ |
||||
|
return compact('code', 'msg', 'data'); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 返回操作成功json |
||||
|
* @param string $msg |
||||
|
* @param array $data |
||||
|
* @return array |
||||
|
*/ |
||||
|
protected function renderSuccess($data = [], $msg = 'success') |
||||
|
{ |
||||
|
return $this->renderJson(self::JSON_SUCCESS_STATUS, $msg, $data); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 返回操作失败json |
||||
|
* @param string $msg |
||||
|
* @param array $data |
||||
|
* @return array |
||||
|
*/ |
||||
|
protected function renderError($msg = 'error', $data = []) |
||||
|
{ |
||||
|
return $this->renderJson(self::JSON_ERROR_STATUS, $msg, $data); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取post数据 (数组) |
||||
|
* @param $key |
||||
|
* @return mixed |
||||
|
*/ |
||||
|
protected function postData($key = null) |
||||
|
{ |
||||
|
return $this->request->post(is_null($key) ? '' : $key . '/a'); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,29 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\Coupon as CouponModel; |
||||
|
|
||||
|
/** |
||||
|
* 优惠券中心 |
||||
|
* Class Coupon |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Coupon extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 优惠券列表 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\db\exception\DataNotFoundException |
||||
|
* @throws \think\db\exception\ModelNotFoundException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists() |
||||
|
{ |
||||
|
$model = new CouponModel; |
||||
|
$list = $model->getList($this->getUser(false)); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,74 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\Goods as GoodsModel; |
||||
|
use app\api\model\Cart as CartModel; |
||||
|
use app\common\service\qrcode\Goods as GoodsPoster; |
||||
|
|
||||
|
/** |
||||
|
* 商品控制器 |
||||
|
* Class Goods |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Goods extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 商品列表 |
||||
|
* @param $category_id |
||||
|
* @param $search |
||||
|
* @param $sortType |
||||
|
* @param $sortPrice |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists($category_id, $search, $sortType, $sortPrice) |
||||
|
{ |
||||
|
$model = new GoodsModel; |
||||
|
$list = $model->getList(10, $category_id, $search, $sortType, $sortPrice); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取商品详情 |
||||
|
* @param $goods_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function detail($goods_id) |
||||
|
{ |
||||
|
// 商品详情 |
||||
|
$detail = GoodsModel::detail($goods_id); |
||||
|
if (!$detail || $detail['is_delete'] || $detail['goods_status']['value'] != 10) { |
||||
|
return $this->renderError('很抱歉,商品信息不存在或已下架'); |
||||
|
} |
||||
|
// 多规格商品sku信息 |
||||
|
$specData = $detail['spec_type'] == 20 ? $detail->getManySpecData($detail['spec_rel'], $detail['sku']) : null; |
||||
|
// 购物车商品总数量 |
||||
|
$cart_total_num = 0; |
||||
|
if ($user = $this->getUser(false)) { |
||||
|
$cart_total_num = (new CartModel($user))->getGoodsNum(); |
||||
|
} |
||||
|
return $this->renderSuccess(compact('detail', 'cart_total_num', 'specData')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取推广二维码 |
||||
|
* @param $goods_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
* @throws \Exception |
||||
|
*/ |
||||
|
public function poster($goods_id) |
||||
|
{ |
||||
|
// 商品详情 |
||||
|
$detail = GoodsModel::detail($goods_id); |
||||
|
$Qrcode = new GoodsPoster($detail, $this->getUser(false)); |
||||
|
return $this->renderSuccess([ |
||||
|
'qrcode' => $Qrcode->getImage(), |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,135 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\Order as OrderModel; |
||||
|
use app\api\model\Cart as CartModel; |
||||
|
use app\common\enum\DeliveryType as DeliveryTypeEnum; |
||||
|
use app\common\enum\order\PayType as PayTypeEnum; |
||||
|
|
||||
|
/** |
||||
|
* 订单控制器 |
||||
|
* Class Order |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Order extends Controller |
||||
|
{ |
||||
|
/* @var \app\api\model\User $user */ |
||||
|
private $user; |
||||
|
|
||||
|
/** |
||||
|
* 构造方法 |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function _initialize() |
||||
|
{ |
||||
|
parent::_initialize(); |
||||
|
$this->user = $this->getUser(); // 用户信息 |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 订单确认-立即购买 |
||||
|
* @param int $goods_id 商品id |
||||
|
* @param int $goods_num 购买数量 |
||||
|
* @param int $goods_sku_id 商品sku_id |
||||
|
* @param int $delivery 配送方式 |
||||
|
* @param int $pay_type 支付方式 |
||||
|
* @param int $coupon_id 优惠券id |
||||
|
* @param int $shop_id 自提门店id |
||||
|
* @param string $remark 买家留言 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
* @throws \Exception |
||||
|
*/ |
||||
|
public function buyNow( |
||||
|
$goods_id, |
||||
|
$goods_num, |
||||
|
$goods_sku_id, |
||||
|
$delivery = DeliveryTypeEnum::EXPRESS, |
||||
|
$pay_type = PayTypeEnum::WECHAT, |
||||
|
$shop_id = 0, |
||||
|
$coupon_id = null, |
||||
|
$remark = '' |
||||
|
) |
||||
|
{ |
||||
|
// 商品结算信息 |
||||
|
$model = new OrderModel; |
||||
|
$order = $model->getBuyNow( |
||||
|
$this->user, |
||||
|
$goods_id, |
||||
|
$goods_num, |
||||
|
$goods_sku_id, |
||||
|
$delivery, |
||||
|
$pay_type, |
||||
|
$shop_id |
||||
|
); |
||||
|
if (!$this->request->isPost()) { |
||||
|
return $this->renderSuccess($order); |
||||
|
} |
||||
|
if ($model->hasError()) { |
||||
|
return $this->renderError($model->getError()); |
||||
|
} |
||||
|
// 创建订单 |
||||
|
if (!$model->createOrder($this->user, $order, $coupon_id, $remark)) { |
||||
|
return $this->renderError($model->getError() ?: '订单创建失败'); |
||||
|
} |
||||
|
// 构建微信支付请求 |
||||
|
$payment = ($pay_type == PayTypeEnum::WECHAT) ? $model->paymentByWechat($this->user) : []; |
||||
|
return $this->renderSuccess([ |
||||
|
'order_id' => $model['order_id'], // 订单id |
||||
|
'pay_type' => $pay_type, // 支付方式 |
||||
|
'payment' => $payment // 微信支付参数 |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 订单确认-购物车结算 |
||||
|
* @param string $cart_ids (支持字符串ID集) |
||||
|
* @param int $delivery 配送方式 |
||||
|
* @param int $pay_type 支付方式 |
||||
|
* @param int $shop_id 自提门店id |
||||
|
* @param int $coupon_id 优惠券id |
||||
|
* @param string $remark 买家留言 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\Exception |
||||
|
* @throws \think\db\exception\DataNotFoundException |
||||
|
* @throws \think\db\exception\ModelNotFoundException |
||||
|
* @throws \think\exception\DbException |
||||
|
* @throws \Exception |
||||
|
*/ |
||||
|
public function cart( |
||||
|
$cart_ids, |
||||
|
$delivery = DeliveryTypeEnum::EXPRESS, |
||||
|
$pay_type = PayTypeEnum::WECHAT, |
||||
|
$shop_id = 0, |
||||
|
$coupon_id = null, |
||||
|
$remark = '' |
||||
|
) |
||||
|
{ |
||||
|
// 商品结算信息 |
||||
|
$Cart = new CartModel($this->user); |
||||
|
$order = $Cart->getList($cart_ids, $delivery, $pay_type, $shop_id); |
||||
|
if (!$this->request->isPost()) { |
||||
|
return $this->renderSuccess($order); |
||||
|
} |
||||
|
// 创建订单 |
||||
|
$model = new OrderModel; |
||||
|
if (!$model->createOrder($this->user, $order, $coupon_id, $remark)) { |
||||
|
return $this->renderError($model->getError() ?: '订单创建失败'); |
||||
|
} |
||||
|
// 移出购物车中已下单的商品 |
||||
|
$Cart->clearAll($cart_ids); |
||||
|
// 构建微信支付请求 |
||||
|
$payment = ($pay_type == PayTypeEnum::WECHAT) ? $model->paymentByWechat($this->user) : []; |
||||
|
// 返回状态 |
||||
|
return $this->renderSuccess([ |
||||
|
'order_id' => $model['order_id'], // 订单id |
||||
|
'pay_type' => $pay_type, // 支付方式 |
||||
|
'payment' => $payment // 微信支付参数 |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,61 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\WxappPage; |
||||
|
|
||||
|
/** |
||||
|
* 页面控制器 |
||||
|
* Class Index |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Page extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 页面数据 |
||||
|
* @param null $page_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\db\exception\DataNotFoundException |
||||
|
* @throws \think\db\exception\ModelNotFoundException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function index($page_id = null) |
||||
|
{ |
||||
|
// 页面元素 |
||||
|
$data = WxappPage::getPageData($this->getUser(false), $page_id); |
||||
|
return $this->renderSuccess($data); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 首页diy数据 (即将废弃) |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\db\exception\DataNotFoundException |
||||
|
* @throws \think\db\exception\ModelNotFoundException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function home() |
||||
|
{ |
||||
|
// 页面元素 |
||||
|
$data = WxappPage::getPageData($this->getUser(false)); |
||||
|
return $this->renderSuccess($data); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 自定义页数据 (即将废弃) |
||||
|
* @param $page_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\db\exception\DataNotFoundException |
||||
|
* @throws \think\db\exception\ModelNotFoundException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function custom($page_id) |
||||
|
{ |
||||
|
// 页面元素 |
||||
|
$data = WxappPage::getPageData($this->getUser(false), $page_id); |
||||
|
return $this->renderSuccess($data); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,65 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\Setting as SettingModel; |
||||
|
use app\api\model\recharge\Plan as PlanModel; |
||||
|
use app\api\model\recharge\Order as OrderModel; |
||||
|
use app\api\service\Payment as PaymentService; |
||||
|
use app\common\enum\OrderType as OrderTypeEnum; |
||||
|
|
||||
|
/** |
||||
|
* 用户充值管理 |
||||
|
* Class Recharge |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Recharge extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 充值中心 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\db\exception\DataNotFoundException |
||||
|
* @throws \think\db\exception\ModelNotFoundException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function index() |
||||
|
{ |
||||
|
// 用户信息 |
||||
|
$userInfo = $this->getUser(); |
||||
|
// 充值套餐列表 |
||||
|
$planList = (new PlanModel)->getList(); |
||||
|
// 充值设置 |
||||
|
$setting = SettingModel::getItem('recharge'); |
||||
|
return $this->renderSuccess(compact('userInfo', 'planList', 'setting')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 确认充值 |
||||
|
* @param null $planId |
||||
|
* @param int $customMoney |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function submit($planId = null, $customMoney = 0) |
||||
|
{ |
||||
|
// 用户信息 |
||||
|
$userInfo = $this->getUser(); |
||||
|
// 生成充值订单 |
||||
|
$model = new OrderModel; |
||||
|
if (!$model->createOrder($userInfo, $planId, $customMoney)) { |
||||
|
return $this->renderError($model->getError() ?: '充值失败'); |
||||
|
} |
||||
|
// 构建微信支付 |
||||
|
$payment = PaymentService::wechat( |
||||
|
$userInfo, |
||||
|
$model['order_id'], |
||||
|
$model['order_no'], |
||||
|
$model['pay_price'], |
||||
|
OrderTypeEnum::RECHARGE |
||||
|
); |
||||
|
return $this->renderSuccess(compact('payment')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,41 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\store\Shop as ShopModel; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 门店列表 |
||||
|
* Class Shop |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Shop extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 门店列表 |
||||
|
* @param string $longitude |
||||
|
* @param string $latitude |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists($longitude = '', $latitude = '') |
||||
|
{ |
||||
|
$model = new ShopModel; |
||||
|
$list = $model->getList(true, $longitude, $latitude); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 门店详情 |
||||
|
* @param $shop_id |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function detail($shop_id) |
||||
|
{ |
||||
|
$detail = ShopModel::detail($shop_id); |
||||
|
return $this->renderSuccess(compact('detail')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,86 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\UploadFile; |
||||
|
use app\api\model\Setting as SettingModel; |
||||
|
use app\common\library\storage\Driver as StorageDriver; |
||||
|
|
||||
|
/** |
||||
|
* 文件库管理 |
||||
|
* Class Upload |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Upload extends Controller |
||||
|
{ |
||||
|
private $config; |
||||
|
private $user; |
||||
|
|
||||
|
/** |
||||
|
* 构造方法 |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function _initialize() |
||||
|
{ |
||||
|
parent::_initialize(); |
||||
|
// 存储配置信息 |
||||
|
$this->config = SettingModel::getItem('storage'); |
||||
|
// 验证用户 |
||||
|
$this->user = $this->getUser(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 图片上传接口 |
||||
|
* @return array |
||||
|
* @throws \think\Exception |
||||
|
*/ |
||||
|
public function image() |
||||
|
{ |
||||
|
// 实例化存储驱动 |
||||
|
$StorageDriver = new StorageDriver($this->config); |
||||
|
// 设置上传文件的信息 |
||||
|
$StorageDriver->setUploadFile('iFile'); |
||||
|
// 上传图片 |
||||
|
if (!$StorageDriver->upload()) { |
||||
|
return json(['code' => 0, 'msg' => '图片上传失败' . $StorageDriver->getError()]); |
||||
|
} |
||||
|
// 图片上传路径 |
||||
|
$fileName = $StorageDriver->getFileName(); |
||||
|
// 图片信息 |
||||
|
$fileInfo = $StorageDriver->getFileInfo(); |
||||
|
// 添加文件库记录 |
||||
|
$uploadFile = $this->addUploadFile($fileName, $fileInfo, 'image'); |
||||
|
// 图片上传成功 |
||||
|
return json(['code' => 1, 'msg' => '图片上传成功', 'data' => $uploadFile->visible(['file_id'])]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 添加文件库上传记录 |
||||
|
* @param $fileName |
||||
|
* @param $fileInfo |
||||
|
* @param $fileType |
||||
|
* @return UploadFile |
||||
|
*/ |
||||
|
private function addUploadFile($fileName, $fileInfo, $fileType) |
||||
|
{ |
||||
|
// 存储引擎 |
||||
|
$storage = $this->config['default']; |
||||
|
// 存储域名 |
||||
|
$fileUrl = isset($this->config['engine'][$storage]['domain']) |
||||
|
? $this->config['engine'][$storage]['domain'] : ''; |
||||
|
// 添加文件库记录 |
||||
|
$model = new UploadFile; |
||||
|
$model->add([ |
||||
|
'storage' => $storage, |
||||
|
'file_url' => $fileUrl, |
||||
|
'file_name' => $fileName, |
||||
|
'file_size' => $fileInfo['size'], |
||||
|
'file_type' => $fileType, |
||||
|
'extension' => pathinfo($fileInfo['name'], PATHINFO_EXTENSION), |
||||
|
'is_user' => 1 |
||||
|
]); |
||||
|
return $model; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,43 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\User as UserModel; |
||||
|
|
||||
|
/** |
||||
|
* 用户管理 |
||||
|
* Class User |
||||
|
* @package app\api |
||||
|
*/ |
||||
|
class User extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 用户自动登录 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\Exception |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function login() |
||||
|
{ |
||||
|
$model = new UserModel; |
||||
|
return $this->renderSuccess([ |
||||
|
'user_id' => $model->login($this->request->post()), |
||||
|
'token' => $model->getToken() |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 当前用户详情 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function detail() |
||||
|
{ |
||||
|
// 当前用户信息 |
||||
|
$userInfo = $this->getUser(); |
||||
|
return $this->renderSuccess(compact('userInfo')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,39 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller; |
||||
|
|
||||
|
use app\api\model\Wxapp as WxappModel; |
||||
|
use app\api\model\WxappHelp; |
||||
|
|
||||
|
/** |
||||
|
* 微信小程序 |
||||
|
* Class Wxapp |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Wxapp extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 小程序基础信息 |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function base() |
||||
|
{ |
||||
|
// $wxapp = WxappModel::getWxappCache(); |
||||
|
return $this->renderSuccess([]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 帮助中心 |
||||
|
* @return array |
||||
|
* @throws \think\db\exception\DataNotFoundException |
||||
|
* @throws \think\db\exception\ModelNotFoundException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function help() |
||||
|
{ |
||||
|
$model = new WxappHelp; |
||||
|
$list = $model->getList(); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,28 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\balance; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\api\model\user\BalanceLog as BalanceLogModel; |
||||
|
|
||||
|
/** |
||||
|
* 余额账单明细 |
||||
|
* Class Log |
||||
|
* @package app\api\controller\balance |
||||
|
*/ |
||||
|
class Log extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 余额账单明细列表 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists() |
||||
|
{ |
||||
|
$user = $this->getUser(); |
||||
|
$list = (new BalanceLogModel)->getList($user['user_id']); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\live; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\api\model\wxapp\LiveRoom as LiveRoomModel; |
||||
|
|
||||
|
/** |
||||
|
* 微信小程序直播列表 |
||||
|
* Class Room |
||||
|
* @package app\api\controller\live |
||||
|
*/ |
||||
|
class Room extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 获取直播间列表 |
||||
|
* @return mixed |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists() |
||||
|
{ |
||||
|
$model = new LiveRoomModel; |
||||
|
$list = $model->getList(); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,28 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\recharge; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\api\model\recharge\Order as OrderModel; |
||||
|
|
||||
|
/** |
||||
|
* 充值记录 |
||||
|
* Class Order |
||||
|
* @package app\api\controller\user\balance |
||||
|
*/ |
||||
|
class Order extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 我的充值记录列表 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists() |
||||
|
{ |
||||
|
$user = $this->getUser(); |
||||
|
$list = (new OrderModel)->getList($user['user_id']); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,39 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\sharing; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\api\model\sharing\Active as ActiveModel; |
||||
|
use app\api\model\sharing\Goods as GoodsModel; |
||||
|
|
||||
|
/** |
||||
|
* 拼团拼单控制器 |
||||
|
* Class Active |
||||
|
* @package app\api\controller\sharing |
||||
|
*/ |
||||
|
class Active extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 拼单详情 |
||||
|
* @param $active_id |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function detail($active_id) |
||||
|
{ |
||||
|
// 拼单详情 |
||||
|
$detail = ActiveModel::detail($active_id); |
||||
|
if (!$detail) { |
||||
|
return $this->renderError('很抱歉,拼单不存在'); |
||||
|
} |
||||
|
// 拼团商品详情 |
||||
|
$goods = GoodsModel::detail($detail['goods_id']); |
||||
|
// 多规格商品sku信息 |
||||
|
$specData = $goods['spec_type'] == 20 ? $goods->getManySpecData($goods['spec_rel'], $goods['sku']) : null; |
||||
|
// 更多拼团商品 |
||||
|
$model = new GoodsModel; |
||||
|
$goodsList = $model->getList(10, 0, '', 'all', false, 5); |
||||
|
return $this->renderSuccess(compact('detail', 'goods', 'goodsList', 'specData')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,68 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\sharing; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\api\model\sharing\Order as OrderModel; |
||||
|
use app\api\model\sharing\OrderGoods as OrderGoodsModel; |
||||
|
use app\api\model\sharing\Comment as CommentModel; |
||||
|
|
||||
|
/** |
||||
|
* 拼团订单评价管理 |
||||
|
* Class Comment |
||||
|
* @package app\api\controller\sharing |
||||
|
*/ |
||||
|
class Comment extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 待评价订单商品列表 |
||||
|
* @param $order_id |
||||
|
* @return array |
||||
|
* @throws \Exception |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function order($order_id) |
||||
|
{ |
||||
|
// 用户信息 |
||||
|
$user = $this->getUser(); |
||||
|
// 订单信息 |
||||
|
$order = OrderModel::getUserOrderDetail($order_id, $user['user_id']); |
||||
|
// 验证订单是否已完成 |
||||
|
$model = new CommentModel; |
||||
|
if (!$model->checkOrderAllowComment($order)) { |
||||
|
return $this->renderError($model->getError()); |
||||
|
} |
||||
|
// 待评价商品列表 |
||||
|
/* @var \think\Collection $goodsList */ |
||||
|
$goodsList = OrderGoodsModel::getNotCommentGoodsList($order_id); |
||||
|
if ($goodsList->isEmpty()) { |
||||
|
return $this->renderError('该订单没有可评价的商品'); |
||||
|
} |
||||
|
// 提交商品评价 |
||||
|
if ($this->request->isPost()) { |
||||
|
$formData = $this->request->post('formData', '', null); |
||||
|
if ($model->addForOrder($order, $goodsList, $formData)) { |
||||
|
return $this->renderSuccess([], '评价发表成功'); |
||||
|
} |
||||
|
return $this->renderError($model->getError() ?: '评价发表失败'); |
||||
|
} |
||||
|
return $this->renderSuccess(compact('goodsList')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 商品评价列表 |
||||
|
* @param $goods_id |
||||
|
* @param int $scoreType |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists($goods_id, $scoreType = -1) |
||||
|
{ |
||||
|
$model = new CommentModel; |
||||
|
$list = $model->getGoodsCommentList($goods_id, $scoreType); |
||||
|
$total = $model->getTotal($goods_id); |
||||
|
return $this->renderSuccess(compact('list', 'total')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,68 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\sharing; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\api\model\sharing\Goods as GoodsModel; |
||||
|
use app\common\service\qrcode\Goods as GoodsPoster; |
||||
|
use app\api\model\sharing\Active as ActiveModel; |
||||
|
|
||||
|
/** |
||||
|
* 商品控制器 |
||||
|
* Class Goods |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Goods extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 商品列表 |
||||
|
* @param int $category_id |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists($category_id = 0) |
||||
|
{ |
||||
|
$model = new GoodsModel; |
||||
|
$list = $model->getList(10, $category_id); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取商品详情 |
||||
|
* @param $goods_id |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function detail($goods_id) |
||||
|
{ |
||||
|
// 商品详情 |
||||
|
$detail = GoodsModel::detail($goods_id); |
||||
|
if (!$detail || $detail['is_delete'] || $detail['goods_status']['value'] != 10) { |
||||
|
return $this->renderError('很抱歉,商品信息不存在或已下架'); |
||||
|
} |
||||
|
// 多规格商品sku信息 |
||||
|
$specData = $detail['spec_type'] == 20 ? $detail->getManySpecData($detail['spec_rel'], $detail['sku']) : null; |
||||
|
// 当前进行中的拼单 |
||||
|
$activeList = ActiveModel::getActivityListByGoods($goods_id, 2); |
||||
|
return $this->renderSuccess(compact('detail', 'specData', 'activeList')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取推广二维码 |
||||
|
* @param $goods_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
* @throws \Exception |
||||
|
*/ |
||||
|
public function poster($goods_id) |
||||
|
{ |
||||
|
// 商品详情 |
||||
|
$detail = GoodsModel::detail($goods_id); |
||||
|
// 生成推广二维码 |
||||
|
$Qrcode = new GoodsPoster($detail, $this->getUser(false), 20); |
||||
|
return $this->renderSuccess([ |
||||
|
'qrcode' => $Qrcode->getImage(), |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\sharing; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\api\model\sharing\Category as CategoryModel; |
||||
|
|
||||
|
/** |
||||
|
* 拼团首页控制器 |
||||
|
* Class Active |
||||
|
* @package app\api\controller\sharing |
||||
|
*/ |
||||
|
class Index extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 拼团首页 |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function index() |
||||
|
{ |
||||
|
// 拼团分类列表 |
||||
|
$categoryList = CategoryModel::getCacheAll(); |
||||
|
return $this->renderSuccess(compact('categoryList')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,235 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\sharing; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\api\model\sharing\Order as OrderModel; |
||||
|
|
||||
|
use app\common\enum\OrderType as OrderTypeEnum; |
||||
|
use app\common\enum\DeliveryType as DeliveryTypeEnum; |
||||
|
use app\common\enum\order\PayType as PayTypeEnum; |
||||
|
use app\common\service\qrcode\Extract as ExtractQRcode; |
||||
|
|
||||
|
/** |
||||
|
* 拼团订单控制器 |
||||
|
* Class Order |
||||
|
* @package app\api\controller |
||||
|
*/ |
||||
|
class Order extends Controller |
||||
|
{ |
||||
|
/* @var \app\api\model\User $user */ |
||||
|
private $user; |
||||
|
|
||||
|
/** |
||||
|
* 构造方法 |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function _initialize() |
||||
|
{ |
||||
|
parent::_initialize(); |
||||
|
$this->user = $this->getUser(); // 用户信息 |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 订单确认 |
||||
|
* @param int $order_type 订单类型 (10单独购买 20拼团) |
||||
|
* @param int $goods_id 商品id |
||||
|
* @param int $goods_num |
||||
|
* @param int $goods_sku_id |
||||
|
* @param int $delivery 配送方式 |
||||
|
* @param int $pay_type 支付方式 |
||||
|
* @param int $shop_id 自提门店id |
||||
|
* @param int $active_id 拼团活动id |
||||
|
* @param int $coupon_id 优惠券id |
||||
|
* @param string $remark |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\Exception |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function checkout( |
||||
|
$order_type, |
||||
|
$goods_id, |
||||
|
$goods_num, |
||||
|
$goods_sku_id, |
||||
|
$delivery = DeliveryTypeEnum::EXPRESS, |
||||
|
$pay_type = PayTypeEnum::WECHAT, |
||||
|
$shop_id = 0, |
||||
|
$active_id = null, |
||||
|
$coupon_id = null, |
||||
|
$remark = '' |
||||
|
) |
||||
|
{ |
||||
|
// 商品结算信息 |
||||
|
$model = new OrderModel; |
||||
|
$order = $model->getBuyNow( |
||||
|
$this->user, |
||||
|
$order_type, |
||||
|
$goods_id, |
||||
|
$goods_num, |
||||
|
$goods_sku_id, |
||||
|
$delivery, |
||||
|
$pay_type, |
||||
|
$shop_id |
||||
|
); |
||||
|
if (!$this->request->isPost()) { |
||||
|
return $this->renderSuccess($order); |
||||
|
} |
||||
|
if ($model->hasError()) { |
||||
|
return $this->renderError($model->getError()); |
||||
|
} |
||||
|
// 创建订单 |
||||
|
if (!$model->createOrder($this->user, $order, $active_id, $coupon_id, $remark)) { |
||||
|
return $this->renderError($model->getError() ?: '订单创建失败'); |
||||
|
} |
||||
|
// 构建微信支付请求 |
||||
|
$payment = ($pay_type == PayTypeEnum::WECHAT) ? $model->paymentByWechat($this->user) : []; |
||||
|
return $this->renderSuccess([ |
||||
|
'order_id' => $model['order_id'], // 订单id |
||||
|
'pay_type' => $pay_type, // 支付方式 |
||||
|
'payment' => $payment // 微信支付参数 |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 我的拼团订单列表 |
||||
|
* @param $dataType |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists($dataType) |
||||
|
{ |
||||
|
$model = new OrderModel; |
||||
|
$list = $model->getList($this->user['user_id'], $dataType); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 拼团订单详情信息 |
||||
|
* @param $order_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
*/ |
||||
|
public function detail($order_id) |
||||
|
{ |
||||
|
// 订单详情 |
||||
|
$order = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); |
||||
|
// 该订单是否允许申请售后 |
||||
|
$order['isAllowRefund'] = $order->isAllowRefund(); |
||||
|
return $this->renderSuccess(compact('order')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取物流信息 |
||||
|
* @param $order_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
*/ |
||||
|
public function express($order_id) |
||||
|
{ |
||||
|
// 订单信息 |
||||
|
$order = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); |
||||
|
if (!$order['express_no']) { |
||||
|
return $this->renderError('没有物流信息'); |
||||
|
} |
||||
|
// 获取物流信息 |
||||
|
/* @var \app\store\model\Express $model */ |
||||
|
$model = $order['express']; |
||||
|
$express = $model->dynamic($model['express_name'], $model['express_code'], $order['express_no']); |
||||
|
if ($express === false) { |
||||
|
return $this->renderError($model->getError()); |
||||
|
} |
||||
|
return $this->renderSuccess(compact('express')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 取消订单 |
||||
|
* @param $order_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
*/ |
||||
|
public function cancel($order_id) |
||||
|
{ |
||||
|
$model = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); |
||||
|
if ($model->cancel()) { |
||||
|
return $this->renderSuccess($model->getError() ?: '订单取消成功'); |
||||
|
} |
||||
|
return $this->renderError($model->getError() ?: '订单取消失败'); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 确认收货 |
||||
|
* @param $order_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function receipt($order_id) |
||||
|
{ |
||||
|
$model = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); |
||||
|
if ($model->receipt()) { |
||||
|
return $this->renderSuccess(); |
||||
|
} |
||||
|
return $this->renderError($model->getError()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 立即支付 |
||||
|
* @param int $order_id 订单id |
||||
|
* @param int $payType 支付方式 |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\Exception |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function pay($order_id, $payType = PayTypeEnum::WECHAT) |
||||
|
{ |
||||
|
// 订单详情 |
||||
|
$model = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); |
||||
|
// 判断商品状态、库存 |
||||
|
if (!$model->checkGoodsStatusFromOrder($model['goods'])) { |
||||
|
return $this->renderError($model->getError()); |
||||
|
} |
||||
|
$render = [ |
||||
|
'order_id' => $model['order_id'], // 订单id |
||||
|
'pay_type' => $payType, // 支付方式 |
||||
|
]; |
||||
|
if ($payType == PayTypeEnum::WECHAT) { |
||||
|
$render['payment'] = $model->paymentByWechat($this->user); |
||||
|
} elseif ($payType == PayTypeEnum::BALANCE) { |
||||
|
if ($model->paymentByBalance($model['order_no'])) { |
||||
|
return $this->renderSuccess($render, '支付成功'); |
||||
|
} |
||||
|
return $this->renderError($model->getError() ?: '支付失败', $render); |
||||
|
} |
||||
|
return $this->renderSuccess($render); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取订单核销二维码 |
||||
|
* @param $order_id |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function extractQrcode($order_id) |
||||
|
{ |
||||
|
// 订单详情 |
||||
|
$order = OrderModel::getUserOrderDetail($order_id, $this->user['user_id']); |
||||
|
// 判断是否为待核销订单 |
||||
|
if (!$order->checkExtractOrder($order)) { |
||||
|
return $this->renderError($order->getError()); |
||||
|
} |
||||
|
$Qrcode = new ExtractQRcode( |
||||
|
$this->wxapp_id, |
||||
|
$this->user, |
||||
|
$order_id, |
||||
|
OrderTypeEnum::SHARING |
||||
|
); |
||||
|
return $this->renderSuccess([ |
||||
|
'qrcode' => $Qrcode->getImage(), |
||||
|
]); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,109 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\sharing; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\api\model\Express as ExpressModel; |
||||
|
use app\api\model\sharing\OrderGoods as OrderGoodsModel; |
||||
|
use app\api\model\sharing\OrderRefund as OrderRefundModel; |
||||
|
|
||||
|
/** |
||||
|
* 拼团订单售后服务 |
||||
|
* Class Refund |
||||
|
* @package app\api\controller\user\order |
||||
|
*/ |
||||
|
class Refund extends Controller |
||||
|
{ |
||||
|
/* @var \app\api\model\User $user */ |
||||
|
private $user; |
||||
|
|
||||
|
/** |
||||
|
* 构造方法 |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function _initialize() |
||||
|
{ |
||||
|
parent::_initialize(); |
||||
|
$this->user = $this->getUser(); // 用户信息 |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 用户售后单列表 |
||||
|
* @param int $state |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function lists($state = -1) |
||||
|
{ |
||||
|
$model = new OrderRefundModel; |
||||
|
$list = $model->getList($this->user['user_id'], (int)$state); |
||||
|
return $this->renderSuccess(compact('list')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 申请售后 |
||||
|
* @param $order_goods_id |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
* @throws \Exception |
||||
|
*/ |
||||
|
public function apply($order_goods_id) |
||||
|
{ |
||||
|
// 订单商品详情 |
||||
|
$goods = OrderGoodsModel::detail($order_goods_id); |
||||
|
if (isset($goods['refund']) && !empty($goods['refund'])) { |
||||
|
return $this->renderError('当前商品已申请售后'); |
||||
|
} |
||||
|
if (!$this->request->isPost()) { |
||||
|
return $this->renderSuccess(['detail' => $goods]); |
||||
|
} |
||||
|
// 新增售后单记录 |
||||
|
$model = new OrderRefundModel; |
||||
|
if ($model->apply($this->user, $goods, $this->request->post())) { |
||||
|
return $this->renderSuccess([], '提交成功'); |
||||
|
} |
||||
|
return $this->renderError($model->getError() ?: '提交失败'); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 售后单详情 |
||||
|
* @param $order_refund_id |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function detail($order_refund_id) |
||||
|
{ |
||||
|
// 售后单详情 |
||||
|
$detail = OrderRefundModel::detail([ |
||||
|
'user_id' => $this->user['user_id'], |
||||
|
'order_refund_id' => $order_refund_id |
||||
|
]); |
||||
|
if (empty($detail)) { |
||||
|
return $this->renderError('售后单不存在'); |
||||
|
} |
||||
|
// 物流公司列表 |
||||
|
$expressList = ExpressModel::getAll(); |
||||
|
return $this->renderSuccess(compact('detail', 'expressList')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 用户发货 |
||||
|
* @param $order_refund_id |
||||
|
* @return array |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function delivery($order_refund_id) |
||||
|
{ |
||||
|
// 售后单详情 |
||||
|
$model = OrderRefundModel::detail([ |
||||
|
'user_id' => $this->user['user_id'], |
||||
|
'order_refund_id' => $order_refund_id |
||||
|
]); |
||||
|
if ($model->delivery($this->postData())) { |
||||
|
return $this->renderSuccess([], '操作成功'); |
||||
|
} |
||||
|
return $this->renderError($model->getError() ?: '提交失败'); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\sharing; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\api\model\sharing\Setting as SettingModel; |
||||
|
|
||||
|
/** |
||||
|
* 拼团设置控制器 |
||||
|
* Class Setting |
||||
|
* @package app\api\controller\sharing |
||||
|
*/ |
||||
|
class Setting extends Controller |
||||
|
{ |
||||
|
/** |
||||
|
* 获取拼团设置 |
||||
|
* @return array |
||||
|
*/ |
||||
|
public function getAll() |
||||
|
{ |
||||
|
// 获取拼团设置 |
||||
|
$setting = SettingModel::getSetting(); |
||||
|
return $this->renderSuccess(compact('setting')); |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,72 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace app\api\controller\shop; |
||||
|
|
||||
|
use app\api\controller\Controller; |
||||
|
use app\common\service\Order as OrderService; |
||||
|
use app\common\enum\OrderType as OrderTypeEnum; |
||||
|
use app\api\model\store\shop\Clerk as ClerkModel; |
||||
|
|
||||
|
/** |
||||
|
* 自提订单管理 |
||||
|
* Class Order |
||||
|
* @package app\api\controller\shop |
||||
|
*/ |
||||
|
class Order extends Controller |
||||
|
{ |
||||
|
/* @var \app\api\model\User $user */ |
||||
|
private $user; |
||||
|
|
||||
|
/** |
||||
|
* 构造方法 |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function _initialize() |
||||
|
{ |
||||
|
parent::_initialize(); |
||||
|
$this->user = $this->getUser(); // 用户信息 |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 核销订单详情 |
||||
|
* @param $order_id |
||||
|
* @param int $order_type |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function detail($order_id, $order_type = OrderTypeEnum::MASTER) |
||||
|
{ |
||||
|
// 订单详情 |
||||
|
$order = OrderService::getOrderDetail($order_id, $order_type); |
||||
|
// 验证是否为该门店的核销员 |
||||
|
$clerkModel = ClerkModel::detail(['user_id' => $this->user['user_id']]); |
||||
|
return $this->renderSuccess(compact('order', 'clerkModel')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 确认核销 |
||||
|
* @param $order_id |
||||
|
* @param int $order_type |
||||
|
* @return array |
||||
|
* @throws \app\common\exception\BaseException |
||||
|
* @throws \think\exception\DbException |
||||
|
*/ |
||||
|
public function extract($order_id, $order_type = OrderTypeEnum::MASTER) |
||||
|
{ |
||||
|
// 订单详情 |
||||
|
$order = OrderService::getOrderDetail($order_id, $order_type); |
||||
|
// 验证是否为该门店的核销员 |
||||
|
$ClerkModel = ClerkModel::detail(['user_id' => $this->user['user_id']]); |
||||
|
if (!$ClerkModel->checkUser($order['extract_shop_id'])) { |
||||
|
return $this->renderError($ClerkModel->getError()); |
||||
|
} |
||||
|
// 确认核销 |
||||
|
if ($order->extract($ClerkModel['clerk_id'])) { |
||||
|
return $this->renderSuccess([], '订单核销成功'); |
||||
|
} |
||||
|
return $this->renderError($order->getError() ?: '核销失败'); |
||||
|
} |
||||
|
|
||||
|
} |
||||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue