修复:移动端搜索商品时可以将供应商商品搜索出来的问题

添加:获取供应商商品接口
添加:商户及酒道馆登录
This commit is contained in:
wuhui_zzw 2024-02-28 18:11:49 +08:00
parent 4392d68c2d
commit 04751a6c8f
9 changed files with 267 additions and 7 deletions

View File

@ -6,6 +6,7 @@ use app\common\dao\BaseDao;
use app\common\model\store\product\ProductCate; use app\common\model\store\product\ProductCate;
use app\common\model\store\product\Spu; use app\common\model\store\product\Spu;
use app\common\model\store\StoreCategory; use app\common\model\store\StoreCategory;
use app\common\model\system\merchant\Merchant;
use app\common\repositories\store\StoreCategoryRepository; use app\common\repositories\store\StoreCategoryRepository;
use app\common\repositories\system\merchant\MerchantRepository; use app\common\repositories\system\merchant\MerchantRepository;
use crmeb\services\VicWordService; use crmeb\services\VicWordService;
@ -51,6 +52,10 @@ class SpuDao extends BaseDao
$order = ''; $order = '';
} }
$query = Spu::getDB()->alias('S')->join('StoreProduct P','S.product_id = P.product_id', 'left'); $query = Spu::getDB()->alias('S')->join('StoreProduct P','S.product_id = P.product_id', 'left');
// 这里不显示供应商商品
$supplierMerId = (array)Merchant::where('merchant_type', 2)->column('mer_id');
$query->whereNotIn('S.mer_id', $supplierMerId);
$query->when(isset($where['is_del']) && $where['is_del'] !== '',function($query)use($where){ $query->when(isset($where['is_del']) && $where['is_del'] !== '',function($query)use($where){
$query->where('P.is_del',$where['is_del']); $query->where('P.is_del',$where['is_del']);
}) })

View File

@ -0,0 +1,94 @@
<?php
namespace app\common\middleware;
use app\common\repositories\user\UserRepository;
use app\Request;
use crmeb\exceptions\AuthException;
use crmeb\services\JwtTokenService;
use Firebase\JWT\ExpiredException;
use think\exception\ValidateException;
use think\Response;
use Throwable;
class ShopTokenMiddleware extends BaseMiddleware{
public function before(Request $request){
$force = $this->getArg(0, true);
try {
$token = trim($request->header('X-Token'));
throw new ValidateException('请登录');
if (strpos($token, 'Bearer') === 0) $token = trim(substr($token, 6));
if (!$token) throw new ValidateException('请登录');
/**
* @var UserRepository $repository
*/
$repository = app()->make(UserRepository::class);
$service = new JwtTokenService();
try {
$payload = $service->parseToken($token);
} catch (ExpiredException $e) {
$repository->checkToken($token);
$payload = $service->decode($token);
} catch (Throwable $e) {//Token 过期
throw new AuthException('token 已过期');
}
if ('user' != $payload->jti[1])
throw new AuthException('无效的 token');
$user = $repository->get($payload->jti[0]);
if (!$user)
throw new AuthException('用户不存在');
if (!$user['status'])
throw new AuthException('用户已被禁用');
if ($user['cancel_time'])
throw new AuthException('用户不存在');
} catch (Throwable $e) {
if ($force)
throw $e;
$request->macro('isLogin', function () {
return false;
});
$request->macros(['tokenInfo', 'uid', 'userInfo', 'token'], function () {
throw new AuthException('请登录');
});
return;
}
$repository->updateToken($token);
$request->macro('isLogin', function () {
return true;
});
$request->macro('userType', function () {
return 1;
});
$request->macro('tokenInfo', function () use (&$payload) {
return $payload;
});
$request->macro('token', function () use (&$token) {
return $token;
});
$request->macro('uid', function () use (&$user) {
return $user->uid;
});
$request->macro('userInfo', function () use (&$user) {
return $user;
});
}
public function after(Response $response){
// TODO: Implement after() method.
}
}

View File

