Parcourir la source

Merge branch 'master' of http://git.derkj.com:9095/waibao/NN2025112501

# Conflicts:
#	app/Services/Common/StoreService.php
罗永浩 il y a 3 mois
Parent
commit
ad51c34187

+ 18 - 0
app/Http/Controllers/Api/v1/IndexController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api\v1;
 
 use App\Http\Controllers\Api\webApp;
 use App\Services\Api\SocialCircleService;
+use App\Services\Api\StoreService;
 use App\Services\Common\AdService;
 use App\Services\Common\NoticeService;
 use App\Services\ConfigService;
@@ -82,6 +83,23 @@ class IndexController extends webApp
     }
 
     /**
+     * 主页店铺商品
+     * @return array
+     */
+    public function storeGoods()
+    {
+        $params =request()->post();
+        try {
+            $params['user_id'] = $this->userId;
+            $datas = StoreService::make()->getGoodsList($params);
+            return showJson(StoreService::make()->getError(), true, $datas);
+        }catch (\Exception $exception) {
+            $error = ['data' => $exception->getTrace(), 'err' => $exception->getMessage()];
+            return showJson(1046, false, $error);
+        }
+    }
+
+    /**
      * 验证更新
      * @return array
      */

+ 78 - 0
app/Http/Controllers/Api/v1/JobsController.php

@@ -0,0 +1,78 @@
+<?php
+
+namespace App\Http\Controllers\Api\v1;
+
+use App\Http\Controllers\Api\webApp;
+use App\Services\Api\JobsService;
+
+/**
+ * 招聘信息
+ * @package App\Http\Controllers\Api
+ */
+class JobsController extends webApp
+{
+
+    /**
+     * 列表
+     * @return array
+     */
+    public function index()
+    {
+        $params =request()->post();
+        $pageSize = request()->post('pageSize', 15);
+        $datas = JobsService::make()->getDataList($params, $pageSize);
+        return showJson(1010, true, $datas);
+    }
+
+
+    /**
+     * 分类
+     * @return array
+     */
+    public function categorys()
+    {
+        $datas = JobsService::make()->getCategoryList();
+        return showJson(1010, true, $datas);
+    }
+
+    /**
+     * 详情
+     * @return array
+     */
+    public function info()
+    {
+        $params = request()->all();
+        $id = isset($params['id'])? $params['id'] : 0;
+        try {
+            if(!$result = JobsService::make()->getInfo($id, $this->userId)){
+                return showJson(1009, false);
+            }else{
+                return showJson(1010, true, $result);
+            }
+        } catch (\Exception $exception) {
+            $error = ['data' => $exception->getTrace(), 'err' => $exception->getMessage()];
+            return showJson(1046, false, $error);
+        }
+    }
+
+    /**
+     * 申请
+     * @return array
+     */
+    public function apply()
+    {
+        $params = request()->all();
+
+       try {
+           if(!$result = JobsService::make()->apply($this->userId, $params)){
+               return showJson(JobsService::make()->getError(), false);
+           }else{
+               return showJson(JobsService::make()->getError(), true, $result);
+           }
+       } catch (\Exception $exception) {
+           $error = ['data' => $exception->getTrace(), 'err' => $exception->getMessage()];
+           return showJson(1046, false, $error);
+       }
+    }
+
+}

+ 0 - 16
app/Http/Controllers/Api/v1/StoreController.php

@@ -25,22 +25,6 @@ class StoreController extends webApp
         return showJson(1010, true, $datas);
     }
 
