瀏覽代碼

wesmiler 报恩寺项目提交

wesmiler 4 年之前
父節點
當前提交
5869ad8e32

+ 26 - 0
app/Http/Controllers/Api/v1/MemberController.php

@@ -4,7 +4,10 @@ namespace App\Http\Controllers\Api\v1;
 
 use App\Http\Controllers\Api\BaseController;
 use App\Http\Validator\MemberValidator;
+use App\Http\Validator\YigongValidator;
 use App\Services\MemberService;
+use App\Services\YigongService;
+use Illuminate\Http\Request;
 
 /**
  * 会员控制器类
@@ -26,6 +29,7 @@ class MemberController extends BaseController
         parent::__construct();
 
         $this->service = new MemberService();
+        $this->yigongService = new YigongService();
     }
 
     /**
@@ -92,6 +96,28 @@ class MemberController extends BaseController
     }
 
     /**
+     * 义工申请信息
+     * @return mixed
+     */
+    public function yigong(){
+        return $this->yigongService->info($this->userId);
+    }
+
+    /**
+     * 申请成为义工
+     * @param Request $request
+     * @param YigongValidator $validate
+     * @return array
+     */
+    public function yigongApply(Request $request, YigongValidator $validate){
+        $params = $validate->check($request->all(),'books');
+        if(!is_array($params)){
+            return message($params, false);
+        }
+        return $this->yigongService->apply($this->userId);
+    }
+
+    /**
      * 注销账号
      */
     public function logout(){

+ 8 - 0
app/Http/Controllers/Api/v1/SiyuanController.php

@@ -35,4 +35,12 @@ class SiyuanController extends BaseController
         $this->service->updateVisit($this->userId);
         return parent::info();
     }
+
+    /**
+     * 寺院选项
+     * @return mixed
+     */
+    public function options(){
+        return $this->service->getOptions();
+    }
 }

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

