diff --git a/app/Middleware/Auth/ApiMiddleware.php b/app/Middleware/Auth/ApiMiddleware.php index 44cf3fc..826203c 100644 --- a/app/Middleware/Auth/ApiMiddleware.php +++ b/app/Middleware/Auth/ApiMiddleware.php @@ -4,8 +4,12 @@ declare(strict_types=1); namespace App\Middleware\Auth; +use App\Model\v3\User; +use App\TaskWorker\SSDBTask; +use Hashids\Hashids; use Hyperf\HttpServer\Contract\RequestInterface as HttpRequest; use Hyperf\HttpServer\Contract\ResponseInterface as HttpResponse; +use Hyperf\Utils\ApplicationContext; use Psr\Container\ContainerInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Server\MiddlewareInterface; @@ -38,18 +42,17 @@ class ApiMiddleware implements MiddlewareInterface public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { - - if (env('APP_ENV') == 'dev' || env('APP_ENV') == 'local') { - return $handler->handle($request); - } - // 签名校验 # 获取参数 $params = $this->request->all(); # 必须参数,签名、时间戳、随机数 - if (!(isset($params['sign'])&&isset($params['timestamp'])&&isset($params['rand']))) { + if (!( + isset($params['sign']) + &&isset($params['timestamp']) + &&isset($params['rand']) + ) && env('APP_ENV') == 'prod') { $content = [ "status" => 'ok', @@ -73,11 +76,27 @@ class ApiMiddleware implements MiddlewareInterface return $this->response->json($content); } + $this->request->user = null; + $userToken = $params['user_token'] ?? ''; + + if ($userToken) { + $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class); + $exists = $ssdb->exec('exists', $userToken); + if ($exists) { + $hashIds = ApplicationContext::getContainer()->get(Hashids::class); + $user = $hashIds->decode($userToken); + $this->request->user = User::query()->find($user[0]); + } + } + return $handler->handle($request); } private function checkSign($params) { + if (env('APP_ENV') != 'prod') { + return true; + } $sign = $params['sign']; unset($params['sign']); $timestamp = $params['timestamp']; diff --git a/app/Middleware/Auth/UserMiddleware.php b/app/Middleware/Auth/UserMiddleware.php index 6d3da25..ab0abc1 100644 --- a/app/Middleware/Auth/UserMiddleware.php +++ b/app/Middleware/Auth/UserMiddleware.php @@ -45,10 +45,6 @@ class UserMiddleware implements MiddlewareInterface */ public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { - if (env('APP_ENV') == 'dev' || env('APP_ENV') == 'local') { - return $handler->handle($request); - } - // 校验 if (!$this->checkLogin()) { @@ -67,18 +63,15 @@ class UserMiddleware implements MiddlewareInterface private function checkLogin() { - return true; - $userToken = $this->request->input('user_token', ''); - $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class); - $exists = $ssdb->exec('exists', $userToken); - if (!$userToken || !$exists) { - return false; + if (env('APP_ENV') != 'prod') { + return true; } - $hashIds = ApplicationContext::getContainer()->get(Hashids::class); - $user = $hashIds->decode($userToken); - $this->request->user = User::find($user[0]); + $user = $this->request->user; + if (is_null($user)) { + return false; + } return true; } diff --git a/app/Model/Model.php b/app/Model/Model.php index fa03395..21856b7 100644 --- a/app/Model/Model.php +++ b/app/Model/Model.php @@ -12,14 +12,22 @@ declare(strict_types=1); namespace App\Model; use Hyperf\DbConnection\Model\Model as BaseModel; +use Hyperf\HttpServer\Contract\RequestInterface; use Hyperf\ModelCache\Cacheable; use Hyperf\ModelCache\CacheableInterface; +use Hyperf\Di\Annotation\Inject; abstract class Model extends BaseModel implements CacheableInterface { use Cacheable; protected $dateFormat = 'U'; + /** + * @Inject + * @var RequestInterface + */ + protected $request; + /** * 设置表后缀 * @param string $suffix diff --git a/app/Model/v3/GoodsActivity.php b/app/Model/v3/GoodsActivity.php index e70f899..4eea067 100644 --- a/app/Model/v3/GoodsActivity.php +++ b/app/Model/v3/GoodsActivity.php @@ -67,7 +67,7 @@ class GoodsActivity extends Model public function getCartNumAttribute() { - return (integer)$this->shopCartService->check($this->id); + return (integer)$this->shopCartService->check($this->request->user->id, $this->id); } public function getIsEffectiveAttribute() diff --git a/app/Service/v3/Implementations/CouponRecService.php b/app/Service/v3/Implementations/CouponRecService.php index f24e871..f61a37c 100644 --- a/app/Service/v3/Implementations/CouponRecService.php +++ b/app/Service/v3/Implementations/CouponRecService.php @@ -137,4 +137,19 @@ class CouponRecService implements CouponRecServiceInterface return ['has_more_pages' => $paginate->hasMorePages(), 'coupon_list' => $couponList['data']]; } + /** + * 获取用户当前线上订单可以使用的优惠券 + * 1、所有未过期额优惠券,并且满足订单的金额要求 + * 2、筛选出其中当日使用过的优惠券 + * 3、筛选出其中活动商品不可用的优惠券(订单中有活动商品且活动商品不可使用优惠券) + * 4、筛选出其中活动商品可用但商品的活动类型不符合优惠券活动使用类型的要求(订单中有活动商品可以用优惠券,但是活动类型type和优惠券中的available活动类型不可用) + * @param $cartIds + * @param $userId + * @param $marketId + */ + public function allForOnlineOrderAvailable($cartIds, $userId, $marketId) + { + + } + } \ No newline at end of file diff --git a/app/Service/v3/Implementations/OrderOnlineService.php b/app/Service/v3/Implementations/OrderOnlineService.php index 2614545..acc6986 100644 --- a/app/Service/v3/Implementations/OrderOnlineService.php +++ b/app/Service/v3/Implementations/OrderOnlineService.php @@ -171,6 +171,7 @@ class OrderOnlineService implements OrderOnlineServiceInterface $couponsActivityAvailable = Coupon::query() ->select(['id']) ->whereJsonContains('activity_available', [(string)$goods->type]) + ->whereJsonContains('market_ids', [(string)$goods->market_id]) ->whereIn('id', $couponIds) ->get()->toArray(); $couponsActivityAvailableIds = array_values(array_column($couponsActivityAvailable, 'id'));