-    /**
-     * 主页店铺商品
-     * @return array
-     */
-    public function goods()
-    {
-        $params =request()->post();
-        $pageSize = request()->post('pageSize', 15);
-        try {
-            $datas = StoreService::make()->getGoodsList($params, $pageSize);
-            return showJson(1010, true, $datas);
-        }catch (\Exception $exception) {
-            $error = ['data' => $exception->getTrace(), 'err' => $exception->getMessage()];
-            return showJson(1046, false, $error);
-        }
-    }
 
     /**
      * 行业分类

+ 1 - 1
app/Http/Middleware/WebLogin.php

@@ -26,7 +26,7 @@ class WebLogin extends Middleware
         $action = app('request')->route()->getAction();
         $controller = class_basename($action['controller']);
         list($controller, $action) = explode('@', $controller);
-        $noLoginActs = ['LoginController','UploadController'];
+        $noLoginActs = ['LoginController','UploadController','IndexController'];
         $token = $request->headers->get('Authorization');
         if (strpos($token, 'Bearer ') !== false) {
             $token = str_replace("Bearer ", null, $token);

+ 8 - 0
app/Models/JobsModel.php

@@ -17,5 +17,13 @@ class JobsModel extends BaseModel
     {
         return $this->belongsTo(JobsCategoryModel::class, 'category_id', 'id');
     }
+
+    /**
+     * 商家店铺
+     */
+    public function store()
+    {
+        return $this->hasOne(StoreModel::class, 'id', 'store_id');
+    }
 }
 

+ 1 - 1
app/Models/StoreModel.php

