Bläddra i källkod

wesmiler 报恩寺项目提交

wesmiler 4 år sedan
förälder
incheckning
9fa69f433c

+ 66 - 0
app/Http/Controllers/Api/v1/AddressController.php

@@ -0,0 +1,66 @@
+<?php
+
+namespace App\Http\Controllers\Api\v1;
+
+use App\Http\Controllers\Api\BaseController;
+use App\Http\Validator\AddressValidator;
+use App\Services\AddressService;
+use Illuminate\Http\Request;
+
+/**
+ * 收货地址控制器类
+ * @author wesmiler
+ * @since 2020/11/10
+ * Class AddressController
+ * @package App\Http\Controllers
+ */
+class AddressController extends BaseController
+{
+    /**
+     * 构造函数
+     * @author wesmiler
+     * @since 2020/11/11
+     * AddressController constructor.
+     */
+    public function __construct()
+    {
+        parent::__construct();
+
+        $this->service = new AddressService();
+    }
+
+    /**
+     * 列表
+     * @return array
+     */
+    public function index(){
+        $params = request()->all();
+        $params['user_id'] = $this->userId;
+        return $this->service->getDataList($params);
+    }
+
+    /**
+     * 默认地址
+     * @return array
+     */
+    public function getDefault(){
+
+        $info = $this->service->getDefault($this->userId);
+        return message(1005, true, $info);
+    }
+
+    /**
+     * 保存数据
+     * @param Request $request
+     * @param AddressValidator $validator
+     * @return array
+     */
+    public function save(Request $request, AddressValidator $validator){
+        $params = $validator->check($request->all(),'save');
+        if(!is_array($params)){
+            return message($params, false);
+        }
+        $params['user_id'] = $this->userId;
+        return $this->service->save($params);
+    }
+}

+ 34 - 0
app/Http/Controllers/Api/v1/ArticleController.php

@@ -6,6 +6,7 @@ use App\Http\Controllers\Api\BaseController;
 use App\Http\Validator\ArticleValidator;
 use App\Services\ArticleBooksService;
 use App\Services\ArticleService;
+use App\Services\ConfigService;
 use Illuminate\Http\Request;
 
 /**
@@ -41,6 +42,15 @@ class ArticleController extends BaseController
     }
 
     /**
+     * 详情
+     * @return array|mixed
+     */
+    public function info(){
+        $this->service->updateVisit($this->userId);
+        return $this->service->info();
+    }
+
+    /**
      * 报名
      * @param Request $request
      * @param ArticleValidator $validate
@@ -54,4 +64,28 @@ class ArticleController extends BaseController
         $params['user_id'] = $this->userId;
         return $this->bookService->books($params);
     }
+
+    /**
+     * 单页文章内容
+     * @return array
+     */
+    public function page(){
+        $code = request()->get('code', '');
+        if(empty($code)){
+            return message('参数错误', false);
+        }
+
+        $pageId = ConfigService::make()->getConfigByCode($code);
+        if($pageId<=0){
+            return message(1006, false);
+        }
+
+        $info = ArticleService::make()->getDetail($pageId);
+        if($info){
+            return message(1005, true, $info);
+        }else{
+            return message(1006, false);
+        }
+
+    }
 }

+ 49 - 0
app/Http/Validator/AddressValidator.php

@@ -0,0 +1,49 @@
+<?php
+namespace App\Http\Validator;
+class AddressValidator extends BaseValidator
+{
+    // 当前模型所有验证规则
+    public static $rules = [
+        'id' => 'required',
+        'realname' => 'required|string|min:1|max:20',
+        'mobile' => 'required|string|min:2|max:20',
+        'cityCodes' => 'required',
+        'address' => 'required|string|min:2|max:150',
+    ];
+
+    // 当前模型所有错误提示信息
+    public static $msgs = [
+        'required' => ':attribute不能为空',
+        'string' => ':attribute必须是字符串',
+        'min' => ':attribute长度不能小于:min位',
+        'max' => ':attribute长度不能大于:max位',
+        'exists' => ':attribute不存在',
+        'rule' => ':attribute格式不正确',
+    ];
+
+    // 当前模型所有验证字段
+    public static $fields = [
+        'id' => 'ID',
+        'realname' => '姓名',
+        'mobile' => '联系电话',
+        'cityCodes' => '省市',
+        'address' => '详细地址',
+    ];
+
+    // 当前模型所有验证场景
+    public static $scenes = [
+        'info'=> ['id'],
+        'save'=> ['id','realname','mobile','address'],
+    ];
+
+    /**
+     * 验证
+     * @param $request
+     * @param string $scene
+     * @return int|mixed
+     */
+    public static function check($request, $scene=''){
+        $validator = new BaseValidator(self::$rules, self::$msgs, self::$fields, self::$scenes);
+        return $validator->checkParams($request, $scene);
+    }
+}