@ -0,0 +1,77 @@
<?php
namespace app\common\repositories\store\product;
use app\common\dao\store\product\ProductDao;
use app\common\model\system\merchant\Merchant;
use app\common\repositories\BaseRepository;
class SupplierProductRepository extends BaseRepository{
protected $dao;
public function __construct(ProductDao $dao){
$this->dao = $dao;
}
/**
* Common: 获取列表
* Author: wu-hui
* Time: 2024/02/28 15:48
* @param $search
* @param $page
* @param $limit
* @return array
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getList($search, $page, $limit){
// 仅显示供应商商品
$supplierMerId = (array)Merchant::where('merchant_type', 2)->column('mer_id');
$query = $this->dao->getSearch([])
->whereIn('mer_id', $supplierMerId)
->where('delete', 0)
->where('product_type', 0)
->where('status', 1)
->when(isset($search['store_name']) && $search['store_name'] !== '', function ($query) use ($search) {
$query->whereLike('store_name', "%{$search['store_name']}%");
});
$list = $query
->field([
'product_id',
'mer_id',
'store_name',
'price',
'unit_name',
'is_batch',
'batch_num',
'batch_unit',
'image'
])
->with([
'attr' => function($query){
$query->field(['product_id','attr_name','attr_values']);
},
'attrValue' => function($query){
$query->field(['product_id','detail','image','price','sku','unique','value_id']);
}
])
->order('sort desc,mer_id desc')
->page($page, $limit)
->select()
->toArray();
$count = $query->count();
return compact('count', 'list');
}
}

View File

@ -188,13 +188,23 @@ class StoreServiceRepository extends BaseRepository
} }
// 获取当前用户的员工信息 // 获取当前用户的员工信息
public function getServices($uid, array $where = [],$is_sys = 1){ public function getServices($uid, array $where = [],$is_sys = 1){
$where['uid'] = $uid; // $where['uid'] = $uid;
$list = $this->dao->getSearch([]) $list = $this->dao->getSearch([])
->hasWhere('merchant',function($query) use ($is_sys){ ->when(isset($where['appoint_mer_id']) && $where['appoint_mer_id'] !== '',function($query) use ($where){
$query->where('is_del', 0)->where('merchant_type', $is_sys == 2 ? 1 : 0); // 存在指定商户ID
$query->hasWhere('merchant',function($query){
$query->where('is_del', 0);
})->where('StoreService.mer_id', $where['appoint_mer_id'])
->where('StoreService.is_manage', 1);
},function($query) use ($is_sys, $uid){
// 不存在指定商户id
$query->hasWhere('merchant',function($query) use ($is_sys){
$query->where('is_del', 0)->where('merchant_type', $is_sys == 2 ? 1 : 0);
})->where('StoreService.mer_id',$is_sys == 1 ? '=' : '>',0)
->where('StoreService.uid',$uid);
}) })
->where('StoreService.is_del',0) ->where('StoreService.is_del',0)
->where('StoreService.mer_id',$is_sys == 1 ? '=' : '>',0)
->when(isset($where['is_verify']) && $where['is_verify'] !== '',function($query) use ($where){ ->when(isset($where['is_verify']) && $where['is_verify'] !== '',function($query) use ($where){
$query->where('StoreService.is_verify',$where['is_verify']); $query->where('StoreService.is_verify',$where['is_verify']);
}) })

View File

@ -209,6 +209,7 @@ class MerchantAdminRepository extends BaseRepository
if (!$merchant['status']) if (!$merchant['status'])
throw new ValidateException('商户已被锁定'); throw new ValidateException('商户已被锁定');
$adminInfo->merchant_type = $merchant->merchant_type ?? 0;
$adminInfo->last_time = date('Y-m-d H:i:s'); $adminInfo->last_time = date('Y-m-d H:i:s');
$adminInfo->last_ip = app('request')->ip(); $adminInfo->last_ip = app('request')->ip();
$adminInfo->login_count++; $adminInfo->login_count++;

View File

@ -2,7 +2,7 @@
namespace app\controller\api; namespace app\controller\api;
use app\common\repositories\store\product\SupplierProductRepository;
use app\services\supplier\SystemSupplierApplyServices; use app\services\supplier\SystemSupplierApplyServices;
use app\services\supplier\SystemSupplierServices; use app\services\supplier\SystemSupplierServices;
use crmeb\basic\BaseController; use crmeb\basic\BaseController;
@ -131,6 +131,28 @@ class Supplier extends BaseController{
return app('json')->success($data); return app('json')->success($data);
} }
/**
* Common: 获取全部供应商商品
* Author: wu-hui
* Time: 2024/02/28 15:50
* @return mixed
*/
public function goodsList(){
// 参数获取
$search = $this->request->params(['store_name']);
[$page, $limit] = $this->getPage();
$data = app()->make(SupplierProductRepository::class)->getList($search, $page, $limit);
// 循环处理列表数据
$data['list'] = array_map(function($item){
if(count($item['attrValue']) > 1) $item['attrValue'] = array_column($item['attrValue'],null,'sku');
return $item;
},$data['list']);
return app('json')->success($data);
}

View File

@ -5,11 +5,14 @@
namespace app\controller\api\store\merchant; namespace app\controller\api\store\merchant;
use app\common\repositories\store\service\StoreServiceRepository; use app\common\repositories\store\service\StoreServiceRepository;
use app\common\repositories\system\merchant\MerchantAdminRepository;
use app\common\repositories\user\UserMerchantRepository; use app\common\repositories\user\UserMerchantRepository;
use crmeb\services\QrcodeService; use crmeb\services\QrcodeService;
use think\App; use think\App;
use crmeb\basic\BaseController; use crmeb\basic\BaseController;
use app\common\repositories\system\merchant\MerchantRepository as repository; use app\common\repositories\system\merchant\MerchantRepository as repository;
use think\exception\ValidateException;
use think\facade\Cache;
class Merchant extends BaseController class Merchant extends BaseController
{ {
@ -147,7 +150,36 @@ class Merchant extends BaseController
return app('json')->fail('小程序码生成失败!'); return app('json')->fail('小程序码生成失败!');
} }
/**
* Common: 商户登录移动端
* Author: wu-hui
* Time: 2024/02/28 17:30
* @return mixed
*/
public function storeLogin(){
// 参数获取
$params = $this->request->params(['account','password']);
if(empty($params['account'])) throw new ValidateException('请输入账号');
if(empty($params['password'])) throw new ValidateException('请输入密码');
// 判断登录是否成功
$repository = app()->make(MerchantAdminRepository::class);
$adminInfo = $repository->login($params['account'], $params['password']);
$tokenInfo = $repository->createToken($adminInfo);
$admin = $adminInfo->toArray();
// 判断:这里仅允许酒道馆和普通商户登录
if($admin['merchant_type'] == 2) throw new ValidateException('当前账号禁止登录!');
// unset($admin['pwd']);
// $data = [
// 'token' => $tokenInfo['token'],
// 'exp' => $tokenInfo['out'],
// 'admin' => $admin
// ];
return app('json')->success([
'token' => $tokenInfo['token'],
'exp' => $tokenInfo['out'],
'mer_id' => $admin['mer_id']
]);
}
} }