@@ -59,7 +59,7 @@ class StoreModel extends BaseModel
     public function member()
     {
         return $this->hasOne(MemberModel::class, 'id', 'user_id')
-            ->select(['id', 'realname', 'nickname', 'mobile', 'status']);
+            ->select(['id', 'realname', 'nickname', 'mobile','parents', 'status']);
     }
 
     /**

+ 0 - 1
app/Services/Api/AccountService.php

@@ -19,7 +19,6 @@ use App\Services\BaseService;
 use App\Services\PaymentService;
 use App\Services\RedisService;
 use Illuminate\Support\Facades\DB;
-use PhpOffice\PhpSpreadsheet\Calculation\Statistical\Distributions\F;
 
 /**
  * 交易管理-服务类

+ 1 - 1
app/Services/Api/AgentService.php

@@ -19,7 +19,7 @@ use App\Services\RedisService;
  * 代理管理-服务类
  * @author laravel开发员
  * @since 2020/11/11
- * @package App\Services\Common
+ * @package App\Services\Api
  */
 class AgentService extends BaseService
 {

+ 1 - 1
app/Services/Api/ComplaintService.php

@@ -20,7 +20,7 @@ use App\Services\RedisService;
  * @author laravel开发员
  * @since 2020/11/11
  * Class ComplaintService
- * @package App\Services\Common
+ * @package App\Services\Api
  */
 class ComplaintService extends BaseService
 {

+ 201 - 0
app/Services/Api/JobsService.php

@@ -0,0 +1,201 @@
+<?php
+// +----------------------------------------------------------------------
+// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 LARAVEL研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: laravel开发员 <laravel.qq.com>
+// +----------------------------------------------------------------------
+
+namespace App\Services\Api;
+
+use App\Models\JobsCategoryModel;
+use App\Models\JobsModel;
+use App\Services\BaseService;
+use App\Services\RedisService;
+use Illuminate\Support\Facades\DB;
+
+/**
+ * 招聘管理-服务类
+ * @author laravel开发员
+ * @since 2020/11/11
+ * @package App\Services\Api
+ */
+class JobsService extends BaseService
+{
+    /**
+     * 构造函数
+     * @author laravel开发员
+     * @since 2020/11/11
+     */
+    public function __construct()
+    {
+        $this->model = new JobsModel();
+    }
+
+    /**
+     * 静态入口
+     * @return static|null
+     */
+    public static function make()
+    {
+        if (!self::$instance) {
+            self::$instance = (new static());
+        }
+        return self::$instance;
+    }
+
+    /**
+     * @param $params
+     * @param int $pageSize
+     * @return array
+     */
+    public function getDataList($params, $pageSize = 15)
+    {
+        $where = ['a.mark' => 1];
+        $status = isset($params['status']) ? $params['status'] : 0;
+        $categoryId = isset($params['category_id']) ? $params['category_id'] : 0;
+        if ($status > 0) {
+            $where['a.status'] = $status;
+        }
+
+        if ($categoryId > 0) {
+            $where['a.category_id'] = $categoryId;
+        }
+        $list = $this->model->with(['store','category'])->from('jobs as a')
+            ->leftJoin('jobs_categorys as b', 'b.id', '=', 'a.category_id')
+            ->where($where)
+            ->where(function ($query) use ($params) {
+                $keyword = isset($params['keyword']) ? $params['keyword'] : '';
+                if ($keyword) {
+                    $query->where('a.job_name', 'like', "%{$keyword}%")
+                    ->orWhere('a.job_title','like',"%{$keyword}%")
+                    ->orWhere('a.tags','like',"%{$keyword}%")
+                    ->orWhere('a.company','like',"%{$keyword}%");
+                }
+            })
+            ->select(['a.*'])
+            ->orderBy('a.create_time', 'desc')
+            ->paginate($pageSize > 0 ? $pageSize : 9999999);
+        $list = $list ? $list->toArray() : [];
+        if ($list) {
+            foreach ($list['data'] as &$item) {
+                $item['create_time'] = $item['create_time'] ? datetime($item['create_time'], 'Y-m-d H.i.s') : '';
+            }
+        }
+
+        return [
+            'pageSize' => $pageSize,
+            'total' => isset($list['total']) ? $list['total'] : 0,
+            'list' => isset($list['data']) ? $list['data'] : []
+        ];
+    }
+
+    /**
+     * 分类
+     * @return array|mixed
+     */
+    public function getCategoryList()
+    {
+        $cacheKey = "caches:jobs:categoryList";
+        $datas = RedisService::get($cacheKey);
+        if($datas){
+            return $datas;
+        }
+
+        $datas = JobsCategoryModel::where(['pid'=>0,'status'=>1,'mark'=>1])
+            ->select(['id','name','pid','remark','sort'])
+            ->orderBy('sort','desc')
+            ->orderBy('id','desc')
+            ->get();
+        $datas = $datas? $datas->toArray() : [];
+        if($datas){
+            RedisService::set($cacheKey, $datas, rand(300,600));
+        }
+
+        return $datas;
+    }
+
+
+    /**
+     * 申请
+     * @param $userId
+     * @param $params
+     * @return mixed
+     */
+    public function apply($userId, $params)
+    {
+        $name = isset($params['name']) ? trim($params['name']) : '';
+        $realname = isset($params['real_name']) ? trim($params['real_name']) : '';
+        $phone = isset($params['phone']) ? trim($params['phone']) : '';
+        $address = isset($params['address']) ? trim($params['address']) : '';
+        $categoryId = isset($params['category_id']) ? intval($params['category_id']) : 0;
+        $logo = isset($params['logo']) && $params['logo']? get_image_path($params['logo']) : '';
+        $businessLicense = isset($params['business_license']) && $params['business_license']? get_image_path($params['business_license']) : '';
+        $otherPhoto = isset($params['other_photo']) && $params['other_photo']? get_image_path($params['other_photo']) : '';
+
+        $data = [
+            'user_id' => $userId,
+            'name' => $name,
+            'real_name' => $realname,
+            'phone' => $phone,
+            'address' => $address,
+            'category_id' => $categoryId,
+            'logo' => $logo,
+            'business_license' => $businessLicense,
+            'other_photo' => $otherPhoto,
+            'order_count' => 0,
+            'order_total' => 0,
+            'confirm_remark' => '',
+            'create_time' => time(),
+            'update_time' => time(),
+            'status' => 2,
+            'mark' => 1,
+        ];
+
+        DB::beginTransaction();
+        if($id = $this->model->where(['user_id'=>$userId])->value('id')){
+            $this->model->where(['id'=>$id])->update($data);
+        }else{
+            if (!$id = $this->model->insertGetId($data)) {
+                DB::rollBack();
+                $this->error = '申请入驻失败';
+                return false;
+            }
+        }
+
+        DB::commit();
+        RedisService::keyDel("caches:members:info_*");
+        RedisService::keyDel("caches:stores:info*");
+        $this->error = '申请入驻成功,请耐心等候审核~';
+        return ['id' => $id];
+    }
+
+    /**
+     * 详情
+     * @param $id
+     * @param $userId
+     * @return array|mixed
+     */
+    public function getInfo($id,$userId=0)
+    {
+        $cacheKey = "caches:jobs:info_{$id}_{$userId}";
+        $info = RedisService::get($cacheKey);
+        if($info){
+            return $info;
+        }
+        $where = ['id'=> $id,'mark'=>1];
+        $info = $this->model->with(['store','category'])->where($where)->first();
+        $info = $info? $info->toArray() : [];
+        if($info){
+            $info['category_name'] = isset($info['category']) && $info['category']?$info['category']['name'] : '';
+            RedisService::set($cacheKey, $info, rand(5, 10));
+        }
+
+        return $info;
+    }
+
+
+}

+ 1 - 1
app/Services/Api/MemberAddressService.php

@@ -21,7 +21,7 @@ use Illuminate\Support\Facades\DB;
  * @author laravel开发员
  * @since 2020/11/11
  * Class MemberAddressService
- * @package App\Services\Common
+ * @package App\Services\Api
  */
 class MemberAddressService extends BaseService
 {

+ 1 - 1
app/Services/Api/SettleService.php

@@ -25,7 +25,7 @@ use Illuminate\Support\Facades\DB;
  * 结算管理-服务类
  * @author laravel开发员
  * @since 2020/11/11
- * @package App\Services\Common
+ * @package App\Services\Api
  */
 class SettleService extends BaseService
 {

+ 0 - 1
app/Services/Api/SocialCircleService.php

@@ -11,7 +11,6 @@
 
 namespace App\Services\Api;
 
-use App\Models\NoticeModel;
 use App\Models\SocialCircleModel;
 use App\Services\BaseService;
 use App\Services\ConfigService;

+ 103 - 56
app/Services/Api/StoreService.php

@@ -11,11 +11,11 @@
 
 namespace App\Services\Api;
 
+use App\Models\GoodsModel;
+use App\Models\MemberModel;
 use App\Models\StoreCategoryModel;
 use App\Models\StoreModel;
-use App\Models\UserModel;
 use App\Services\BaseService;
-use App\Services\Common\UserRoleService;
 use App\Services\RedisService;
 use Illuminate\Support\Facades\DB;
 
@@ -23,7 +23,7 @@ use Illuminate\Support\Facades\DB;
  * 商家管理-服务类
  * @author laravel开发员
  * @since 2020/11/11
- * @package App\Services\Common
+ * @package App\Services\Api
  */
 class StoreService extends BaseService
 {
@@ -93,77 +93,124 @@ class StoreService extends BaseService
      * @param int $pageSize
      * @return array
      */
-    public function getGoodsList($params, $pageSize = 15)
+    public function getGoodsList($params, $pageSize = 7)
     {
-        $page = request()->post('page',1);
-        $cacheKey = "caches:goods:index_{$page}_{$pageSize}:".md5(json_encode($params));
-        $list = RedisService::get($cacheKey);
-        if($list){
-            return [
-                'pageSize' => $pageSize,
-                'total' => isset($list['total']) ? $list['total'] : 0,
-                'list' => isset($list['data']) ? $list['data'] : []
-            ];
+        $userId = isset($params['user_id'])? $params['user_id'] : 0;
+        $cacheKey = "caches:stores:index_goods_{$userId}_{$pageSize}:".md5(json_encode($params));
+        $datas = RedisService::get($cacheKey);
+        if($datas){
+            return $datas;
         }
-        $where = ['a.mark' => 1];
-        $status = isset($params['status']) && $params['status']>0 ? $params['status'] : 1;
-        if ($status > 0) {
-            $where['a.status'] = $status;
+
+        $storeId = $this->getStoreId($userId);
+        if($storeId<=0){
+            $this->error = '没有店铺信息';
+            return false;
         }
-        $list = $this->model->with(['goods'=>function($query)use($params){
-            $categoryId = isset($params['category_id']) ? $params['category_id'] : 0;
-            if ($categoryId>0) {
-                $query->where('goods.category_id', $categoryId);
-            }
 
-            $keyword = isset($params['keyword']) ? $params['keyword'] : '';
-            if ($keyword) {
-                $query->where(function($query) use($keyword){
-                    $query->where('a.name', 'like', "%{$keyword}%")
-                        ->orWhere('goods.goods_name', 'like', "%{$keyword}%")
-                        ->orWhere('goods.tags', 'like', "%{$keyword}%");
-                });
-            }
-        }])->from('stores as a')
-            ->leftJoin('goods', function($join){
-                $join->on('goods.store_id', '=', 'a.id')->where(['goods.status'=>1,'goods.mark'=>1]);
-            })
-            ->where($where)
-            ->where('goods.id','>',0)
+        $storeInfo = $this->model->where(['id'=>$storeId,'status'=>1,'mark'=>1])
+            ->select(['id','user_id','name','logo'])
+            ->first();
+        if(empty($storeInfo)){
+            $this->error = '没有店铺信息';
+            return ['id'=>$storeId];
+        }
+
+        $list = GoodsModel::where(['store_id'=>$storeId,'status'=>1,'mark'=>1])
             ->where(function ($query) use ($params) {
                 $keyword = isset($params['keyword']) ? $params['keyword'] : '';
                 if ($keyword) {
-                    $query->where('a.name', 'like', "%{$keyword}%")
-                        ->orWhere('goods.goods_name', 'like', "%{$keyword}%")
-                        ->orWhere('goods.tags', 'like', "%{$keyword}%");
+                    $query->where('goods_name', 'like', "%{$keyword}%")
+                        ->orWhere('tags', 'like', "%{$keyword}%");
                 }
             })
             ->where(function ($query) use ($params) {
                 $categoryId = isset($params['category_id']) ? $params['category_id'] : 0;
                 if ($categoryId>0) {
-                    $query->where('goods.category_id', $categoryId);
+                    $query->where('category_id', $categoryId);
                 }
             })
-            ->select(['a.id','a.logo','a.name','a.user_id','a.status','a.sort','goods.id as goods_id'])
-            ->groupBy('a.id')
-            ->orderBy('a.sort', 'desc')
-            ->orderBy('a.id', 'desc')
-            ->paginate($pageSize > 0 ? $pageSize : 9999999);
+            ->select(['id','goods_name','thumb','price','sku_type','sales','sort','status'])
+            ->orderBy('sort', 'desc')
+            ->orderBy('id', 'desc')
+            ->limit($pageSize)
+            ->get();
         $list = $list ? $list->toArray() : [];
+        $datas = ['id'=>$storeId];
         if ($list) {
-            foreach ($list['data'] as &$item) {
-                $item['goods'] = isset($item['goods']) && $item['goods'] ? array_slice($item['goods'],0,6) : [];
-            }
+            $datas = [
+                'id'=>$storeId,
+                'store'=>$storeInfo,
+                'goods'=>$list
+            ];
+            RedisService::set($cacheKey, $datas, rand(10,20));
+        }
+
+        $this->error = '获取成功';
+        return $datas;
+    }
+
+    /**
+     * 获取显示商家ID
+     * @param $userId
+     * @return array|int|mixed
+     */
+    public function getStoreId($userId)
+    {
+        $cacheKey = "caches:storeId:id_{$userId}";
+        $data = RedisService::get($cacheKey);
+        if($data){
+            return $data;
         }
-        $total = isset($list['total']) ? $list['total'] : 0;
-        if($total){
-            RedisService::set($cacheKey, $list, rand(5,10));
+
+        // 用户信息
+        $userInfo = MemberModel::with(['store'])
+            ->where(['id'=>$userId,'mark'=>1])
+            ->select(['id', 'realname', 'nickname','parents', 'status'])
+            ->first();
+        $store = isset($userInfo['store'])? $userInfo['store'] : [];
+        $parents = isset($userInfo['parents'])? $userInfo['parents'] : '';
+        var_dump($parents);
+        $ids = $parents? explode(',', $parents) : [];
+        $ids = array_filter($ids);
+        $ids = array_reverse($ids);
+        $storeId = isset($store['id'])? $store['id'] : 0;
+        $storeStatus = isset($store['status'])? $store['status'] : 0;
+        $storeMark = isset($store['mark'])? $store['mark'] : 0;
+        if(empty($userInfo)){
+            return 0;
         }
-        return [
-            'pageSize' => $pageSize,
-            'total' => isset($list['total']) ? $list['total'] : 0,
-            'list' => isset($list['data']) ? $list['data'] : []
-        ];
+
+        // 用户自己是商家
+        if($storeId>0 && $storeStatus==1 && $storeMark==1){
+            RedisService::set($cacheKey, $storeId, 7 * 86400);
+            return $storeId;
+        }
+
+        // 用户上级有商家
+        $parentStoreInfo = $this->model->whereIn('user_id',$ids)
+            ->where(['status'=>1,'mark'=>1])
+            ->select(['id','user_id','name'])
+            ->orderByRaw("FIELD(user_id,".(implode(',',$ids)).") asc")
+            ->get();
+        dump($ids);
+        dump($parentStoreInfo->toArray());
+        $storeId = isset($parentStoreInfo['id'])?$parentStoreInfo['id'] : 0;
+
+        $params = request()->all();
+        $system = isset($params['system']) ? $params['system'] : [];
+        $system = $system && !is_array($system) ? json_decode($system, true) : $system;
+        $uuid = isset($system['uuid']) ? $system['uuid'] : '';
+        $uuKey = "caches:storeId:uu_{$uuid}";
+        if($parentStoreInfo && $storeId>0){
+            RedisService::set($cacheKey, $storeId, 7 * 86400);
+            return $storeId;
+        }else if($uuid && $storeId = RedisService::get($uuKey)){
+            return $storeId;
+        }
+
+        return 0;
+
     }
 
     /**

+ 3 - 0
app/Services/Common/StoreService.php

@@ -339,6 +339,9 @@ class StoreService extends BaseService
 
                 DB::commit();
 
+                // 清除绑定显示商家参数,从而重新获取
+                RedisService::keyDel("caches:storeId:id*");
+
                 $this->error = '审核通过,管理账号:' . $username . ',密码:' . $password;
                 return true;
             } catch (\Exception $e) {

+ 9 - 2
routes/api.php

@@ -38,8 +38,8 @@ Route::prefix('v1')->group(function() {
     Route::get('/article/info', [\App\Http\Controllers\Api\v1\ArticleController::class, 'info']);
     Route::get('/article/page', [\App\Http\Controllers\Api\v1\ArticleController::class, 'page']);
 
-    // 主页店铺商品
-    Route::post('/store/goods', [\App\Http\Controllers\Api\v1\StoreController::class, 'goods']);
+    // 主页商品
+    Route::post('/index/goods', [\App\Http\Controllers\Api\v1\GoodsController::class, 'index']);
     Route::post('/goods/category/list', [\App\Http\Controllers\Api\v1\GoodsController::class, 'categorys']);
 
 });
@@ -50,6 +50,8 @@ Route::prefix('v1')->group(function() {
 Route::prefix('v1')->middleware('web.login')->group(function() {
     Route::get('/logout', [\App\Http\Controllers\Api\v1\LoginController::class, 'logout']);
 
+    Route::post('/index/storeGoods', [\App\Http\Controllers\Api\v1\IndexController::class, 'storeGoods']);
+
     // 用户信息
     Route::get('/user/info', [\App\Http\Controllers\Api\v1\MemberController::class, 'info']);
     Route::post('/user/setEntry', [\App\Http\Controllers\Api\v1\MemberController::class, 'setEntry']);
@@ -115,6 +117,11 @@ Route::prefix('v1')->middleware('web.login')->group(function() {
     Route::post('/agent/info', [\App\Http\Controllers\Api\v1\AgentController::class, 'info']);
     Route::post('/agent/apply', [\App\Http\Controllers\Api\v1\AgentController::class, 'apply']);
 
+    // 招聘
+    Route::post('/jobs/index', [\App\Http\Controllers\Api\v1\JobsController::class, 'index']);
+    Route::post('/jobs/info', [\App\Http\Controllers\Api\v1\JobsController::class, 'info']);
+    Route::post('/jobs/apply', [\App\Http\Controllers\Api\v1\JobsController::class, 'apply']);
+    Route::post('/jobs/category/list', [\App\Http\Controllers\Api\v1\JobsController::class, 'categorys']);
 
 
 });

+ 0 - 0
漏的需求.txt