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.

69 lines
2.7 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <?php
  2. namespace App\Service\v3\Implementations;
  3. use App\Model\v3\Market;
  4. use App\Model\v3\Store;
  5. use App\Model\v3\UserCollection;
  6. use App\Service\v3\Interfaces\CollectStoreServiceInterface;
  7. use App\Constants\v3\SsdbKeys;
  8. use App\TaskWorker\SSDBTask;
  9. use Hyperf\DbConnection\Db;
  10. use Hyperf\Utils\ApplicationContext;
  11. class CollectStoreService implements CollectStoreServiceInterface
  12. {
  13. public function do($userId,$storeId)
  14. {
  15. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  16. //收藏店铺
  17. $userSet = $ssdb->exec('set', SsdbKeys::COLLECT_STORE_USER.$userId.'_store_'.$storeId,time());
  18. //用户收藏数量自增
  19. $userIncr = $ssdb->exec('incr', SsdbKeys::COUNT_COLLECT_STORE_USER.$userId,1);
  20. //店铺被收藏数自增
  21. $storeIncr = $ssdb->exec('incr', SsdbKeys::COUNT_COLLECT_STORE.$storeId,1);
  22. return $userSet && $userIncr && $storeIncr;
  23. }
  24. public function check($userId,$storeId)
  25. {
  26. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  27. return $ssdb->exec('exists', SsdbKeys::COLLECT_STORE_USER.$userId.'_store_'.$storeId);
  28. }
  29. public function undo($userId,$storeId)
  30. {
  31. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  32. //取消收藏店铺
  33. $userDel = $ssdb->exec('del', SsdbKeys::COLLECT_STORE_USER.$userId.'_store_'.$storeId,time());
  34. //用户收藏数量自减
  35. $userIncr = $ssdb->exec('incr', SsdbKeys::COUNT_COLLECT_STORE_USER.$userId,'-1');
  36. //店铺被收藏数自减
  37. $storeIncr = $ssdb->exec('incr', SsdbKeys::COUNT_COLLECT_STORE.$storeId,'-1');
  38. return $userDel && $userIncr && $storeIncr;
  39. }
  40. //获取用户收藏店铺数量
  41. public function countByUser($userId)
  42. {
  43. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  44. $count = $ssdb->exec('get',SsdbKeys::COUNT_COLLECT_STORE_USER.$userId);
  45. return $count;
  46. }
  47. //获取店铺被收藏数量
  48. public function countByStore($storeId)
  49. {
  50. $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
  51. $count = $ssdb->exec('get',SsdbKeys::COUNT_COLLECT_STORE.$storeId);
  52. return $count;
  53. }
  54. public function getListByUser($userId)
  55. {
  56. $marketIds = UserCollection::query()->where('user_id',$userId)->pluck('market_id')->toArray();
  57. $storeIds = UserCollection::query()->where('user_id',$userId)->pluck('store_id')->toArray();
  58. $res = Market::query()->with(['stores' => function($query) use ($storeIds) {
  59. $query->whereIn('id',$storeIds);
  60. }])
  61. ->whereIn('id',$marketIds)
  62. ->get();
  63. return $res;
  64. }
  65. }