瀏覽代碼

第一次

牟新芬 3 年之前
當前提交
81dde0d1f4
共有 100 個文件被更改,包括 7741 次插入0 次删除
  1. 6 0
      .gitignore
  2. 32 0
      LICENSE.txt
  3. 56 0
      README.md
  4. 1 0
      app/.htaccess
  5. 26 0
      app/AppService.php
  6. 138 0
      app/BaseController.php
  7. 58 0
      app/BaseViewController.php
  8. 58 0
      app/ExceptionHandle.php
  9. 1 0
      app/ExecptionHandle.php
  10. 8 0
      app/Request.php
  11. 15 0
      app/aa.php
  12. 0 0
      app/admin/.htaccess
  13. 32 0
      app/admin/common.php
  14. 18 0
      app/admin/config/app.php
  15. 21 0
      app/admin/config/route.php
  16. 55 0
      app/admin/controller/AuthController.php
  17. 90 0
      app/admin/controller/Login.php
  18. 224 0
      app/admin/controller/v1/Admin.php
  19. 108 0
      app/admin/controller/v1/Adver.php
  20. 87 0
      app/admin/controller/v1/Bind.php
  21. 48 0
      app/admin/controller/v1/Category.php
  22. 128 0
      app/admin/controller/v1/Commission.php
  23. 171 0
      app/admin/controller/v1/Index.php
  24. 104 0
      app/admin/controller/v1/Log.php
  25. 305 0
      app/admin/controller/v1/Member.php
  26. 58 0
      app/admin/controller/v1/News.php
  27. 331 0
      app/admin/controller/v1/Order.php
  28. 105 0
      app/admin/controller/v1/Platform.php
  29. 92 0
      app/admin/controller/v1/Product.php
  30. 65 0
      app/admin/controller/v1/Recharge.php
  31. 70 0
      app/admin/controller/v1/Role.php
  32. 59 0
      app/admin/controller/v1/Site.php
  33. 135 0
      app/admin/controller/v1/SiteAdmin.php
  34. 74 0
      app/admin/controller/v1/SiteRole.php
  35. 53 0
      app/admin/controller/v1/Sys.php
  36. 102 0
      app/admin/controller/v1/SysMenu.php
  37. 51 0
      app/admin/controller/v1/Upload.php
  38. 108 0
      app/admin/controller/v1/Vbind.php
  39. 253 0
      app/admin/controller/v1/Warehouse.php
  40. 5 0
      app/admin/event.php
  41. 66 0
      app/admin/exception/ExecptionHandle.php
  42. 5 0
      app/admin/middleware.php
  43. 75 0
      app/admin/middleware/AdminAuthTokenMiddleware.php
  44. 36 0
      app/admin/middleware/AllowOriginMiddleware.php
  45. 48 0
      app/admin/middleware/SeretKeyMiddleware.php
  46. 7 0
      app/admin/provider.php
  47. 40 0
      app/admin/route/admin.php
  48. 33 0
      app/admin/route/adver.php
  49. 27 0
      app/admin/route/bind.php
  50. 24 0
      app/admin/route/category.php
  51. 26 0
      app/admin/route/commission.php
  52. 30 0
      app/admin/route/index.php
  53. 27 0
      app/admin/route/log.php
  54. 37 0
      app/admin/route/member.php
  55. 25 0
      app/admin/route/news.php
  56. 32 0
      app/admin/route/order.php
  57. 29 0
      app/admin/route/platform.php
  58. 27 0
      app/admin/route/product.php
  59. 22 0
      app/admin/route/recharge.php
  60. 23 0
      app/admin/route/role.php
  61. 41 0
      app/admin/route/route.php
  62. 22 0
      app/admin/route/site.php
  63. 24 0
      app/admin/route/sys.php
  64. 32 0
      app/admin/route/sysmenu.php
  65. 24 0
      app/admin/route/upload.php
  66. 24 0
      app/admin/route/vbind.php
  67. 37 0
      app/admin/route/warehouse.php
  68. 7 0
      app/admin/validates/Index.php
  69. 0 0
      app/api/.htaccess
  70. 18 0
      app/api/config/app.php
  71. 37 0
      app/api/controller/AuthController.php
  72. 119 0
      app/api/controller/v1/Bind.php
  73. 133 0
      app/api/controller/v1/Index.php
  74. 374 0
      app/api/controller/v1/Login.php
  75. 28 0
      app/api/controller/v1/News.php
  76. 117 0
      app/api/controller/v1/Ott.php
  77. 54 0
      app/api/controller/v1/Platform.php
  78. 81 0
      app/api/controller/v1/Pub.php
  79. 132 0
      app/api/controller/v1/Upload.php
  80. 1402 0
      app/api/controller/v1/User.php
  81. 257 0
      app/api/controller/v1/Weixin.php
  82. 201 0
      app/api/controller/v1/WexinPush.php
  83. 5 0
      app/api/event.php
  84. 66 0
      app/api/exception/ExecptionHandle.php
  85. 5 0
      app/api/middleware.php
  86. 36 0
      app/api/middleware/AllowOriginMiddleware.php
  87. 48 0
      app/api/middleware/SeretKeyMiddleware.php
  88. 66 0
      app/api/middleware/UserMiddleware.php
  89. 7 0
      app/api/provider.php
  90. 24 0
      app/api/route/bind.php
  91. 31 0
      app/api/route/index.php
  92. 41 0
      app/api/route/login.php
  93. 21 0
      app/api/route/news.php
  94. 24 0
      app/api/route/ott.php
  95. 19 0
      app/api/route/platform.php
  96. 23 0
      app/api/route/pub.php
  97. 32 0
      app/api/route/route.php
  98. 24 0
      app/api/route/upload.php
  99. 90 0
      app/api/route/user.php
  100. 25 0
      app/api/route/weixin.php

+ 6 - 0
.gitignore

@@ -0,0 +1,6 @@
+/.idea
+/.vscode
+/runtime
+/public
+*.log
+.env

+ 32 - 0
LICENSE.txt

@@ -0,0 +1,32 @@
+
+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.

+ 56 - 0
README.md

@@ -0,0 +1,56 @@
+ThinkPHP 6.0
+===============
+
+> 运行环境要求PHP7.1+。
+
+[官方应用服务市场](https://www.thinkphp.cn/service) | [`ThinkPHP`开发者扶持计划](https://sites.thinkphp.cn/1782366)
+
+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 - 0
app/.htaccess

@@ -0,0 +1 @@
+deny from all

+ 26 - 0
app/AppService.php

@@ -0,0 +1,26 @@
+<?php
+declare (strict_types = 1);
+
+namespace app;
+
+use library\utils\Json;
+use think\Service;
+
+/**
+ * 应用服务类
+ */
+class AppService extends Service
+{
+
+
+    public function register()
+    {
+        // 服务注册
+        $this->app->bind('json', Json::class);
+    }
+
+    public function boot()
+    {
+        // 服务启动
+    }
+}

+ 138 - 0
app/BaseController.php

@@ -0,0 +1,138 @@
+<?php
+declare (strict_types = 1);
+
+namespace app;
+
+use think\App;
+use think\exception\ValidateException;
+use think\Validate;
+
+/**
+ * 控制器基础类
+ */
+abstract class BaseController
+{
+    /**
+     * Request实例
+     * @var \think\Request
+     */
+    protected $request;
+
+    /**
+     * 应用实例
+     * @var \think\App
+     */
+    protected $app;
+
+    protected $view;
+
+    /**
+     * 是否批量验证
+     * @var bool
+     */
+    protected $batchValidate = false;
+
+    /**
+     * 控制器中间件
+     * @var array
+     */
+    protected $middleware = [];
+
+    /**
+     * 构造方法
+     * @access public
+     * @param  App  $app  应用对象
+     */
+    public function __construct(App $app)
+    {
+        $this->app     = $app;
+        $this->request = $this->app->request;
+
+        // 控制器初始化
+        $this->initialize();
+    }
+
+    // 初始化
+    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);
+    }
+
+
+
+    /**
+     * 模板参数
+     * @param type $name 参数名称
+     * @param type $value 输出模板
+     */
+    protected function assign($name, $value) {
+        $this->viewInit();
+        $this->view->assign($name, $value);
+    }
+
+    /**
+     * 输出格式
+     */
+    protected function display($template = '') {
+        $this->viewInit();
+        $request = request();
+        if (empty($template))
+            $template = $request->action();
+        return $this->view->fetch($template);
+    }
+
+
+
+    private function viewInit(){
+        if($this->view == null) {
+            $app         = config('app');
+            $req         = [
+                '__IMAGES__' => $app['__IMAGES__'], // image变量
+                '__JS__'     => $app['__JS__'], // js变量
+                '__CSS__'    => $app['__CSS__'], // css变量
+                '__ASSETS__' => $app['__ASSETS__'] //assets 变量
+            ];
+            $this->view = app('view');
+        }
+    }
+
+
+
+
+
+}

+ 58 - 0
app/BaseViewController.php

@@ -0,0 +1,58 @@
+<?php
+declare (strict_types = 1);
+
+namespace app;
+
+use think\App;
+use think\exception\ValidateException;
+use think\Validate;
+use think\View;
+
+/**
+ * 控制器基础类
+ */
+ class BaseViewController extends BaseController
+{
+
+    private $_view;
+
+     public function __construct(App $app) {
+         global $_A;
+         $req = [
+             '__IMAGES__' => config("app")['__IMAGES__'], // image变量
+             '__JS__' => config("app")['__JS__'], // js变量
+             '__CSS__' => config("app")['__CSS__'], // css变量
+             '__ASSETS__' => config("app")['__ASSETS__'] //assets 变量
+         ];
+         //$this->_view = new View;
+         $this->_view = \app('view');
+         $this->_view->filter(function($content) use($req) {
+             $content = strtr($content, $req);
+             return $content;
+         });
+         parent::__construct($app);
+     }
+
+
+     /**
+      * 模板参数
+      * @param type $name 参数名称
+      * @param type $value 输出模板
+      */
+     protected function assign($name, $value) {
+         $this->_view->assign($name, $value);
+     }
+
+     /**
+      * 输出模板
+      * @global array $_A
+      * @param array $template 模板名称
+      * @return type
+      */
+     protected function display($template = '') {
+         global $_A;
+         $this->_view->assign("_A", $_A);
+         return $this->_view->fetch($template);
+     }
+
+}

+ 58 - 0
app/ExceptionHandle.php

@@ -0,0 +1,58 @@
+<?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 - 0
app/ExecptionHandle.php

@@ -0,0 +1 @@
+<?php

+ 8 - 0
app/Request.php

@@ -0,0 +1,8 @@
+<?php
+namespace app;
+
+// 应用请求对象类
+class Request extends \think\Request
+{
+
+}

+ 15 - 0
app/aa.php

@@ -0,0 +1,15 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-11-13 07:24
+// +----------------------------------------------------------------------
+
+class aa
+{
+
+}

+ 0 - 0
app/admin/.htaccess


+ 32 - 0
app/admin/common.php

@@ -0,0 +1,32 @@
+<?php
+// 这是系统自动生成的公共文件
+
+
+
+if (!function_exists('sort_list_tier')) {
+    /**
+     * 分级排序
+     * @param $data
+     * @param int $pid
+     * @param string $field
+     * @param string $pk
+     * @param string $html
+     * @param int $level
+     * @param bool $clear
+     * @return array
+     */
+    function sort_list_tier($data, $pid = 0, $field = 'pid', $pk = 'id', $html = '|-----', $level = 1, $clear = true)
+    {
+        static $list = [];
+        if ($clear) $list = [];
+        foreach ($data as $k => $res) {
+            if ($res[$field] == $pid) {
+                $res['html'] = str_repeat($html, $level);
+                $list[] = $res;
+                unset($data[$k]);
+                sort_list_tier($data, $res[$pk], $field, $pk, $html, $level + 1, false);
+            }
+        }
+        return $list;
+    }
+}

+ 18 - 0
app/admin/config/app.php

@@ -0,0 +1,18 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-11-10 12:58
+// +----------------------------------------------------------------------
+return [
+
+    '__JS__'          => '/public/system/js',
+    '__ASSETS__'      => '/public/system/assets',
+    '__CSS__'         => '/public/system/css',
+    '__IMAGES__'      => '/public/system/img',
+
+];

+ 21 - 0
app/admin/config/route.php

@@ -0,0 +1,21 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ 路由配置  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-25 16:10
+// +----------------------------------------------------------------------
+
+return [
+    // 是否强制使用路由
+    'url_route_must'        => true,
+    // 合并路由规则
+    'route_rule_merge'      => true,
+    // 路由是否完全匹配
+    'route_complete_match'  => true,
+    // 是否自动转换URL中的控制器和操作名
+    'url_convert'           => false,
+];

+ 55 - 0
app/admin/controller/AuthController.php

@@ -0,0 +1,55 @@
+<?php
+declare (strict_types = 1);
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-25 17:23
+// +----------------------------------------------------------------------
+namespace app\admin\controller;
+
+/**
+ * 基类 所有控制器继承的类
+ * Class AuthController
+ * @package app\adminapi\controller
+ */
+class AuthController extends \app\BaseController
+{
+    /**
+     * 当前登陆管理员信息
+     * @var
+     */
+    protected $adminInfo;
+
+    /**
+     * 当前登陆管理员ID
+     * @var
+     */
+    protected $adminId;
+
+    /**
+     * 当前管理员权限
+     * @var array
+     */
+    protected $auth = [];
+
+    /**
+     * 模型类名
+     * @var null
+     */
+    protected $bindModel = null;
+
+    /**
+     * 初始化
+     */
+    protected function initialize()
+    {
+        parent::initialize();
+        $this->adminInfo = $this->request->adminInfo;
+        event('AdminVisit', [$this->adminInfo, 'admin']);
+    }
+
+}

+ 90 - 0
app/admin/controller/Login.php

@@ -0,0 +1,90 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-25 17:23
+// +----------------------------------------------------------------------
+declare (strict_types = 1);
+namespace app\admin\controller;
+
+//use app\model\admin\Product;
+use app\model\admin\Admin;
+use app\model\admin\AdminMenu;
+use app\Request;
+use library\exceptions\GeneralException;
+use library\lib\weixina;
+use library\services\UtilService;
+use library\utils\Captcha;
+use library\utils\Qiniu;
+use think\facade\Db;
+
+class Login
+{
+
+    /**
+     * 用户登录端
+     * @param Request $request
+     */
+    public function index(Request $request)
+    {
+        [$account, $pwd, $imgcode] =  UtilService::getMore([
+            ['account','','empty','请输入登录账户'],
+            ['pwd','','empty','请输入登录密码'],
+            ['imgcode','','empty','验证码不能为空'],
+        ],$request,true);
+        //当前站点信息(中间件获取)
+        $site = $request->site;
+        if (!(new Captcha)->check($imgcode)) {
+            return app('json')->fail('验证码错误,请重新输入');
+        }
+        //获取登录
+        $adminInfo = Admin::login($account,$pwd,$site['sassid']);
+        if(empty($adminInfo)) {
+            return app('json')->fail(Admin::getErrorInfo('用户名错误,请重新输入'));
+        }
+        //生成令牌
+        $token = Admin::createToken($adminInfo, 'admin');
+        if(empty($token)) {
+            return app('json')->fail(Admin::getErrorInfo());
+        }
+        //获取管理菜单
+        $menuMenu = new AdminMenu();
+        $menuMenu->setSassId($site['sassid']);
+        $menus = $menuMenu->getRoute($adminInfo->role_id);
+        return app('json')->success([
+            'token' => $token['token'],
+            'expires_time' => $token['params']['exp'],
+            'menus' => $menus,
+            'user_info' => [
+                'id'        => $adminInfo->getData('id'),
+                'sassid'    => $adminInfo->getData('sassid'),
+                'username'  => $adminInfo->getData('username'),
+                'name'      => $adminInfo->getData('name'),
+                'avatar'    => $adminInfo->getData('avatar')
+            ],
+        ]);
+    }
+
+    /**
+     * 用户发生退出
+     */
+    public function logut(){
+
+    }
+
+
+    /**
+     * 验证码
+     * @return \app\adminapi\controller\Login|\think\Response
+     */
+    public function captcha()
+    {
+        return (new Captcha())->create();
+    }
+
+
+}

+ 224 - 0
app/admin/controller/v1/Admin.php

@@ -0,0 +1,224 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\admin\controller\v1;
+
+
+use app\model\admin\Admin as AdminModel;
+use app\model\admin\AdminMenu;
+use app\model\admin\AdminRole;
+use app\Request;
+use app\admin\controller\AuthController;
+use library\exceptions\GeneralException;
+use library\services\UtilService;
+use library\utils\IpLocation;
+use think\facade\Config;
+use think\facade\Cache;
+
+class Admin extends AuthController
+{
+    /**
+     * 登录和菜单信息 [当前登录者]
+     */
+    public function init(Request $request){
+        $menuMenu = new AdminMenu();
+        $menuMenu->setSassId($request->site['sassid']);
+        $menus = $menuMenu->getRoute($this->adminInfo['role_id']);
+        return app('json')->success([
+            'menus' => $menus,
+            'user_info' => [
+                'id'        => $this->adminInfo['id'],
+                'sassid'    => $this->adminInfo['sassid'],
+                'username'  => $this->adminInfo['username'],
+                'name'      => $this->adminInfo['name'],
+                'avatar'    => $this->adminInfo['avatar']
+            ],
+        ]);
+    }
+    
+    /**
+     * 退出登陆
+     * @return mixed
+     */
+    public function logout()
+    {
+        $key = trim(ltrim($this->request->header(Config::get('cookie.admin_token_name')), ''));
+        $res = Cache::store('redis')->delete($key);
+        return app('json')->success("ok", []);
+    }
+    /**
+     * 获取管理信息 [当前登录者]
+     * @param Request $request
+     * @return mixed
+     */
+    public function info(Request $request) {
+        [$id] = UtilService::getMore([
+            ['id','','empty','参数错误']
+        ],$request,true);
+        $adminRole = new AdminRole();
+        $adminRole->setSassId($request->site['sassid']);
+
+        if($id == $this->adminInfo['id']) {
+            return app('json')->success([
+               'id' => $id,
+               'sassid' => $this->adminInfo['sassid'],
+               'username'  => $this->adminInfo['username'],
+               'name'      => $this->adminInfo['name'],
+               'avatar'    => $this->adminInfo['avatar'],
+               'regTime'   => empty($this->adminInfo['time']) ? '' : date('Y-m-d',$this->adminInfo['time']),
+               'lastTime'  => empty($this->adminInfo['last_time']) ? '' : date('Y-m-d',$this->adminInfo['last_time']),
+               'ip'        => $this->adminInfo['ip'],
+               'ipArea'    => (new IpLocation())->getlocation($this->adminInfo['ip'])['country'],
+               'roleName'  => $adminRole->getRoleId($this->adminInfo['role_id'],'name')
+            ]);
+        }
+    }
+
+    /**
+     * 修改信息 [当前登录者]
+     * @param Request $request
+     */
+    public function edit(Request $request) {
+        [$name,$avatar] = UtilService::getMore([
+            ['name','','empty','请输入管理姓名'],
+            ['avatar','']
+        ],$request,true);
+
+       $bool = AdminModel::update(['name'=>$name,'avatar'=>$avatar],['id'=>$this->adminInfo['id']]);
+        if($bool) {
+            return app('json')->success("修改成功", []);
+        }
+        return app('json')->fail("数据更新失败");
+    }
+
+    /**
+     * 修改密码 [当前登录者]
+     * @param Request $request
+     */
+    public function password(Request $request) {
+        [$oldPass,$newPass] = UtilService::getMore([
+            ['oldPass','','empty','请输入旧密码'],
+            ['newPass','','empty','请输入新密码']
+        ],$request,true);
+
+        if(!AdminModel::checkPassowrd($this->adminInfo['id'],$oldPass)){
+            return app('json')->fail("旧密码错误,请重新输入");
+        }
+        AdminModel::where('id',$this->adminInfo['id'])->save(['password'=>password_hash($newPass,PASSWORD_BCRYPT)]);
+        return app('json')->success("密码修改成功", []);
+    }
+
+    /**
+     * 获取管理列表
+     * @param Request $request
+     */
+    public function list(Request $request) {
+        $pageSize = 50;
+         [$page,$roleId,$keyword] =  UtilService::getMore(
+                [
+                    ['page',1],
+                    ['roleId',0],
+                    ['keyword','']
+                ],$request,true
+            );
+        list($pageCount,$data) = (new AdminModel)
+            ->getList($page,
+                ['role_id'=>[$roleId,'!empty'],'name|username'=>[$keyword,'!empty'],'sassid'=>[$request->site['sassid'],'!empty']]
+                ,$pageSize,'id desc');
+        $adminRole = new AdminRole();
+        $adminRole->setSassId($request->site['sassid']);
+        $result = UtilService::getParam([
+            'id',
+            'sassid',
+            'username',
+            'name',
+            'avatar',
+            'status',
+            [ 'regTime', 'time', 'date("Y-m-d",$1)'],
+            [ 'lastTime', 'last_time', 'date("Y-m-d",$1)'],
+            'ip',
+            ['ipArea','ip',
+                function($item) {
+                    return  (new IpLocation())->getlocation($item)['country'];
+                }
+            ],
+            ['roleName','role_id',
+                function($item) use($adminRole) {
+                    return  $adminRole->getRoleId($item,'name');
+                }
+            ]
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $page
+        ]);
+    }
+
+
+    /**
+     * 获取管理数据
+     * @param Request $request
+     * @return mixed
+     */
+    public function getInfo(Request $request) {
+        [$id] = UtilService::getMore([
+            ['id','','empty','参数错误']
+        ],$request,true);
+        $adminInfo = AdminModel::get(compact('id'));
+        return app('json')->success([
+            'id' => $id,
+            'sassid'    => $adminInfo['sassid'],
+            'username'  => $adminInfo['username'],
+            'name'      => $adminInfo['name'],
+            'avatar'    => $adminInfo['avatar'],
+            'role_id'   => $adminInfo['role_id'],
+            'status'    => $adminInfo['status']
+        ]);
+    }
+
+
+    /**
+     * 保存数据
+     * @param Request $request
+     */
+    public function  save(Request $request) {
+        $post = UtilService::getMore(
+            [
+                ['id','0'],
+                ['name','','empty','请输入姓名'],
+                ['username','','empty','请输入账户'],
+                ['status','0'],
+                ['role_id','','empty','请选择管理角色'],
+                ['password',''],
+                ['avatar','']
+            ],
+            $request
+        );
+        
+        $post['sassid']=$request->site['sassid'];
+        $bool = AdminModel::saveAdmin($post);
+        if($bool)
+            return app('json')->success("操作成功", []);
+        else
+            return app('json')->fail(AdminModel::getErrorInfo());
+    }
+
+    /**
+     * 删除数据
+     * @param Request $request
+     */
+    public function del(Request $request) {
+       [$id] = UtilService::getMore(
+            [
+                ['id','0'],
+            ],
+            $request,true
+        );
+       AdminModel::del($id);
+        return app('json')->success("删除成功", []);
+    }
+
+
+}

+ 108 - 0
app/admin/controller/v1/Adver.php

@@ -0,0 +1,108 @@
+<?php
+declare (strict_types = 1);
+namespace app\admin\controller\v1;
+
+use app\BaseController;
+use app\model\admin\AdverPage;
+use app\model\admin\Advert;
+use app\Request;
+use library\services\UtilService;
+
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 21:53
+// +----------------------------------------------------------------------
+
+class Adver extends  BaseController{
+
+    /**
+     * 分类列表数据
+     */
+    public function page(Request $request){
+        [$cate_name,$pid,$is_show] = UtilService::getMore([
+            ['cate_name',''],
+            ['pid','0'],
+            ['is_show','0']
+        ],$request,true);
+        $menuMenu = new AdverPage();
+        $menus = $menuMenu->getArMenu($cate_name,$pid,$is_show);
+        return app('json')->success($menus);
+    }
+
+    /**
+     * 获取树级分类
+     */
+    public function page_tree() {
+        $menuAr = (new AdverPage())->order("sort","desc")->select()->toArray();
+        $data = sort_list_tier($menuAr, '顶级', 'pid', 'id');
+        return app('json')->success($data);
+    }
+    public function list(Request $request) {
+        $pageSize = 50;
+        [$page,$page_id,$title] =  UtilService::getMore(
+            [
+                ['page',1],
+                ['page_id','0'],
+                ['title','']
+            ],$request,true
+        );
+        $sassid = $request->site['sassid'];
+        $where = compact('page_id','title','sassid');
+        list($pageCount,$data) = (new Advert)
+            ->getList($page,$where,$pageSize,'id desc');
+        return app('json')->success([
+            'list'      => $data,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $page
+        ]);
+    }
+    /**
+     * 获取详情栏目数据
+     */
+    public function info(Request $request){
+        [$id] = UtilService::getMore([
+            ['id',0,'empty','参数错误']
+        ],$request,true);
+        $data = (new Advert())->find(compact('id'))->toArray();
+        return app('json')->success($data);
+    }
+
+    /**
+     * 保存数据
+     */
+    public function save(Request $request){
+        $post = UtilService::getMore([
+            ['title','','empty','商品分类'],
+            ['page_id','0'],
+            ['sort','0'],
+            ['id','0'],
+            ['text',''],
+            ['url',''],
+            ['img',''],
+            ['data',''],
+            ['is_show','0']
+        ],$request);
+        $post['sassid'] = $request->site["sassid"];
+        (new Advert())->savePage($post);
+        return app('json')->success("数据保存成功");
+    }
+
+    /**
+     * 栏目删除
+     * @param Request $request
+     */
+    public function del(Request $request) {
+        [$id] = UtilService::getMore([
+            ['id',0,'empty','参数错误']
+        ],$request,true);
+        $bool =   (new Advert)->del($id);
+        return app('json')->success("栏目删除成功");
+    }
+
+}

+ 87 - 0
app/admin/controller/v1/Bind.php

