From b52e0d8e9835470e7dcb049b1b9ee4690c90254d Mon Sep 17 00:00:00 2001 From: jianghanbo Date: Mon, 21 Oct 2024 17:14:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/admin/controller/AdminController.php | 2 + .../admin/controller/OrderBooksController.php | 52 +++ .../admin/controller/ProductsController.php | 107 ++++- .../admin/controller/SettingController.php | 40 ++ .../app/admin/controller/UploadController.php | 1 + .../app/api/controller/OrderController.php | 104 +++++ .../app/api/controller/UploadController.php | 34 ++ service/app/api/controller/base.php | 13 + service/app/middleware/wechatAuth.php | 21 + service/app/model/OrderBooks.php | 11 + service/app/model/Orders.php | 41 +- service/app/model/ProductSchedules.php | 7 + service/app/model/Settings.php | 7 + service/composer.json | 3 +- service/composer.lock | 406 ++++++++++-------- service/config/middleware.php | 3 + 16 files changed, 677 insertions(+), 175 deletions(-) create mode 100644 service/app/admin/controller/OrderBooksController.php create mode 100644 service/app/admin/controller/SettingController.php create mode 100644 service/app/api/controller/OrderController.php create mode 100644 service/app/api/controller/UploadController.php create mode 100644 service/app/api/controller/base.php create mode 100644 service/app/middleware/wechatAuth.php create mode 100644 service/app/model/OrderBooks.php create mode 100644 service/app/model/ProductSchedules.php create mode 100644 service/app/model/Settings.php diff --git a/service/app/admin/controller/AdminController.php b/service/app/admin/controller/AdminController.php index 0f110dee..71264e8d 100644 --- a/service/app/admin/controller/AdminController.php +++ b/service/app/admin/controller/AdminController.php @@ -119,6 +119,8 @@ class AdminController extends base $item->product_ids = $product_ids; $item->route_type = $routeType; $item->type = $type; + $item->wechat = $request->post('wechat',''); + $item->wechat_pic = $request->post('wechat_pic',''); Log::info('logs:' . json_encode($item)); $back = $item->save(); if($back) diff --git a/service/app/admin/controller/OrderBooksController.php b/service/app/admin/controller/OrderBooksController.php new file mode 100644 index 00000000..3e28d971 --- /dev/null +++ b/service/app/admin/controller/OrderBooksController.php @@ -0,0 +1,52 @@ +order('id', 'desc'); + if($username = $request->get('username')) { + $query->where('username', $username); + } + if($status = $request->get('status')) { + $query->where('status', $status); + } + if($is_order = $request->get('is_order')) { + $query->where('is_order', $is_order); + } + + $list = $query->with(['orderInfo'])->paginate($request->get('limit',10)); + foreach ($list as &$val) { + if ($val['code_pic']) { + $val['code_pic'] = json_decode($val['code_pic'], true); + $val['code_pic_show'] = $val['code_pic'][0]; + } + } + return $this->success($list,null,['oss' => array_values(array_map(function ($os, $k) { + return ['id' => $k, 'os' => $os]; + }, Orders::OSS, array_keys(Orders::OSS)))]); + } + + /** + * @param Request $request + * @return \support\Response + * @throws \think\db\exception\DbException + */ + public function updateStatus(Request $request) { + if (!$request->post('id')) { + return $this->error('请选择预约记录'); + } + OrderBooks::where('id', $request->post('id'))->update(['status' => 1]); + return $this->success([]); + } +} \ No newline at end of file diff --git a/service/app/admin/controller/ProductsController.php b/service/app/admin/controller/ProductsController.php index 48f02a94..b788ddf9 100644 --- a/service/app/admin/controller/ProductsController.php +++ b/service/app/admin/controller/ProductsController.php @@ -3,8 +3,11 @@ namespace app\admin\controller; use app\model\Admins; use app\model\Onlines; +use app\model\OrderBooks; use app\model\Orders; use app\model\Products; +use app\model\ProductSchedules; +use Illuminate\Support\Facades\DB; use support\Log; use support\Request; use support\Redis; @@ -44,20 +47,118 @@ class ProductsController extends base { if (!$request->post('third_product_id')) { return $this->error(2001, '线路id必填'); } + if (!$request->post('type') || !in_array($request->post('type'), [1, 2])) { + return $this->error(2001, '请选择区域'); + } + if (!$request->post('day') || !is_numeric($request->post('day'))) { + return $this->error(2001, '请输入天数'); + } $where = ['os' => $request->post('os'), 'third_product_id' => $request->post('third_product_id')]; $product = (new Products())->where($where)->find(); - if (!empty($product)) { - return $this->error(2002, '线路已存在'); + if (empty($product)) { + $product = new Products(); } - $product = new Products(); $product->os = $request->post('os'); $product->third_product_id = $request->post('third_product_id'); $product->product_name = $request->post('product_name'); $product->status = 1; + $product->type = $request->post('type'); + $product->day = $request->post('day'); + $product->night = $request->post('night'); + $product->trip_info = $request->post('trip_info'); $product->save(); Log::info('product:' . json_encode($product)); return $this->success([]); } + + /** + * 商品排期列表 + * @param Request $request + * @return \support\Response + */ + public function productSchedules(Request $request) { + if (!$request->get('id')) { + return $this->error(2001, '请选择商品'); + } + $date = $request->get('date', date('Y-m')); + $firstDay = strtotime(date('Y-m-01'), strtotime($date)); + $lastDay = strtotime(date('Y-m-t'), strtotime($date)); + + // 用来存储日期的数组 + $dates = []; + + // 排期列表 + $productSchedules = ProductSchedules::where('product_id', $request->get('id')) + ->whereBetweenTime('date', $firstDay, $lastDay) + ->select() + ->toArray(); + $productSchedules = array_column($productSchedules, null, 'date'); + + // 预约列表 + $books = OrderBooks::join('orders', 'orders.id=order_books.order_id') + ->whereBetween('order_books.travel_date', [$firstDay, $lastDay]) + ->group(['order_books.travel_date', 'orders.product_id']) + ->fieldRaw('order_books.travel_date, orders.product_id, count(1) as num') + ->select() + ->toArray(); + $books = array_column($books, null, 'travel_date'); + + // 遍历日期范围 + $dates = []; + for ($currentDay = $firstDay; $currentDay <= $lastDay; $currentDay = strtotime('+1 day', $currentDay)) { + $date = date('Y-m-d', $currentDay); + $current = [ + 'date' => $date, + 'books_num' => 0, + 'left_num' => 0 + ]; + // 预约数量 + if (isset($books[$date])) { + $current['books_num'] = $books[$date]['num']; + } + // 剩余数量 + if (isset($productSchedules[$date]) && $productSchedules[$date]['num'] > 0) { + $leftNum = $productSchedules[$date]['num'] - $current['books_num']; + $current['left_num'] = $leftNum ?: 0; + } + array_push($dates, $current); + } + + return $this->success($dates); + } + + /** + * 商品排期 + * @param Request $request + * @return \support\Response + */ + public function addProductSchedules(Request $request) { + if (!$request->post('id')) { + return $this->error(2001, '请选择商品'); + } + if (!$request->post('date')) { + return $this->error(2001, '选择设置日期'); + } + if (!$request->post('num') || !is_numeric($request->post('num'))) { + return $this->error(2001, '数量格式异常'); + } + $thirdProductId = Products::where('id', $request->post('id'))->value('third_product_id'); + if (!$thirdProductId) { + return $this->error('商品信息未找到'); + } + + $where = ['product_id' => $request->post('id'), 'date' => $request->post('date')]; + $productSchedules = (new ProductSchedules())->where($where)->find(); + if (empty($productSchedules)) { + $productSchedules = new ProductSchedules(); + } + $productSchedules->product_id = $request->post('id'); + $productSchedules->date = $request->post('date'); + $productSchedules->num = $request->post('num'); + $productSchedules->third_product_id = $thirdProductId; + $productSchedules->save(); + return $this->success([]); + } } \ No newline at end of file diff --git a/service/app/admin/controller/SettingController.php b/service/app/admin/controller/SettingController.php new file mode 100644 index 00000000..23c77649 --- /dev/null +++ b/service/app/admin/controller/SettingController.php @@ -0,0 +1,40 @@ +success(compact('domestic', 'abroad')); + } + + /** + * 合同配置保存 + */ + public function saveContractSetting(Request $request) { + if (empty($request->get('domestic'))) { + return $this->error('请上传境内合同'); + } + if (empty($request->get('abroad'))) { + return $this->error('请上传境外合同'); + } + Redis::set(self::SETTING_DOMESTIC, $request->get('domestic')); + Redis::set(self::SETTING_ABROAD, $request->get('abroad')); + return $this->success([]); + } +} \ No newline at end of file diff --git a/service/app/admin/controller/UploadController.php b/service/app/admin/controller/UploadController.php index 0b54e2a1..cc07c19c 100644 --- a/service/app/admin/controller/UploadController.php +++ b/service/app/admin/controller/UploadController.php @@ -18,6 +18,7 @@ class UploadController extends base { public function index(Request $request) { + return $this->success('/uploads/1/20241019175205021482/7418af88ebc0333ef4bee0a0a2cc7de0.jpg'); $file = $request->file("file"); if (!$file->isValid()) { diff --git a/service/app/api/controller/OrderController.php b/service/app/api/controller/OrderController.php new file mode 100644 index 00000000..5ea0ee9a --- /dev/null +++ b/service/app/api/controller/OrderController.php @@ -0,0 +1,104 @@ +get('mobile'); + if (empty($mobile) || !Validator::mobile()->validate($mobile)) { + return $this->error('手机号格式错误'); + } + $where = []; + $os = [1, 7]; + $query = Orders::where($where) + ->whereLike('mobile', $mobile) + ->whereIn('os', $os) + ->order('create_at','desc') + ->order('id','desc'); + + $orders = $query->paginate($request->get('limit',10)); + $list = $orders->hidden(['check_sn'])->append(['h5_os_status_name', 'h5_os_name' , 'can_book']); + + return $this->success($list); + } + + /** + * 订单详情 + * @param Request $request + * @return \support\Response + * @throws \think\db\exception\DataNotFoundException + * @throws \think\db\exception\DbException + * @throws \think\db\exception\ModelNotFoundException + */ + public function detail(Request $request) { + $id = $request->get('order_id'); + if (empty($id)) { + return $this->error('请选择订单'); + } + + $orderDetail = Orders::where('id', $id)->with(['admin', 'product'])->find(); + if (empty($orderDetail)) { + return $this->error('订单未找到'); + } + $orderDetail->admin->job = '金牌旅行管家'; + $orderDetail->admin->service_promise = '我以真诚、热情、专业的态度服务好每一位顾客,全力确保您的旅行体验美好、愉快、安全。'; + // 旅游合同 + $orderDetail->travel_contract = 'http://192.168.0.100:8787/%E6%8A%96%E9%9F%B3%E6%96%B0%E5%9B%BD%E6%97%85%E6%B7%BB%E5%8A%A0%E5%88%86%E5%8D%95%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%95%86%E5%93%81.xlsx'; + + return $this->success($orderDetail); + } + + /** + * 订单预约 + * @param Request $request + * @return \support\Response + */ + public function book(Request $request) { + try { + $data = $request->post(); + Validator::input($data, [ + 'order_id' => Validator::number()->length(1, 10)->setName('订单号'), + 'travel_date' => Validator::date()->setName('出游日期'), + 'num' => Validator::number()->length(1, 3)->setName('出游人数'), + 'name' => Validator::length(1, 10)->setName('出行人名称'), + 'mobile' => Validator::mobile()->setName('联系电话'), + ]); + + if (!$order = Orders::where('id', $data['order_id'])->find()) { + return $this->error('订单未找到'); + } + if ($order->is_apply_appointment == 1) { + return $this->error('已申请预约'); + } + if ($data['code_pic'] && is_array($data['code_pic'])) { + $data['code_pic'] = json_encode($data['code_pic']); + } + // 检查排期 + // $res = DB::transaction(function ($data) { + $res = OrderBooks::create($data); + if (!empty($res)) { + $order->is_apply_appointment = 1; + $order->save(); + } + // return $res; + // }); + return $this->success($res); + } catch (\Exception $exception) { + return $this->error($exception->getMessage()); + } + } +} \ No newline at end of file diff --git a/service/app/api/controller/UploadController.php b/service/app/api/controller/UploadController.php new file mode 100644 index 00000000..3bd47f1f --- /dev/null +++ b/service/app/api/controller/UploadController.php @@ -0,0 +1,34 @@ +file("file"); + + if (!$file->isValid()) { + return $this->error(400, 'upload fail, code=' . $file->getUploadErrorCode()); + } +// if (!in_array($file->getExtension(), ['jpg', 'png', 'jpeg']) ){ +// return $this->error(400, '请选择图片,文件后缀:'.$file->getFilename()); +// } + + $now = date_create(); + $savepath = sprintf("/uploads/%d/%s/%s", 1, $now->format("YmdHisu"), $file->getUploadName()); + $item = new Uploads(); + $item->admin_id = 0; + $item->filesize = 0; + $item->filepath = $savepath; + $item->mime = $file->getUploadMimeType(); + $item->create_at = $now->getTimestamp(); + + $file->move(public_path(). $savepath); + $item->save(); + + return $this->success(env('APP_URL') . $savepath); + } +} \ No newline at end of file diff --git a/service/app/api/controller/base.php b/service/app/api/controller/base.php new file mode 100644 index 00000000..d2cb3c30 --- /dev/null +++ b/service/app/api/controller/base.php @@ -0,0 +1,13 @@ + 0, 'msg' => $mess ?? 'ok','data' => $data, 'ext' => $ext]); + } + + public function error($code, $mess = null) { + return json(['error' => $code, 'msg' => $mess ?? 'error'], JSON_NUMERIC_CHECK ); + } +} \ No newline at end of file diff --git a/service/app/middleware/wechatAuth.php b/service/app/middleware/wechatAuth.php new file mode 100644 index 00000000..c00c480e --- /dev/null +++ b/service/app/middleware/wechatAuth.php @@ -0,0 +1,21 @@ + '添加记录时间', 'update_time' => '修改记录时间', 'last_follow' => '最后跟进时间', 'next_follow' => '下次跟进时间', 'travel_date' => '出行时间', 'create_at' => '下单时间']; + + // 客户端常量 + const H5_OSS = [1 => '美团官方视频号直播', '7' => '美团官方视频号直播', 2 => '快手', 3 => '抖音', '5' => '抖音', '6' => '同程']; + const H5_STATUS_DESC = [ + // 美团 + 1 => [1 => '未付款', 2 => '已取消', 3 => '未预约', 4 => '已预约', 5 => '已退款'], + 7 => [1 => '未付款', 2 => '已取消', 3 => '未预约', 4 => '已预约', 5 => '已退款'], + // 抖音 + 3 => [1 => '未核销', 2 => '已核销', 3 => '申请退款中', 4 => '已退款', 5 => '部分核销'], + 5 => [1 => '未核销', 2 => '已核销', 3 => '申请退款中', 4 => '已退款', 5 => '部分核销'], + ]; + protected $json = ['personnel']; public function getOrderStatusNameAttr($val) @@ -60,6 +72,24 @@ class Orders extends base return self::OSS[$this->os] ?? '未知'; } + public function getH5OsNameAttr($val) + { + return self::H5_OSS[$this->os] ?? '未知'; + } + public function getH5OsStatusNameAttr($val) + { + return self::H5_STATUS_DESC[$this->os][$this->order_status] ?? '未知'; + } + + public function getCanBookAttr($val) + { + $canBook = false; + if (in_array($this->os, [1, 7]) && $this->order_status == 3) { + $canBook = true; + } + return $canBook; + } + public function getAdminNameAttr() { if ($this->admin_id > 0) { @@ -119,9 +149,9 @@ class Orders extends base return $query; } - public function admin() - { - return $this->belongsTo(Admins::class, 'admin_id')->visible(['name', 'username', 'avatar']); + public function admin() { + $data = $this->belongsTo(Admins::class, 'admin_id')->visible(['name', 'username', 'avatar', 'wechat', 'wechat_pic', 'job', 'service_promise']); + return $data; } public function anchor() @@ -144,6 +174,11 @@ class Orders extends base return $this->hasMany(Finances::class, 'order_id')->order('id', 'desc'); } + public function product() + { + return $this->belongsTo(Products::class, 'product_id', 'third_product_id'); + } + public static function fish($id, $admin_id) { return Db::transaction(function () use ($id, $admin_id) { diff --git a/service/app/model/ProductSchedules.php b/service/app/model/ProductSchedules.php new file mode 100644 index 00000000..8a5f6e53 --- /dev/null +++ b/service/app/model/ProductSchedules.php @@ -0,0 +1,7 @@ +=5.3.3" }, @@ -1517,52 +1519,53 @@ ], "support": { "issues": "https://github.com/qiniu/php-sdk/issues", - "source": "https://github.com/qiniu/php-sdk/tree/v7.12.1" + "source": "https://github.com/qiniu/php-sdk/tree/v7.13.0" }, - "time": "2024-03-12T07:03:12+00:00" + "time": "2024-09-20T14:00:46+00:00" }, { "name": "symfony/console", - "version": "v7.1.1", + "version": "v6.4.12", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "9b008f2d7b21c74ef4d0c3de6077a642bc55ece3" + "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/9b008f2d7b21c74ef4d0c3de6077a642bc55ece3", - "reference": "9b008f2d7b21c74ef4d0c3de6077a642bc55ece3", + "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765", + "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -1596,7 +1599,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.1" + "source": "https://github.com/symfony/console/tree/v6.4.12" }, "funding": [ { @@ -1612,7 +1615,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:57:53+00:00" + "time": "2024-09-20T08:15:52+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1683,20 +1686,20 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", - "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -1742,7 +1745,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" }, "funding": [ { @@ -1758,24 +1761,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -1820,7 +1823,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" }, "funding": [ { @@ -1836,24 +1839,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" @@ -1901,7 +1904,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" }, "funding": [ { @@ -1917,24 +1920,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -1981,7 +1984,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" }, "funding": [ { @@ -1997,24 +2000,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.31.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { @@ -2061,7 +2064,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" }, "funding": [ { @@ -2077,7 +2080,7 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/service-contracts", @@ -2164,20 +2167,20 @@ }, { "name": "symfony/string", - "version": "v7.1.1", + "version": "v6.4.12", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "60bc311c74e0af215101235aa6f471bcbc032df2" + "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/60bc311c74e0af215101235aa6f471bcbc032df2", - "reference": "60bc311c74e0af215101235aa6f471bcbc032df2", + "url": "https://api.github.com/repos/symfony/string/zipball/f8a1ccebd0997e16112dfecfd74220b78e5b284b", + "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -2187,12 +2190,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -2231,7 +2233,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.1" + "source": "https://github.com/symfony/string/tree/v6.4.12" }, "funding": [ { @@ -2247,20 +2249,20 @@ "type": "tidelift" } ], - "time": "2024-06-04T06:40:14+00:00" + "time": "2024-09-20T08:15:52+00:00" }, { "name": "symfony/translation", - "version": "v6.4.8", + "version": "v6.4.12", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a" + "reference": "cf8360b8352b086be620fae8342c4d96e391a489" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a002933b13989fc4bd0b58e04bf7eec5210e438a", - "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a", + "url": "https://api.github.com/repos/symfony/translation/zipball/cf8360b8352b086be620fae8342c4d96e391a489", + "reference": "cf8360b8352b086be620fae8342c4d96e391a489", "shasum": "" }, "require": { @@ -2326,7 +2328,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.8" + "source": "https://github.com/symfony/translation/tree/v6.4.12" }, "funding": [ { @@ -2342,7 +2344,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-09-16T06:02:54+00:00" }, { "name": "symfony/translation-contracts", @@ -2424,16 +2426,16 @@ }, { "name": "topthink/think-helper", - "version": "v3.1.6", + "version": "v3.1.9", "source": { "type": "git", "url": "https://github.com/top-think/think-helper.git", - "reference": "769acbe50a4274327162f9c68ec2e89a38eb2aff" + "reference": "d554a0a62e4c7034abc7343ee866005c3f399ae2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/top-think/think-helper/zipball/769acbe50a4274327162f9c68ec2e89a38eb2aff", - "reference": "769acbe50a4274327162f9c68ec2e89a38eb2aff", + "url": "https://api.github.com/repos/top-think/think-helper/zipball/d554a0a62e4c7034abc7343ee866005c3f399ae2", + "reference": "d554a0a62e4c7034abc7343ee866005c3f399ae2", "shasum": "" }, "require": { @@ -2464,22 +2466,22 @@ "description": "The ThinkPHP6 Helper Package", "support": { "issues": "https://github.com/top-think/think-helper/issues", - "source": "https://github.com/top-think/think-helper/tree/v3.1.6" + "source": "https://github.com/top-think/think-helper/tree/v3.1.9" }, - "time": "2021-12-15T04:27:55+00:00" + "time": "2024-10-15T02:24:05+00:00" }, { "name": "topthink/think-orm", - "version": "v3.0.14", + "version": "v3.0.28", "source": { "type": "git", "url": "https://github.com/top-think/think-orm.git", - "reference": "7b0b8ea6ca5e020217f6ba7ae34d547e148a675b" + "reference": "407dfd782b6124b2a33c9867e9c09041f36fb4ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/top-think/think-orm/zipball/7b0b8ea6ca5e020217f6ba7ae34d547e148a675b", - "reference": "7b0b8ea6ca5e020217f6ba7ae34d547e148a675b", + "url": "https://api.github.com/repos/top-think/think-orm/zipball/407dfd782b6124b2a33c9867e9c09041f36fb4ba", + "reference": "407dfd782b6124b2a33c9867e9c09041f36fb4ba", "shasum": "" }, "require": { @@ -2491,7 +2493,10 @@ "topthink/think-helper": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^8|^9.5|^10" + "phpunit/phpunit": "^9.6|^10" + }, + "suggest": { + "ext-mongodb": "provide mongodb support" }, "type": "library", "autoload": { @@ -2519,29 +2524,29 @@ ], "support": { "issues": "https://github.com/top-think/think-orm/issues", - "source": "https://github.com/top-think/think-orm/tree/v3.0.14" + "source": "https://github.com/top-think/think-orm/tree/v3.0.28" }, - "time": "2023-09-24T13:15:07+00:00" + "time": "2024-10-10T02:14:17+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.6.0", + "version": "v5.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.2", + "graham-campbell/result-type": "^1.1.3", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.2", + "phpoption/phpoption": "^1.9.3", "symfony/polyfill-ctype": "^1.24", "symfony/polyfill-mbstring": "^1.24", "symfony/polyfill-php80": "^1.24" @@ -2558,7 +2563,7 @@ "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "5.6-dev" @@ -2593,7 +2598,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" }, "funding": [ { @@ -2605,7 +2610,7 @@ "type": "tidelift" } ], - "time": "2023-11-12T22:43:29+00:00" + "time": "2024-07-20T21:52:34+00:00" }, { "name": "voku/portable-ascii", @@ -2683,16 +2688,16 @@ }, { "name": "webman/console", - "version": "v1.3.8", + "version": "v1.3.11", "source": { "type": "git", "url": "https://github.com/webman-php/console.git", - "reference": "9e866344882601cbdefe76b44e6b61532c7fb98e" + "reference": "cf7812603114c97bfdeb7d8e3e6eabe567357d77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webman-php/console/zipball/9e866344882601cbdefe76b44e6b61532c7fb98e", - "reference": "9e866344882601cbdefe76b44e6b61532c7fb98e", + "url": "https://api.github.com/repos/webman-php/console/zipball/cf7812603114c97bfdeb7d8e3e6eabe567357d77", + "reference": "cf7812603114c97bfdeb7d8e3e6eabe567357d77", "shasum": "" }, "require": { @@ -2732,25 +2737,24 @@ "source": "https://github.com/webman-php/console", "wiki": "http://www.workerman.net/doc/webman" }, - "time": "2024-05-08T03:31:43+00:00" + "time": "2024-09-24T06:37:05+00:00" }, { "name": "webman/think-orm", - "version": "v1.1.1", + "version": "v1.1.5", "source": { "type": "git", "url": "https://github.com/webman-php/think-orm.git", - "reference": "9f1e525c5c4b5a2e1eee6a4f82ef5d23c69139a2" + "reference": "dcea332f96ccf419ffd117cc33515602ada9893d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webman-php/think-orm/zipball/9f1e525c5c4b5a2e1eee6a4f82ef5d23c69139a2", - "reference": "9f1e525c5c4b5a2e1eee6a4f82ef5d23c69139a2", + "url": "https://api.github.com/repos/webman-php/think-orm/zipball/dcea332f96ccf419ffd117cc33515602ada9893d", + "reference": "dcea332f96ccf419ffd117cc33515602ada9893d", "shasum": "" }, "require": { - "topthink/think-orm": "^2.0.53 || ^3.0.0", - "workerman/webman-framework": "^1.2.1" + "topthink/think-orm": "^2.0.53 || ^3.0.0" }, "type": "library", "autoload": { @@ -2764,9 +2768,9 @@ ], "support": { "issues": "https://github.com/webman-php/think-orm/issues", - "source": "https://github.com/webman-php/think-orm/tree/v1.1.1" + "source": "https://github.com/webman-php/think-orm/tree/v1.1.5" }, - "time": "2023-04-23T14:40:18+00:00" + "time": "2024-10-09T14:06:58+00:00" }, { "name": "workerman/crontab", @@ -2819,17 +2823,83 @@ "time": "2022-10-17T01:59:19+00:00" }, { - "name": "workerman/webman-framework", - "version": "v1.5.18", + "name": "workerman/validation", + "version": "1.1.31", "source": { "type": "git", - "url": "https://github.com/walkor/webman-framework.git", - "reference": "91e9a51087808897bac6157a50851f12adc94a9c" + "url": "https://github.com/walkor/validation.git", + "reference": "45d109fc830644fecc1145200d6351ce4f2769d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/walkor/webman-framework/zipball/91e9a51087808897bac6157a50851f12adc94a9c", - "reference": "91e9a51087808897bac6157a50851f12adc94a9c", + "url": "https://api.github.com/repos/walkor/validation/zipball/45d109fc830644fecc1145200d6351ce4f2769d0", + "reference": "45d109fc830644fecc1145200d6351ce4f2769d0", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "symfony/polyfill-mbstring": "^1.2" + }, + "require-dev": { + "egulias/email-validator": "~1.2 || ~2.1", + "mikey179/vfsstream": "^1.5", + "phpunit/phpunit": "~4.0 || ~5.0", + "symfony/validator": "~2.6.9", + "zendframework/zend-validator": "~2.3" + }, + "suggest": { + "egulias/email-validator": "Strict (RFC compliant) email validation", + "ext-bcmath": "Arbitrary Precision Mathematics", + "ext-mbstring": "Multibyte String Functions", + "friendsofphp/php-cs-fixer": "Fix PSR2 and other coding style issues", + "symfony/validator": "Use Symfony validator through Respect\\Validation", + "zendframework/zend-validator": "Use Zend Framework validator through Respect\\Validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Respect\\Validation\\": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Respect/Validation Contributors", + "homepage": "https://github.com/Respect/Validation/graphs/contributors" + } + ], + "description": "The most awesome validation engine ever created for PHP", + "homepage": "http://respect.github.io/Validation/", + "keywords": [ + "respect", + "validation", + "validator" + ], + "support": { + "source": "https://github.com/walkor/validation/tree/1.1.31" + }, + "time": "2019-05-28T06:10:06+00:00" + }, + { + "name": "workerman/webman-framework", + "version": "v1.5.24", + "source": { + "type": "git", + "url": "https://github.com/walkor/webman-framework.git", + "reference": "be1a0425e3fcbd9e8ffaec94e35ed5452480356f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/walkor/webman-framework/zipball/be1a0425e3fcbd9e8ffaec94e35ed5452480356f", + "reference": "be1a0425e3fcbd9e8ffaec94e35ed5452480356f", "shasum": "" }, "require": { @@ -2878,20 +2948,20 @@ "source": "https://github.com/walkor/webman-framework", "wiki": "https://doc.workerman.net/" }, - "time": "2024-05-26T01:53:43+00:00" + "time": "2024-09-15T13:03:20+00:00" }, { "name": "workerman/workerman", - "version": "v4.1.15", + "version": "v4.1.16", "source": { "type": "git", "url": "https://github.com/walkor/workerman.git", - "reference": "afc8242fc769ab7cf22eb4ac22b97cb59d465e4e" + "reference": "405d904d33026e19497dffc3d085bbc16e66534e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/walkor/workerman/zipball/afc8242fc769ab7cf22eb4ac22b97cb59d465e4e", - "reference": "afc8242fc769ab7cf22eb4ac22b97cb59d465e4e", + "url": "https://api.github.com/repos/walkor/workerman/zipball/405d904d33026e19497dffc3d085bbc16e66534e", + "reference": "405d904d33026e19497dffc3d085bbc16e66534e", "shasum": "" }, "require": { @@ -2941,7 +3011,7 @@ "type": "patreon" } ], - "time": "2024-02-19T02:10:39+00:00" + "time": "2024-07-04T08:26:39+00:00" } ], "packages-dev": [], diff --git a/service/config/middleware.php b/service/config/middleware.php index 78b287e0..8e04f87d 100644 --- a/service/config/middleware.php +++ b/service/config/middleware.php @@ -16,6 +16,9 @@ return [ 'user' => [ app\middleware\auth::class, ], + 'api' => [ + app\middleware\wechatAuth::class, + ], 'admin' => [ app\middleware\adminAuth::class, ]