+ 39 - 0
app/Models/AddressModel.php

@@ -0,0 +1,39 @@
+<?php
+// +----------------------------------------------------------------------
+// | Laravel框架 [ Laravel ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 Laravel研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: wesmiler <12345678@qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Models;
+
+/**
+ * 收货地址管理-模型
+ * @author wesmiler
+ * @since 2020/11/11
+ * Class AddressModel
+ * @package App\Models
+ */
+class AddressModel extends BaseModel
+{
+    // 设置数据表
+    protected $table = 'member_address';
+
+    /**
+     * 获取记录信息
+     * @param int $id 记录ID
+     * @return array|string
+     * @author wesmiler
+     * @since 2020/11/11
+     */
+    public function getInfo($id)
+    {
+        $info = parent::getInfo($id); // TODO: Change the autogenerated stub
+        return $info;
+    }
+
+}

+ 167 - 0
app/Services/AddressService.php

@@ -0,0 +1,167 @@
+<?php
+// +----------------------------------------------------------------------
+// | Laravel框架 [ Laravel ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 Laravel研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: wesmiler <12345678@qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Services;
+
+use App\Models\AddressModel;
+
+/**
+ * 收货地址管理-服务类
+ * @author wesmiler
+ * @since 2020/11/11
+ * Class AddressService
+ * @package App\Services
+ */
+class AddressService extends BaseService
+{
+    protected static $instance = null;
+    /**
+     * 构造函数
+     * @author wesmiler
+     * @since 2020/11/11
+     * AddressService constructor.
+     */
+    public function __construct()
+    {
+        $this->model = new AddressModel();
+    }
+
+    /**
+     * 静态入口
+     * @return ArticleService|null
+     */
+    public static function make(){
+        if(!self::$instance){
+            self::$instance = new ArticleService();
+        }
+
+        return self::$instance;
+    }
+
+    /**
+     * 获取列表
+     * @return array
+     * @since 2020/11/11
+     * @author wesmiler
+     */
+    public function getDataList($params)
+    {
+
+        $page = isset($params['pageSize']) ? intval($params['pageSize']) : PAGE;
+        $pageSize = isset($params['pageSize']) ? intval($params['pageSize']) : PERPAGE;
+
+        $dataList = $this->model::from('member_address as a')
+            ->leftJoin('city as c1', 'c1.citycode', '=', 'a.province_id')
+            ->leftJoin('city as c2', 'c2.citycode', '=', 'a.city_id')
+            ->leftJoin('city as c3', 'c3.citycode', '=', 'a.district_id')
+            ->where(function ($query) use ($params) {
+                $query->where(['a.mark'=> 1,'a.status'=> 1]);
+
+                $userId = isset($params['user_id']) ? $params['user_id'] : 0;
+                if ($userId > 0) {
+                    $query->where('a.user_id', $userId);
+                }
+
+            })
+            ->select(['a.id', 'a.user_id', 'c1.name as province_name','c2.name as city_name','c3.name as district_name', 'a.realname', 'a.mobile', 'a.is_default', 'a.status', 'a.create_time', 'a.update_time', 'a.address'])
+            ->orderBy('a.is_default', 'asc')
+            ->orderBy('a.create_time', 'desc')
+            ->paginate($pageSize);
+
+        $dataList = $dataList ? $dataList->toArray() : [];
+        if ($dataList) {
+            foreach ($dataList['data'] as &$item) {
+                $item['create_time'] = $item['create_time'] ? datetime($item['create_time'],'Y-m-d H:i:s') : '';
+                $item['address_text'] = $item['province_name'].$item['city_name'].$item['district_name'];
+            }
+            unset($item);
+        }
+
+        return [
+            'code' => 0,
+            'success'=> true,
+            'msg' => '操作成功',
+            'count' => isset($dataList['total']) ? $dataList['total'] : 0,
+            'data' => isset($dataList['data']) ? $dataList['data'] : 0,
+        ];
+    }
+
+    /**
+     * 添加或编辑
+     * @return array
+     * @since 2020/11/11
+     * @author wesmiler
+     */
+    public function edit()
+    {
+        $data = request()->all();
+
+
+        $data['update_time'] = time();
+        $data['publish_at'] = isset($data['publish_at']) && $data['publish_at']? $data['publish_at'] : date('Y-m-d H:i:s');
+        return parent::edit($data); // TODO: Change the autogenerated stub
+    }
+
+    /**
+     * 保存添加数据
+     * @param $params
+     * @return array
+     */
+    public function save($params){
+        $cityCodes = isset($params['cityCodes'])? $params['cityCodes'] : [];
+        $cityCodes = $cityCodes? array_filter($cityCodes) : [];
+        if(empty($cityCodes)){
+            return message('请选择省市', false);
+        }
+
+
+        $data = [
+            'user_id' => isset($params['user_id'])? $params['user_id'] : 0,
+            'realname' => isset($params['realname'])? $params['realname'] : '',
+            'mobile' => isset($params['mobile'])? $params['mobile'] : '',
+            'province_id' => isset($cityCodes[0])? $cityCodes[0] : '',
+            'city_id' => isset($cityCodes[1])? $cityCodes[1] : '',
+            'district_id' => isset($cityCodes[2])? $cityCodes[2] : '',
+            'address' => isset($params['address'])? trim($params['address']) : '',
+            'is_default'=>isset($params['is_default'])? intval($params['is_default']) : 2,
+            'create_time'=> time()
+        ];
+
+        $data['update_time'] = time();
+        return parent::edit($data); // TODO: Change the autogenerated stub
+    }
+
+    /**
+     * 获取默认地址
+     * @param $userId
+     * @return array
+     */
+    public function getDefault($userId){
+        $info = $this->model::from('member_address as a')
+            ->leftJoin('city as c1', 'c1.citycode', '=', 'a.province_id')
+            ->leftJoin('city as c2', 'c2.citycode', '=', 'a.city_id')
+            ->leftJoin('city as c3', 'c3.citycode', '=', 'a.district_id')
+            ->where(['a.user_id'=> $userId,'a.maek'=> 1,'a.status'=> 1])
+            ->select(['a.id', 'a.user_id', 'c1.name as province_name','c2.name as city_name','c3.name as district_name', 'a.realname', 'a.mobile', 'a.is_default', 'a.status', 'a.create_time', 'a.update_time', 'a.address'])
+            ->orderBy('a.is_default', 'asc')
+            ->orderBy('a.create_time', 'desc')
+            ->first();
+        $info = $info? $info->toArray() : [];
+        if($info){
+            $info['create_time'] = $info['create_time'] ? datetime($info['create_time'],'Y-m-d H:i:s') : '';
+            $info['address_text'] = $info['province_name'].$info['city_name'].$info['district_name'];
+
+        }
+
+        return $info;
+    }
+
+}

