You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.4 KiB
92 lines
3.4 KiB
<?php
|
|
|
|
namespace App\Service\v3\Implementations;
|
|
use App\Model\v3\Market;
|
|
use App\Model\v3\Store;
|
|
use App\Model\v3\UserCollection;
|
|
use App\Service\v3\Interfaces\CollectStoreServiceInterface;
|
|
use App\Constants\v3\SsdbKeys;
|
|
use App\TaskWorker\SSDBTask;
|
|
use Hyperf\DbConnection\Db;
|
|
use Hyperf\Utils\ApplicationContext;
|
|
|
|
class CollectStoreService implements CollectStoreServiceInterface
|
|
{
|
|
public function do($userId,$storeId)
|
|
{
|
|
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
|
|
//收藏店铺
|
|
$userSet = $ssdb->exec('set', SsdbKeys::COLLECT_STORE_USER.$userId.'_store_'.$storeId,time());
|
|
//用户收藏数量自增
|
|
$userIncr = $ssdb->exec('incr', SsdbKeys::COUNT_COLLECT_STORE_USER.$userId,1);
|
|
//店铺被收藏数自增
|
|
$storeIncr = $ssdb->exec('incr', SsdbKeys::COUNT_COLLECT_STORE.$storeId,1);
|
|
//起线程记录到数据库
|
|
go(function () use ($userId,$storeId){
|
|
$marketId = Store::query()->where('id',$storeId)->value('market_id');
|
|
UserCollection::query()->withTrashed()->updateOrCreate(
|
|
[
|
|
'store_id' => $storeId,
|
|
'market_id' => $marketId,
|
|
'user_id' => $userId
|
|
],
|
|
[
|
|
'deleted_at' => null
|
|
]
|
|
);
|
|
});
|
|
return $userSet && $userIncr && $storeIncr;
|
|
}
|
|
|
|
public function check($userId,$storeId)
|
|
{
|
|
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
|
|
return $ssdb->exec('exists', SsdbKeys::COLLECT_STORE_USER.$userId.'_store_'.$storeId);
|
|
}
|
|
|
|
public function undo($userId,$storeId)
|
|
{
|
|
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
|
|
//取消收藏店铺
|
|
$userDel = $ssdb->exec('del', SsdbKeys::COLLECT_STORE_USER.$userId.'_store_'.$storeId,time());
|
|
//用户收藏数量自减
|
|
$userIncr = $ssdb->exec('incr', SsdbKeys::COUNT_COLLECT_STORE_USER.$userId,'-1');
|
|
//店铺被收藏数自减
|
|
$storeIncr = $ssdb->exec('incr', SsdbKeys::COUNT_COLLECT_STORE.$storeId,'-1');
|
|
//起线程删除数据库
|
|
go(function () use ($userId,$storeId){
|
|
UserCollection::query()->where([
|
|
['user_id','=',$userId],
|
|
['store_id','=',$storeId],
|
|
])
|
|
->delete();
|
|
});
|
|
return $userDel && $userIncr && $storeIncr;
|
|
}
|
|
//获取用户收藏店铺数量
|
|
public function countByUser($userId)
|
|
{
|
|
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
|
|
$count = $ssdb->exec('get',SsdbKeys::COUNT_COLLECT_STORE_USER.$userId);
|
|
return $count;
|
|
}
|
|
//获取店铺被收藏数量
|
|
public function countByStore($storeId)
|
|
{
|
|
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
|
|
$count = $ssdb->exec('get',SsdbKeys::COUNT_COLLECT_STORE.$storeId);
|
|
return $count;
|
|
}
|
|
|
|
public function getListByUser($userId)
|
|
{
|
|
$marketIds = UserCollection::query()->where('user_id',$userId)->pluck('market_id')->toArray();
|
|
$storeIds = UserCollection::query()->where('user_id',$userId)->pluck('store_id')->toArray();
|
|
$res = Market::query()->with(['stores' => function($query) use ($storeIds) {
|
|
$query->whereIn('id',$storeIds);
|
|
}])
|
|
->whereIn('id',$marketIds)
|
|
->get();
|
|
return $res;
|
|
}
|
|
}
|