View File

@ -526,7 +526,7 @@ class User extends BaseController
public function services() public function services()
{ {
$uid = $this->user->uid; $uid = $this->user->uid;
$where = $this->request->params(['is_verify', 'customer', 'is_goods', ['is_open',1]]); $where = $this->request->params(['is_verify', 'customer', 'is_goods', ['is_open',1],'appoint_mer_id']);
$is_sys = $this->request->param('is_sys'); $is_sys = $this->request->param('is_sys');
$list = app()->make(StoreServiceRepository::class)->getServices($uid, $where,$is_sys); $list = app()->make(StoreServiceRepository::class)->getServices($uid, $where,$is_sys);

View File

@ -6,6 +6,7 @@
use app\common\middleware\AllowOriginMiddleware; use app\common\middleware\AllowOriginMiddleware;
use app\common\middleware\CheckSiteOpenMiddleware; use app\common\middleware\CheckSiteOpenMiddleware;
use app\common\middleware\InstallMiddleware; use app\common\middleware\InstallMiddleware;
use app\common\middleware\ShopTokenMiddleware;
use app\common\middleware\UserTokenMiddleware; use app\common\middleware\UserTokenMiddleware;
use app\common\middleware\VisitProductMiddleware; use app\common\middleware\VisitProductMiddleware;
use app\common\middleware\RequestLockMiddleware; use app\common\middleware\RequestLockMiddleware;
@ -406,8 +407,13 @@ Route::group('api/', function () {
Route::post('apply_record', 'applyRecord');// 申请记录 Route::post('apply_record', 'applyRecord');// 申请记录
Route::get('apply_info', 'applyInfo');// 申请信息详情 Route::get('apply_info', 'applyInfo');// 申请信息详情
})->prefix('api.Supplier/'); })->prefix('api.Supplier/');
// 需要酒道馆登录的接口
Route::group('supplier',function(){
// 进货相关
Route::get('goods_list','goodsList');// 供应商全部商品
})->prefix('api.Supplier/')->middleware(ShopTokenMiddleware::class,TRUE);
})->middleware(UserTokenMiddleware::class, true); })->middleware(UserTokenMiddleware::class, true);
//非强制登录 //非强制登录
Route::group(function () { Route::group(function () {
@ -546,6 +552,9 @@ Route::group('api/', function () {
Route::get('/detail/:id', 'Merchant/detail'); Route::get('/detail/:id', 'Merchant/detail');
Route::get('/qrcode/:id', 'Merchant/qrcode'); Route::get('/qrcode/:id', 'Merchant/qrcode');
Route::get('/local', 'Merchant/localLst'); Route::get('/local', 'Merchant/localLst');
// 酒道馆登录相关
Route::get('/login', 'Merchant/storeLogin');
})->prefix('api.store.merchant.'); })->prefix('api.store.merchant.');
Route::post('store/certificate/:merId', 'api.Auth/getMerCertificate'); Route::post('store/certificate/:merId', 'api.Auth/getMerCertificate');
@ -611,6 +620,16 @@ Route::group('api/', function () {
})->prefix('api.Diy'); })->prefix('api.Diy');
})->middleware(UserTokenMiddleware::class, false); })->middleware(UserTokenMiddleware::class, false);
//微信支付回调 //微信支付回调
Route::any('notice/wechat_pay', 'api.Common/wechatNotify')->name('wechatNotify'); Route::any('notice/wechat_pay', 'api.Common/wechatNotify')->name('wechatNotify');
//微信支付回调 //微信支付回调