@@ -0,0 +1,87 @@
+<?php
+declare (strict_types = 1);
+namespace app\admin\controller\v1;
+
+use app\BaseController;
+use app\model\admin\WeixinPushUser;
+use app\Request;
+use library\services\UtilService;
+
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 21:53
+// +----------------------------------------------------------------------
+
+class Bind extends  BaseController{
+
+    /**
+     * 绑定后台管理
+     * @param Request $request
+     */
+    public function qrocde(Request $request) {
+        $token= base64_encode(crypto_encrypt($request->adminInfo['id']."|" . time(),'md5_token'));
+        $url =  \config('app')['API_URL'] .'/adminv1/vbind/system_bind?token='.$token.'&secret_key=' . $request->site['secret_key'];
+        return app('json')->success($url);
+    }
+
+
+    /**
+     * 绑定数据
+     * @param Request $request
+     */
+    public function index(Request $request) {
+        $pageSize = 20;
+        $post =  UtilService::getMore(
+            [
+                ['page',1],
+                ['keyword','']
+            ],$request
+        );
+        $where = [];
+        $where['type'] = 'admin';
+        $where['sassid'] =  $request->site['sassid'];
+        if(!empty($post['keyword'])) {
+            $where['nickname'] = ['%' . $post['keyword'] .'%','whereLike'];
+        }
+        list($pageCount,$data) = (new WeixinPushUser)
+            ->getList($post['page'],$where,$pageSize,'id desc');
+       $result = UtilService::getParam(
+            ['avatar','nickname','openid',['time','time','date("Y-m-d H:i:s",$1)'],'id'],$data
+        );
+
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+
+
+    /**
+     * 删除数据
+     * @param Request $request
+     */
+    public function del(Request $request) {
+        $post =  UtilService::getMore(
+            [
+                ['id','','empty','参数错误'],
+            ],$request
+        );
+        (new WeixinPushUser)
+                ->where('id',$post['id'])
+                ->where('sassid',$request->site['sassid'])
+                ->where('type','admin')
+                ->delete();
+        return app('json')->success('删除成功');
+    }
+
+
+
+
+}

+ 48 - 0
app/admin/controller/v1/Category.php

@@ -0,0 +1,48 @@
+<?php
+declare (strict_types = 1);
+namespace app\admin\controller\v1;
+
+use app\BaseController;
+use app\model\admin\Category as CategoryModel;
+use app\Request;
+use library\services\UtilService;
+
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 21:53
+// +----------------------------------------------------------------------
+
+class Category extends  BaseController{
+
+    /**
+     * 基本设置
+     */
+    public function list(Request $request){
+        [$cate_name,$pid,$is_show] = UtilService::getMore([
+            ['cate_name',''],
+            ['pid','0'],
+            ['is_show','0']
+        ],$request,true);
+        $menuMenu = new CategoryModel();
+        $menus = $menuMenu->getArMenu($cate_name,$pid,$is_show);
+        return app('json')->success($menus);
+    }
+
+
+
+    /**
+     * 获取树级分类
+     */
+    public function treeList() {
+        $menuAr = (new CategoryModel())->order("sort","desc")->select()->toArray();
+        $data = sort_list_tier($menuAr, '顶级', 'pid', 'id');
+        return app('json')->success($data);
+    }
+
+    
+}

+ 128 - 0
app/admin/controller/v1/Commission.php

@@ -0,0 +1,128 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\admin\OrderInfo;
+use app\model\admin\SiteDetail;
+use app\model\admin\Tx;
+use app\Request;
+use library\services\UtilService;
+
+class Commission extends  BaseController
+{
+
+    /**
+     * 获取配置信息
+     */
+    public function total(Request $request)
+    {
+        //剩余佣金
+        $post['money'] = $request->site['money'];
+        //提现的钱
+        $money = (new Tx)->where('sassid', $request->site['sassid'])->where('type', 2)->where('is_type', 0)->sum('money');
+        $post['tx_money'] = empty($money) ? 0 : $money;
+        //已提现的钱
+        $money = (new Tx)->where('sassid', $request->site['sassid'])->where('type', 2)->where('is_type', 1)->sum('money');
+        $post['tx_ok_money'] =empty($money) ? 0 : $money;
+        $post['total'] = $post['money'] + $post['tx_money'] +  $post['tx_ok_money'];
+        return app('json')->success($post);
+    }
+
+
+    /**
+     *
+     * @param Request $request
+     */
+    public function order(Request $request) {
+        $pageCount = 10;
+        $post = UtilService::getMore([
+            ['page',1],
+            ['order_id',''],
+            ['start_time',''],
+            ['end_time',''],
+            ['code',''],
+            ['type','']
+        ],$request);
+        $where = [];
+        $where['s.sassid'] = $request->site['sassid'];
+        if(!empty($post['order_id'])) {
+            $where['s.order_id'] = ['%'.$post['order_id'].'%','whereLike'];
+        }
+
+        if(!empty($post['start_time'])) {
+            $where['s.time'] = [[strtotime($post['start_time']),strtotime($post['end_time'])],'whereBetween'];
+        }
+
+        if(!empty($post['code'])) {
+            $where['s.code'] = $post['code'];
+        }
+
+        if(!empty($post['type'])) {
+            $where['s.type'] = $post['type'];
+        }
+
+        [$total,$data] =(new SiteDetail)->getList($post['page'],$where,$pageCount,'*','s.id desc');
+        $post = [];
+        $data =  UtilService::getParam([
+            ['code','code'],
+            ['time','time','date("Y-m-d H:i:s",$1)'],
+            ['title','title'],
+            ['content','content'],
+            ['money','money'],
+            ['v','v'],
+            ['type','type'],
+            ['order_id','order_id'],
+            ['all_price','all_price']
+        ],$data);
+        $post['pageSize'] = $pageCount;
+        $post['pageCount'] = $total;
+        $post['data'] = (array)$data;
+        return app('json')->success($post);
+    }
+
+
+
+    /**
+     * 提现列表
+     * @param Request $request
+     */
+    public function txList(Request $request) {
+        $pageSize = 10;
+        $post =  UtilService::getMore(
+            [
+                ['page',1]
+            ],$request
+        );
+        $where['sassid'] =$request->site['sassid'];
+        $where['type'] = 2;
+        $tx = new Tx();
+        list($pageCount,$data) = $tx->getList($post['page'],$where,$pageSize,"*","time desc");
+        $result = UtilService::getParam([
+            "id",
+            "money",
+            "bank",
+            'name',
+            'code',
+            "is_type",
+            ["time","time","date('Y-m-d H:i:s',$1)"]
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+
+}

+ 171 - 0
app/admin/controller/v1/Index.php

@@ -0,0 +1,171 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\admin\OrderInfo;
+use app\model\admin\SiteDetail;
+use app\model\admin\Tx;
+use app\Request;
+use library\services\UtilService;
+use think\Cache;
+
+class Index extends  BaseController
+{
+
+    /**
+     * 获取配置信息
+     */
+    public function getIndex(Request $request){
+        //今日订单量
+        $post['today_order_count'] = (new \app\model\admin\Order())
+                                        ->where('status','>',0)
+                                        ->where('sassid',$request->site['sassid'])
+                                        ->whereTime('pay_time','today')
+                                        ->count();
+        $post['all_order_count'] = (new \app\model\admin\Order())
+            ->where('sassid',$request->site['sassid'])
+            ->where('status','>',0)
+            ->count();
+        $post['today_t_order_count'] = (new OrderInfo)
+                                            ->where('status','>',0)
+
+                                            ->where('sassid',$request->site['sassid'])
+                                            ->whereTime('time','today')
+                                            ->count();
+        $post['all_t_order_count'] = (new OrderInfo)
+            ->where('sassid',$request->site['sassid'])
+            ->where('status','>',0)
+            ->count();
+        //销售额
+        $post['today_money'] = (new \app\model\admin\Order())
+            ->where('status','>',0)
+            ->whereTime('pay_time','today')
+
+            ->where('sassid',$request->site['sassid'])
+            ->sum('all_price');
+
+        $post['all_money'] = (new \app\model\admin\Order())
+            ->where('sassid',$request->site['sassid'])
+            ->where('status','>',0)
+            ->sum('all_price');
+        $post['no_order_count'] = (new \app\model\admin\Order())
+            ->where('sassid',$request->site['sassid'])->where('status','=',1)->count();
+        $post['order_count'] = (new \app\model\admin\Order)
+            ->where('sassid',$request->site['sassid'])->where('status','>',1)->count();
+
+        //
+        $sysData = (new \app\model\system\Sys)->where('id',1)->find();
+        $post['sysInfo'] = [
+            'lx_name'     => $sysData['lx_name'],
+            'lx_tel'      => $sysData['lx_tel'],
+            'custom_tel'  => $sysData['custom_tel'],
+            'custom_qq'   => $sysData['custom_qq'],
+            'weixin_logo' => $sysData['weixin_logo'],
+            'tag'         => $sysData['tag']
+        ];
+
+        //获取自己用户
+        $post['commission_money'] = $request->site['money'];
+        //提现的钱
+        $money = (new Tx)->where('sassid',$request->site['sassid'])->where('type',2)->where('is_type',0)->sum('money');
+        $post['tx_commission_money'] = $money;
+        //已提现的钱
+        $money = (new Tx)->where('sassid',$request->site['sassid'])->where('type',2)->where('is_type',1)->sum('money');
+        $post['txok_commission_money'] = $money;
+
+        return app('json')->success($post);
+    }
+
+
+
+    public function getOrderTotal(Request $request){
+        [$visitDate] = UtilService::getMore([
+            ['visitDate','thirtyday']
+        ],$request,true);
+        $order = (new \app\model\admin\Order());
+        $orderInfo = (new OrderInfo());
+        //30天
+        $tAr = ['name'=>[],'order_count'=>[],'order_info_count'=>[]];
+        if($visitDate == 'thirtyday') {
+            for ($i = 30;$i>=0;$i--) {
+                $time = date('Y-m-d',strtotime('-'.$i.' day'));
+                $tAr['name'][] = $time;
+                $tAr['order_count'][] = $order
+                                        ->whereDay('time',$time)
+                                        ->where('sassid',$request->site['sassid'])
+                                        ->where('status','>',0)
+                                        ->count();
+                $tAr['order_info_count'][] = $orderInfo->where('sassid',$request->site['sassid'])->where('status','>',0)->whereDay('time',$time)->count();
+            }
+        }
+        return app('json')->success($tAr);
+    }
+
+
+    /**
+     * 资金情况
+     * @param Request $request
+     */
+    public function rechargeInit(Request $request) {
+        $info = [
+            'money' => $request->site['money'],
+        ];
+        return app('json')->success($info);
+    }
+
+
+    /**
+     * 我要提现
+     * @param Request $request
+     */
+    public function subTx(Request $request) {
+        $redis = \think\facade\Cache::store('redis');
+        $post =  UtilService::getMore(
+            [
+                ['bank',"","empty","请输入到账账号"],
+                ['money','0',"empty","请输入提现金额"],
+                ['name','','empty','请输入真实姓名']
+            ],$request
+        );
+        $txKey = 'tx_'.md5($post['bank']);
+        $ckBank = $redis->get($txKey);
+        if(!empty($ckBank)) {
+            return app('json')->fail("请务重复提现!");
+        }
+        //提现金额
+        if($request->site['money'] < $post['money']) {
+            return app('json')->fail("余额不足,无法提现!");
+        }
+        $redis->set($txKey,1,5);
+        (new Tx)
+            ->insert([
+                'uid'     => 0,
+                'money'  => $post['money'],
+                'sassid' => $request->site['sassid'],
+                'type'   => 2,
+                'bank'   => '支付宝',
+                'name'   => $post['name'],
+                'code'   => $post['bank'],
+                'time'   => time(),
+                'is_type' => 0,
+                'sassid' => $request->site['sassid']
+            ]);
+        (new \app\model\api\SiteDetail)->tx($post['money'],$request->site['sassid'],['time'=>date('Y-m-d H:i:s'),'money'=>$post['money']]);
+        $redis->delete($txKey);
+        return app('json')->success(
+            '提现成功,请等待打款!'
+        );
+    }
+
+}

+ 104 - 0
app/admin/controller/v1/Log.php

@@ -0,0 +1,104 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\admin\Admin;
+use app\model\admin\AdminLog;
+use library\services\UtilService;
+use library\utils\IpLocation;
+use app\Request;
+
+class Log extends  BaseController
+{
+
+    public function list(Request $request)
+    {
+        $pageSize = 50;
+        $post = UtilService::getMore([
+            ['page',1],
+            ['data',''],
+            ['action',''],
+            ['username',''],
+            ['ip',''],
+            ['sassid',$request->site['sassid']]
+        ]);
+        list($pageCount,$data) = (new AdminLog())
+            ->getList($post['page'],[function($query) use($post){
+                if($post['data'] == "lately7") {
+                    $sTime = date('Y-m-d',strtotime('-7 day'));
+                    $eTime = date('Y-m-d');
+                    $query->whereBetweenTime('time',$sTime,$eTime);
+                }else if($post['data'] == "lately30") {
+                    $sTime = date('Y-m-d',strtotime('-30 day'));
+                    $eTime = date('Y-m-d');
+                    $query->whereBetweenTime('time',$sTime,$eTime);
+                }else if($post['data'] == "today") {
+                    $query->whereTime('time','today');
+                }else if($post['data'] == "yesterday") {
+                    $query->whereTime('time','yesterday');
+                } else if($post['data'] == "month") {
+                    $query->whereMonth('time');
+                }else if($post['data'] == "year") {
+                    $query->whereYear('time');
+                } else {
+                    $split = explode('-',$post['data']);
+                    if(count($split) == 2) {
+                        $sTime = $split[0];
+                        $eTime =  $split[1];
+                        $query->whereBetweenTime('time', $sTime, $eTime);
+                    }
+                }
+                if(!empty($post['username'])) {
+                    $query->whereLike('admin_username',"%{$post['username']}%");
+                }
+
+                if(!empty($post['action'])) {
+                    $query->whereLike('action',"%{$post['action']}%");
+                }
+
+                if(!empty($post['ip'])) {
+                    $query->whereLike('ip',"%{$post['ip']}%");
+                }
+                $query->where('sassid',$post['sassid']);
+        }
+        ],$pageSize,'*','id desc');
+        $result = UtilService::getParam([
+            'id',
+            'ip',
+            'admin_username',
+            'action',
+            'title',
+            ['time','time','date("Y-m-d H:i:s",$1)'],
+            ['ipara','ip',function($item){
+                return  (new IpLocation())->getlocation($item)['country'];
+            }]
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+
+    /**
+     * 清理一个月之前的数据
+     */
+    public function delMonth(Request $request){
+        $time = strtotime('- 1 month');
+        AdminLog::where([['time','<',$time],['sassid','=',$request->site['sassid']]])->delete();
+        return app('json')->success('清理成功');
+    }
+
+}

+ 305 - 0
app/admin/controller/v1/Member.php

@@ -0,0 +1,305 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\admin\Admin;
+use app\model\admin\Member as MemberModel;
+use app\model\admin\MemberLevel;
+use app\model\api\MemberDetail;
+use library\services\UtilService;
+use library\utils\IpLocation;
+use app\Request;
+
+class Member extends  BaseController
+{
+
+    public function getMember(Request $request)
+    {
+        $pageSize = 50;
+        $post = UtilService::getMore([
+            ['page',1],
+            ['keyword',''],
+            ['i_uid',''],
+            ['mobile',''],
+            ['level',''],
+            ['uid','']
+        ]);
+        $post['sassid'] = $request->site['sassid'];
+        list($pageCount,$data) = (new MemberModel())
+            ->getList($post['page'], $post,$pageSize,'*','uid desc');
+        $result = UtilService::getParam([
+            'uid',
+            'mobile',
+            'weixin_name',
+            'nickname',
+            'sex',
+            'avatar',
+            'address',
+            'money',
+            'name',
+            "tx_money",
+            "level_name",
+            "site_name",
+            'status',
+            'levelid',
+            'order_count',
+            'recharge_count',
+            'order_info_count',
+            'i_mobile',
+            'i_nickname',
+            'i_uid',
+            'sassid',
+            'regip',
+            ['regtime','regtime','date("Y-m-d H:i:s",$1)'],
+            ['lasttime','lasttime','date("Y-m-d H:i:s",$1)'],
+            ['ipara','regip',function($item){
+                return  (new IpLocation())->getlocation($item)['country'];
+            }]
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+
+
+    /**
+     * 获取会员数据
+     * @param Request $request
+     * @return mixed
+     */
+    public function getItem(Request $request)
+    {
+        $pageSize = 50;
+        $post = UtilService::getMore([
+            ['uid',1]
+        ]);
+        $data = (new MemberModel())->getItem($post['uid'],$request->site['sassid']);
+        $result = UtilService::getParam([
+            'uid',
+            'mobile',
+            'nickname',
+            'sex',
+            'avatar',
+            'address',
+            'money',
+            'name',
+            "tx_money",
+            "level_name",
+            "site_name",
+            'status',
+            'levelid',
+            'order_count',
+            'recharge_count',
+            'order_info_count',
+            'regip',
+            ['regtime','regtime','date("Y-m-d H:i:s",$1)'],
+            ['lasttime','lasttime','date("Y-m-d H:i:s",$1)'],
+            ['ipara','regip',function($item){
+                return  (new IpLocation())->getlocation($item)['country'];
+            }]
+        ],[$data]);
+        return app('json')->success(empty($result) ? [] : $result[0]);
+    }
+
+
+    /**
+     * 修改会员数据
+     * @param Request $request
+     */
+    public function memberUpdate(Request $request) {
+        $post = UtilService::getMore([
+            ['levelid','0'],
+            ['mobile','','isMobile','请输入手机号码'],
+            ['nickname',''],
+            ['status','0'],
+            ['name',''],
+            ['password',''],
+            ['avatar',''],
+            ['sex','0'],
+            ['uid','0','empty','参数错误']
+        ], $request);
+        $save = [
+            'mobile'    => $post['mobile'],
+            'nickname'  => $post['nickname'],
+            'sex'       => $post['sex'],
+            'name'      => $post['name'],
+            'levelid'   => $post['levelid'],
+            'status'    => $post['status'],
+            'avatar'    => $post['avatar']
+        ];
+
+        if(!empty($post['password'])) {
+            $save['password'] = md5($post['password']);
+        }
+        //
+        (new \app\model\admin\Member)->where('uid',$post['uid'])->where('sassid',$request->site['sassid'])->save($save);
+        return app('json')->success('修改成功');
+    }
+
+
+    public function getMemberLevel(Request $request)
+    {
+        $pageSize = 50;
+        $post = UtilService::getMore([
+            ['page',1]
+        ]);
+        $where = ['sassid'=>$request->site['sassid']];
+        list($pageCount,$data) = (new MemberLevel())
+            ->getList($post['page'],$where,$pageSize,'*','id desc');
+        $result = UtilService::getParam([
+            'id',
+            'name',
+            "is_show",
+            'code',
+            ['update_money','update_money',function($val) { return empty($val) ? '0.00' : $val; }]
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+
+
+    /**
+     * 操作明细
+     * @param Request $request
+     */
+    public function detailList(Request $request) {
+        $pageSize = 5;
+        $post =  UtilService::getMore(
+            [
+                ['page',1],
+                ['uid','0'],
+                ['time',[]]
+            ],$request
+        );
+        $where['uid'] = $post['uid'];
+        $where['sassid'] = $request->site['sassid'];
+        if(!empty($post['tabType']) && $post['tabType'] != 'all') {
+            $where['code'] = $post['tabType'];
+        }
+        if(!empty($post['time'])) {
+            $where['time'] = [[strtotime($post['time'][0]),strtotime($post['time'][1])],'whereBetween'];
+        }
+        $detail = new MemberDetail();
+        list($pageCount,$data) = $detail->getList($post['page'],$where,$pageSize,"*","time desc");
+        $result = UtilService::getParam([
+            "id",
+            "code",
+            "v",
+            'title',
+            'content',
+            "type",
+            ["time","time","date('Y-m-d H:i:s',$1)"]
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+
+    /**
+     * 修改推荐人
+     * @param Request $request
+     */
+    public function editTj(Request $request) {
+        $post =  UtilService::getMore(
+            [
+                ['uid','','empty','参数错误'],
+                ['i_uid','0']
+            ],$request
+        );
+        if($post['uid'] == $post['i_uid']) {
+            return app('json')->fail('自己无法挂载自己下面');
+        }
+
+        if(!empty($post['i_uid'])) {
+            $count = (new \app\model\admin\Member)
+                ->where('sassid',$request->site['sassid'])
+                ->where('uid',$post['i_uid'])
+                ->count();
+            if($count <= 0) {
+                return app('json')->fail('当前推荐用户不存在!');
+            }
+        }
+        (new \app\model\admin\Member)
+                        ->where('sassid',$request->site['sassid'])
+                        ->where('uid',$post['uid'])
+                        ->save(['i_uid'=>$post['i_uid']]);
+        return app('json')->success('操作成功');
+    }
+
+
+    /**
+     * 获取等级
+     * @param Request $request
+     * @return mixed
+     */
+    public function levelInfo(Request $request)
+    {
+        [$id] = UtilService::getMore([
+            ['id','0']
+        ],$request,true);
+        $data = MemberLevel::alias("ml")
+                    ->field("ml.name,ml.id,sl.update_money")
+                    ->leftJoin("site_level sl","sl.level_id = ml.id AND sass_id=".$request->site['sassid'])
+                    ->where('ml.id',$id)
+                    ->find();
+        if(empty($data)) return app('json')->fail('数据错误');
+        $tAr = [];
+        $tAr['name'] = $data['name'];
+        $tAr['id'] = $data['id'];
+        $tAr['update_money'] = empty($data['update_money']) ? '0.00' : $data['update_money'];
+        return app('json')->success($tAr);
+
+    }
+
+    /**
+     * 保存等级设置
+     * @param Request $request
+     */
+    public function levelSave(Request $request) {
+        [$id,$update_money] = UtilService::getMore([
+            ['id','0'],
+            ['update_money','0'],
+        ],$request,true);
+        $siteLevel = new \app\model\admin\SiteLevel;
+        $count = $siteLevel
+                    ->where('sass_id',$request->site['sassid'])
+                    ->where('level_id',$id)
+                    ->count();
+        if($count > 0) {
+            $siteLevel
+                ->where('sass_id',$request->site['sassid'])
+                ->where('level_id',$id)
+                ->save(['update_money'=>$update_money]);
+        } else {
+            $siteLevel->insert([
+                'sass_id'       =>  $request->site['sassid'],
+                'level_id'      =>  $id,
+                'update_money'  =>  $update_money
+            ]);
+        }
+        return app('json')->success("操作成功");
+    }
+
+
+}

+ 58 - 0
app/admin/controller/v1/News.php

@@ -0,0 +1,58 @@
+<?php
+declare (strict_types = 1);
+namespace app\admin\controller\v1;
+
+use app\BaseController;
+use app\model\admin\SiteAbout;
+use app\model\api\MemberDetail;
+use app\model\admin\Order as OrderModel;
+use app\model\admin\OrderInfo;
+use app\model\admin\OrderInfoAsw;
+use app\model\admin\OrderInfoDd;
+use app\model\admin\OrderInfoMono;
+use app\Request;
+use library\services\UtilService;
+use library\utils\Region;
+use think\db\exception\DbException;
+use think\Exception;
+
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 21:53
+// +----------------------------------------------------------------------
+
+class News extends  BaseController
+{
+
+    /**
+     * about
+     * @param Request $request
+     */
+    public function about(Request $request) {
+        $aboutValue = SiteAbout::where('sassid',$request->site['sassid'])->value('content');
+        if(empty($aboutValue)) $aboutValue = "";
+        return app('json')->success(['content'=>$aboutValue]);
+    }
+
+
+    public function saveAbout(Request $request) {
+        $post = UtilService::getMore(
+            ['content','']
+        );
+        $count = (new SiteAbout)->where('sassid',$request->site['sassid'])->count();
+        if($count > 0) {
+            (new SiteAbout)->where('sassid',$request->site['sassid'])->save(['content' => $post['content']]);
+        } else {
+            (new SiteAbout)->insert([
+                'sassid' => $request->site['sassid'],
+                'content' => $post['content']
+            ]);
+        }
+        return app('json')->success('操作成功');
+    }
+}

+ 331 - 0
app/admin/controller/v1/Order.php

@@ -0,0 +1,331 @@
+<?php
+declare (strict_types = 1);
+namespace app\admin\controller\v1;
+
+use app\BaseController;
+use app\model\api\MemberDetail;
+use app\model\admin\Order as OrderModel;
+use app\model\admin\OrderInfo;
+use app\model\admin\OrderInfoAsw;
+use app\model\admin\OrderInfoDd;
+use app\model\admin\OrderInfoMono;
+use app\Request;
+use library\services\UtilService;
+use library\utils\Region;
+use think\db\exception\DbException;
+use think\Exception;
+
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 21:53
+// +----------------------------------------------------------------------
+
+class Order extends  BaseController
+{
+    /**
+     * 获取订单数据
+     * @param Request $request
+     */
+    public function getOrderList(Request $request){
+        $pageSize = 20;
+        $post =  UtilService::getMore(
+            [
+                ['page',1],
+                ['order_id',''],
+                ['mono',''],
+                ['platform_id',''],
+                ['warehouse_id',''],
+                ['data',[]],
+                ['orderType',''],
+                ['timeType',''],
+                ['uid','']
+            ],$request
+        );
+        $where = $post;
+        $where['sassid'] = $request->site['sassid'];
+        $order = new OrderModel;
+        list($pageCount,$data) = $order->getList($post['page'],$where,$pageSize,'id desc');
+        $result = UtilService::getParam([
+            "id",
+            ['time','time','date("Y-m-d H:i:s",$1)'],
+            "order_id",
+            "mobile",
+            "avatar",
+            "order_count",
+            "all_price",
+            "status",
+            "platfrom_name",
+            "ck_name",
+            "exp_name",
+            "site_name",
+            "pro_title",
+            "send_count",
+            "uid",
+            "pro_img",
+            "mono",
+            "err_msg"
+            ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+
+
+    public function getOrderPushList(Request $request) {
+        $pageSize = 20;
+        $post =  UtilService::getMore(
+            [
+                ['page',1],
+                ['order_id',''],
+                ['mono',''],
+                ['platform_id',''],
+                ['warehouse_id',''],
+                ['data',[]],
+                ['orderType',''],
+                ['timeType','']
+            ],$request
+        );
+        $where = $post;
+        $where['sassid'] = $request->site['sassid'];
+        $order = new OrderModel;
+        list($pageCount,$data) = $order->getPushList($post['page'],$where,$pageSize,'id desc');
+        $result = UtilService::getParam([
+            "id",
+            ['time','time','date("Y-m-d H:i:s",$1)'],
+            "order_id",
+            "mobile",
+            "avatar",
+            "order_count",
+            "all_price",
+            "status",
+            "platfrom_name",
+            "ck_name",
+            "exp_name",
+            "site_name",
+            "pro_title",
+            "push_count",
+            "pro_img",
+            "is_push",
+            "pro_img",
+            "mono",
+            "err_msg"
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+
+    /**
+     * 导出数据
+     * @param Request $request
+     */
+    public function orderDown(Request $request) {
+        $post = UtilService::getMore([['id','','empty','参数错误'],],$request);
+        $where = [];
+        $idsAr = explode(',',$post['id'].'');
+        $where['id'] = $idsAr;
+        $where['sassid'] = $request->site['sassid'];
+        $data = (new OrderInfo)->getAllList($where,'id desc');
+        $tAr = [];
+        foreach ($data as $v) {
+            $d = [];
+            $d['name']          = $v['name'];
+            $d['mobile']        = $v['mobile'];
+            $d['out_order_id']  = $v['out_order_id'];
+            $d['in_order_id']   = $v['in_order_id'];
+            $d['address']       = $v['address'];
+            $d['exp_name']      = $v['exp_name'];
+            $d['exp_number']    = $v['exp_number'];
+            $d['pro_name']      = $v['pro_name'];
+            $d['pro_code']      = $v['csno'];
+            $d['pro_price']     = $v['pro_price'];
+            $d['platform_name'] = $v['platform_name'];
+            $d['time']     =date('Y-m-d H:i:s',$v['time']);
+            $d['count']    = 1;
+            $d['money'] = $v['money'];
+            $d['exp_price'] = $v['exp_price'];
+            $tAr[] = $d;
+        }
+        return app('json')->success($tAr);
+    }
+    
+    /**
+     * 子订单数据
+     * @param Request $request
+     */
+    public function orderSubItem(Request $request) {
+        $pageSize = 20;
+        $post =  UtilService::getMore(
+            [
+                ['id',''],
+                ['page',1],
+                ['order_id',''],
+                ['mobile',''],
+                ['name','']
+            ],$request
+        );
+        $where = $post;
+        $where['id']     = $post['id'];
+        $where['sassid'] = $request->site['sassid'];
+        list($pageCount,$data) = (new OrderInfo)->getList($post['page'],$where,$pageSize,"*","id desc");
+        $result = UtilService::getParam([
+            "id",
+            "exp_name",
+            "order_id",
+            "out_order_id",
+            "name",
+            "mobile",
+            "address",
+            "is_push",
+            "mono",
+            "time",
+            "send_time",
+            "exp_number",
+            "msg_err",
+            "money",
+            "status",
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+    
+    /**
+     * 售后列表
+     * @param Request $request
+     */
+    public function orderMonoList(Request $request) {
+        $pageSize = 10;
+        $post =  UtilService::getMore(
+            [
+                ['page',1],
+                ['timeType',''],
+                ['aswStatus','']
+            ],$request
+        );
+        $tx = new OrderInfoAsw();
+        $where = $post;
+        $where['sassid'] = $request->site['sassid'];
+        list($pageCount,$data) = $tx->getList($post['page'],$where,$pageSize,"*");
+        $result = UtilService::getParam([
+            "id",
+            "o_id",
+            "mono",
+            "status",
+            "cl_time",
+            "cl_admin_time",
+            "out_order_id",
+            "name",
+            "mobile",
+            "address",
+            "time",
+            "send_time",
+            "exp_number",
+            'msg_mono',
+            'msg_img',
+            'admin_id',
+            "exp_name"
+        ],$data);
+        foreach ($result as $k=>$v){
+            $result[$k]['msg_img_ar'] =  empty($v["msg_img"])?[]:explode(",",$v["msg_img"]);
+        }
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+    /**
+     * 订单撤销数据
+     * @param Request $request
+     */
+    public function orderMonoCancel(Request $request){
+        $post =  UtilService::getMore(
+            [
+                ['id',"","empty","参数错误"],
+                ['mono',""]
+            ],$request
+        );
+        (new OrderInfoAsw)->where('id',$post['id'])->delete();
+        return app('json')->success('撤销成功');
+    }
+    public function orderMonoHandle(Request $request){
+        $post =  UtilService::getMore(
+            [
+                ['id',"","empty","参数错误"],
+                ['msg_mono',""],
+                ['msg_img',""],
+            ],$request
+        );
+        $post["admin_time"]=NOW_TIME;
+        $post["status"]=1;
+        $post["admin_id"]=$request->adminInfo["id"];
+        $id = $post['id'];
+        unset($post['id']);
+        (new OrderInfoAsw)->where('id',$id)->save($post);
+        return app('json')->success('处理成功');
+    }
+    
+    
+    /**
+     * 底单申请列表
+     * @param Request $request
+     */
+    public function orderDdList(Request $request) {
+        $pageSize = 10;
+        $post =  UtilService::getMore(
+            [
+                ['page',1],
+                ['timeType',''],
+                ['aswStatus','']
+            ],$request
+        );
+        $tx = new OrderInfoDd();
+        $where = $post;
+        $where['sassid'] = $request->site['sassid'];
+        list($pageCount,$data) = $tx->getList($post['page'],$where,$pageSize,"*");
+        $result = UtilService::getParam([
+            "id",
+            "o_id",
+            "mono",
+            "status",
+            "cl_time",
+            "cl_admin_time",
+            "out_order_id",
+            "name",
+            "mobile",
+            "address",
+            "time",
+            "send_time",
+            "exp_number",
+            'msg_mono',
+            'msg_img',
+            'admin_id',
+            "exp_name"
+        ],$data);
+        foreach ($result as $k=>$v){
+            $result[$k]['msg_img_ar'] =  empty($v["msg_img"])?[]:explode(",",$v["msg_img"]);
+        }
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+}

+ 105 - 0
app/admin/controller/v1/Platform.php

@@ -0,0 +1,105 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\admin\Platform as PlatformModel;
+use app\Request;
+use library\services\UtilService;
+
+class Platform extends  BaseController
+{
+    /**
+     * 平台列表
+     * @param Request $request
+     */
+    public function list(Request $request) {
+        $pageSize = 50;
+        [$page,$status,$name] =  UtilService::getMore(
+            [
+                ['page',1],
+                ['status','1'],
+                ['name','']
+            ],$request,true
+        );
+        list($pageCount,$data) = (new PlatformModel)
+            ->getList($page, ['name'=>[$name,'!empty']],$pageSize,'seq desc');
+        $result = UtilService::getParam([
+            'id',
+            'name',
+            'code',
+            'seq',
+            'img',
+            'status'
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $page
+        ]);
+    }
+
+
+
+    /**
+     * 保存数据
+     * @param Request $request
+     */
+    public function  save(Request $request) {
+        $post = UtilService::getMore(
+            [
+                ['id','0'],
+                ['name','','empty','请输入平台来源'],
+                ['code','','empty','请输入平台code'],
+                ['status','0'],
+                ['seq','0'],
+                ['img','']
+            ],
+            $request
+        );
+        $bool = (new PlatformModel)->saveModel($post);
+        if($bool)
+            return app('json')->success("操作成功", []);
+        else
+            return app('json')->fail(PlatformModel::getErrorInfo());
+    }
+
+    /**
+     * 获取详情数据
+     * @param Request $request
+     * @return mixed
+     */
+    public function info(Request $request) {
+        [$id] = UtilService::getMore([
+            ['id','','empty','参数错误']
+        ],$request,true);
+        $info = PlatformModel::get(compact('id'))->toArray();
+        return app('json')->success($info);
+    }
+
+    /**
+     * 删除数据
+     * @param Request $request
+     */
+    public function del(Request $request) {
+        [$id] = UtilService::getMore(
+            [
+                ['id','0'],
+            ],
+            $request,true
+        );
+        PlatformModel::del($id);
+        return app('json')->success("删除成功", []);
+    }
+}

+ 92 - 0
app/admin/controller/v1/Product.php

@@ -0,0 +1,92 @@
+<?php
+declare (strict_types = 1);
+namespace app\admin\controller\v1;
+
+use app\BaseController;
+use app\model\admin\Product as ProductModel;
+use app\model\admin\SiteProduct;
+use app\Request;
+use library\services\UtilService;
+
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 21:53
+// +----------------------------------------------------------------------
+
+class Product extends  BaseController
+{
+    /**
+     * 基本设置
+     */
+    public function list(Request $request) {
+        $pageSize = 20;
+        $post =  UtilService::getMore([
+                ['page',1],
+                ['warehouse',0],
+                ['name',''],
+                ['artType','all']
+            ],$request);
+        $sassid = $request->site['sassid'];
+        $siteProduct = new SiteProduct;
+        $siteProduct->setSassId($sassid);
+        list($pageCount,$data) = $siteProduct->getList($post['page'],$post,$pageSize);
+        
+        
+        $totalCount['count'] = $siteProduct->where('sassid',$sassid)->count();
+        $totalCount['downCount'] = $siteProduct->where('sassid',$sassid)->where('status',0)->count();
+        $totalCount['upCount'] = $siteProduct->where('sassid',$sassid)->where('status',1)->count();
+        
+        return app('json')->success([
+            'list'      => $data,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page'],
+            'totalCount'=>$totalCount
+        ]);
+    }
+
+    /**
+     * 保存数据
+     * @param Request $request
+     */
+    public function save(Request $request) {
+       $post =  UtilService::getMore([
+            ['id',0],
+            ['is_host',0],
+            ['is_new',0],
+            ['status',''],
+            ['ver_bug_count',0],
+            ['price',0]
+        ],$request);
+        $post["status"]=$post["status"]==1?1:0;
+        $sassid = $request->site['sassid'];
+        $siteProduct = new SiteProduct;
+        $siteProduct->setSassId($sassid);
+        $bool = $siteProduct->saveProduct($post);
+        if(!$bool) {
+            return app('json')->fail(SiteProduct::getErrorInfo());
+        }
+        return app('json')->success("数据保存成功");
+    }
+
+
+    /**
+     * 获取产品基本信息
+     * @param Request $request
+     */
+    public function info(Request $request) {
+        [$id] = UtilService::getMore([
+            ['id','','empty','参数错误']
+        ],$request,true);
+        $sassid = $request->site['sassid'];
+        $siteProduct = new SiteProduct;
+        $siteProduct->setSassId($sassid);
+        $info = $siteProduct->getProInfo(compact('id'));
+        return app('json')->success($info);
+    }
+}

+ 65 - 0
app/admin/controller/v1/Recharge.php

@@ -0,0 +1,65 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\system\Recharge as RechargeModel;
+use app\model\system\Site as SiteModel;
+use app\model\system\Member as MemberModel;
+use library\services\UtilService;
+use library\utils\IpLocation;
+use app\Request;
+
+class Recharge extends  BaseController
+{
+
+    public function getRecharge(Request $request)
+    {
+        $pageSize = 50;
+        $post = UtilService::getMore([
+            ['page',1],
+            ['keyword','']
+        ]);
+        $sassid = $request->site['sassid'];
+        list($pageCount,$data) = (new RechargeModel())
+            ->getList($post['page'],[function($query) use($post,$sassid){
+                if(!empty($post['keyword'])) {
+                    $query->whereLike('uid',"%{$post['keyword']}%");
+                }
+                $query->where('status',1);
+                $query->where('sassid',$sassid);
+        }
+        ],$pageSize,'*','time desc');
+        $result = UtilService::getParam([
+            'order_id',
+            'v',
+            'trade_no',
+            'status',
+            'uid',
+            ['nickname','uid',function($item){
+                return (new MemberModel())->where("uid",$item)->value('nickname');
+            }],
+            ['site_name','sassid',function($item){
+                return (new SiteModel())->where("sassid",$item)->value('name');
+            }],
+            ['time','time','date("Y-m-d H:i:s",$1)'],
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+    
+}

+ 70 - 0
app/admin/controller/v1/Role.php

@@ -0,0 +1,70 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\admin\AdminRole;
+use app\Request;
+use library\services\UtilService;
+
+class Role extends  BaseController
+{
+
+    public function list(Request $request) {
+       $adminRole = new AdminRole();
+       $adminRole->setSassId($request->site['sassid']);
+       $listAr = $adminRole->getRoleData();
+       $result = [];
+       foreach ($listAr as $v) {
+           $d = [];
+           $d['name'] = $v['name'];
+           $d['status'] = $v['status'];
+           $d['is_system'] = $v['is_system'];
+           $d['id'] = $v['id'];
+           $result[] = $d;
+       }
+       return app('json')->success($result);
+    }
+
+    /**
+     * 角色添加
+     */
+    public function save(Request $request){
+       $post = UtilService::getMore([
+           ['id','0'],
+            ['name','','empty','请输入角色名'],
+            ['status',0]
+        ]);
+       $post['sassid'] = $request->site['sassid'];
+       $bool = (new AdminRole)->saveRole($post);
+        if($bool)
+            return app('json')->success("操作成功", []);
+        else
+            return app('json')->fail(AdminRole::getErrorInfo());
+    }
+
+    /**
+     * 删除数据
+     * @param Request $request
+     */
+    public function del(Request $request) {
+        [$id] = UtilService::getMore(
+            [
+                ['id','0']
+            ],
+            $request,true
+        );
+        AdminRole::del($id);
+        return app('json')->success("删除成功", []);
+    }
+}

+ 59 - 0
app/admin/controller/v1/Site.php

@@ -0,0 +1,59 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\admin\ExpCost;
+use app\model\admin\MemberLevel;
+use app\model\admin\Site as SiteModel;
+use app\Request;
+use library\services\UtilService;
+
+class Site extends  BaseController
+{
+
+    public function list(Request $request) {
+        $pageSize = 50;
+        $post =  UtilService::getMore(
+            [
+                ['page',1],
+                ['name',''],
+                ['artType','all']
+            ],$request
+        );
+        $where = [];
+        $where['tj_sassid'] =$request->site['sassid'];
+        //获取自己模板
+        $expCost = new ExpCost;
+        $expData = $expCost
+            ->where('sassid',$request->site['sassid'])
+            ->where('level_id','>',-1)
+            ->select();
+        $level = (new MemberLevel)->select();
+        list($pageCount,$data) = (new SiteModel)
+            ->getList($post['page'],$where,$pageSize,'id desc');
+        //特殊数据
+        foreach ($data as $k=>$v) {
+            $data[$k]['warehouse'] = $expCost->expSite($v['sassid'],$expData);
+            $data[$k]['_time'] = date("Y-m-d H:i:s",$data[$k]['time']);
+        }
+
+        return app('json')->success([
+            'list'      => $data,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page'],
+            'level'     => $level
+        ]);
+    }
+}

+ 135 - 0
app/admin/controller/v1/SiteAdmin.php

@@ -0,0 +1,135 @@
+<?php
+namespace app\admin\controller\v1;
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 15:49
+// +----------------------------------------------------------------------
+
+use app\Request;
+use app\admin\controller\AuthController;
+use library\services\UtilService;
+use library\utils;
+use app\model\admin\Admin as AdminModel;
+use \app\model\admin\AdminRole;
+
+class SiteAdmin extends AuthController
+{
+
+
+    /**
+     * 获取管理数据
+     * @param Request $request
+     * @return mixed
+     */
+    public function info(Request $request) {
+        [$id,$sassId] = UtilService::getMore([
+            ['id','','empty','参数错误'],
+            ['sassId','','empty','参数错误']
+        ],$request,true);
+        $adminInfo = AdminModel::where('id',$id)->where('sassid',$sassId)->find();
+        return app('json')->success([
+            'id' => $id,
+            'username'  => $adminInfo['username'],
+            'name'      => $adminInfo['name'],
+            'avatar'    => $adminInfo['avatar'],
+            'role_id'   => $adminInfo['role_id'],
+            'status'    => $adminInfo['status']
+        ]);
+    }
+
+    /**
+     * 获取管理列表
+     * @param Request $request
+     */
+    public function list(Request $request) {
+        $pageSize = 50;
+        [$page,$roleId,$keyword,$sassId] =  UtilService::getMore(
+            [
+                ['page',1],
+                ['roleId',0],
+                ['keyword',''],
+                ['sassId','','empty','参数错误']
+            ],$request,true
+        );
+        $adminRole = new AdminRole;
+        $adminRole->setSassId($sassId);
+        list($pageCount,$data) = (new AdminModel)
+            ->getList($page,
+                ['sassid'=>$sassId,'role_id'=>[$roleId,'!empty'],'username'=>[$keyword,'!empty']]
+                ,$pageSize,'id desc');
+        $result = UtilService::getParam([
+            'id',
+            'username',
+            'name',
+            'avatar',
+            'status',
+            [ 'regTime', 'time', 'date("Y-m-d",$1)'],
+            [ 'lastTime', 'last_time', 'date("Y-m-d",$1)'],
+            'ip',
+            ['ipArea','ip',
+                function($item) {
+                    return  (new utils\IpLocation())->getlocation($item)['country'];
+                }
+            ],
+            ['roleName','role_id',
+                function($item) use($adminRole) {
+                    return $adminRole->getRoleId($item,'name');
+                }
+            ]
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $page
+        ]);
+    }
+
+
+    /**
+     * 保存数据
+     * @param Request $request
+     */
+    public function  save(Request $request) {
+        $post = UtilService::getMore(
+            [
+                ['id','0'],
+                ['sassId','','empty','参数错误'],
+                ['name','','empty','请输入姓名'],
+                ['username','','empty','请输入账户'],
+                ['status','0'],
+                ['role_id','','empty','请选择管理角色'],
+                ['password',''],
+                ['avatar','']
+            ],
+            $request
+        );
+        $bool = AdminModel::saveAdmin($post);
+        if($bool)
+            return app('json')->success("操作成功", []);
+        else
+            return app('json')->fail(AdminModel::getErrorInfo());
+    }
+
+    /**
+     * 删除数据
+     * @param Request $request
+     */
+    public function del(Request $request) {
+        [$id] = UtilService::getMore(
+            [
+                ['id','0'],
+            ],
+            $request,true
+        );
+        AdminModel::del($id);
+        return app('json')->success("删除成功", []);
+    }
+
+
+}

+ 74 - 0
app/admin/controller/v1/SiteRole.php

@@ -0,0 +1,74 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+use app\BaseController;
+use app\model\admin\AdminRole;
+use app\Request;
+use library\services\UtilService;
+
+class SiteRole extends  BaseController
+{
+
+    public function list(Request $request) {
+       [$sassId] = UtilService::getMore(
+            [
+                ['sassId','','empty','参数错误']
+            ]
+        ,$request,true);
+       $role = (new AdminRole);
+       $role->setSassId($sassId);
+       $listAr =$role->getRoleData();
+       $result = [];
+       foreach ($listAr as $v) {
+           $d = [];
+           $d['name'] = $v['name'];
+           $d['status'] = $v['status'];
+           $d['is_system'] = $v['is_system'];
+           $d['id'] = $v['id'];
+           $result[] = $d;
+       }
+       return app('json')->success($result);
+    }
+
+    /**
+     * 角色添加
+     */
+    public function save(){
+       $post = UtilService::getMore([
+           ['id','0'],
+            ['sassId','','empty','参数错误'],
+            ['name','','empty','请输入角色名'],
+            ['status',0]
+        ]);
+       $bool = (new AdminRole)->saveRole($post);
+        if($bool)
+            return app('json')->success("操作成功", []);
+        else
+            return app('json')->fail(AdminRole::getErrorInfo());
+    }
+
+    /**
+     * 删除数据
+     * @param Request $request
+     */
+    public function del(Request $request) {
+        [$id] = UtilService::getMore(
+            [
+                ['id','0']
+            ],
+            $request,true
+        );
+        AdminRole::del($id);
+        return app('json')->success("删除成功", []);
+    }
+}

+ 53 - 0
app/admin/controller/v1/Sys.php

@@ -0,0 +1,53 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\admin\AdminRole;
+use app\Request;
+use library\services\UtilService;
+use app\model\admin\Site as SiteModel;
+
+class Sys extends  BaseController
+{
+
+    /**
+     * 基本设置
+     */
+    public function index(Request $request){
+        $sys = (new SiteModel)->where("sassid",$request->site['sassid'])->find();
+        return app('json')->success($sys->toArray());
+    }
+
+
+    /**
+     * 保存数据
+     */
+    public function save(Request $request){
+        
+        $post = UtilService::getMore([
+            ['lx_name',''],
+            ['lx_tel',''],
+            ['custom_tel',''],
+            ['custom_qq',''],
+            ['weixin_logo',''],
+            ['tag',''],
+            ['record',''],
+            ['mono',''],
+            ['js_script','']
+        ],$request);
+        (new SiteModel())->where('sassid',$request->site['sassid'])->save($post);
+        return app('json')->success("数据保存成功");
+    }
+    
+}

+ 102 - 0
app/admin/controller/v1/SysMenu.php

@@ -0,0 +1,102 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\admin\AdminMenu;
+use app\model\admin\AdminRole;
+use app\Request;
+use library\services\UtilService;
+use library\utils\Dtree;
+
+class SysMenu extends  BaseController
+{
+
+    /**
+     * 基本设置
+     */
+    public function list(Request $request){
+        $menuMenu = new AdminMenu();
+        $menuMenu->setSassId($request->site['sassid']);
+        $menus = $menuMenu->getArMenu();
+        return app('json')->success($menus);
+    }
+
+    /**
+     * 系统分类显示 | 关闭
+     */
+    public function status(Request $request) {
+        [$id,$is_show] = UtilService::getMore([
+            ['id','0','empty','参数错误'],
+            ['is_show','0']
+        ],$request,true);
+        $bool = (new AdminMenu())->setStatus($id,$is_show);
+        if($bool) {
+            return app('json')->success('操作成功');
+        } else {
+            return app('json')->fail('提交失败');
+        }
+    }
+
+
+    /**
+     * 获取树级分类
+     */
+    public function treeList() {
+        $menuAr = (new AdminMenu())->order("seq","desc")->select()->toArray();
+        $data = sort_list_tier($menuAr, '顶级', 'pid', 'id');
+        return app('json')->success($data);
+    }
+
+    /**
+     * 获取详情栏目数据
+     */
+    public function info(Request $request){
+        [$id] = UtilService::getMore([
+            ['id',0,'empty','参数错误']
+        ],$request,true);
+        $data = (new AdminMenu())->field("title,id,icon,path,is_show,pid,code,seq")->find(compact('id'))->toArray();
+        return app('json')->success($data);
+    }
+
+    /**
+     * 保存数据
+     */
+    public function save(Request $request){
+        $post = UtilService::getMore([
+            ['title',''],
+            ['pid','0'],
+            ['seq','0'],
+            ['path',''],
+            ['icon',''],
+            ['is_show','0'],
+            ['code',''],
+            ['id','0']
+        ],$request);
+        (new AdminMenu())->saveMenu($post);
+        return app('json')->success("数据保存成功");
+    }
+
+    /**
+     * 栏目删除
+     * @param Request $request
+     */
+    public function del(Request $request) {
+        [$id] = UtilService::getMore([
+            ['id',0,'empty','参数错误']
+        ],$request,true);
+        $bool =   (new AdminMenu())->delMenu($id);
+        return app('json')->success("栏目删除成功");
+    }
+
+}

+ 51 - 0
app/admin/controller/v1/Upload.php

@@ -0,0 +1,51 @@
+<?php
+declare (strict_types=1);
+namespace app\admin\controller\v1;
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 15:05
+// +----------------------------------------------------------------------
+use app\Request;
+use app\admin\controller\AuthController;
+use library\utils\Qiniu;
+use think\Image;
+
+class Upload extends AuthController{
+
+
+    public function index(Request $request){
+        $file =$request->file('file');
+            $isZ = $request->post('isz',1);
+        if(empty($file)) {
+            return app('json')->fail("未上传文件");
+        }
+        $rootTmp = config('filesystem.disks.local.root') .'/' . \think\facade\Filesystem::putFile( 'tmp', $file);
+        if($isZ == 1) {
+            $image_size = @getimagesize($rootTmp);
+            if ($image_size[0] > 1000) {
+                $imgS = Image::open($rootTmp);
+                $imgS->thumb(1000, $image_size[1]);
+                $imgS->save($rootTmp);
+            } else {
+                if ($image_size[1] > 1000) {
+                    $imgS = Image::open($rootTmp);
+                    $imgS->thumb($image_size[0], 1000);
+                    $imgS->save($rootTmp);
+                }
+            }
+        }
+        $qiniu = new  Qiniu;
+        $img_url = $qiniu->updateFile('img', $rootTmp, $rootTmp);
+        if(empty($img_url['url'])){
+            return app('json')->fail( $qiniu->getError());
+        }
+
+        return app('json')->success(['img'=>$img_url['url']]);
+    }
+
+}

+ 108 - 0
app/admin/controller/v1/Vbind.php

@@ -0,0 +1,108 @@
+<?php
+declare (strict_types=1);
+namespace app\admin\controller\v1;
+
+use app\BaseViewController;
+use app\model\admin\Site;use app\Request;
+use library\exceptions\AuthException;
+use library\lib\weixina;
+use think\App;
+use think\facade\Db;
+
+class Vbind  extends BaseViewController {
+
+    private $siteData;
+    public function __construct(App $app)
+    {
+        parent::__construct($app);
+        $request = \request();
+        $secret_key = $request->get('secret_key');
+        if(empty($secret_key)) {
+            throw new AuthException('参数错误,请重新扫码', -9);
+        }
+        $this->siteData = (new Site)->where('secret_key',$secret_key)->find();
+
+    }
+
+    /**
+     * 绑定数据
+     */
+    public function system_bind(Request $request){
+        $token = $request->get('token');
+        if(empty($token)) {
+            $this->assign('error','token 错误,请重新扫码绑定!');
+            return $this->display('binderror');
+        }
+        $token = str_replace(" ","+",$token);
+        $str = crypto_decrypt(base64_decode($token),'md5_token');
+        if(empty($str)) {
+            $this->assign('error','token 错误,请重新扫码绑定!');
+            return $this->display('binderror');
+        }
+        $strAr = explode('|',$str);
+        if(count($strAr) != 2) {
+            $this->assign('error','数据出错!');
+            return $this->display('binderror');
+        }
+        $w = $this->weixinLogin();
+        if(!$w[1]) {
+            return $w[0];
+        }
+        $this->assign('user',$w[0]);
+        $this->assign('site',$this->siteData);
+        $this->assign('token',$token);
+        $this->assign('secret_key',$this->siteData['secret_key']);
+        return $this->display('bindqrcode');
+    }
+
+
+    public function system_bind_data(Request $request){
+        $token = $request->post('token');
+        if(empty($token)) {
+            return app('json')->fail('token 错误,请重新扫码绑定!');
+        }
+        $token = str_replace(" ","+",$token);
+        $str = crypto_decrypt(base64_decode($token),'md5_token');
+        if(empty($str)) {
+            return app('json')->fail('token 错误,请重新扫码绑定!');
+        }
+        $w = $this->weixinLogin();
+        if(!$w[1]) {
+            return $w[0];
+        }
+        $userInfo = $w[0];
+        $count = Db::name("weixin_push_user")
+            ->where('sassid',$this->siteData['sassid'])
+            ->where('openid',$userInfo['openid'])
+            ->count();
+        if($count <= 0) {
+            $d['type'] = 'admin';
+            $d['sassid'] = $this->siteData['sassid'];
+            $d['uid'] = 0;
+            $d['time'] = time();
+            $d['avatar'] = $userInfo['headimgurl'];
+            $d['nickname'] = $userInfo['nickname'];
+            $d['openid'] = $userInfo['openid'];
+            Db::name("weixin_push_user")->insert($d);
+        }
+
+        return app('json')->success('操作成功');
+    }
+
+
+    public function bindsuccess(){
+        return $this->display();
+    }
+
+    /**
+     * 微信登录板顶
+     */
+    private function weixinLogin() {
+        $weixinUser = cookie('weix_userinfo');
+        if(!empty($weixinUser)) return [unserialize($weixinUser),true];
+        $domain = \request()->url();
+        cookie('w_url',$domain);
+        $weixinA = new weixina;
+        return [$weixinA->oauth('login'),false];
+    }
+}

+ 253 - 0
app/admin/controller/v1/Warehouse.php

@@ -0,0 +1,253 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\admin\controller\v1;
+
+
+use app\BaseController;
+use app\model\admin\ExpCost;
+use app\model\admin\MemberLevel;
+use app\model\admin\Warehouse as WarehouseModel;
+use app\model\admin\AdminRole;
+use app\Request;
+use library\services\UtilService;
+use library\utils\Dtree;
+use library\utils\MakeSite;
+
+class Warehouse extends  BaseController
+{
+
+    /**
+     * 获取管理列表
+     * @param Request $request
+     */
+    public function list(Request $request) {
+        $pageSize = 50;
+        [$page,$name] =  UtilService::getMore(
+            [
+                ['page',1],
+                ['name','']
+            ],$request,true
+        );
+        $where = [];
+        if(!empty($name)) {
+            $where['name'] = ["%{$name}%",'whereLike'];
+        }
+        $platform = (new \app\model\admin\Platform());
+        list($pageCount,$data) = (new WarehouseModel)->getList($page, $where,$pageSize,'id desc');
+        foreach ($data as $k => $v) {
+            $idsAr = explode(',',$v['platform_ids']);
+            $platformAr = [];
+            $data[$k]['platform']  = array_map(
+                function ($item) use($platform){
+                return  $platform->getPlatformId($item,'*');
+            },$idsAr);
+        }
+
+        return app('json')->success([
+            'list'      => $data,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $page
+        ]);
+    }
+
+
+    /**
+     * 保存数据
+     * @param Request $request
+     */
+    public function  save(Request $request) {
+        $post = UtilService::getMore(
+            [
+                ['id','0'],
+                ['name','','empty','请输入仓库名称'],
+                ['lx_name',''],
+                ['lx_tel',''],
+                ['address',''],
+                ['status','0'],
+                ['seq','0'],
+                ['platform_ids','']
+            ],
+            $request
+        );
+        $bool = (new WarehouseModel)->saveModel($post);
+        if($bool)
+            return app('json')->success("操作成功", []);
+        else
+            return app('json')->fail(WarehouseModel::getErrorInfo());
+    }
+
+    /**
+     * 获取详情数据
+     * @param Request $request
+     * @return mixed
+     */
+    public function info(Request $request) {
+        [$id] = UtilService::getMore([
+            ['id','','empty','参数错误']
+        ],$request,true);
+        $info = WarehouseModel::get(compact('id'))->toArray();
+        return app('json')->success($info);
+    }
+
+    /**
+     * 删除数据
+     * @param Request $request
+     */
+    public function del(Request $request) {
+        [$id] = UtilService::getMore(
+            [
+                ['id','0'],
+            ],
+            $request,true
+        );
+        WarehouseModel::del($id);
+        return app('json')->success("删除成功", []);
+    }
+
+
+    /**
+     * 快递配置[全部数据]
+     * @param Request $request
+     */
+    public function exp(Request $request) {
+        $pageSize = 20;
+        [$page] = UtilService::getMore(
+            [
+                ['page','1']
+            ]
+            ,$request,true);
+        $where = [];
+        $where['sassid'] = $request->site['sassid'];
+        $where['level_id'] = -1;
+        $level = (new MemberLevel)->select()->toArray();
+        $expCost = new ExpCost;
+        list($pageCount,$data) = $expCost->getList2($page, $where,$pageSize,'id desc');
+        foreach ($data as $k=>$v) {
+            $expData = [];
+            $d = $expCost
+                ->field('id,money,level_id,status')
+                ->where('warehouse_id',$v['warehouse_id'])
+                ->where('express_id',$v['express_id'])
+                ->where('sassid',$v['sassid'])
+                ->select();
+
+            $bool = false;
+            foreach ($level as $v1) {
+                $expData[$v1['id']] = ['money'=>0,'id'=>0,'status'=>0,'level_id'=>$v1['id']];
+                foreach ($d as $v2) {
+                    if($v1['id'] == $v2['level_id']) {
+                        $expData[$v1['id']]['money'] = $v2['money'];
+                        $expData[$v1['id']]['id'] = $v2['id'];
+                        if($v2['status']) $bool = true;
+                    }
+                }
+            }
+            $data[$k]['status'] = $bool;
+            $data[$k]['expData'] = $expData;
+            $data[$k]['exp_money'] = empty($v['exp_money']) ? 0 : $v['exp_money'];
+        }
+
+        return app('json')->success([
+            'list'      => $data,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $page,
+            'level'     => $level
+        ]);
+
+    }
+
+
+
+    /**
+     * 保存数据
+     * @param Request $request
+     */
+    public function expSave(Request $request) {
+        $pageSize = 20;
+        [$warehouse_id,$id,$expData,$status] = UtilService::getMore(
+            [
+                ['warehouse_id','','empty','参数错误'],
+                ['id','','empty','参数错误'],
+                ['expData',[]],
+                ['status',false],
+            ]
+            ,$request,true);
+
+        $expCost = (new ExpCost);
+
+        $exp_money = $expCost
+            ->where('warehouse_id',$warehouse_id)
+            ->where('express_id',$id)
+            ->where('sassid',$request->site['sassid'])
+            ->where('level_id',-1)
+            ->value('money');
+        if(empty($exp_money)) $exp_money = 0;
+        $isMoneyEr = false;
+        $rePrice= [];
+        foreach ($expData as $v) {
+            $money = $v['money'];
+            if($exp_money > $v['money']) {
+                $money = $exp_money;
+                $isMoneyEr = true;
+            }
+            $d['warehouse_id'] = $warehouse_id;
+            $d['express_id'] = $id;
+            $d['money'] = $money;
+            $rePrice[] = $money;
+            $d['level_id'] = $v['level_id'];
+            $d['sassid'] = $request->site['sassid'];
+            $d['status'] = $status ? 1 : 0;
+
+            $count = $expCost
+                ->where('sassid',$request->site['sassid'])
+                ->where('warehouse_id',$warehouse_id)
+                ->where('express_id',$id)
+                ->where('level_id',$v['level_id'])
+                ->count();
+            if( $count <= 0 ) {
+                $expCost->insert($d);
+            } else {
+                $expCost->where('id',$v['id'])->save($d);
+            }
+        }
+        return app('json')->success([
+            'msg'=>'操作成功',
+            'err'=>($isMoneyEr ? ('快递费用低于' .$exp_money.'元,全部恢复成'.$exp_money ) : ''),
+            'price'=>$rePrice]);
+    }
+
+    /**
+     * 更新分站数据
+     * @param Request $request
+     */
+    public function updateSiteExp(Request $request) {
+        [$warehouse_id] = UtilService::getMore(
+            [
+                ['warehouse_id','']
+            ]
+            ,$request,true);
+        $str = [];
+        $sassid = $request->site['sassid'];
+        $w = (new \app\model\system\Warehouse)->select();
+        foreach ($w as $v) {
+            $makeSite = new MakeSite($sassid);
+            $makeSite->makeExpcos($v['id']);
+            $str[] = $v['name'].'更新成功';
+        }
+        return app('json')->success(join(',',$str));
+    }
+
+
+
+}

+ 5 - 0
app/admin/event.php

@@ -0,0 +1,5 @@
+<?php
+// 这是系统自动生成的event定义文件
+return [
+
+];

+ 66 - 0
app/admin/exception/ExecptionHandle.php

@@ -0,0 +1,66 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ 后台登录认证异常抛出  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-25 16:10
+// +----------------------------------------------------------------------
+declare (strict_types=1);
+namespace app\admin\exception;
+
+use library\exceptions\AuthException;
+use library\exceptions\GeneralException;
+use think\db\exception\DbException;
+use think\exception\Handle;
+use think\Response;
+use Throwable;
+
+class ExecptionHandle extends Handle {
+
+    /**
+     * 记录异常信息(包括日志或者其它方式记录)
+     *
+     * @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
+    {
+        // 添加自定义异常处理机制
+        $massageData = env('app_debug', false) ? [
+            'file' => $e->getFile(),
+            'line' => $e->getLine(),
+            'trace' => $e->getTrace(),
+            'previous' => $e->getPrevious(),
+        ] : [];
+
+        if ($e instanceof DbException) {
+            //记录服务器日志
+            return app('json')->fail('抱歉,服务器数据异常!', ['line'=>$e->getMessage()]);
+        }elseif ($e instanceof AuthException){
+            return app('json')->make($e->getCode() ?: -1, $e->getMessage());
+        } elseif ($e instanceof  GeneralException) {
+            return app('json')->make(-1, $e->getMessage());
+        } else {
+            return app('json')->make(-1, $e->getMessage());
+        }
+    }
+
+}

+ 5 - 0
app/admin/middleware.php

@@ -0,0 +1,5 @@
+<?php
+// 这是系统自动生成的middleware定义文件
+return [
+
+];

+ 75 - 0
app/admin/middleware/AdminAuthTokenMiddleware.php

@@ -0,0 +1,75 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:59
+// +----------------------------------------------------------------------
+namespace app\admin\middleware;
+
+use app\model\admin\Admin;
+use app\Request;
+use Firebase\JWT\ExpiredException;
+use Firebase\JWT\JWT;
+use library\exceptions\AuthException;
+use library\interfaces\MiddlewareInterface;
+use think\facade\Cache;
+use think\facade\Config;
+
+class AdminAuthTokenMiddleware implements MiddlewareInterface
+{
+    public function handle(Request $request, \Closure $next)
+    {
+        $authInfo = null;
+        $token = trim($request->header(Config::get('cookie.admin_token_name','')), );
+        $adminInfo = $this->adminParseToken($token);
+        $request->adminInfo = $adminInfo;
+        return $next($request);
+    }
+
+
+
+    /**
+     * 获取Admin授权信息
+     * @param $token
+     * @param int $expires
+     * @param string $prefix
+     * @return array
+     * @throws \Psr\SimpleCache\InvalidArgumentException
+     */
+    public static function adminParseToken($token): array
+    {
+        $redis = Cache::store('redis');
+        try {
+            if (!$token || !$redis->has($token) || !($cacheToken = $redis->get($token)))
+                throw new AuthException('请重新登录', -909);
+            [$adminInfo, $type] = Admin::parseToken($token);
+            Cache::store('redis')->set($cacheToken['token'], $cacheToken, $cacheToken['exp']);
+        } catch (ExpiredException $e) {
+            list($headb64, $bodyb64, $cryptob64) = explode('.', $token);
+            $payload = JWT::jsonDecode(JWT::urlsafeB64Decode($bodyb64));
+            $type = $payload->jti->type;
+            $adminInfo = Admin::where('id', $payload->jti->id)->find();
+            if (!$adminInfo) {
+                $redis->delete($token);
+                throw new AuthException('登录超时,请重新登录!', -909);
+            }
+            $redis->set($cacheToken['token'], $cacheToken, $cacheToken['exp']);
+        } catch (\Throwable $e) {
+            $redis->delete($token);
+            throw new AuthException('登录超时,请重新登录!', -909);
+        } catch (\Throwable $e) {
+            throw new AuthException('登录超时,请重新登录!', -909);
+        }
+
+        if (!isset($adminInfo) || !$adminInfo || !$adminInfo->id) {
+            $redis->delete($token);
+            throw new AuthException('登录超时,请重新登录!', -909);
+        }
+        $adminInfo->type = $type;
+        return $adminInfo->toArray();
+    }
+}

+ 36 - 0
app/admin/middleware/AllowOriginMiddleware.php

@@ -0,0 +1,36 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:59
+// +----------------------------------------------------------------------
+namespace app\admin\middleware;
+
+
+
+use app\Request;
+use library\interfaces\MiddlewareInterface;
+use \think\facade\Config;
+use think\Response;
+
+class AllowOriginMiddleware implements MiddlewareInterface {
+
+    public function handle(Request $request, \Closure $next)
+    {
+        $origin = $request->header('origin');
+        $header['Access-Control-Allow-Origin'] = '*';
+        $header['Access-Control-Allow-Methods'] = 'POST,GET,JSON,OPTIONS,DELETE';
+        $header['Access-Control-Allow-Headers'] = 'x-requested-with,content-type,WAREHOUSE-TOKEN,SECRET-KEY,SYSTEM-ACC-TOKEN,TOKEN,'. Config::get('cookie.admin_token_name','');
+        if ($request->method(true) == 'OPTIONS') {
+            $response = Response::create('ok')->code(200)->header($header);
+        } else {
+            $response = $next($request)->header($header);
+        }
+        return $response;
+    }
+
+}

+ 48 - 0
app/admin/middleware/SeretKeyMiddleware.php

@@ -0,0 +1,48 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:59
+// +----------------------------------------------------------------------
+namespace app\admin\middleware;
+
+use app\model\admin\Site;
+use app\Request;
+use library\exceptions\AuthException;
+use library\interfaces\MiddlewareInterface;
+
+class SeretKeyMiddleware implements MiddlewareInterface
+{
+    public function handle(Request $request, \Closure $next)
+    {
+        $secret_key =$request->header('SECRET-KEY');
+        $request->site = $this->checkSecret($secret_key);
+        return $next($request);
+    }
+
+
+    /**
+     * 检查数据是否正常
+     * @param $secret_key
+     */
+    private function checkSecret($secret_key) {
+        if(empty($secret_key)) {
+            throw new AuthException('当前站点已经不存在,暂无法登陆', -100);
+        }
+       $siteData = (new Site)->where('secret_key',$secret_key)->find();
+       if(empty($siteData)) {
+           throw new AuthException('当前站点已经不存在,暂无法登陆', -100);
+       }
+       //站点停用
+       if(empty($siteData['status'])) {
+           throw new AuthException('抱歉,前站点已经停用。', -100);
+       }
+       return $siteData->toArray();
+    }
+
+
+}

+ 7 - 0
app/admin/provider.php

@@ -0,0 +1,7 @@
+<?php
+use app\Request;
+
+// 容器Provider定义文件
+return [
+    'think\exception\Handle' => \app\admin\exception\ExecptionHandle::class,
+];

+ 40 - 0
app/admin/route/admin.php

@@ -0,0 +1,40 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('admin', function () {
+    //获取本管理信息
+    Route::rule('init', 'v1.admin/init');
+    //获取所有管理者
+    Route::post('list','v1.admin/list');
+    //获取管理员具体信息
+    Route::post('getInfo','v1.admin/getInfo');
+    //管理退出
+    Route::rule('logout', 'v1.admin/logout');
+    //获取个人设置[[当前登录用户]]
+    Route::post('info','v1.admin/info');
+    //修改个人信息[当前登录用户]
+    Route::post('edit','v1.admin/edit');
+    //修改个人密码[当前登录用户]
+    Route::post('password','v1.admin/password');
+    //修改管理员信息
+    Route::post('save','v1.admin/save');
+    //删除管理员信息
+    Route::post('del','v1.admin/del');
+    
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+   // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 33 - 0
app/admin/route/adver.php

@@ -0,0 +1,33 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 21:52
+// +----------------------------------------------------------------------
+use think\facade\Route;
+
+Route::group('adver', function () {
+    //获取广告栏目
+    Route::rule('page', 'v1.adver/page');
+    //获取广告分类tree
+    Route::post('page_tree','v1.adver/page_tree');
+    //广告列表
+    Route::post('list','v1.adver/list');
+    //删除广告
+    Route::post('del','v1.adver/del');
+    //修改广告数据
+    Route::post('save','v1.adver/save');
+    //广告详情
+    Route::post('info','v1.adver/info');
+
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+    // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 27 - 0
app/admin/route/bind.php

@@ -0,0 +1,27 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('bind', function () {
+    //绑定数据
+    Route::rule('qrocde','v1.bind/qrocde');
+    //列表数据
+    Route::rule('index','v1.bind/index');
+    //删除绑定
+    Route::rule('del','v1.bind/del');
+
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+]);

+ 24 - 0
app/admin/route/category.php

@@ -0,0 +1,24 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 21:52
+// +----------------------------------------------------------------------
+use think\facade\Route;
+
+Route::group('category', function () {
+    //获取商品分类
+    Route::rule('list', 'v1.category/list');
+    //获取商品分类tree
+    Route::post('tree','v1.category/treeList');
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+    // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 26 - 0
app/admin/route/commission.php

@@ -0,0 +1,26 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('commission', function () {
+    //total提现数据
+    Route::rule('total', 'v1.commission/total');
+    //order 佣金明细
+    Route::rule('order','v1.commission/order');
+    //提现记录
+    Route::rule('txList','v1.commission/txList');
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+]);

+ 30 - 0
app/admin/route/index.php

@@ -0,0 +1,30 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('index', function () {
+    //获取权限列表
+    Route::rule('getIndex', 'v1.index/getIndex');
+    //site
+    Route::rule('getSite','v1.index/getSite');
+    //订单total
+    Route::rule('getOrderTotal','v1.index/getOrderTotal');
+    //
+    Route::rule('rechargeInit','v1.index/rechargeInit');
+    //提现数据
+    Route::rule('subTx','v1.index/subTx');
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+]);

+ 27 - 0
app/admin/route/log.php

@@ -0,0 +1,27 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('log', function () {
+    //获取权限列表
+    Route::rule('list', 'v1.log/list');
+    //删除管理员信息
+    Route::post('del','v1.log/del');
+    //删除一个的数据
+    Route::post('delMonth','v1.log/delMonth');
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+   // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 37 - 0
app/admin/route/member.php

@@ -0,0 +1,37 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('member', function () {
+    //获取列表
+    Route::rule('getMember', 'v1.Member/getMember');
+    //获取列表
+    Route::rule('getMemberLevel', 'v1.Member/getMemberLevel');
+    //修改会员
+    Route::rule('memberUpdate','v1.Member/memberUpdate');
+    //获取会员详情
+    Route::rule('item','v1.Member/getItem');
+    //获取会员明细日志
+    Route::rule('detailList','v1.Member/detailList');
+    //更新推荐人
+    Route::rule('editTj','v1.Member/editTj');
+    //等级清湖
+    Route::rule('levelInfo','v1.Member/levelInfo');
+    //等级更新
+    Route::rule('levelSave','v1.Member/levelSave');
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+   // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 25 - 0
app/admin/route/news.php

@@ -0,0 +1,25 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('news', function () {
+    //关于我们
+    Route::rule('about', 'v1.news/about');
+    //保存关于我们
+    Route::post('saveAbout','v1.news/saveAbout');
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+   // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 32 - 0
app/admin/route/order.php

@@ -0,0 +1,32 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 21:52
+// +----------------------------------------------------------------------
+use think\facade\Route;
+
+Route::group('order', function () {
+    Route::rule('getOrderList','v1.Order/getOrderList');
+    //推送订单
+    Route::rule('getOrderPushList','v1.Order/getOrderPushList');
+    //订单下载
+    Route::rule('orderDown','v1.Order/orderDown');
+    //查看订单详情
+    Route::rule('orderSubItem','v1.Order/orderSubItem');
+    //底单申请列表
+    Route::rule('orderDdList','v1.Order/orderDdList');
+
+    //售后订单
+    Route::rule('orderMonoList','v1.Order/orderMonoList');
+    
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+    // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 29 - 0
app/admin/route/platform.php

@@ -0,0 +1,29 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('platform', function () {
+    //获取平台列表
+    Route::rule('list', 'v1.platform/list');
+//    //修改|添加平台列表
+//    Route::post('save','v1.platform/save');
+//    //获取平台详情
+//    Route::post('info','v1.platform/info');
+//    //平台删除数据
+//    Route::post('del','v1.platform/del');
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+    // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 27 - 0
app/admin/route/product.php

@@ -0,0 +1,27 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-06 21:52
+// +----------------------------------------------------------------------
+use think\facade\Route;
+
+Route::group('product', function () {
+    //获取商品列表
+    Route::rule('list', 'v1.product/list');
+    //修改商品数据
+    Route::post('save','v1.product/save');
+    //商品详情
+    Route::post('info','v1.product/info');
+
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+    // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 22 - 0
app/admin/route/recharge.php

@@ -0,0 +1,22 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('recharge', function () {
+    //获取列表
+    Route::rule('getRecharge', 'v1.Recharge/getRecharge');
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+]);

+ 23 - 0
app/admin/route/role.php

@@ -0,0 +1,23 @@
+<?php
+
+/* 
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+use think\facade\Route;
+Route::group('role',function(){
+    //获取权限列表
+    Route::rule('list', 'v1.role/list');
+    //修改管理员信息
+    Route::post('save','v1.role/save');
+    //删除管理员信息
+    Route::post('del','v1.role/del');
+    
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+   // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 41 - 0
app/admin/route/route.php

@@ -0,0 +1,41 @@
+<?php
+namespace app\admin\route;
+
+
+use app\admin\middleware\AllowOriginMiddleware;
+use app\admin\middleware\SeretKeyMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 无需授权的接口
+ */
+Route::group(function () {
+    //后台管理员登录
+    Route::rule('login/login', 'Login/index');
+    //验证码
+    
+    Route::rule('index', 'Index/index');
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+]);
+
+
+Route::group(function () {
+    Route::get('login/captcha', 'Login/captcha');
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class
+]);
+/**
+ * miss 路由
+ */
+Route::miss(function () {
+    if (app()->request->isOptions()) {
+        $header = Config::get('cookie.header');
+        $header['Access-Control-Allow-Origin'] = app()->request->header('origin');
+        return Response::create('ok')->code(200)->header($header);
+    } else
+        return Response::create()->code(404);
+});

+ 22 - 0
app/admin/route/site.php

@@ -0,0 +1,22 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('site', function () {
+    //切换基本设置
+    Route::rule('list', 'v1.site/list');
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+    // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 24 - 0
app/admin/route/sys.php

@@ -0,0 +1,24 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('sys', function () {
+    //切换基本设置
+    Route::rule('index', 'v1.sys/index');
+    //保存基本设置
+    Route::rule('save','v1.sys/save');
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+   // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 32 - 0
app/admin/route/sysmenu.php

@@ -0,0 +1,32 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('sysmenu', function () {
+    //栏目列表
+    Route::rule('list', 'v1.sysMenu/list');
+//    //栏目树结构
+//    Route::rule('tree','v1.sysMenu/treeList');
+//    //设置栏目是否显示隐藏
+//    Route::post('status','v1.sysMenu/status');
+//    //获取具体栏目
+//    Route::rule('info','v1.sysMenu/info');
+//    //保存栏目设置
+//    Route::rule('save','v1.sysMenu/save');
+//    //删除栏目
+//    Route::rule('del','v1.sysMenu/del');
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+    // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 24 - 0
app/admin/route/upload.php

@@ -0,0 +1,24 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('upload', function () {
+    //上传文件
+    Route::post('index','v1.upload/index');
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+//    \app\admin\middleware\SeretKeyMiddleware::class
+   // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 24 - 0
app/admin/route/vbind.php

@@ -0,0 +1,24 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('vbind', function () {
+    //绑定登录
+    Route::rule('system_bind','v1.Vbind/system_bind');
+    //绑定登录数据
+    Route::rule('system_bind_data','v1.Vbind/system_bind_data');
+    //绑定成功
+    Route::rule('bindsuccess','v1.Vbind/bindsuccess');
+
+
+})->middleware([
+]);

+ 37 - 0
app/admin/route/warehouse.php

@@ -0,0 +1,37 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-09-05 09:21
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('warehouse', function () {
+    //获取仓库列表
+    Route::rule('list', 'v1.warehouse/list');
+//    //修改|添加仓库列表
+//    Route::post('save','v1.warehouse/save');
+//    //获取仓库详情
+//    Route::post('info','v1.warehouse/info');
+//    //仓库删除数据
+//    Route::post('del','v1.warehouse/del');
+
+
+    //
+    Route::post('exp','v1.warehouse/exp');
+    //保存快递价格
+    Route::post('expSave','v1.warehouse/expSave');
+    //更新物流
+    Route::post('updateSiteExp','v1.warehouse/updateSiteExp');
+
+})->middleware([
+    \app\admin\middleware\AllowOriginMiddleware::class,
+    \app\admin\middleware\AdminAuthTokenMiddleware::class,
+    \app\admin\middleware\SeretKeyMiddleware::class
+    // \app\adminapi\middleware\AdminCkeckRole::class
+]);

+ 7 - 0
app/admin/validates/Index.php

@@ -0,0 +1,7 @@
+<?php
+namespace app\admin\validates;
+
+class Index
+{
+
+}

+ 0 - 0
app/api/.htaccess


+ 18 - 0
app/api/config/app.php

@@ -0,0 +1,18 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-11-10 12:58
+// +----------------------------------------------------------------------
+return [
+
+    '__JS__'          => '/public/system/js',
+    '__ASSETS__'      => '/public/system/assets',
+    '__CSS__'         => '/public/system/css',
+    '__IMAGES__'      => '/public/system/img',
+
+];

+ 37 - 0
app/api/controller/AuthController.php

@@ -0,0 +1,37 @@
+<?php
+declare (strict_types = 1);
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-25 17:23
+// +----------------------------------------------------------------------
+namespace app\api\controller;
+
+/**
+ * 基类 所有控制器继承的类
+ * Class AuthController
+ * @package app\adminapi\controller
+ */
+class AuthController extends \app\BaseController
+{
+    /**
+     * 当前登陆管理员信息
+     * @var
+     */
+    protected $user;
+
+    /**
+     * 初始化
+     */
+    protected function initialize()
+    {
+        parent::initialize();
+        $this->user = $this->request->user;
+        event('UserVisit', [$this->user, 'api']);
+    }
+
+}

+ 119 - 0
app/api/controller/v1/Bind.php

@@ -0,0 +1,119 @@
+<?php
+declare (strict_types=1);
+namespace app\api\controller\v1;
+
+
+use app\BaseViewController;
+use app\model\admin\Site;
+use app\Request;
+use library\exceptions\AuthException;
+use library\lib\weixina;
+use think\App;
+use think\facade\Db;
+
+class Bind  extends BaseViewController {
+
+    private $siteData;
+    public function __construct(App $app)
+    {
+        parent::__construct($app);
+        $request = \request();
+        $secret_key = $request->get('secret_key');
+        if(empty($secret_key)) {
+            throw new AuthException('参数错误,请重新扫码', -9);
+        }
+        $this->siteData = (new Site)->where('secret_key',$secret_key)->find();
+
+    }
+    /**
+     * 绑定数据
+     */
+    public function system_bind(Request $request){
+        $token = $request->get('token');
+
+        if(empty($token)) {
+            $this->assign('error','token 错误,请重新扫码绑定!');
+            return $this->display('binderror');
+        }
+        $token = str_replace(" ","+",$token);
+        $str = crypto_decrypt(base64_decode($token),'md5_user_token');
+        if(empty($str)) {
+            $this->assign('error','token 错误,请重新扫码绑定!');
+            return $this->display('binderror');
+        }
+        $strAr = explode('|',$str);
+        if(count($strAr) != 2) {
+            $this->assign('error','数据出错!');
+            return $this->display('binderror');
+        }
+        $w = $this->weixinLogin();
+        if(!$w[1]) {
+            return $w[0];
+        }
+        $this->assign('user',$w[0]);
+        $this->assign('site',$this->siteData);
+        $this->assign('token',$token);
+        $this->assign('secret_key',$this->siteData['secret_key']);
+        return $this->display('bindqrcode');
+    }
+
+
+    public function system_bind_data(Request $request){
+        $token = $request->post('token');
+        if(empty($token)) {
+            return app('json')->fail('token 错误,请重新扫码绑定!');
+        }
+        $token = str_replace(" ","+",$token);
+        $str = crypto_decrypt(base64_decode($token),'md5_user_token');
+        if(empty($str)) {
+            return app('json')->fail('token 错误,请重新扫码绑定!');
+        }
+
+        $strAr = explode('|',$str);
+        if(count($strAr) != 2) {
+            $this->assign('error','数据出错!');
+            return $this->display('binderror');
+        }
+
+        $w = $this->weixinLogin();
+        if(!$w[1]) {
+            return $w[0];
+        }
+        $userInfo = $w[0];
+        $count = Db::name("weixin_push_user")
+            ->where('sassid',$this->siteData['sassid'])
+            ->where('openid',$userInfo['openid'])
+            ->where('uid',$strAr[0])
+            ->count();
+        if($count <= 0) {
+            $d['type'] = 'admin';
+            $d['sassid'] = $this->siteData['sassid'];
+            $d['uid'] = $strAr[0];
+            $d['time'] = time();
+            $d['avatar'] = $userInfo['headimgurl'];
+            $d['nickname'] = $userInfo['nickname'];
+            $d['openid'] = $userInfo['openid'];
+            Db::name("weixin_push_user")->insert($d);
+        }
+
+        return app('json')->success('操作成功');
+    }
+
+
+    public function bindsuccess(){
+        return $this->display();
+    }
+
+    /**
+     * 微信登录板顶
+     */
+    private function weixinLogin() {
+        $weixinUser = cookie('weix_userinfo');
+        if(!empty($weixinUser)) return [unserialize($weixinUser),true];
+        $domain = \request()->url();
+        cookie('w_url',$domain);
+        $weixinA = new weixina;
+        return [$weixinA->oauth('login'),false];
+    }
+
+}

+ 133 - 0
app/api/controller/v1/Index.php

@@ -0,0 +1,133 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-25 17:23
+// +----------------------------------------------------------------------
+declare (strict_types = 1);
+namespace app\api\controller\v1;
+
+use app\BaseController;
+use app\model\api\SiteProduct;
+use app\model\system\News;
+use app\Request;
+use library\services\UtilService;
+use library\utils\AdvertUtils;
+
+class Index extends BaseController
+{
+
+    /**
+     * 获取首页数据
+     */
+    public function getIndex(Request $request) {
+        $sassid = $request->site['sassid'];
+        $siteProduct = new SiteProduct;
+        $siteProduct->setSass($sassid);
+        $banner = (new AdvertUtils($sassid))->getData('62');
+        $data['banner'] = $banner;
+        $data['sort_product'] =  $siteProduct->SortList();//排行榜
+        foreach ($data['sort_product'] as $k=>$v) {
+            $imgAr =  explode(',',$v['img']);
+            $data['sort_product'][$k]['img'] = empty($imgAr) ? '' : $imgAr[0];
+        }
+        $newList = $siteProduct->NewsList();//新品上市
+        foreach ($newList as $k=>$v) {
+            $imgAr =  explode(',',$v['img']);
+            $newList[$k]['img'] = empty($imgAr) ? '' : $imgAr[0];
+        }
+        shuffle($newList);
+        $data['new_product'] = $newList;
+        shuffle($newList);
+        $data['hot_product'] = $newList;
+       return app('json')->success($data);
+    }
+
+
+
+
+    /**
+     * 获取产品列表数据
+     * @param Request $request
+     */
+    public function proList(Request $request){
+        $post =  UtilService::getMore([
+                ['page',1],
+                ['warehouse',0],
+                ['countType','0'],
+                ['type','all'],
+                ['pageSize',20]
+            ],$request);
+        $pageSize = $post['pageSize'];
+        $sassid = $request->site['sassid'];
+        $siteProduct = new SiteProduct;
+        $siteProduct->setSass($sassid);
+        list($pageCount,$data) = $siteProduct->getList($post['page'],$post,$pageSize);
+        foreach ($data as $k=>$v) {
+            $imgAr =  explode(',',$v['img']);
+            $data[$k]['img'] = empty($imgAr) ? '' : $imgAr[0];
+        }
+
+        return app('json')->success([
+            'list'      => $data,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page']
+        ]);
+    }
+
+    /**
+     * 产品详情数据
+     * @param Request $request
+     * @return mixed
+     */
+    public function proItem(Request $request) {
+        $post =  UtilService::getMore([['id',0,'empty','请输入产品ID']],$request);
+        $sassid = $request->site['sassid'];
+        $siteProduct = new SiteProduct;
+        $siteProduct->setSass($sassid);
+        $data = $siteProduct->getItem($post['id']);
+        if(empty($data)) {
+            return app('json')->fail("找不到产品数据");
+        } else {
+            return app('json')->success($data);
+        }
+    }
+
+    /**
+     * 随机产品
+     */
+    public function proRand(Request $request) {
+        $sassid = $request->site['sassid'];
+        $siteProduct = new SiteProduct;
+        $siteProduct->setSass($sassid);
+        $data = $siteProduct->getRand(5);
+        return app('json')->success($data);
+    }
+
+    /**
+     * 新闻数据
+     * @param Request $request
+     */
+    public function news(Request $request) {
+        $post =  UtilService::getMore([['id',0,'empty','新闻数据']],$request);
+        $data = (new News)->where('id',$post['id'])->find()->toArray();
+        if(empty($data)) {
+            return app('json')->fail('请输入正确新闻数据');
+        }
+        return app('json')->success($data);
+    }
+
+
+
+    public function newsList(Request $request) {
+        [$page,$data] = (new News)->getList(0,['cate_id'=>2,'is_show'=>1],'6','*','time desc');
+        return app('json')->success($data);
+    }
+
+
+}

+ 374 - 0
app/api/controller/v1/Login.php

@@ -0,0 +1,374 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-25 17:23
+// +----------------------------------------------------------------------
+declare (strict_types = 1);
+namespace app\api\controller\v1;
+
+use app\BaseController;
+use app\model\api\Member;
+use app\model\Api\SiteProduct;
+use app\model\api\SmsYzm;
+use app\Request;
+use library\services\UtilService;
+use library\utils\AdvertUtils;
+use library\utils\Icon;
+use library\utils\Sms;
+use think\facade\Db;
+
+class Login extends BaseController
+{
+
+    public function aaa(){
+        $icon = new Icon;
+        $icon->mkIcon(app()->getRootPath().'public/1.png');
+    }
+
+    /**
+     * 登录中心
+     * @param Request $request
+     */
+    public function l(Request $request) {
+      [$userName,$passWord]  = UtilService::getMore([
+            ['userName','','empty','请输入账户账号'],
+            ['passWord','','empty','请输入登录密码']
+        ],$request,true);
+        //获取登录
+        $meberInfo = Member::login($userName,$passWord,$request->site['sassid']);
+        if(empty($meberInfo)) {
+            return app('json')->fail(Member::getErrorInfo('用户名错误,请重新输入'));
+        }
+
+        //生成令牌
+        $token = Member::createToken($meberInfo, $request->site['secret_key']);
+        if(empty($token)) {
+            return app('json')->fail(Member::getErrorInfo());
+        }
+
+        Member::where('uid',$meberInfo['uid'])->save(['lasttime'=>time()]);
+        $data['uid'] = $meberInfo['uid'];
+        $data['ip'] = $request->ip();
+        $data['time'] = time();
+        Db::name("login_record")->insert($data);
+        return app('json')->success([
+            'token' => $token,
+            'user_info' => [
+                'mobile'      => $meberInfo->getData('mobile'),
+                'name'      => $meberInfo->getData('name'),
+                'avatar'    => $meberInfo->getData('avatar'),
+                'money'     => $meberInfo->getData('money'),
+                'openid'     => $meberInfo->getData('openid')
+            ],
+        ]);
+    }
+
+    /**
+     * 注册1号
+     * @param Request $request
+     */
+    public function reg1(Request $request) {
+        [$mobile,$yzm]  = UtilService::getMore([
+            ['mobile','','empty','请输入手机号码'],
+            ['yzm','']
+        ],$request,true);
+        //判断验证码
+        $bool = (new SmsYzm)->VerCode($mobile,$yzm,'yzm',$request->site['sassid']);
+        if(!$bool) {
+            return app('json')->fail(SmsYzm::getErrorInfo("验证码错误"));
+        }
+        //判断是否被注册了
+        $count = (new Member)->where('mobile',$mobile)->where('sassid',$request->site['sassid'])->count();
+        if($count > 0) {
+            return app('json')->fail("用户已经被注册,请勿重复操作!");
+        }
+         //生成MD5
+        $param = ['mobile'=>$mobile,'sassid'=>$request->site['sassid'],'time'=>time()];
+        $secret_key = $request->site['secret_key'];
+        $token =base64_encode( @crypto_encrypt(json_encode($param), $secret_key));
+        return app('json')->success([
+            'token' => $token
+        ]);
+    }
+
+
+    /**
+     * 注册2
+     * @param Request $request
+     */
+    public function reg2(Request $request) {
+        $post  = UtilService::getMore([
+            ['token','','empty','参数错误'],
+            ['password','','empty','请输入正确的密码'],
+            ['nickname',''],
+            ['avatar',''],
+            ['tjUid',''],
+            ['weixin_name','']
+        ],$request);
+
+        $time = time();
+        $secret_key = $request->site['secret_key'];
+        $tokenData = @json_decode(@crypto_decrypt(base64_decode($post['token']), $secret_key),true);
+        //注册token大于30分钟或者超过30分钟
+        if(empty($tokenData) ||  ($time - $tokenData['time']) > 30 * 60){
+            return app('json')->fail("注册过期,请重新注册");
+        }
+
+        //判断是否被注册了
+        $count = (new Member)->where('mobile',$tokenData['mobile'])->where('sassid',$request->site['sassid'])->count();
+        if($count > 0) {
+            return app('json')->fail("用户已经被注册!");
+        }
+        //推荐码
+        if(!empty($post['tjUid'])){
+            $tjuid =  crypto_decrypt(base64_decode($post['tjUid']),$request->site['secret_key']);
+            $save['i_uid'] = $tjuid;
+        }
+        $save['mobile'] = $tokenData['mobile'];
+        $save['username'] = '';
+        $save['password'] = md5($post['password']);
+        $save['nickname'] = $post['nickname'];
+        $save['name'] = '';
+        $save['avatar'] = $post['avatar'];
+        $save['regip'] = $request->ip();
+        $save['regtime'] = $time;
+        $save['lasttime'] = $time;
+        $save['sassid'] = $request->site['sassid'];
+        $save['weixin_name'] = $post['weixin_name'];
+        $save['status'] = 1;
+        $uid = (new Member)->insertGetId($save);
+        $meberInfo = Member::where('uid',$uid)->find();
+        //生成令牌
+        $token = Member::createToken($meberInfo, $request->site['secret_key']);
+        return app('json')->success([
+            'token' => $token,
+            'user_info' => [
+                'mobile'      => $meberInfo->getData('mobile'),
+                'name'      => $meberInfo->getData('name'),
+                'avatar'    => $meberInfo->getData('avatar'),
+                'money'     => $meberInfo->getData('money')
+            ],
+        ]);
+    }
+
+
+    public function mreg(Request $request) {
+        $post  = UtilService::getMore([
+            ['mobile','','empty','请输入正确的手机号码'],
+            ['code','','empty','请输入正确的验证码'],
+            ['passWord','','empty','请输入正确的密码'],
+            ['tjUid',''],
+            ['weixin','']
+        ],$request);
+
+
+        //判断验证码
+        $bool = (new SmsYzm)->VerCode($post['mobile'],$post['code'],'yzm',$request->site['sassid']);
+        if(!$bool) {
+            return app('json')->fail(SmsYzm::getErrorInfo("验证码错误"));
+        }
+        //判断是否被注册了
+        $count = (new Member)
+                        ->where('mobile',$post['mobile'])
+                        ->where('sassid',$request->site['sassid'])
+                        ->count();
+        if($count > 0) {
+            return app('json')->fail("用户已经被注册,请勿重复操作!");
+        }
+        //推荐码
+        if(!empty($post['tjUid'])){
+            $tjuid =  crypto_decrypt(base64_decode($post['tjUid']),$request->site['secret_key']);
+            $save['i_uid'] = $tjuid;
+        }
+        $time = time();
+        $save['mobile'] = $post['mobile'];
+        $save['username'] = '';
+        $save['password'] = md5($post['passWord']);
+        $save['nickname'] = '';
+        $save['name'] = '';
+        $save['avatar'] = '';
+        $save['regip'] = $request->ip();
+        $save['regtime'] = $time;
+        $save['lasttime'] = $time;
+        $save['sassid'] = $request->site['sassid'];
+        $save['weixin_name'] = $post['weixin_name'];
+        $save['status'] = 1;
+        $uid = (new Member)->insertGetId($save);
+        $meberInfo = Member::where('uid',$uid)->find();
+        //生成令牌
+        $token = Member::createToken($meberInfo, $request->site['secret_key']);
+        return app('json')->success([
+            'user_info' => [
+                'mobile'      => $meberInfo->getData('mobile'),
+                'name'      => $meberInfo->getData('name'),
+                'avatar'    => $meberInfo->getData('avatar'),
+                'money'     => $meberInfo->getData('money')
+            ],
+        ]);
+    }
+
+
+    /**
+     * 获取验证码
+     * @param Request $request
+     */
+    public function yzm(Request $request) {
+        [$mobile,$time,$token]  = UtilService::getMore([
+            ['mobile','','empty','请输入手机号码'],
+            ['time',''],
+            ['token','']
+        ],$request,true);
+        $secret_key = $request->site['secret_key'];
+        $outStr = @crypto_decrypt(base64_decode($token), $secret_key);
+        if($mobile != $outStr) {
+            return app('json')->fail("获取验证码失败!");
+        }
+        $lastTime = 120;//
+        $time     = time();
+        $smsTime = (new SmsYzm)->where('mobile',$mobile)
+                                ->where("action","yzm")
+                                ->order("time desc")
+                                ->value("time");
+        //验证码
+        if (!empty($smsTime) && abs($time - $smsTime) < $lastTime) {
+            $data['status'] = 2;
+            $data['time']   = $time - $smsTime;
+            return app('json')->success($data);
+        }
+        //发送验证码
+        $code = randString(6, true);
+        $send = (new Sms)->SmsCode($mobile, "718562",$request->site['sassid'], array("1" => $code,"2"=>"30"));
+
+        if ($send['status'] == 1) {
+            $savedata['mobile'] = $mobile;
+            $savedata['code'] = $code;
+            $savedata['action'] = 'yzm';
+            $savedata['time'] = time();
+            $savedata['sassid'] = $request->site['sassid'];
+            (new SmsYzm)->insert($savedata);
+            $data['status'] = 1;
+        } else {
+            $data = $send;
+        }
+        if($data['status'] == 1) {
+            return app('json')->success("发送成功", ['status'=>1,'time'=>$lastTime]);
+        } else {
+            return app('json')->fail($data['error']);
+        }
+    }
+
+    /**
+     * 忘记密码验证码
+     * @param Request $request
+     */
+    public function forgetYzm(Request $request){
+        [$mobile,$time,$token]  = UtilService::getMore([
+            ['mobile','','empty','请输入手机号码'],
+            ['time',''],
+            ['token','']
+        ],$request,true);
+        $secret_key = $request->site['secret_key'];
+        $outStr = @crypto_decrypt(base64_decode($token), $secret_key);
+        if($mobile != $outStr) {
+            return app('json')->fail("获取验证码失败!");
+        }
+        //count
+        $count = (new Member)->where('mobile',$mobile)->where('sassid',$request->site['sassid'])->count();
+        if($count <= 0) {
+            return app('json')->fail("账号未注册!");
+        }
+        $lastTime = 120;//
+        $time     = time();
+        $smsTime = (new SmsYzm)->where('mobile',$mobile)
+            ->where("action","forget_yzm")
+            ->order("time desc")
+            ->value("time");
+        //验证码
+        if (!empty($smsTime) && abs($time - $smsTime) < $lastTime) {
+            $data['status'] = 2;
+            $data['time']   = $time - $smsTime;
+            return app('json')->success($data);
+        }
+        //发送验证码
+        $code = randString(6, true);
+        $send = (new Sms)->SmsCode($mobile, "718570",$request->site['sassid'], array("1" => $code));
+
+        if ($send['status'] == 1) {
+            $savedata['mobile'] = $mobile;
+            $savedata['code'] = $code;
+            $savedata['action'] = 'forget_yzm';
+            $savedata['time'] = time();
+            $savedata['sassid'] = $request->site['sassid'];
+            (new SmsYzm)->insert($savedata);
+            $data['status'] = 1;
+        } else {
+            $data = $send;
+        }
+        if($data['status'] == 1) {
+            return app('json')->success("发送成功", ['status'=>1,'time'=>$lastTime]);
+        } else {
+            return app('json')->fail($data['error']);
+        }
+    }
+
+    /**
+     * 账号找回第一
+     * @param Request $request
+     */
+    public function forget1(Request $request) {
+        [$mobile,$yzm]  = UtilService::getMore([
+            ['mobile','','empty','请输入手机号码'],
+            ['yzm','']
+        ],$request,true);
+        //判断验证码
+        $bool = (new SmsYzm)->VerCode($mobile,$yzm,'forget_yzm',$request->site['sassid']);
+        if(!$bool) {
+            return app('json')->fail(SmsYzm::getErrorInfo("验证码错误"));
+        }
+        //判断是否被注册了
+        $count = (new Member)->where('mobile',$mobile)->where('sassid',$request->site['sassid'])->count();
+        if($count <= 0) {
+            return app('json')->fail("找不到账号!");
+        }
+        //生成MD5
+        $param = ['mobile'=>$mobile,'sassid'=>$request->site['sassid'],'time'=>time()];
+        $secret_key = $request->site['secret_key'];
+        $token =base64_encode( @crypto_encrypt(json_encode($param), $secret_key));
+        return app('json')->success([
+            'token' => $token
+        ]);
+    }
+
+    /**
+     * 账号找回第二
+     * @param Request $request
+     */
+    public function forget2(Request $request) {
+        $post  = UtilService::getMore([
+            ['token','','empty','参数错误'],
+            ['password','','empty','请输入正确的密码']
+        ],$request);
+        $time = time();
+        $secret_key = $request->site['secret_key'];
+        $tokenData = @json_decode(@crypto_decrypt(base64_decode($post['token']), $secret_key),true);
+        //注册token大于30分钟或者超过30分钟
+        if(empty($tokenData) ||  ($time - $tokenData['time']) > 30 * 60){
+            return app('json')->fail("操作已过期,返回重新操作");
+        }
+        //判断是否被注册了
+        $data = (new Member)->where('mobile',$tokenData['mobile'])->where('sassid',$request->site['sassid'])->find();
+        if(empty($data)) {
+            return app('json')->fail("找不到账号!");
+        }
+
+        $save['password'] = md5($post['password']);
+        (new  Member)->where('uid',$data['uid'])->save($save);
+        return app('json')->success("找回成功!");
+    }
+
+}

+ 28 - 0
app/api/controller/v1/News.php

@@ -0,0 +1,28 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\api\controller\v1;
+
+
+use app\BaseController;
+use app\model\system\Platform as PlatformModel;
+use app\Request;
+use library\services\UtilService;
+use think\facade\Db;
+
+class News extends  BaseController
+{
+
+    public function about(Request $request){
+        $about = Db::name("site_about")->where('sassid',$request->site['sassid'])->value('content');
+        return app('json')->success(['about'=>empty($about) ? '' : $about]);
+    }
+}

+ 117 - 0
app/api/controller/v1/Ott.php

@@ -0,0 +1,117 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-25 17:23
+// +----------------------------------------------------------------------
+declare (strict_types = 1);
+namespace app\api\controller\v1;
+
+use app\BaseController;
+use app\model\api\PayTrade;
+use app\model\api\Recharge;
+use app\model\api\Site;
+use app\model\api\Warehouse;
+use app\Request;
+use library\services\UtilService;
+use library\utils\alipay;
+
+class Ott extends BaseController
+{
+
+
+    public function alipay(Request $request) {
+        $post =  UtilService::getMore([
+            ['order_id','0','empty','参数错误']
+        ],$request);
+        $recharge = new Recharge();
+        $data = $recharge->where('order_id',$post['order_id'])->find();
+        if(empty($data)) {
+            return app('json')->fail('数据错误');
+        }
+
+        if(!empty($data['status'])) {
+            return app('json')->fail('订单已经支付');
+        }
+        $alipay = new alipay();
+        $data = $alipay->wapPay([
+            'name'  => '在线充值'.$data['v'].'元',
+            'money' => $data['v'],
+            'order_id' => $data['order_id']
+        ]);
+        echo $data;
+    }
+
+
+    /**
+     * 支付宝返回
+     */
+    public function alipayNotifyUrl(){
+        $alipay = new alipay();
+        $book = $alipay->verifyNotify($_POST);
+        if(empty($book)) {
+            return "fail";
+        }
+        $out_trade_no = $_POST['out_trade_no'];
+        $payTrade = new PayTrade();
+        $data = $payTrade->where('out_trade_no',$out_trade_no)->find();
+        if(empty($data)) {
+            return 'success';
+        }
+        if($data['status'] == 1) {
+            return 'success';
+        }
+        //支付成功
+        $queryStr = $alipay->query($out_trade_no)->httpBody;
+        $qAr = json_decode($queryStr,true);
+        if($qAr['alipay_trade_query_response']['trade_status'] == 'TRADE_CLOSED') {
+            return "fail";
+        }
+        //充值费用
+        if($data['type'] == 'recharge') {
+            $recharge = new Recharge();
+            $recharge->rechargeSuccess($out_trade_no);
+        }
+        $payTrade->where('id',$data['id'])->save(['status'=>1,'pay_time'=>time()]);
+        return 'success';
+    }
+
+    /**
+     * 支付返回
+     * @param Request $request
+     */
+    public function alipayReturnUrl(Request $request){
+        [$out_trade_no] = UtilService::getMore([
+            ['out_trade_no','','empty','参数错误']
+        ],$request,true);
+        $payTrade = new PayTrade();
+        $data = $payTrade->where('out_trade_no',$out_trade_no)->find();
+        if(empty($data)) {
+            $this->assign('error',"找不到订单数据");
+            return  $this->display('alipay_error');
+        }
+        $this->assign('data',$data);
+        echo $this->display('alipay_ok');
+
+    }
+
+
+
+    // 打印log
+    function log_result($file, $word) {
+        $fp = fopen($file, "a");
+        flock($fp, LOCK_EX);
+        fwrite($fp, "执行日期:" . strftime("%Y-%m-%d-%H:%M:%S", time()) . "\n" . $word . "\n\n");
+        flock($fp, LOCK_UN);
+        fclose($fp);
+    }
+
+
+
+
+
+}

+ 54 - 0
app/api/controller/v1/Platform.php

@@ -0,0 +1,54 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 20:43
+// +----------------------------------------------------------------------
+
+namespace app\api\controller\v1;
+
+
+use app\BaseController;
+use app\model\system\Platform as PlatformModel;
+use app\Request;
+use library\services\UtilService;
+
+class Platform extends  BaseController
+{
+    /**
+     * 平台列表
+     * @param Request $request
+     */
+    public function list(Request $request) {
+        $pageSize = 50;
+        [$page,$status,$name] =  UtilService::getMore(
+            [
+                ['page',1],
+                ['status','1'],
+                ['name','']
+            ],$request,true
+        );
+        list($pageCount,$data) = (new PlatformModel)
+            ->getList($page, ['name'=>[$name,'!empty']],$pageSize,'seq desc');
+        $result = UtilService::getParam([
+            'id',
+            'name',
+            'code',
+            'seq',
+            'img',
+            'status'
+        ],$data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $page
+        ]);
+    }
+
+
+}

+ 81 - 0
app/api/controller/v1/Pub.php

@@ -0,0 +1,81 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-25 17:23
+// +----------------------------------------------------------------------
+declare (strict_types = 1);
+namespace app\api\controller\v1;
+
+use app\BaseController;
+use app\model\api\Recharge;
+use app\model\api\Site;
+use app\model\api\Warehouse;
+use app\Request;
+use library\services\UtilService;
+
+class Pub extends BaseController
+{
+
+    /**
+     * 站点信息
+     */
+    public function siteResouce(Request $request) {
+        $stie = UtilService::getParam([
+            'custom_qq',
+            'custom_tel',
+            'domain',
+            'expire_time',
+            'logo',
+            'record',
+            'name',
+            'sub_domain',
+            'sys_seo_description',
+            'sys_seo_keyword',
+            'sys_seo_title',
+            'weixin_logo',
+            'mono',
+            "tag"
+        ],[$request->site]);
+        return app('json')->success($stie[0]);
+    }
+
+
+    /**
+     * 获取仓库列表
+     * @param Request $request
+     */
+    public function warehouse(Request $request) {
+       [$isExp] = UtilService::getMore([
+            ['isExp',''],
+        ],$request,true);
+        $warehouse = new Warehouse;
+        $data = $warehouse->field("name,id,platform_ids")
+            ->where("status",1)
+            ->order("seq","desc")
+            ->select()
+            ->toArray();
+        $platform = (new \app\model\system\Platform());
+        foreach ($data as $k => $v) {
+            $idsAr = explode(',',$v['platform_ids']);
+            $platformAr = [];
+            $data[$k]['platform']  = array_map(
+                function ($item) use($platform){
+                    return  $platform->getPlatformId($item,'*');
+                },$idsAr);
+        }
+
+        return app('json')->success($data);
+    }
+
+
+
+
+
+
+
+}

+ 132 - 0
app/api/controller/v1/Upload.php

@@ -0,0 +1,132 @@
+<?php
+declare (strict_types=1);
+namespace app\api\controller\v1;
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 15:05
+// +----------------------------------------------------------------------
+use app\BaseController;
+use app\Request;
+use library\services\UtilService;
+use library\utils\Qiniu;
+use think\Image;
+
+class Upload extends BaseController {
+
+
+    public function index(Request $request){
+        $file =$request->file('file');
+            $isZ = $request->post('isz',1);
+        if(empty($file)) {
+            return app('json')->fail("未上传文件");
+        }
+        $rootTmp = config('filesystem.disks.local.root') .'/' . \think\facade\Filesystem::putFile( 'tmp', $file);
+        if($isZ == 1) {
+            $image_size = @getimagesize($rootTmp);
+            if ($image_size[0] > 1000) {
+                $imgS = Image::open($rootTmp);
+                $imgS->thumb(1000, $image_size[1]);
+                $imgS->save($rootTmp);
+            } else {
+                if ($image_size[1] > 1000) {
+                    $imgS = Image::open($rootTmp);
+                    $imgS->thumb($image_size[0], 1000);
+                    $imgS->save($rootTmp);
+                }
+            }
+        }
+        $qiniu = new  Qiniu;
+        $img_url = $qiniu->updateFile('img', $rootTmp, $rootTmp);
+        if(empty($img_url['url'])){
+            return app('json')->fail( $qiniu->getError());
+        }
+        return app('json')->success(['img'=>$img_url['url']]);
+    }
+
+
+    /**
+     * 读取数据
+     */
+    public function xls(Request $request){
+        $post = UtilService::getMore([
+            ['platform_id','0','empty','请选择平台在上传']
+        ],$request);
+        $file = $request->file('file');
+        if(empty($file)) {
+            $this->ajaxReturn(['code'=>-1,'msg'=>'没有上传数据']);
+        }
+        $info = $file->getFileInfo();
+        $extension = strtolower( pathinfo($file->getOriginalName(), PATHINFO_EXTENSION) );
+        if ($extension =='xlsx') {
+            $objReader = new \PHPExcel_Reader_Excel2007();
+            $objPHPExcel = $objReader ->load($info->getPathname());
+        }
+
+        if ($extension =='xls') {
+            $objReader = new \PHPExcel_Reader_Excel5();
+            $objPHPExcel = $objReader ->load($info->getPathname());
+        }
+
+        if ($extension =='csv') {
+            $objReader = new \PHPExcel_Reader_CSV();
+            //默认输入字符集
+            $objReader->setInputEncoding('GBK');
+            //默认的分隔符
+            $objReader->setDelimiter(',');
+            //载入文件
+            $objPHPExcel = $objReader->load($info->getPathname());
+        }
+        $sheet = $objPHPExcel->getSheet(0);
+        $highestRow = $sheet->getHighestRow(); // 取得总行数
+        $highestColumn = $sheet->getHighestColumn(); // 取得总列数
+        //读取第一行信息
+        $headerAr = [];
+        for($i = 0;$i <= \PHPExcel_Cell::columnIndexFromString($highestColumn);$i++) {
+            $column = \PHPExcel_Cell::stringFromColumnIndex($i);
+            $value = $objPHPExcel
+                            ->getActiveSheet()
+                            ->getCell($column.'1')
+                            ->getValue();
+            if(!empty($value)) $value = trim($value);
+            $headerAr[$value] = $column;
+        }
+            $tAr = [];
+            for ($i = 2; $i <= $highestRow ; $i++) {
+                //外部订单号
+                $d['out_order_id'] = empty($headerAr['订单编号']) ? '' : $objPHPExcel
+                    ->getActiveSheet()
+                    ->getCell($headerAr['订单编号'].$i)
+                    ->getValue();
+                $d['out_order_id'] = preg_replace('/\="(.*?)"/','$1',$d['out_order_id']);
+
+                //收货人
+                $d['name'] = empty($headerAr['收货人姓名']) ? '' : $objPHPExcel
+                    ->getActiveSheet()
+                    ->getCell($headerAr['收货人姓名'].$i)
+                    ->getValue();
+                //收货地址
+                $d['address'] = empty($headerAr['收货地址']) ? '' : $objPHPExcel
+                    ->getActiveSheet()
+                    ->getCell($headerAr['收货地址'].$i)
+                    ->getValue();
+                //收货地址
+                $d['mobile'] = empty($headerAr['联系手机']) ? '' : $objPHPExcel
+                    ->getActiveSheet()
+                    ->getCell($headerAr['联系手机'].$i)
+                    ->getValue();
+                $d['mobile'] = str_replace("'","",$d['mobile']);
+                if(!empty($d['mobile']) && !empty($d['name']))  $tAr[] = $d;
+            }
+
+
+            return app('json')->success($tAr);
+
+
+    }
+
+}

+ 1402 - 0
app/api/controller/v1/User.php

@@ -0,0 +1,1402 @@
+<?php
+declare (strict_types=1);
+
+namespace app\api\controller\v1;
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 15:05
+// +----------------------------------------------------------------------
+use app\model\admin\MemberLevel;
+use app\model\admin\Product;
+use app\model\admin\SiteLevel;
+use app\model\api\ExpCost;
+use app\model\api\Member;
+use app\model\api\MemberDetail;
+use app\model\api\MemberShop;
+use app\model\api\Order;
+use app\model\api\OrderInfo;
+use app\model\api\OrderInfoAsw;
+use app\model\api\OrderInfoDd;
+use app\model\api\PayTrade;
+use app\model\api\Recharge;
+use app\model\api\SiteDetail;
+use app\model\api\SiteProduct;
+use app\model\api\Tx;
+use app\model\api\Warehouse;
+use app\model\api\WeixinPushUser;
+use app\model\system\MemberFollow;
+use app\model\system\News;
+use app\Request;
+use app\api\controller\AuthController;
+use library\services\UtilService;
+use library\utils\alipay;
+use library\utils\Qiniu;
+use library\utils\Region;
+use think\db\exception\DbException;
+use think\db\Where;
+use think\facade\Db;
+use think\Image;
+use Alipay\EasySDK\Kernel\Factory;
+use Alipay\EasySDK\Kernel\Config;
+
+class User extends AuthController
+{
+
+    /**
+     * 获取配置
+     */
+    public function index(Request $request)
+    {
+        $post = [];
+        //获取公告
+        [$page, $data] = (new News)->getList(0, ['cate_id' => 2,'is_show'=>1], '6', '*', 'time desc');
+        $newData      = UtilService::getParam([
+            'id',
+            'title',
+            ['time', 'time', 'date("Y-m-d",$1)'],
+        ], $data);
+        $post['news'] = $newData;
+        //快递费用
+        $expCode         = new ExpCost;
+        $expData         = $expCode->getExpCostData($request->site['sassid'], $request->user['levelid']);
+        $post['expData'] = $expData;
+        //
+
+        //总金额
+        $total         = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', '>', 0)
+            ->sum('all_price');
+        $post['total'] = $total;
+
+        //未支付
+        $unpaid         = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', 0)
+            ->count();
+        $post['unpaid'] = $unpaid;
+
+        //打单子中
+        $inOrder         = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', 1)
+            ->count();
+        $post['inOrder'] = $inOrder;
+        //打单子中
+        $sendOrder         = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', 2)
+            ->count();
+        $post['sendOrder'] = $sendOrder;
+
+        //异常订单
+        $abnormalOrder         = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', 9)
+            ->count();
+        $post['abnormalOrder'] = $abnormalOrder;
+
+        $dateAr = [];
+        $order  = new  Order;
+        //8天订单量
+        for ($i = 0; $i < 8; $i++) {
+            $time     = strtotime('-' . $i . ' day');
+            $date     = date('Y-m-d', $time);
+            $count    = $order
+                ->where('uid', $request->user['uid'])
+                ->where('sassid', $request->site['sassid'])
+                ->whereDay('time', $date)
+                ->count();
+            $dateAr[] = ['count' => $count, 'name' => $date];
+        }
+        $post['date'] = array_reverse($dateAr);
+        //绑定数据
+        $wxPush = (new  WeixinPushUser)
+            ->field("avatar,nickname")
+            ->where('sassid', $request->site['sassid'])
+            ->where('uid', $request->user['uid'])
+            ->find();
+        if (empty($wxPush)) {
+            $token            = base64_encode(crypto_encrypt($request->user['uid'] . "|" . time(), 'md5_user_token'));
+            $url              = \config('app')['API_URL']
+                . '/api/bind/system_bind?token=' . $token . '&secret_key=' . $request->site['secret_key'];
+            $post['bind']     = false;
+            $post['bind_url'] = $url;
+        } else {
+            $post['bind'] = true;
+        }
+
+
+        return app('json')->success($post);
+    }
+
+    /**
+     * 获取个人信息
+     */
+    public function init(Request $request)
+    {
+        $user = (new Member)->where('uid',$request->user['uid'])->whereTime('lasttime', 'today')->find();
+        if(!$user){
+            (new Member)->where('uid',$request->user['uid'])->save(['lasttime'=>time()]);
+            $data['uid'] = $request->user['uid'];
+            $data['ip'] = $request->ip();
+            $data['time'] = time();
+            Db::name("login_record")->insert($data);
+        }
+        $level = (new MemberLevel)->where('id', $request->user['levelid'])->find();
+        $info  = [
+            'mobile'    => $request->user['mobile'],
+            'name'      => $request->user['name'],
+            'nickname'  => $request->user['nickname'],
+            'avatar'    => $request->user['avatar'],
+            'money'     => $request->user['money'],
+            'openid'    => $request->user['openid'],
+            'levelname' => $level['name'],
+            'levelid'   => $level['id'],
+        ];
+        return app('json')->success($info);
+    }
+
+
+    /**
+     * 获取仓库列表
+     * @param Request $request
+     */
+    public function warehouse(Request $request)
+    {
+        $warehouse = new Warehouse;
+        $expCode   = new ExpCost;
+        $expCode->getExpCostData($request->site['sassid'], $request->user['levelid']);
+        $data     = $warehouse->field("name,id,platform_ids,address,exp_time,exp_star,tran_star,beijing,shanghai,qinghai")
+            ->where("status", 1)
+            ->whereIn("sassid",[0,$request->site['sassid']])
+            ->order("sassid", "desc")
+            ->order("seq", "desc")
+            ->select()
+            ->toArray();
+        $platform = (new \app\model\system\Platform());
+        foreach ($data as $k => $v) {
+            $idsAr = explode(',', $v['platform_ids']);
+            //平台
+            $data[$k]['platform'] = array_map(
+                function ($item) use ($platform) {
+                    return $platform->getPlatformId($item, '*');
+                }, $idsAr);
+            //邮费模板
+            $data[$k]['expCode'] = $expCode->getWareHouseExpCost($v['id'], '*');
+
+        }
+
+        return app('json')->success($data);
+    }
+
+
+    /**
+     * 提交
+     * @param Request $request
+     */
+    public function subOrder(Request $request)
+    {
+        [$orderAr, $proId, $warehouseId, $expId, $platformId, $mono, $extraFreight] = UtilService::getMore([
+            ['orderAr', '', 'empty', '参数错误'],
+            ['proId', '', 'empty', '参数错误'],
+            ['warehouseId', '', 'empty', '参数错误'],
+            ['expId', '', 'empty', '请选择运送方式'],
+            ['platformId', '', 'empty', '参数错误'],
+            ['mono', ''],
+            ['extraFreight', 0]
+        ], $request, true);
+        $expPrice          = 0;  //邮费费用
+        $expressId         = 0; //快递ID
+        $siteExpCommission = 0;//分站佣金费用
+        //检测数据
+        $sitePro = (new SiteProduct)->getItem($proId);
+        if ($sitePro['count'] <= 0 || count($orderAr) > $sitePro['count']) {
+            return app('json')->fail("订单产品数量不足,请重新选择!");
+        }
+        //判断仓库是否可以下单
+        $warehouseIds = explode(',',$sitePro['warehouse_ids']);
+        if(!in_array($warehouseId,$warehouseIds)) {
+           return app('json')->fail("请重新选择产品!");
+        }
+
+        $warehouse = (new Warehouse)->where('id',$warehouseId)->find();
+        if(empty($warehouse) || empty($warehouse['status'])) {
+            return app('json')->fail("分仓已下架,请选择其他分仓");
+        }
+        $region = new Region;
+        //检查地址数据
+        foreach ($orderAr as $k => $v) {
+            $rData = $region->getRegion($v['address']);
+            if (empty($rData['province']) ||
+                empty($rData['city']) ||
+                empty($rData['area'])
+            ) {
+                //  return app('json')->fail('第' . (intval($k) + 1) .'行,'.$v['address'] .'地址信息有误,请重新检查省市区!');
+            }
+        }
+
+        //订单总数
+        $orderCount        = count($orderAr);
+        $price             = $sitePro['price'] * $orderCount;
+        $siteProCommission = $sitePro['price'] > $sitePro['commission'] ? ($sitePro['price'] - $sitePro['commission']) : 0;//分站佣金
+        //快递信息
+        $expCode = new ExpCost;
+        $expCode->getExpCostData($request->site['sassid'], $request->user['levelid']);
+        $expData = array_filter($expCode->getWareHouseExpCost($warehouseId, '*'), function ($item) use ($expId) {
+            if ($item['id'] == $expId) {
+                return true;
+            }
+        });
+        //如果有快递信息,分析分账提成 || 用户推荐佣金
+        if (!empty($expData)) {
+            $expressId = $expData[0]['express_id'];
+            $expPrice  = $expData[0]['money'];
+            //分站金额
+            $money             = $expCode->getSysExpCostPrice($expressId, $warehouseId, $request->site['sassid']);
+            $siteExpCommission = empty($money) ? 0 : ($expPrice > $money ? ($expPrice - $money) : 0);
+        }
+
+        if (empty($expressId)) {
+            return app('json')->fail("本次邮寄方式不存在,请重新选择邮寄方式。");
+        }
+
+        //获取低价
+        $floorExp = $expCode
+            ->where('warehouse_id', $warehouseId)
+            ->where('express_id', $expressId)
+            ->where('sassid', 0)
+            ->where('level_id', -1)
+            ->value('money');
+        //会员店铺
+        $shopAr = [];
+        foreach ($orderAr as $v) {
+            $shop_name = trim($v['shop_name']);
+            if (!empty($shop_name)) {
+                $shopAr[$shop_name] = ['name' => $shop_name];
+            }
+        }
+        try {
+            Order::beginTrans();
+            $mShop = new MemberShop;
+            foreach ($shopAr as $k => $v) {
+                $shopId = $mShop->where('name', $k)
+                    ->where('uid', $this->user['uid'])
+                    ->value('id');
+                if (empty($shopId)) $shopId = $mShop->insertGetId(['name' => $k, 'uid' => $this->user['uid']]);
+                $shopAr[$k]['id'] = $shopId;
+            }
+            //下单
+            $save['order_id']            = 'TF' . time() . sprintf('%04d', rand(0, 1000)) . $request->user['uid'];//订单号
+            $save['all_price']           = $price + $expPrice * $orderCount + $extraFreight;//总金额 [价格 + 快递*产品数量]
+            $save['pro_site_commission'] = $siteProCommission * $orderCount;//产品分站佣金
+            $save['exp_site_commission'] = $siteExpCommission * $orderCount;//快递分站佣金
+            $save['site_commission']     = $save['pro_site_commission'] + $save['exp_site_commission'];//分站提成
+            $save['pro_id']              = $sitePro['id'];//产品ID
+            $save['platform_id']         = $platformId;//来源[拼多多,淘宝]
+            $save['warehouse_id']        = $warehouseId;//仓库来源
+            $save['status']              = 0;//状态
+            $save['time']                = time();
+            $save['express_id']          = $expressId;//快递类型
+            $save['sassid']              = $request->site['sassid'];//分站
+            $save['mono']                = $mono;//备注
+            $save['pro_price']           = $price;//产品价格
+            $save['uid']                 = $request->user['uid'];
+            $oId                         = (new Order)->insertGetId($save);
+
+            foreach ($orderAr as $k => $v) {
+                $shop_name                = trim($v['shop_name']);
+                $d                        = [];
+                $d['o_id']                = $oId;
+                $d['in_order_id']         = $save['order_id'] . '-' . ($k + 1);
+                $d['out_order_id']        = $v['out_order_id'];
+                $d['name']                = $v['name'];
+                $d['mobile']              = $v['mobile'];
+                $d['address']             = $v['address'];
+                $d['pro_price']           = $sitePro['price'];
+                $d['pro_id']              = $sitePro['id'];
+                $d['exp_id']              = $expressId;
+                if(strstr($d['address'], '北京')){
+                    $d['exp_price'] = $expPrice + $warehouse['beijing'];
+                }else if(strstr($d['address'], '上海')){
+                    $d['exp_price'] = $expPrice + $warehouse['shanghai'];
+                }else if(strstr($d['address'], '青海')){
+                    $d['exp_price'] = $expPrice + $warehouse['qinghai'];
+                }else{
+                    $d['exp_price'] = $expPrice;
+                }
+                $d['money']               = $sitePro['price'] + $d['exp_price'];
+                $d['sassid']              = $request->site['sassid'];
+                $d['uid']                 = $request->user['uid'];
+                $d['time']                = time();
+                $d['platform_id']         = $platformId;
+                $d['warehouse_id']        = $warehouseId;
+                $d['pro_site_commission'] = $siteProCommission;
+                $d['exp_site_commission'] = $siteExpCommission;
+                $d['site_commission']     = $siteProCommission + $siteExpCommission;
+                $d['exp_floor_price']     = empty($floorExp) ? 0 : $floorExp;
+                $d['shop_id']             = empty($shop_name) ? 0 : $shopAr[$shop_name]['id'];
+                (new OrderInfo)->insert($d);
+            }
+            Order::commitTrans();
+        } catch (DbException $db) {
+            Order::rollbackTrans();
+            return app('json')->fail("下单失败,理由:" . $db->getMessage());
+        }
+        return app('json')->success([
+            'order_id' => $save['order_id'],
+            'price'    => $save['all_price'],
+        ]);
+    }
+
+
+    /**
+     * 获取支单独单号
+     * @param Request $request
+     */
+    public function getPayOrder(Request $request)
+    {
+        [$orderId] = UtilService::getMore([
+            ['order_id', '', 'empty', '参数错误'],
+        ], $request, true);
+        $data = Order::where('order_id', $orderId)->find();
+        if (empty($data)) {
+            return app('json')->fail('找不到订单信息');
+        }
+        //订单已付款
+        if (!empty($data['is_pay'])) {
+            return app('json')->fail('订单已经支付成功');
+        }
+        $orderCount = (new OrderInfo)->where('o_id', $data['id'])->count();
+        $sitePro    = (new SiteProduct)->getProItem($data['pro_id']);
+        if ($sitePro['count'] <= 0 || $orderCount > $sitePro['count']) {
+            return app('json')->fail("订单产品数量不足,请重新选择!");
+        }
+        $post               = [];
+        $post['order_id']   = $orderId;
+        $post['count']      = $orderCount;
+        $post['title']      = $sitePro['title'];
+        $post['img']        = $sitePro['img'];
+        $post['all_price']  = $data['all_price'];
+        $post['user_money'] = $request->user['money'];
+        return app('json')->success($post);
+    }
+
+    /**
+     * 余额支付
+     * @param Request $request
+     */
+    public function balancePay(Request $request)
+    {
+        [$orderId] = UtilService::getMore([
+            ['order_id', '', 'empty', '参数错误'],
+        ], $request, true);
+        $data = Order::where('order_id', $orderId)->find();
+        if (empty($data)) {
+            return app('json')->fail('找不到订单信息');
+        }
+        if (empty($data)) {
+            return app('json')->fail('找不到订单信息');
+        }
+
+        //订单已付款
+        if (!empty($data['is_pay'])) {
+            return app('json')->fail('订单已经支付成功');
+        }
+
+        if ($data['all_price'] > $request->user['money']) {
+            return app('json')->fail('余额不足!');
+        }
+
+        $infoCount = OrderInfo::where('o_id', $data['id'])->count();
+
+        //平台分佣
+        if ($request->site['tj_sassid'] > 0) {
+            (new ExpCost)
+                ->difference($request->site, [
+                    'count'        => $infoCount,
+                    'user'         => $request->user['mobile'],
+                    'money'        => $data['site_commission'],
+                    'warehouse_id' => $data['warehouse_id'],
+                    'express_id'   => $data['express_id'],
+                    'sassid'       => $request->site['tj_sassid'],
+                    'orderid'      => $orderId,
+                ]);
+        }
+        $bool = (new MemberDetail)->consumption($data['all_price'], $request->user['uid'], [
+            'name'     => $request->user['mobile'],
+            'order_id' => $orderId,
+            'allmoney' => $data['all_price'],
+            'money'    => $data['all_price'],
+        ], $request->site['sassid']);
+        //提交数据
+        if ($bool) {
+            //判断是否有推荐人
+            if ($request->user['i_uid'] > 0) {
+                //每单提成
+                $money = $infoCount * 0.05;
+                (new MemberDetail)->income(
+                    $money,
+                    $request->user['i_uid'],
+                    ['user' => $request->user['mobile'], 'order_id' => $orderId, 'count' => $infoCount, 'money' => $money],
+                    $request->site['sassid']
+                );
+            }
+            //减库存
+            (new Product)->where('id', $data['pro_id'])->dec('count', $infoCount)->inc('sales', $infoCount)->update();
+            //改状态
+            Order::where('order_id', $orderId)->save([
+                'is_pay'   => 1,
+                'pay_time' => time(),
+                'status'   => 1,
+            ]);
+            //修改子订单数据
+            OrderInfo::where('o_id', $data['id'])->save([
+                'status' => 1,
+            ]);
+
+            //设置维护人
+            $last_con_time = (new Member)->where('uid', $request->user['uid'])->value('last_con_time');
+            if($last_con_time == 0){
+                $follow = (new MemberFollow)->where('uid', $request->user['uid'])->where('admin_id', 99)->find();
+                if($follow){
+                    (new Member)->where('uid', $request->user['uid'])->save(['admin_id' => 99]);
+                }else{
+                    (new Member)->where('uid', $request->user['uid'])->save(['admin_id' => 100]);
+                }
+            }
+            (new Member)->where('uid', $request->user['uid'])->save(['last_con_time' => time()]);
+
+            //平台佣金
+            if ($data['site_commission'] > 0) {
+                (new SiteDetail)->commission($data['site_commission'],
+                    $request->site['sassid'],
+                    $orderId,
+                    ['user'      => $request->user['mobile'],
+                     'pro_money' => $data['pro_site_commission'],
+                     'exp_money' => $data['exp_site_commission'],
+                     'order_id'  => $orderId,
+                     'count'     => $infoCount,
+                     'money'     => $data['site_commission'],
+                    ]
+                );
+            }
+
+
+            return app('json')->success(['msg' => '支付成功']);
+        } else {
+            return app('json')->fail('支付失败');
+        }
+    }
+
+    /**
+     * 获取订单数据
+     * @param Request $request
+     */
+    public function getOrderList(Request $request)
+    {
+        $pageSize        = 50;
+        $post            = UtilService::getMore(
+            [
+                ['page', 1],
+                ['order_id', ''],
+                ['mono', ''],
+                ['platform_id', ''],
+                ['data', []],
+                ['orderType', ''],
+                ['timeType', ''],
+                ['shop_id', ''],
+            ], $request
+        );
+        $where           = $post;
+        $where['sassid'] = $request->site['sassid'];
+        $where['uid']    = $request->user['uid'];
+        $order           = new Order;
+        list($pageCount, $data) = $order->getList($post['page'], $where, $pageSize, 'id desc');
+        $result = UtilService::getParam([
+            "id",
+            ['time', 'time', 'date("Y-m-d H:i:s",$1)'],
+            "order_id",
+            "order_count",
+            "all_price",
+            "status",
+            "platfrom_name",
+            "pro_title",
+            "pro_img",
+            "mono",
+            "err_msg",
+        ], $data);
+        foreach ($result as $k=>$v) {
+            $imgAr =  explode(',',$v['pro_img']);
+            $result[$k]['pro_img'] = empty($imgAr) ? '' : $imgAr[0];
+        }
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page'],
+        ]);
+    }
+
+    /**
+     * 订单列表-初始化数据
+     * @param Request $request
+     */
+    public function orderInit(Request $request)
+    {
+        //总金额
+        $total = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', '>', 0)
+            ->sum('all_price');
+        //未支付
+        $unpaid = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', 0)
+            ->count();
+        //打单中
+        $inOrder = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', 1)
+            ->count();
+        //已出单
+        $sendOrder = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', 2)
+            ->count();
+        //异常订单
+        $abnormalOrder = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', 9)
+            ->count();
+        //取消订单
+        $cancelOrder = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', -1)
+            ->count();
+        //退货订单
+        $refundOrder = (new Order)
+            ->where('uid', $request->user['uid'])
+            ->where('status', -2)
+            ->count();
+        //子订单
+        $subOrder = (new OrderInfo)
+            ->where('uid', $request->user['uid'])
+            ->where('status', '>', 0)
+            ->count();
+        //
+        return app('json')->success([
+            'total'         => $total,
+            'unpaid'        => $unpaid,
+            'inorder'       => $inOrder,
+            'sendOrder'     => $sendOrder,
+            'abnormalOrder' => $abnormalOrder,
+            'cancelOrder'   => $cancelOrder,
+            'refundOrder'   => $refundOrder,
+            'subOrder'      => $subOrder,
+        ]);
+    }
+
+    /**
+     * 取消订单
+     * @param Request $request
+     */
+    public function cancelOrder(Request $request)
+    {
+        $post  = UtilService::getMore(
+            [
+                ['id', '', 'empty', '参数错误'],
+            ], $request
+        );
+        $order = new Order;
+        $data  = $order
+            ->where('sassid', $request->site['sassid'])
+            ->where('uid', $request->user['uid'])
+            ->where('id', $post['id'])
+            ->find();
+        if (empty($data)) {
+            return app('json')->fail('找不到订单信息');
+        }
+        //订单状态
+        if ($data['status'] != 0) {
+            return app('json')->fail('当前订单无法取消');
+        }
+        $order->where('id', $data['id'])->save([
+            'status' => -1,
+        ]);
+        (new OrderInfo())->where('o_id', $data['id'])->save(['status' => -1]);
+        return app('json')->success(['msg' => '取消成功']);
+    }
+
+    /**
+     * 子订单数据
+     * @param Request $request
+     */
+    public function orderSubItem(Request $request)
+    {
+        $pageSize        = 20;
+        $post            = UtilService::getMore(
+            [
+                ['id', ''],
+                ['page', 1],
+                ['order_id', ''],
+                ['mobile', ''],
+                ['name', ''],
+                ['shop_id', ''],
+            ], $request
+        );
+        $where           = $post;
+        $where['sassid'] = $request->site['sassid'];
+        $where['id']     = $post['id'];
+        $where['uid']    = $request->user['uid'];
+        list($pageCount, $data) = (new OrderInfo)->getList($post['page'], $where, $pageSize, "*", "id desc");
+        $result = UtilService::getParam([
+            "id",
+            "exp_name",
+            "order_id",
+            "out_order_id",
+            "name",
+            "mobile",
+            "address",
+            "mono",
+            "shop_name",
+            "time",
+            "send_time",
+            "exp_number",
+            "msg_err",
+            "money",
+            "status",
+            ['_send_time', 'send_time', 'date("Y-m-d H:i:s",$1)']
+        ], $data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page'],
+        ]);
+    }
+
+    /**
+     * 导出数据
+     * @param Request $request
+     */
+    public function orderDown(Request $request)
+    {
+        $region          = new Region;
+        $post            = UtilService::getMore([
+            ['id', '', 'empty', '参数错误'],
+            ['shop_id', ''],
+        ], $request);
+        $where           = [];
+        $where['sassid'] = $request->site['sassid'];
+        $where['uid']    = $request->user['uid'];
+        $where['id']     = $post['id'];
+        if (!empty($post['shop_id'])) $where['shop_id'] = $post['shop_id'];
+        $data = (new OrderInfo)->getAllList($where, 'id desc');
+        $tAr  = [];
+        foreach ($data as $v) {
+            $d                  = [];
+            $d['name']          = $v['name'];
+            $d['mobile']        = $v['mobile'];
+            $d['out_order_id']  = $v['out_order_id'];
+            $d['address']       = $v['address'];
+            $d['exp_name']      = $v['exp_name'];
+            $d['exp_number']    = $v['exp_number'];
+            $d['platform_name'] = $v['platform_name'];
+            $d['pro_name']      = $v['pro_name'];
+            $d['send_time']     = $v['send_time'] <= 0 ? '' : date('Y-m-d H:i:s', $v['send_time']);
+            //  $v['address'] = '贵州省 贵阳市 观山湖区 世纪城社区服务中心福建街世纪城龙耀苑10栋12楼(000000)';
+            $rData          = $region->getRegion($v['address']);
+            $d['address']   = $rData['address'];
+            $d['province']  = $rData['province'];
+            $d['shop_name'] = $v['shop_name'];
+            $d['city']      = $rData['city'];
+            $d['area']      = $rData['area'];
+            $tAr[]          = $d;
+        }
+        return app('json')->success($tAr);
+    }
+
+
+    /**
+     * 升级显示
+     * @param Request $request
+     */
+    public function rechargeXinit(Request $request)
+    {
+        $inAr      = [
+            ['name' => '30元', 'v' => 30, 'upname' => ''],
+            ['name' => '10000元', 'v' => 10000, 'upname' => ''],
+        ];
+        $siteLevel = (new SiteLevel)
+            ->field("sl.update_money,l.name")
+            ->alias("sl")
+            ->join("member_level l", "l.id = sl.level_id")
+            ->where('sl.sass_id', $request->site['sassid'])
+            ->select();
+
+
+        foreach ($siteLevel as $v) {
+            if (!empty($v['update_money']) && $v['update_money'] > 0) {
+                $update_money = floatval($v['update_money']);
+                $len          = 0;
+                $isAdd        = false;
+                foreach ($inAr as $kk => $vv) {
+                    $val = floatval($vv['v']);
+                    if ($update_money > $val) {
+                        $len   = $kk;
+                        $isAdd = true;
+                    }
+                    if ($update_money == $val) {
+                        $len   = $kk;
+                        $isAdd = false;
+                        break;
+                    }
+                }
+                if ($isAdd) {
+                    array_splice($inAr, $len, 0, [[
+                        'name'   => $v['update_money'] . '元',
+                        'v'      => $update_money,
+                        'upname' => $v['name'],
+                    ]]);
+                } else {
+                    $inAr[$len]['upname'] = $v['name'];
+                }
+            }
+        }
+        //排序
+        $flag = [];
+        foreach ($inAr as $v){
+            $flag[] = $v['v'];
+        }
+        array_multisort($flag,SORT_ASC,$inAr);
+
+
+
+        return app('json')->success($inAr);
+    }
+
+
+    /**
+     * 充值
+     * @param Request $request
+     */
+    public function rechargeX(Request $request)
+    {
+        $post = UtilService::getMore([
+            ['v', '0', 'empty', '请选择充值金额'],
+        ], $request);
+        //充值
+        try {
+            Recharge::beginTrans();
+            $recharge      = new Recharge();
+            $d             = [];
+            $d['order_id'] = 'RE' . time() . sprintf('%04d', rand(0, 1000)) . $request->user['uid'];
+            $d['v']        = $post['v'];
+            $d['status']   = '0';
+            $d['time']     = time();
+            $d['sassid']   = $request->site['sassid'];
+            $d['uid']      = $request->user['uid'];
+            $recharge->insert($d);
+            //生成支付凭证
+            (new PayTrade)->mkTrade([
+                'out_trade_no' => $d['order_id'],
+                'uid'          => $request->user['uid'],
+                'tag'          => 'alipay',
+                'type'         => 'recharge',
+                'money'        => $post['v'],
+                'content'      => '会员充值' . $d['v'] . '元',
+                'sassid'       => $request->site['sassid'],
+            ]);
+            Recharge::commitTrans();
+            $url = config('app.API_URL') . '/api/ott/alipay?order_id=' . $d['order_id'];
+            return app('json')->success(['url' => $url, 'orderId' => $d['order_id']]);
+        } catch (DbException $db) {
+            Recharge::rollbackTrans();
+            return app('json')->fail("充值失败,请联系客服人员");
+        }
+    }
+
+    /**
+     * 检查充值
+     * @param Request $request
+     */
+    public function checkRecharge(Request $request)
+    {
+        $post     = UtilService::getMore([
+            ['order_id', '0', 'empty', '订单不存在'],
+        ], $request);
+        $recharge = new Recharge();
+        $data     = $recharge->where('order_id', $post['order_id'])->find();
+        if (empty($data)) {
+            return app('json')->fail('无充值订单');
+        }
+
+        if (empty($data['status'])) {
+            return app('json')->fail('');
+        }
+        return app('json')->success(['data' => $data]);
+    }
+
+    /**
+     * 资金情况
+     * @param Request $request
+     */
+    public function rechargeInit(Request $request)
+    {
+        $info = [
+            'money'    => $request->user['money'],
+            'tx_money' => $request->user['tx_money'],//提现金额
+            'in_money' => (new Tx)->where('uid', $request->user['uid'])->where('is_type', 0)->sum('money'),
+        ];
+        return app('json')->success($info);
+    }
+
+
+    /**
+     * 提现列表
+     * @param Request $request
+     */
+    public function txList(Request $request)
+    {
+        $pageSize        = 10;
+        $post            = UtilService::getMore(
+            [
+                ['page', 1],
+            ], $request
+        );
+        $where['sassid'] = $request->site['sassid'];
+        $where['uid']    = $request->user['uid'];
+        $tx              = new Tx();
+        list($pageCount, $data) = $tx->getList($post['page'], $where, $pageSize, "*", "time desc");
+        $result = UtilService::getParam([
+            "id",
+            "money",
+            "bank",
+            'name',
+            'code',
+            "is_type",
+            ["time", "time", "date('Y-m-d H:i:s',$1)"],
+        ], $data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page'],
+        ]);
+    }
+
+    /**
+     * 操作明细
+     * @param Request $request
+     */
+    public function detailList(Request $request)
+    {
+        $pageSize        = 10;
+        $post            = UtilService::getMore(
+            [
+                ['page', 1],
+                ['tabType', 'all'],
+            ], $request
+        );
+        $where['sassid'] = $request->site['sassid'];
+        $where['uid']    = $request->user['uid'];
+        if (!empty($post['tabType']) && $post['tabType'] != 'all') {
+            $where['code'] = $post['tabType'];
+        }
+        $detail = new MemberDetail();
+        list($pageCount, $data) = $detail->getList($post['page'], $where, $pageSize, "*", "time desc");
+        $result = UtilService::getParam([
+            "id",
+            "code",
+            "v",
+            'title',
+            'content',
+            "type",
+            ["time", "time", "date('Y-m-d H:i:s',$1)"],
+        ], $data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page'],
+        ]);
+    }
+
+    /**
+     * 我要提现
+     * @param Request $request
+     */
+    public function subTx(Request $request)
+    {
+        $post = UtilService::getMore(
+            [
+                ['bank', "", "empty", "请输入到账账号"],
+                ['money', '0', "empty", "请输入提现金额"],
+                ['name', '', 'empty', '请输入真实姓名'],
+            ], $request
+        );
+        //提现金额
+        if ($request->user['tx_money'] < $post['money']) {
+            return app('json')->fail("余额不足,无法提现!");
+        }
+        (new Tx)
+            ->insert([
+                'uid'     => $request->user['uid'],
+                'money'   => $post['money'],
+                'bank'    => '支付宝',
+                'name'    => $post['name'],
+                'code'    => $post['bank'],
+                'time'    => time(),
+                'is_type' => 0,
+                'sassid'  => $request->site['sassid'],
+            ]);
+
+        return app('json')->success(
+            '提现成功,请等待打款!'
+        );
+    }
+
+    /**
+     * 订单详情数据
+     * @param Request $request
+     */
+    public function orderInfoItem(Request $request)
+    {
+        $post      = UtilService::getMore(
+            [
+                ['id', "", "empty", "参数错误"],
+            ], $request
+        );
+        $orderInfo = (new OrderInfo())->getItem($post['id']);
+        if (empty($orderInfo)) {
+            return app('json')->fail('找不到订单数据');
+        }
+
+        return app('json')->success([
+            'id'           => $orderInfo['id'],
+            'out_order_id' => $orderInfo['out_order_id'],
+            'exp_name'     => $orderInfo['exp_name'],
+            'exp_number'   => $orderInfo['exp_number'],
+            'pro_name'     => $orderInfo['pro_title'],
+            "mono"         => $orderInfo['mono'],
+        ]);
+    }
+
+    /*
+     * 问题件反馈
+     */
+    public function subOrderInfoMono(Request $request)
+    {
+        $post      = UtilService::getMore(
+            [
+                ['id', "", "empty", "参数错误"],
+                ['mono', ""],
+            ], $request
+        );
+        $orderInfo = (new OrderInfo())->getItem($post['id']);
+        if (empty($orderInfo)) {
+            return app('json')->fail('找不到订单数据');
+        }
+        (new OrderInfo)->where('id', $orderInfo['id'])->save([
+            'mono' => $post['mono'],
+        ]);
+        $data = (new OrderInfoAsw)
+            ->where('o_id', $orderInfo['o_id'])
+            ->where('of_id', $orderInfo['id'])
+            ->where('status', 0)
+            ->find();
+        if (!empty($data)) {
+            (new OrderInfoAsw)->Where('id', $data['id'])->save(['mono' => $post['mono']]);
+        } else {
+            (new OrderInfoAsw)->insert([
+                'o_id'   => $orderInfo['o_id'],
+                'of_id'  => $orderInfo['id'],
+                'mono'   => $post['mono'],
+                'time'   => time(),
+                'status' => 0,
+            ]);
+        }
+        return app('json')->success('反馈成功');
+    }
+
+    /**
+     * 底单申请
+     * @param Request $request
+     */
+    public function subOrderDdInfo(Request $request)
+    {
+        $post      = UtilService::getMore(
+            [
+                ['id', "", "empty", "参数错误"],
+                ['mono', ""],
+            ], $request
+        );
+        $orderInfo = (new OrderInfo())->getItem($post['id']);
+        if (empty($orderInfo)) {
+            return app('json')->fail('找不到订单数据');
+        }
+
+        $count = (new OrderInfoDd)
+            ->where('o_id', $orderInfo['o_id'])
+            ->where('of_id', $orderInfo['id'])
+            ->count();
+        if ($count > 0) {
+            return app('json')->fail('已提交申请,请勿重复提交');
+        }
+        (new OrderInfoDd)->insert([
+            'o_id'   => $orderInfo['o_id'],
+            'of_id'  => $orderInfo['id'],
+            'mono'   => $post['mono'],
+            'time'   => time(),
+            'sassid' => $request->site['sassid'],
+            'uid'    => $request->user['uid'],
+            'status' => 0,
+        ]);
+        return app('json')->success('反馈成功');
+    }
+
+    /**
+     * 问题反馈列表
+     * @param Request $request
+     */
+    public function orderMonoList(Request $request)
+    {
+        $pageSize        = 10;
+        $post            = UtilService::getMore(
+            [
+                ['page', 1],
+                ['exp_number', ''],
+                ['id', ''],
+                ['date', ["", ""]],
+                ['mobile', ''],
+                ['name', ''],
+                ['orderType', ''],
+                ['out_order_id', ''],
+                ['status', ''],
+                ['timeType', ''],
+            ], $request
+        );
+        $where           = $post;
+        $where['sassid'] = $request->site['sassid'];
+        $where['uid']    = $request->user['uid'];
+        $tx              = new OrderInfoAsw();
+        list($pageCount, $data) = $tx->getList($post['page'], $where, $pageSize, "*");
+        $result = UtilService::getParam([
+            "id",
+            "o_id",
+            "mono",
+            "status",
+            "cl_time",
+            "cl_admin_time",
+            "out_order_id",
+            "name",
+            "mobile",
+            "address",
+            "time",
+            "send_time",
+            "exp_number",
+            'msg_mono',
+            "exp_name",
+        ], $data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page'],
+        ]);
+    }
+
+    /**
+     * 订单撤销数据
+     * @param Request $request
+     */
+    public function orderMonoCancel(Request $request)
+    {
+        $post = UtilService::getMore(
+            [
+                ['id', "", "empty", "参数错误"],
+                ['mono', ""],
+            ], $request
+        );
+        (new OrderInfoAsw)->where('id', $post['id'])->where('uid', $request->user['uid'])->delete();
+        return app('json')->success('撤销成功');
+    }
+
+    /**
+     * 底单申请
+     * @param Request $request
+     */
+    public function orderDdList(Request $request)
+    {
+        $pageSize        = 10;
+        $post            = UtilService::getMore(
+            [
+                ['page', 1],
+                ['exp_number', ''],
+                ['id', ''],
+                ['date', ["", ""]],
+                ['mobile', ''],
+                ['name', ''],
+                ['orderType', ''],
+                ['out_order_id', ''],
+                ['status', ''],
+                ['timeType', ''],
+            ], $request
+        );
+        $where           = $post;
+        $where['sassid'] = $request->site['sassid'];
+        $where['uid']    = $request->user['uid'];
+        $tx              = new OrderInfoDd();
+        list($pageCount, $data) = $tx->getList($post['page'], $where, $pageSize, "*");
+        $result = UtilService::getParam([
+            "id",
+            "o_id",
+            "mono",
+            "status",
+            "cl_time",
+            "cl_admin_time",
+            "out_order_id",
+            "name",
+            "mobile",
+            "address",
+            "time",
+            "send_time",
+            "exp_number",
+            'msg_mono',
+            "msg_img",
+            "exp_name",
+        ], $data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page'],
+        ]);
+    }
+
+    /**
+     * 订单撤销数据
+     * @param Request $request
+     */
+    public function orderDbCancel(Request $request)
+    {
+        $post = UtilService::getMore(
+            [
+                ['id', "", "empty", "参数错误"],
+                ['mono', ""],
+            ], $request
+        );
+        (new OrderInfoDd())->where('id', $post['id'])->where('uid', $request->user['uid'])->delete();
+        return app('json')->success('撤销成功');
+    }
+
+
+    /**
+     * 邀请好友返利
+     * @param Request $request
+     */
+    public function extension(Request $request)
+    {
+        $uid   = $request->user['uid'];
+        $mkuid = base64_encode(crypto_encrypt($uid, $request->site['secret_key']));
+        $url   = '/login/reg?uid=' . $mkuid;
+        $url2  = '/mobile/reg/step1?uid=' . $mkuid;
+        $url3  = '/h5/pages/users/register/index?uid=' . $mkuid;
+        return app('json')->success([
+            'url'   => $url,
+            'url2'  => $url2,
+            'url3'  => $url3,
+            'count' => (new Member)->where('i_uid', $request->user['uid'])->where('sassid', $request->site['sassid'])->count(),
+        ]);
+    }
+
+    /**
+     * @param Request $request
+     * @return mixed
+     */
+    public function extensionList(Request $request)
+    {
+        $pageSize        = 10;
+        $post            = UtilService::getMore(
+            [
+                ['page', 1],
+            ], $request
+        );
+        $where['sassid'] = $request->site['sassid'];
+        $where['i_uid']  = $request->user['uid'];
+        $member          = new Member;
+        list($pageCount, $data) = $member->getList($post['page'], $where, $pageSize, "*");
+        $result = UtilService::getParam([
+            "uid",
+            "mobile",
+            ['regtime', 'regtime', 'date(\'Y-m-d H:i:s\',$1)'],
+            'order_count',
+            'lavel_name',
+        ], $data);
+        return app('json')->success([
+            'list'      => $result,
+            'pageCount' => $pageCount,
+            'pageSize'  => $pageSize,
+            'page'      => $post['page'],
+        ]);
+    }
+
+
+    /**
+     * 修改账号
+     * @param Request $request
+     */
+    public function account(Request $request)
+    {
+        $post = UtilService::getMore(
+            [
+                ['nickname', ''],
+                ['avatar', ''],
+            ], $request
+        );
+        $m    = (new Member);
+        $m->where('uid', $request->user['uid'])->save(['nickname' => $post['nickname'], 'avatar' => $post['avatar']]);
+        return app('json')->success('修改成功');
+    }
+
+
+    /**
+     * 修改密码
+     * @param Request $request
+     */
+    public function password(Request $request)
+    {
+        $post = UtilService::getMore(
+            [
+                ['oldpass', '', 'empty', '请输入旧密码'],
+                ['password', '', 'empty', '请输入新密码'],
+            ], $request
+        );
+
+        if ($request->user['password'] != md5($post['password'])) {
+            return app('json')->fail('旧密码错误,请检查之后在修改');
+        }
+        (new Member)->where('uid', $request->user['uid'])->save(['password' => md5($post['password'])]);
+        return app('json')->success('修改成功');
+    }
+
+    /**
+     * 绑定公众号
+     * @param Request $request
+     */
+    public function bind(Request $request)
+    {
+        $token  = base64_encode(crypto_encrypt($request->user['uid'] . "|" . time(), 'md5_user_token'));
+        $url    = \config('app')['API_URL']
+            . '/api/bind/system_bind?token=' . $token . '&secret_key=' . $request->site['secret_key'];
+        $wxPush = (new  WeixinPushUser)
+            ->field("avatar,nickname")
+            ->where('sassid', $request->site['sassid'])
+            ->where('uid', $request->user['uid'])
+            ->find();
+
+        $result           = [];
+        $result['url']    = $url;
+        $result['isbind'] = empty($wxPush) ? false : true;
+        $result['bind']   = $wxPush;
+        return app('json')->success($result);
+    }
+
+    /**
+     * 取消绑定
+     * @param Request $request
+     */
+    public function delbind(Request $request)
+    {
+        (new WeixinPushUser)->where('uid', $request->user['uid'])->where('sassid', $request->site['sassid'])->delete();
+        return app('json')->success('取消成功');
+    }
+
+    /**
+     * vip
+     * @param Request $request
+     */
+    public function vip(Request $request)
+    {
+        $wData    = (new Warehouse)->select()->toArray();
+        $level    = (new \app\model\admin\MemberLevel)
+            ->field("ml.*,(select update_money from table_site_level where level_id = ml.id and sass_id = " . $request->site['sassid'] . " ) as update_money")
+            ->alias("ml")
+            ->where('ml.is_show', 1)
+            ->select()
+            ->toArray();
+        $levelIds = array_column($level, 'id');
+        $expCost  = new ExpCost;
+        $tAr      = [];
+        foreach ($wData as $v) {
+            $d         = [];
+            $eAr       = [];
+            $d['name'] = $v['name'];
+            $d['id']   = $v['id'];
+            $d['data'] = [];
+            $exData    = $expCost
+                ->field("ec.money,e.title,ec.level_id,ec.express_id")
+                ->alias("ec")
+                ->join('express e', 'e.id = ec.express_id')
+                ->where('ec.warehouse_id', $v['id'])
+                ->whereIn('ec.level_id', $levelIds)
+                ->where('sassid', $request->site['sassid'])
+                ->select();
+            foreach ($exData as $vv) {
+                $key = 'level_' . $vv['level_id'];
+                if (empty($d[$key])) {
+                    $d[$key] = $vv['money'];
+                } else {
+                    $d[$key] = $d[$key] > $vv['money'] ? $vv['money'] : $d[$key];
+                }
+
+                if (empty($eAr[$vv['express_id']])) $eAr[$vv['express_id']] = ['title' => $vv['title']];
+                $eAr[$vv['express_id']][$key] = $vv['money'];
+            }
+            //处理数据
+            foreach ($eAr as $vv) {
+                $d['data'][] = $vv;
+            }
+            if (count($exData) > 0) $tAr[] = $d;
+        }
+        return app('json')->success(['data' => $tAr, 'level' => $level]);
+    }
+
+    /**
+     * 店铺信息
+     * @param Request $request
+     */
+    public function shop(Request $request)
+    {
+        return app('json')
+            ->success((new MemberShop)
+                ->where('uid', $this->user['uid'])
+                ->select()
+                ->toArray()
+            );
+    }
+
+    /**
+     * 删除店铺
+     * @param Request $request
+     */
+    public function shopDel(Request $request)
+    {
+        [$id] = UtilService::getMore(
+            [
+                ['id', '', 'empty', '参数错误'],
+            ]
+            , $request, true);
+        (new MemberShop)
+            ->where('uid', $this->user['uid'])
+            ->where('id', $id)->delete();
+        return app('json')->fail('删除成功');
+    }
+
+}

+ 257 - 0
app/api/controller/v1/Weixin.php

@@ -0,0 +1,257 @@
+<?php
+declare (strict_types=1);
+
+namespace app\api\controller\v1;
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-31 15:05
+// +----------------------------------------------------------------------
+use app\BaseController;
+use app\model\api\Member;
+use app\model\api\Order;
+use app\model\api\PayTrade;
+use app\model\api\Recharge;
+use app\Request;
+use EasyWeChat\Factory;
+use library\lib\weixina;
+use library\services\UtilService;
+use think\db\exception\DbException;
+use think\db\exception\PDOException;
+use think\Exception;
+use think\facade\Db;
+
+class Weixin extends BaseController
+{
+    public function test()
+    {
+        $user1 = Db::name("member")->where('i_uid',1655)
+            ->where('regtime', 'between', [1614528000, 1617206400])
+            ->where('last_con_time','<>',0)
+            ->column('uid');
+        $user2 = Db::name("member")->where('i_uid',1655)
+            ->where('regtime', 'between', [1617206400, 1619798400])
+            ->where('last_con_time','<>',0)
+            ->column('uid');
+        $user = array_merge($user1,$user2);
+        $order = Db::name("order_info")->alias('s')->join('order o',"o.id = s.o_id")->where('s.uid', 'in', $user)
+            ->where('o.pay_time', 'between', [1617206400, 1619798400])->count();
+        dump($order);
+    }
+
+    /**
+     * @param Request $request
+     */
+    public function result(Request $request)
+    {
+        $state = trim($request->get('state'));
+        $code = trim($request->get('code'));
+        if (empty($state)) {
+            exit('error');
+        }
+        $weixinA = new weixina;
+        $data = $weixinA->oauth_reuslt($code);
+        if (!empty($data['access_token'])) {
+            $userInfo = $weixinA->userinfo($data['access_token']);
+            $userInfo['access_token'] = $data['access_token'];
+            $userInfo['expires_in'] = $data['expires_in'];
+            $userInfo['time'] = time();
+            cookie("weix_userinfo", serialize($userInfo));
+            $url = setParam(cookie('w_url'), ['data' => json_encode($userInfo, \JSON_UNESCAPED_UNICODE)]);
+            redirect($url)->send();
+        } else {
+            exit('微信授权登录失败,关闭页面重新,重新扫描!');
+        }
+    }
+
+    public function pay(Request $request)
+    {
+        [$orderId, $from] = UtilService::getMore([
+            ['order_id', '', 'empty', '参数错误'],
+            ['from', '', 'empty', '参数错误'],
+        ], $request, true);
+        $order = Order::where('order_id', $orderId)->find();
+        if (empty($order)) {
+            return app('json')->fail('找不到订单信息');
+        }
+        //订单已付款
+        if (!empty($order['is_pay'])) {
+            return app('json')->fail('订单已经支付成功');
+        }
+        $config = [
+            // 必要配置
+            'app_id' => 'wxa9130b2090dfb130',
+            'mch_id' => '1582297191',
+            'key' => 'fgwhdf323gewdsd83ewewhd56wrr333g',   // API 密钥
+            'notify_url' => '',
+        ];
+        $app = Factory::payment($config);
+        if ($from == 'weixin') {
+            $result = $app->order->unify([
+                'body' => '支付订单',
+                'out_trade_no' => $order['order_id'],
+                'total_fee' => $order['all_price'] * 100,
+                'notify_url' => 'https://api.lipinwawa.com/api/weixin/notify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
+                'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
+                'openid' => 'olkUP6fDbDSQKjidMQyeQ_0TO3XE',
+            ]);
+            $jssdk = $app->jssdk;
+            $jsConfig = $jssdk->bridgeConfig($result['prepay_id'], false);
+            $json['result'] = $jsConfig;
+            $json['type'] = 'WECHAT_PAY';
+        } else {
+            $result = $app->order->unify([
+                'body' => '支付订单',
+                'out_trade_no' => $order['order_id'],
+                'total_fee' => $order['all_price'] * 100,
+                'notify_url' => 'https://api.lipinwawa.com/api/weixin/notify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
+                'trade_type' => 'MWEB' // 请对应换成你的支付方式对应的值类型
+            ]);
+            $jssdk = $app->jssdk;
+            $jsConfig = $jssdk->bridgeConfig($result['prepay_id'], false);
+            $json['result'] = $jsConfig;
+            $json['type'] = 'WECHAT_H5_PAY';
+        }
+        return app('json')->success($json);
+    }
+
+    public function recharge(Request $request)
+    {
+        [$money, $from, $code] = UtilService::getMore([
+            ['money', '', 'empty', '请选择充值金额'],
+            ['from', '', 'empty', '参数错误'],
+            ['code', '']
+        ], $request, true);
+        try {
+            Recharge::beginTrans();
+            $recharge = new Recharge();
+            $d = [];
+            $d['order_id'] = 'RE' . time() . sprintf('%04d', rand(0, 1000)) . $request->user['uid'];
+            $d['v'] = $money;
+            $d['status'] = '0';
+            $d['time'] = time();
+            $d['sassid'] = $request->site['sassid'];
+            $d['uid'] = $request->user['uid'];
+            $recharge->insert($d);
+            //生成支付凭证
+            (new PayTrade)->mkTrade([
+                'out_trade_no' => $d['order_id'],
+                'uid' => $request->user['uid'],
+                'tag' => 'wxpay',
+                'type' => 'recharge',
+                'money' => $money,
+                'content' => '会员充值' . $d['v'] . '元',
+                'sassid' => $request->site['sassid'],
+            ]);
+            Recharge::commitTrans();
+            $config = [
+                // 必要配置
+                'app_id' => 'wxa9130b2090dfb130',
+                'mch_id' => '1582297191',
+                'key' => 'fgwhdf323gewdsd83ewewhd56wrr333g',   // API 密钥
+                'notify_url' => '',
+            ];
+            $app = Factory::payment($config);
+            if ($from == 'weixin') {
+                if ($code) {
+                    $weixinA = new weixina;
+                    $token = $weixinA->oauth_reuslt($code);
+                    $openid = $token['openid'];
+                    (new Member)->where('uid', $request->user['uid'])->save(['openid' => $openid]);
+                } else {
+                    $openid = $request->user['openid'];
+                }
+                $result = $app->order->unify([
+                    'body' => '充值余额',
+                    'out_trade_no' => $d['order_id'],
+                    'total_fee' => $money * 100,
+                    'notify_url' => 'https://api.lipinwawa.com/api/weixin/notify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
+                    'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
+                    'openid' => $openid,
+                ]);
+                $jssdk = $app->jssdk;
+                $jsConfig = $jssdk->bridgeConfig($result['prepay_id'], false);
+                $json['result'] = $jsConfig;
+                $json['type'] = 'WECHAT_PAY';
+            } else {
+                $result = $app->order->unify([
+                    'body' => '充值余额',
+                    'out_trade_no' => $d['order_id'],
+                    'total_fee' => $money * 100,
+                    'notify_url' => 'https://api.lipinwawa.com/api/weixin/notify', // 支付结果通知网址,如果不设置则会使用配置里的默认地址
+                    'trade_type' => 'MWEB' // 请对应换成你的支付方式对应的值类型
+                ]);
+                $json['result'] = $result;
+                $json['type'] = 'WECHAT_H5_PAY';
+            }
+            return app('json')->success($json);
+        } catch (DbException $db) {
+            Recharge::rollbackTrans();
+            return app('json')->fail("充值失败,请联系客服人员");
+        }
+    }
+
+    /**
+     * @throws \Exception
+     */
+    public function notify()
+    {
+        // 获取微信回调的数据
+        $notifiedData = file_get_contents('php://input');
+        //XML格式转换
+        $xmlObj = simplexml_load_string($notifiedData, 'SimpleXMLElement', LIBXML_NOCDATA);
+        $xmlObj = json_decode(json_encode($xmlObj), true);
+        // 当支付通知返回支付成功时
+        if ($xmlObj['return_code'] == "SUCCESS" && $xmlObj['result_code'] == "SUCCESS") {
+            try {
+                $data['appid'] = $xmlObj['appid'];
+                $data['bank_type'] = $xmlObj['bank_type'];
+                $data['cash_fee'] = $xmlObj['cash_fee'];
+                $data['fee_type'] = $xmlObj['fee_type'];
+                $data['is_subscribe'] = $xmlObj['is_subscribe'];
+                $data['mch_id'] = $xmlObj['mch_id'];
+                $data['nonce_str'] = $xmlObj['nonce_str'];
+                $data['openid'] = $xmlObj['openid'];
+                $data['out_trade_no'] = $xmlObj['out_trade_no'];
+                $data['result_code'] = $xmlObj['result_code'];
+                $data['return_code'] = $xmlObj['return_code'];
+                $data['sign'] = $xmlObj['sign'];
+                $data['time_end'] = $xmlObj['time_end'];
+                $data['total_fee'] = $xmlObj['total_fee'];
+                $data['trade_type'] = $xmlObj['trade_type'];
+                $data['transaction_id'] = $xmlObj['transaction_id'];
+                $res = Db::name('wx_notify')->insertGetId($data);
+                if ($res) {
+                    $payTrade = new PayTrade();
+                    $data2 = $payTrade->where('out_trade_no', $xmlObj['out_trade_no'])->find();
+                    if (empty($data2)) {
+                        echo 'SUCCESS';
+                        exit;
+                    }
+                    if ($data2['status'] == 1) {
+                        echo 'SUCCESS';
+                        exit;
+                    }
+                    if ($data2['type'] == 'recharge') {
+                        $recharge = new Recharge();
+                        $recharge->rechargeSuccess($xmlObj['out_trade_no']);
+                    }
+                    $payTrade->where('id', $data2['id'])->save(['status' => 1, 'pay_time' => time()]);
+                    echo 'SUCCESS';
+                    exit;
+                }
+            } catch (Exception $e) {
+                @file_put_contents('error.txt', '[' . date('Y-m-d') . ']Exception:' . json_encode(['Msg' => $e->getMessage(), 'File' => $e->getFile(), 'Line' => $e->getLine(), 'Trance' => $e->getTrace()]) . PHP_EOL, FILE_APPEND);
+            } catch (DbException $e) {
+                @file_put_contents('error.txt', '[' . date('Y-m-d') . ']DbException:' . json_encode(['Msg' => $e->getMessage(), 'File' => $e->getFile(), 'Line' => $e->getLine(), 'Trance' => $e->getTrace()]) . PHP_EOL, FILE_APPEND);
+            } catch (\Exception $e) {
+                @file_put_contents('error.txt', '[' . date('Y-m-d') . ']\Exception:' . json_encode(['Msg' => $e->getMessage(), 'File' => $e->getFile(), 'Line' => $e->getLine(), 'Trance' => $e->getTrace()]) . PHP_EOL, FILE_APPEND);
+            }
+        }
+    }
+
+}

+ 201 - 0
app/api/controller/v1/WexinPush.php

@@ -0,0 +1,201 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-11-11 16:54
+// +----------------------------------------------------------------------
+
+namespace app\api\controller\v1;
+
+
+use app\BaseViewController;
+use app\model\api\Order;
+use app\model\api\Site;
+use app\model\api\SiteDetail;
+use app\model\system\Member;
+use app\model\system\OrderInfo;
+use app\model\system\Recharge;
+use app\model\system\SiteTotal;
+use app\Request;
+
+class WexinPush extends BaseViewController
+{
+
+    /**
+     * 总系统ttotal
+     */
+    public function systemTotal(Request $request){
+        $token = $request->get('token');
+        if(empty($token)) {
+           return 'error';
+        }
+        $token = str_replace(" ","+",$token);
+        $str = crypto_decrypt(base64_decode($token),'weixin_push');
+        if(empty($str)) {
+           return '';
+        }
+        $tAr = unserialize($str);
+        //$tAr['time'] = strtotime('2020-11-10');
+        $time = $tAr['time'];
+        $date = date('Y-m-d',$time);
+        //显示订单量
+        $post['today_order_count'] = (new \app\model\system\Order())
+            ->where('status','>',0)
+            ->whereDay('pay_time',$date)
+            ->count();
+        //订单总量
+        $post['all_order_count'] = (new \app\model\system\Order())
+            ->where('status','>',0)
+            ->count();
+
+        //今日子订单量
+        $post['today_t_order_count'] = (new OrderInfo)
+            ->where('status','>',0)
+            ->whereDay('time',$date)
+            ->count();
+        //今日订单总量
+        $post['all_t_order_count'] = (new OrderInfo)->where('status','>',0)->count();
+
+
+        //今日销售额
+        $post['today_money'] = (new \app\model\system\Order())
+            ->where('status','>',0)
+            ->whereDay('pay_time',$date)
+            ->sum('all_price');
+        //总销售额
+        $post['all_money'] = (new \app\model\system\Order())
+            ->where('status','>',0)
+            ->sum('all_price');
+
+        //新增会员
+        $post['today_user'] = (new Member)->whereDay('regtime',$date)->count();
+        $post['all_user'] = (new Member)->count();
+
+        //充值记录
+        $post['today_recharge'] = (new Recharge)->whereDay('time',$date)->where('status',1)->sum('v');
+        $post['recharge'] = (new Recharge)->where('status',1)->sum('v');
+
+
+        //前面50个平台业绩
+        $siteData = (new SiteTotal)->field("st.*,(SELECT name from table_site where st.sassid=sassid) as site_name")->alias("st")->where('time',$time)->limit(0,50)->order("order_money desc")->select();
+
+       $this->assign('date',$date);
+       $this->assign('miniDate',date('m月d日',$time));
+       $this->assign('data',$post);
+       $this->assign('siteData',$siteData);
+       echo $this->display();
+    }
+
+    /**
+     * 分站total
+     */
+    public function adminTotal(Request $request){
+        $token = $request->get('token');
+        if(empty($token)) {
+              return 'error';
+        }
+        $token = str_replace(" ","+",$token);
+        $str = crypto_decrypt(base64_decode($token),'weixin_push');
+        if(empty($str)) {
+              return '';
+        }
+        $tAr = unserialize($str);
+       // $tAr['time'] = strtotime('2020-11-10');
+        //$tAr['sassid'] = 3;
+        $time = $tAr['time'];
+        $date = date('Y-m-d',$time);
+        $siteData = (new Site)->where('sassid',$tAr['sassid'])->find();
+
+        //显示订单量
+        $post['today_order_count'] = (new \app\model\system\Order())
+            ->where('status','>',0)
+            ->where('sassid',$tAr['sassid'])
+            ->whereDay('pay_time',$date)
+            ->count();
+        //订单总量
+        $post['all_order_count'] = (new \app\model\system\Order())
+            ->where('status','>',0)
+            ->where('sassid',$tAr['sassid'])
+            ->count();
+
+        //今日子订单量
+        $post['today_t_order_count'] = (new OrderInfo)
+            ->where('status','>',0)
+            ->where('sassid',$tAr['sassid'])
+            ->whereDay('time',$date)
+            ->count();
+        //今日订单总量
+        $post['all_t_order_count'] = (new OrderInfo)->where('sassid',$tAr['sassid'])->where('status','>',0)->count();
+
+
+        //今日销售额
+        $post['today_money'] = (new \app\model\system\Order())
+            ->where('status','>',0)
+            ->where('sassid',$tAr['sassid'])
+            ->whereDay('pay_time',$date)
+            ->sum('all_price');
+        //总销售额
+        $post['all_money'] = (new \app\model\system\Order())
+            ->where('status','>',0)
+            ->where('sassid',$tAr['sassid'])
+            ->sum('all_price');
+
+        //新增会员
+        $post['today_user'] = (new Member)->where('sassid',$tAr['sassid'])->whereDay('regtime',$date)->count();
+        $post['all_user'] = (new Member)->where('sassid',$tAr['sassid'])->count();
+
+        //充值记录
+        $post['today_recharge'] = (new Recharge)->where('sassid',$tAr['sassid'])->whereDay('time',$date)->where('status',1)->sum('v');
+        $post['recharge'] = (new Recharge)->where('sassid',$tAr['sassid'])->where('status',1)->sum('v');
+
+        //总佣金
+        $post['commission_money'] = (new Site)->where('sassid',$tAr['sassid'])->sum('money');
+        $post['today_commission'] = (new SiteDetail)->where('sassid',$tAr['sassid'])->where('type',1)->whereDay('time',$date)->sum('v');
+
+        //前面30天平台业绩
+        $totalData = (new SiteTotal)
+                        ->alias("st")
+                        ->where('sassid',$tAr['sassid'])
+                        ->limit(0,30)
+                        ->order("id desc")
+                        ->select();
+        $this->assign('siteData',$siteData);
+        $this->assign('date',$date);
+        $this->assign('miniDate',date('m月d日',$time));
+        $this->assign('data',$post);
+        $this->assign('totalData',$totalData);
+        echo $this->display();
+    }
+
+
+    /**
+     * 订单数据
+     * @param Request $request
+     */
+    public function order(Request $request) {
+        $token = $request->get('token');
+        if(empty($token)) {
+            return 'error';
+        }
+        $token = str_replace(" ","+",$token);
+        $str = crypto_decrypt(base64_decode($token),'weixin_push');
+        if(empty($str)) {
+            return '';
+        }
+        $tAr = unserialize($str);
+        $ids = $tAr['oids'];
+        $oData = (new Order)->whereIn('id',$ids)->select();
+        foreach ($oData as $k=>$v) {
+            $oData[$k]['data'] = (new OrderInfo)->where('o_id',$v['id'])->select();
+        }
+
+        $this->assign('data',$oData);
+       echo $this->display();
+    }
+
+
+}

+ 5 - 0
app/api/event.php

@@ -0,0 +1,5 @@
+<?php
+// 这是系统自动生成的event定义文件
+return [
+
+];

+ 66 - 0
app/api/exception/ExecptionHandle.php

@@ -0,0 +1,66 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ 后台登录认证异常抛出  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-25 16:10
+// +----------------------------------------------------------------------
+declare (strict_types=1);
+namespace app\api\exception;
+
+use library\exceptions\AuthException;
+use library\exceptions\GeneralException;
+use think\db\exception\DbException;
+use think\exception\Handle;
+use think\Response;
+use Throwable;
+
+class ExecptionHandle extends Handle {
+
+    /**
+     * 记录异常信息(包括日志或者其它方式记录)
+     *
+     * @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
+    {
+        // 添加自定义异常处理机制
+        $massageData = env('app_debug', false) ? [
+            'file' => $e->getFile(),
+            'line' => $e->getLine(),
+            'trace' => $e->getTrace(),
+            'previous' => $e->getPrevious(),
+        ] : [];
+
+        if ($e instanceof DbException) {
+            //记录服务器日志
+            return app('json')->fail('抱歉,服务器数据异常!', ['line'=>$e->getMessage()]);
+        }elseif ($e instanceof AuthException){
+            return app('json')->make($e->getCode() ?: -1, $e->getMessage());
+        } elseif ($e instanceof  GeneralException) {
+            return app('json')->make(-1, $e->getMessage());
+        } else {
+            return app('json')->make(-1, $e->getMessage());
+        }
+    }
+
+}

+ 5 - 0
app/api/middleware.php

@@ -0,0 +1,5 @@
+<?php
+// 这是系统自动生成的middleware定义文件
+return [
+
+];

+ 36 - 0
app/api/middleware/AllowOriginMiddleware.php

@@ -0,0 +1,36 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:59
+// +----------------------------------------------------------------------
+namespace app\api\middleware;
+
+
+
+use app\Request;
+use library\interfaces\MiddlewareInterface;
+use \think\facade\Config;
+use think\Response;
+
+class AllowOriginMiddleware implements MiddlewareInterface {
+
+    public function handle(Request $request, \Closure $next)
+    {
+        $header['Access-Control-Allow-Credentials'] = 'true';
+        $header['Access-Control-Allow-Origin'] = '*';
+        $header['Access-Control-Allow-Methods'] = 'POST,GET,JSON,OPTIONS,DELETE';
+        $header['Access-Control-Allow-Headers'] = 'x-requested-with,content-type,cache-control,WAREHOUSE-TOKEN,SECRET-KEY,TOKEN,' . Config::get('cookie.admin_token_name','') . ',' . Config::get('cookie.system_token_name','');
+        if ($request->method(true) == 'OPTIONS') {
+            $response = Response::create('ok')->code(200)->header($header);
+        } else {
+            $response = $next($request)->header($header);
+        }
+        return $response;
+    }
+
+}

+ 48 - 0
app/api/middleware/SeretKeyMiddleware.php

@@ -0,0 +1,48 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:59
+// +----------------------------------------------------------------------
+namespace app\api\middleware;
+
+use app\model\api\Site;
+use app\Request;
+use library\exceptions\AuthException;
+use library\interfaces\MiddlewareInterface;
+
+class SeretKeyMiddleware implements MiddlewareInterface
+{
+    public function handle(Request $request, \Closure $next)
+    {
+        $secret_key =$request->header('SECRET-KEY');
+        $request->site = $this->checkSecret($secret_key);
+        return $next($request);
+    }
+
+
+    /**
+     * 检查数据是否正常
+     * @param $secret_key
+     */
+    private function checkSecret($secret_key) {
+        if(empty($secret_key)) {
+            throw new AuthException('当前站点已经不存在,暂无法登陆', -100);
+        }
+       $siteData = (new Site)->where('secret_key',$secret_key)->find();
+       if(empty($siteData)) {
+           throw new AuthException('当前站点已经不存在,暂无法登陆', -100);
+       }
+       //站点停用
+       if(empty($siteData['status'])) {
+           throw new AuthException('抱歉,前站点已经停用。', -100);
+       }
+       return $siteData->toArray();
+    }
+
+
+}

+ 66 - 0
app/api/middleware/UserMiddleware.php

@@ -0,0 +1,66 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:59
+// +----------------------------------------------------------------------
+namespace app\api\middleware;
+
+use app\model\api\Member;
+use app\model\api\Site;
+use app\Request;
+use Firebase\JWT\JWT;
+use library\exceptions\AuthException;
+use library\interfaces\MiddlewareInterface;
+use think\facade\Env;
+
+class UserMiddleware implements MiddlewareInterface
+{
+    public function handle(Request $request, \Closure $next)
+    {
+        $token =$request->header('TOKEN');
+        $request->user = $this->checkUser($token,$request->site['secret_key']);
+        return $next($request);
+    }
+
+
+    /**
+     * 检查数据是否正常
+     * @param $secret_key
+     */
+    private function checkUser($token,$secret_key) {
+        if(empty($secret_key)) {
+            throw new AuthException('请重新登录', -99);
+        }
+        try{
+            list($headb64, $bodyb64, $cryptob64) = explode('.', $token);
+            $payload = JWT::jsonDecode(JWT::urlsafeB64Decode($bodyb64));
+
+            //$token = $payload->token;
+            //$uid = @crypto_decrypt(base64_decode($token),$secret_key);
+            $uid = $payload->uid;
+            $memData = (new Member)
+                        ->where('uid',$uid)
+                        ->where('sassid',\request()->site['sassid'])
+                        ->find();
+
+            if(empty($memData)) {
+                throw new AuthException('请重新登录', -99);
+            }
+            //站点停用
+            if(empty($memData['status'])) {
+                throw new AuthException('用户已经停用。', -99);
+            }
+            return $memData->toArray();
+        }catch (\Throwable $e) {
+            //var_dump($e->getMessage());
+            throw new AuthException('请重新登录', -99);
+        }
+    }
+
+
+}

+ 7 - 0
app/api/provider.php

@@ -0,0 +1,7 @@
+<?php
+use app\Request;
+
+// 容器Provider定义文件
+return [
+    'think\exception\Handle' => \app\api\exception\ExecptionHandle::class,
+];

+ 24 - 0
app/api/route/bind.php

@@ -0,0 +1,24 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | Author: TABLE ME
+// +----------------------------------------------------------------------
+// | Date: 2020-08-30 14:41
+// +----------------------------------------------------------------------
+
+use think\facade\Route;
+
+Route::group('bind', function () {
+    //绑定登录
+    Route::rule('system_bind','v1.bind/system_bind');
+    //绑定登录数据
+    Route::rule('system_bind_data','v1.bind/system_bind_data');
+    //绑定成功
+    Route::rule('bindsuccess','v1.bind/bindsuccess');
+
+
+})->middleware([
+]);

+ 31 - 0
app/api/route/index.php

@@ -0,0 +1,31 @@
+<?php
+namespace app\api\route;
+
+use app\api\middleware\AllowOriginMiddleware;
+use app\api\middleware\SeretKeyMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 首页栏目
+ */
+Route::group('index',function () {
+    //首页基本数据
+    Route::rule('getIndex', 'v1.index/getIndex');
+    //产品列表
+    Route::rule('proList','v1.index/proList');
+    //产品详情
+    Route::rule('proItem','v1.index/proItem');
+    //产品随机
+    Route::rule('proRand','v1.index/proRand');
+    //新闻中心-列表
+    Route::rule('news','v1.index/news');
+
+    Route::rule('newsList','v1.index/newsList');
+
+
+})->middleware([
+    AllowOriginMiddleware::class,
+    SeretKeyMiddleware::class
+]);

+ 41 - 0
app/api/route/login.php

@@ -0,0 +1,41 @@
+<?php
+namespace app\api\route;
+
+use app\api\middleware\AllowOriginMiddleware;
+use app\api\middleware\SeretKeyMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 无需授权的接口
+ */
+Route::group('login',function () {
+    //用户登录
+    Route::rule('l', 'v1.login/l');
+    //获取验证码
+    Route::rule('yzm','v1.login/yzm');
+    //注册reg第一步
+    Route::rule('reg1','v1.login/reg1');
+    //注册reg第二步
+    Route::rule('reg2','v1.login/reg2');
+    //忘记密码验证码
+    Route::rule('forgetYzm','v1.login/forgetYzm');
+    //忘记密码第一步
+    Route::rule('forget1','v1.login/forget1');
+    //忘记密码第二步
+    Route::rule('forget2','v1.login/forget2');
+
+    //忘记密码第二步
+    Route::rule('mreg','v1.login/mreg');
+
+
+
+
+
+
+
+})->middleware([
+    AllowOriginMiddleware::class,
+    SeretKeyMiddleware::class
+]);

+ 21 - 0
app/api/route/news.php

@@ -0,0 +1,21 @@
+<?php
+namespace app\api\route;
+
+use app\api\middleware\AllowOriginMiddleware;
+use app\api\middleware\SeretKeyMiddleware;
+use app\api\middleware\UserMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 无需授权的接口
+ */
+Route::group('news',function () {
+    //基本信息
+    Route::rule('about','v1.news/about');
+
+})->middleware([
+    AllowOriginMiddleware::class,
+    SeretKeyMiddleware::class
+]);

+ 24 - 0
app/api/route/ott.php

@@ -0,0 +1,24 @@
+<?php
+namespace app\api\route;
+
+use app\api\middleware\AllowOriginMiddleware;
+use app\api\middleware\SeretKeyMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 无需授权的接口
+ */
+Route::group('ott',function () {
+    //任务
+    Route::rule('alipay', 'v1.ott/alipay');
+
+    Route::rule('alipayNotifyUrl','v1.ott/alipayNotifyUrl');
+
+    Route::rule('alipayReturnUrl','v1.ott/alipayReturnUrl');
+
+
+})->middleware([
+    AllowOriginMiddleware::class
+]);

+ 19 - 0
app/api/route/platform.php

@@ -0,0 +1,19 @@
+<?php
+namespace app\api\route;
+
+use app\api\middleware\AllowOriginMiddleware;
+use app\api\middleware\SeretKeyMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 无需授权的接口
+ */
+Route::group('platform',function () {
+    //平台信息
+    Route::rule('list', 'v1.platform/list');
+})->middleware([
+    AllowOriginMiddleware::class,
+    SeretKeyMiddleware::class
+]);

+ 23 - 0
app/api/route/pub.php

@@ -0,0 +1,23 @@
+<?php
+namespace app\api\route;
+
+use app\api\middleware\AllowOriginMiddleware;
+use app\api\middleware\SeretKeyMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 无需授权的接口
+ */
+Route::group('pub',function () {
+    //站点信息
+    Route::rule('siteResouce', 'v1.pub/siteResouce');
+    //任务
+    Route::rule('warehouse', 'v1.pub/warehouse');
+
+
+})->middleware([
+    AllowOriginMiddleware::class,
+    SeretKeyMiddleware::class
+]);

+ 32 - 0
app/api/route/route.php

@@ -0,0 +1,32 @@
+<?php
+namespace app\api\route;
+
+use app\api\middleware\AllowOriginMiddleware;
+use app\api\middleware\SeretKeyMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 无需授权的接口
+ */
+Route::group(function () {
+    Route::rule('index', 'Index/index');
+
+})->middleware([
+    AllowOriginMiddleware::class,
+    SeretKeyMiddleware::class
+]);
+
+
+/**
+ * miss 路由
+ */
+Route::miss(function () {
+    if (app()->request->isOptions()) {
+        $header = Config::get('cookie.header');
+        $header['Access-Control-Allow-Origin'] = app()->request->header('origin');
+        return Response::create('ok')->code(200)->header($header);
+    } else
+        return Response::create()->code(404);
+});

+ 24 - 0
app/api/route/upload.php

@@ -0,0 +1,24 @@
+<?php
+namespace app\api\route;
+
+use app\api\middleware\AllowOriginMiddleware;
+use app\api\middleware\SeretKeyMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 无需授权的接口
+ */
+Route::group('upload',function () {
+    //上传头像
+    Route::rule('index', 'v1.upload/index');
+    //上传xls解析
+    Route::rule('xls','v1.upload/xls');
+
+
+
+})->middleware([
+    AllowOriginMiddleware::class,
+    SeretKeyMiddleware::class
+]);

+ 90 - 0
app/api/route/user.php

@@ -0,0 +1,90 @@
+<?php
+namespace app\api\route;
+
+use app\api\middleware\AllowOriginMiddleware;
+use app\api\middleware\SeretKeyMiddleware;
+use app\api\middleware\UserMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 无需授权的接口
+ */
+Route::group('user',function () {
+    //基本信息
+    Route::rule('init','v1.user/init');
+    //会员数据
+    Route::rule('index', 'v1.user/index');
+    //平台数据
+    Route::rule('warehouse', 'v1.user/warehouse');
+    //提交订单
+    Route::rule('subOrder','v1.user/subOrder');
+    //getPayOrder
+    Route::rule('getPayOrder','v1.user/getPayOrder');
+    //余额支付
+    Route::rule('balancePay','v1.user/balancePay');
+    //订单信息
+    Route::rule('getOrderList','v1.user/getOrderList');
+    //取消订单
+    Route::rule('cancelOrder','v1.user/cancelOrder');
+    //查看订单详情
+    Route::rule('orderSubItem','v1.user/orderSubItem');
+    //订单初始化数据
+    Route::rule('orderInit','v1.user/orderInit');
+    //订单下载
+    Route::rule('orderDown','v1.user/orderDown');
+    //充值
+    Route::rule('rechargeX','v1.user/rechargeX');
+    //资金情况
+    Route::rule('rechargeInit','v1.user/rechargeInit');
+    //明细数据
+    Route::rule('detailList','v1.user/detailList');
+    //我要提现
+    Route::rule('subTx','v1.user/subTx');
+    //提现列表
+    Route::rule('txList','v1.user/txList');
+    //订单详情
+    Route::rule('orderInfoItem','v1.user/orderInfoItem');
+    //提交问题反馈
+    Route::rule('subOrderInfoMono','v1.user/subOrderInfoMono');
+    //底单申请
+    Route::rule('subOrderDdInfo','v1.user/subOrderDdInfo');
+    //售后订单
+    Route::rule('orderMonoList','v1.user/orderMonoList');
+    //取消问题单
+    Route::rule('orderMonoCancel','v1.user/orderMonoCancel');
+    //底单申请
+    Route::rule('orderDdList','v1.user/orderDdList');
+    //底单取消
+    Route::rule('orderDbCancel','v1.user/orderDbCancel');
+    //佣金奖励
+    Route::rule('extension','v1.user/extension');
+    //检查充值
+    Route::rule('checkRecharge','v1.user/checkRecharge');
+    //修改基本信息
+    Route::rule('account','v1.user/account');
+    //修改密码
+    Route::rule('password','v1.user/password');
+    //推广显示
+    Route::rule('extensionList','v1.user/extensionList');
+    //绑定微信
+    Route::rule('bind','v1.user/bind');
+    //取消绑定
+    Route::rule('delbind','v1.user/delbind');
+    //vip
+    Route::rule('vip','v1.user/vip');
+    //rechargeXinit
+    Route::rule('rechargeXinit','v1.user/rechargeXinit');
+    //会员店铺
+    Route::rule('shop','v1.user/shop');
+    //会员店铺删除
+    Route::rule('shopDel','v1.user/shopDel');
+    //微信充值
+    Route::rule('wxRecharge', 'v1.weixin/recharge');
+
+})->middleware([
+    AllowOriginMiddleware::class,
+    SeretKeyMiddleware::class,
+    UserMiddleware::class
+]);

+ 25 - 0
app/api/route/weixin.php

@@ -0,0 +1,25 @@
+<?php
+namespace app\api\route;
+
+use app\api\middleware\AllowOriginMiddleware;
+use app\api\middleware\SeretKeyMiddleware;
+use think\facade\Config;
+use think\facade\Route;
+use think\Response;
+
+/**
+ * 无需授权的接口
+ */
+Route::group('weixin',function () {
+    //用户登录
+    Route::rule('result', 'v1.weixin/result');
+    //微信支付
+    Route::rule('wxPay', 'v1.weixin/pay');
+    //微信支付回调
+    Route::rule('notify', 'v1.weixin/notify');
+    //统计业绩
+    Route::rule('test', 'v1.weixin/test');
+
+})->middleware([
+    AllowOriginMiddleware::class
+]);

Some files were not shown because too many files changed in this diff