+ 28 - 0
app/Services/ArticleService.php

@@ -22,6 +22,7 @@ use App\Models\ArticleModel;
  */
 class ArticleService extends BaseService
 {
+    protected static $instance = null;
     /**
      * 构造函数
      * @author wesmiler
@@ -34,6 +35,18 @@ class ArticleService extends BaseService
     }
 
     /**
+     * 静态入口
+     * @return ArticleService|null
+     */
+    public static function make(){
+        if(!self::$instance){
+            self::$instance = new ArticleService();
+        }
+
+        return self::$instance;
+    }
+
+    /**
      * 获取列表
      * @return array
      * @since 2020/11/11
@@ -104,6 +117,20 @@ class ArticleService extends BaseService
     }
 
     /**
+     * 访问量
+     * @return mixed
+     */
+    public function updateVisit($userId=0){
+        $id = request()->get('id');
+        $cacheKey = "caches:article:visit:{$userId}_{$id}";
+        $check = RedisService::get($cacheKey);
+        if($id && !$check){
+            RedisService::set($cacheKey, $id, 3600);
+            return $this->model::where(['id'=> $id])->increment('view_num', 1);
+        }
+    }
+
+    /**
      * 获取列表
      * @return array
      * @since 2020/11/11
@@ -181,6 +208,7 @@ class ArticleService extends BaseService
             $info['publish_at'] = $info['publish_at']? $info['publish_at'] : datetime( $info['create_time'],'Y-m-d H:i:s');
 
         }
+        return $info;
     }
 
     /**

+ 1 - 0
app/Services/BaseService.php

@@ -168,6 +168,7 @@ class BaseService
         return message(MESSAGE_OK, true, $info);
     }
 
+
     /**
      * 添加或编辑记录
      * @return array

+ 7 - 1
routes/api.php

@@ -90,4 +90,10 @@ Route::post('/article/books', [\App\Http\Controllers\Api\v1\ArticleController::c
 // 工作招聘
 Route::post('/work/list', [\App\Http\Controllers\Api\v1\ArticleController::class, 'index']);
 Route::post('/work/info', [\App\Http\Controllers\Api\v1\ArticleController::class, 'info']);
-Route::post('/work/books', [\App\Http\Controllers\Api\v1\ArticleController::class, 'books']);
+Route::post('/work/books', [\App\Http\Controllers\Api\v1\ArticleController::class, 'books']);
+
+// 收货地址
+Route::post('/address/list', [\App\Http\Controllers\Api\v1\AddressController::class, 'index']);
+Route::post('/address/info', [\App\Http\Controllers\Api\v1\AddressController::class, 'info']);
+Route::post('/address/save', [\App\Http\Controllers\Api\v1\AddressController::class, 'save']);
+Route::post('/address/default', [\App\Http\Controllers\Api\v1\AddressController::class, 'getDefault']);