@@ -0,0 +1,49 @@
+<?php
+namespace App\Http\Validator;
+class YigongValidator extends BaseValidator
+{
+    // 当前模型所有验证规则
+    public static $rules = [
+        'id' => 'required',
+        'siyuan_id' => 'required|string|min:1|max:10',
+        'realname' => 'required|string|min:2|max:20',
+        'phone' => 'required|string|min:8|max:20',
+        'idcard' => 'required|string|min:12|max:20',
+    ];
+
+    // 当前模型所有错误提示信息
+    public static $msgs = [
+        'required' => ':attribute不能为空',
+        'string' => ':attribute必须是字符串',
+        'min' => ':attribute长度不能小于:min位',
+        'max' => ':attribute长度不能大于:max位',
+        'exists' => ':attribute不存在',
+        'rule' => ':attribute格式不正确',
+    ];
+
+    // 当前模型所有验证字段
+    public static $fields = [
+        'id' => 'ID',
+        'siyuan_id' => '寺院',
+        'realname' => '真实姓名',
+        'phone' => '手机号',
+        'idcard' => '身份证号',
+    ];
+
+    // 当前模型所有验证场景
+    public static $scenes = [
+        'info'=> ['id'],
+        'apply'=> ['siyuan_id','realname','phone','idcard'],
+    ];
+
+    /**
+     * 验证
+     * @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);
+    }
+}

+ 2 - 2
app/Services/BaseService.php

@@ -157,10 +157,10 @@ class BaseService
      * @since 2020/11/11
      * @author wesmiler
      */
-    public function info()
+    public function info($id=0)
     {
         // 记录ID
-        $id = request()->input("id", 0);
+        $id = $id? $id : request()->input("id", 0);
         $info = [];
         if ($id) {
             $info = $this->model->getInfo($id);

+ 12 - 0
app/Services/SiyuanService.php

@@ -48,6 +48,18 @@ class SiyuanService extends BaseService
     }
 
     /**
+     * 获取分类选项列表
+     * @param int $num
+     * @return array
+     */
+    public function getOptions(){
+        $params = request()->all();
+        $num = isset($params['num'])? $params['num'] : 0;
+        $datas = $this->model->where(['status'=> 1])->select(['id','title','status'])->orderBy('sort','desc')->limit($num? $num : 999999)->get();
+        return message(MESSAGE_OK, true, $datas);
+    }
+
+    /**
      * 获取列表
      * @return array
      * @since 2020/11/11

+ 68 - 13
app/Services/YigongService.php

@@ -11,6 +11,8 @@
 
 namespace App\Services;
 
+use App\Models\MemberModel;
+use App\Models\SiyuanModel;
 use App\Models\YigongModel;
 
 /**
@@ -69,7 +71,7 @@ class YigongService extends BaseService
                 }
 
             })
-            ->select(['y.id', 'y.siyuan_id','y.user_id','s.title as siyuan', 'm.nickname', 'y.realname', 'y.on_siyuan', 'm.avatar', 'y.status', 'y.create_time', 'y.update_time', 'y.description', 'y.sort'])
+            ->select(['y.id', 'y.siyuan_id','y.user_id','s.title as siyuan', 'm.nickname', 'y.realname', 'y.on_siyuan', 'm.avatar', 'y.status', 'y.create_time', 'y.update_time','y.reason', 'y.description', 'y.sort'])
             ->orderBy('y.update_time', 'desc')
             ->paginate($pageSize);
 
@@ -101,21 +103,74 @@ class YigongService extends BaseService
     {
         $data = request()->all();
 
-        // 图片处理
-        $image = trim($data['thumb']);
-        $id = isset($data['id']) ? $data['id'] : 0;
-        if (!$id && !$image) {
-            return message('请上传文章图片', false);
-        }
-        if (strpos($image, "temp")) {
-            $data['thumb'] = save_image($image, 'item');
-        } else {
-            $data['thumb'] = str_replace(IMG_URL, "", $data['thumb']);
-        }
-
         $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 $userId
+     * @return array
+     */
+    public function apply($userId){
+        $params = request()->all();
+        $siyuanId = isset($params['siyuan_id'])? $params['siyuan_id'] : 0;
+        $siyuanInfo = SiyuanModel::where(['id'=> $siyuanId,'mark'=> 1,'status'=> 1])
+            ->select(['id','title','status'])
+            ->first();
+        if(!$siyuanInfo){
+            return message('所选寺院不存在', false);
+        }
+
+        // 验证账户
+        $memberInfo = MemberModel::where(['id'=> $userId,'mark'=> 1,'status'=> 1])
+            ->select(['id','nickname','status'])
+            ->first();
+        if(!$memberInfo){
+            return message('当前账号无权操作或已冻结,请联系客服', false);
+        }
+
+        // 验证是否已申请
+        $info = $this->model::where(['user_id'=> $userId,'siyuan_id'=> $siyuanId])
+            ->select(['id','user_id','mark','status'])
+            ->first();
+        if($info && $info->mark==1 && $info->status == 1){
+            return message('您已提交申请,请耐心等候审核', false);
+        }else if($info && $info->mark==1 && $info->status == 2){
+            return message('您的申请已通过,请不要重复提交', false);
+        }
+
+        if($info){
+            $info->realname = isset($params['realname'])? trim($params['realname']) : '';
+            $info->phone = isset($params['phone'])? trim($params['phone']) : '';
+            $info->idcard = isset($params['idcard'])? trim($params['idcard']) : '';
+            $info->description = isset($params['description'])? trim($params['description']) : '';
+            $info->reason = '';
+            $info->create_time = time();
+            $info->mark = 1;
+            $info->status = 1;
+
+            if($info->save()){
+                return message('您的申请已重新提交,请耐心等候审核', true);
+            }
+        }else{
+            $data = [
+                'siyuan_id'=> $siyuanId,
+                'user_id'=> $userId,
+                'realname'=> isset($params['realname'])? trim($params['realname']) : '',
+                'phone'=> isset($params['phone'])? trim($params['phone']) : '',
+                'idcard'=> isset($params['idcard'])? trim($params['idcard']) : '',
+                'description'=> isset($params['description'])? trim($params['description']) : '',
+                'create_time'=> time(),
+                'status'=> 1,
+            ];
+            if($this->model::insertGetId($data)){
+                return message('您的申请已提交,请耐心等候审核', true);
+            }
+        }
+
+        return message('操作失败,请刷新页面后重试', false);
+    }
+
 }

+ 3 - 0
routes/api.php

@@ -52,6 +52,8 @@ Route::post('/member/sign', [\App\Http\Controllers\Api\v1\MemberController::clas
 Route::post('/member/follow', [\App\Http\Controllers\Api\v1\MemberController::class, 'follow']);
 Route::post('/member/followList', [\App\Http\Controllers\Api\v1\MemberController::class, 'followList']);
 Route::post('/member/gdList', [\App\Http\Controllers\Api\v1\MemberController::class, 'gdList']);
+Route::post('/member/siyuan', [\App\Http\Controllers\Api\v1\MemberController::class, 'siyuan']);
+Route::post('/member/siyuanApply', [\App\Http\Controllers\Api\v1\MemberController::class, 'siyuanApply']);
 Route::post('/member/activity', [\App\Http\Controllers\Api\v1\ActivityController::class, 'bookList']);
 Route::post('/member/logout', [\App\Http\Controllers\Api\v1\MemberController::class, 'logout']);
 
@@ -62,6 +64,7 @@ Route::post('/collect/add', [\App\Http\Controllers\Api\v1\CollectController::cla
 
 // 寺院
 Route::post('/siyuan/list', [\App\Http\Controllers\Api\v1\SiyuanController::class, 'index']);
+Route::post('/siyuan/options', [\App\Http\Controllers\Api\v1\SiyuanController::class, 'options']);
 Route::post('/siyuan/info', [\App\Http\Controllers\Api\v1\SiyuanController::class, 'info']);